From 8a041971f229889edf27a81792d743560a11f473 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 8 May 2013 23:20:25 +0200 Subject: [PATCH] projects/RPi: build with kernel 3.9, update RPi patches Signed-off-by: Stephan Raue --- projects/RPi/linux/linux.arm.conf | 100 +- projects/RPi/options | 2 +- ...tch => linux-01-RPi_support-5ded0f9.patch} | 26898 +++++----------- 3 files changed, 8108 insertions(+), 18892 deletions(-) rename projects/RPi/patches/linux/{linux-01-RPi_support-ebe08d8.patch => linux-01-RPi_support-5ded0f9.patch} (90%) diff --git a/projects/RPi/linux/linux.arm.conf b/projects/RPi/linux/linux.arm.conf index 44d9a43b6..d99e97d99 100644 --- a/projects/RPi/linux/linux.arm.conf +++ b/projects/RPi/linux/linux.arm.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.8.10 Kernel Configuration +# Linux/arm 3.9.1 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -22,13 +22,12 @@ CONFIG_NEED_MACH_IO_H=y CONFIG_NEED_MACH_MEMORY_H=y CONFIG_GENERIC_BUG=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_EXTABLE_SORT=y # # General setup # -CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" @@ -59,6 +58,7 @@ CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_HARDIRQS_SW_RESEND=y +# CONFIG_ALWAYS_USE_PERSISTENT_CLOCK is not set CONFIG_KTIME_SCALAR=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y @@ -80,8 +80,10 @@ CONFIG_TICK_CPU_ACCOUNTING=y # # RCU Subsystem # +# CONFIG_TREE_PREEMPT_RCU is not set CONFIG_TINY_PREEMPT_RCU=y CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_STALL_COMMON is not set # CONFIG_TREE_RCU_TRACE is not set CONFIG_RCU_BOOST=y CONFIG_RCU_BOOST_PRIO=1 @@ -143,6 +145,7 @@ CONFIG_SLAB=y CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set # CONFIG_JUMP_LABEL is not set +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y @@ -157,6 +160,8 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_MODULES_USE_ELF_REL=y CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y # # GCOV-based kernel profiling @@ -224,6 +229,7 @@ CONFIG_MMU=y # CONFIG_ARCH_REALVIEW is not set # CONFIG_ARCH_VERSATILE is not set # CONFIG_ARCH_AT91 is not set +CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_BCM2835 is not set # CONFIG_ARCH_CNS3XXX is not set # CONFIG_ARCH_CLPS711X is not set @@ -265,11 +271,8 @@ CONFIG_MMU=y # CONFIG_ARCH_NOMADIK is not set # CONFIG_PLAT_SPEAR is not set # CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_ARCH_BCM2708=y -# CONFIG_ARCH_VT8500_SINGLE is not set +# CONFIG_ARCH_OMAP1 is not set # CONFIG_GPIO_PCA953X is not set -# CONFIG_ARCH_VT8500 is not set # # Broadcom BCM2708 Implementations @@ -332,23 +335,22 @@ CONFIG_ARCH_NR_GPIO=0 CONFIG_PREEMPT=y CONFIG_PREEMPT_COUNT=y CONFIG_HZ=100 +CONFIG_SCHED_HRTICK=y CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set CONFIG_HAVE_ARCH_PFN_VALID=y # CONFIG_HIGHMEM is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 # CONFIG_COMPACTION is not set # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=0 -CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_CROSS_MEMORY_ATTACH=y @@ -406,6 +408,7 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y # CONFIG_ARM_EXYNOS4210_CPUFREQ is not set # CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set # CONFIG_ARM_EXYNOS5250_CPUFREQ is not set +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_BCM2835_CPUFREQ=y CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set @@ -589,9 +592,11 @@ CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_STP=y CONFIG_BRIDGE=y CONFIG_BRIDGE_IGMP_SNOOPING=y +# CONFIG_BRIDGE_VLAN_FILTERING is not set CONFIG_HAVE_NET_DSA=y CONFIG_VLAN_8021Q=m # CONFIG_VLAN_8021Q_GVRP is not set +# CONFIG_VLAN_8021Q_MVRP is not set # CONFIG_DECNET is not set CONFIG_LLC=y # CONFIG_LLC2 is not set @@ -599,7 +604,6 @@ CONFIG_LLC=y # CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_WAN_ROUTER is not set # CONFIG_PHONET is not set # CONFIG_IEEE802154 is not set # CONFIG_NET_SCHED is not set @@ -607,6 +611,7 @@ CONFIG_LLC=y CONFIG_DNS_RESOLVER=y # CONFIG_BATMAN_ADV is not set # CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set CONFIG_BQL=y # CONFIG_BPF_JIT is not set @@ -686,11 +691,12 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set -# CONFIG_DMA_SHARED_BUFFER is not set +CONFIG_DMA_SHARED_BUFFER=y # CONFIG_CMA is not set # @@ -722,6 +728,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_AD525X_DPOT is not set # CONFIG_ATMEL_PWM is not set # CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_APDS9802ALS is not set # CONFIG_ISL29003 is not set @@ -736,6 +743,7 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_BMP085_I2C is not set # CONFIG_BMP085_SPI is not set # CONFIG_USB_SWITCH_FSA9480 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set # CONFIG_C2PORT is not set # @@ -799,6 +807,7 @@ CONFIG_SCSI_ISCSI_ATTRS=y CONFIG_SCSI_LOWLEVEL=y CONFIG_ISCSI_TCP=y CONFIG_ISCSI_BOOT_SYSFS=y +# CONFIG_SCSI_UFSHCD is not set # CONFIG_LIBFC is not set # CONFIG_LIBFCOE is not set # CONFIG_SCSI_DEBUG is not set @@ -881,6 +890,7 @@ CONFIG_SLHC=y # CONFIG_USB_RTL8150 is not set CONFIG_USB_USBNET=y CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m # CONFIG_USB_NET_CDC_EEM is not set # CONFIG_USB_NET_CDC_NCM is not set @@ -964,6 +974,8 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set +CONFIG_RTLWIFI=m +# CONFIG_RTLWIFI_DEBUG is not set # CONFIG_RTL8192CU is not set # CONFIG_WL_TI is not set CONFIG_ZD1211RW=m @@ -1032,6 +1044,7 @@ CONFIG_INPUT_UINPUT=m # # Character devices # +CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y @@ -1166,6 +1179,7 @@ CONFIG_SPI_SPIDEV=m # CONFIG_PTP_1588_CLOCK_PCH is not set CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -1227,7 +1241,9 @@ CONFIG_POWER_SUPPLY=y # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_POWER_RESET is not set +CONFIG_POWER_RESET_RESTART=y # CONFIG_POWER_AVS is not set CONFIG_HWMON=y # CONFIG_HWMON_VID is not set @@ -1293,6 +1309,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_MAX6639 is not set # CONFIG_SENSORS_MAX6642 is not set # CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set # CONFIG_SENSORS_MCP3021 is not set # CONFIG_SENSORS_NTC_THERMISTOR is not set # CONFIG_SENSORS_PC87360 is not set @@ -1314,6 +1331,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_ADS7828 is not set # CONFIG_SENSORS_ADS7871 is not set # CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set # CONFIG_SENSORS_INA2XX is not set # CONFIG_SENSORS_THMC50 is not set # CONFIG_SENSORS_TMP102 is not set @@ -1334,10 +1352,11 @@ CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_FAIR_SHARE is not set -CONFIG_STEP_WISE=y -# CONFIG_USER_SPACE is not set +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set +CONFIG_THERMAL_GOV_STEP_WISE=y +# CONFIG_THERMAL_GOV_USER_SPACE is not set # CONFIG_CPU_THERMAL is not set +# CONFIG_THERMAL_EMULATION is not set CONFIG_THERMAL_BCM2835=y # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y @@ -1442,9 +1461,13 @@ CONFIG_VIDEO_V4L2=m CONFIG_VIDEO_TUNER=m CONFIG_VIDEOBUF_GEN=m CONFIG_VIDEOBUF_VMALLOC=m -CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_VMALLOC=m +# CONFIG_VIDEO_V4L2_INT_DEVICE is not set CONFIG_DVB_CORE=m CONFIG_DVB_NET=y +CONFIG_TTPCI_EEPROM=m CONFIG_DVB_MAX_ADAPTERS=8 # CONFIG_DVB_DYNAMIC_MINORS is not set @@ -1479,7 +1502,6 @@ CONFIG_MEDIA_USB_SUPPORT=y # # Analog TV USB devices # -CONFIG_VIDEO_AU0828=m CONFIG_VIDEO_PVRUSB2=m CONFIG_VIDEO_PVRUSB2_SYSFS=y CONFIG_VIDEO_PVRUSB2_DVB=y @@ -1491,6 +1513,8 @@ CONFIG_VIDEO_PVRUSB2_DVB=y # # Analog/digital TV USB devices # +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_V4L2=y # CONFIG_VIDEO_CX231XX is not set CONFIG_VIDEO_TM6000=m CONFIG_VIDEO_TM6000_DVB=m @@ -1550,7 +1574,6 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m CONFIG_VIDEO_EM28XX=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m -CONFIG_TTPCI_EEPROM=m # # Supported MMC/SDIO adapters @@ -1562,15 +1585,16 @@ CONFIG_MEDIA_COMMON_OPTIONS=y # # common driver options # +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_TVEEPROM=m CONFIG_DVB_B2C2_FLEXCOP=m CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y -CONFIG_MEDIA_SUBDRV_AUTOSELECT=y # # Media ancillary drivers (tuners, sensors, i2c, frontends) # -CONFIG_VIDEO_TVEEPROM=m +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y CONFIG_VIDEO_IR_I2C=m # @@ -1595,11 +1619,6 @@ CONFIG_VIDEO_TVP5150=m # CONFIG_VIDEO_CX25840=m -# -# MPEG video encoders -# -CONFIG_VIDEO_CX2341X=m - # # Video encoders # @@ -1688,6 +1707,7 @@ CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_SI21XX=m +CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m CONFIG_DVB_TDA10071=m @@ -1795,6 +1815,7 @@ CONFIG_FB_BCM2708=y # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_SMSCUFX is not set # CONFIG_FB_UDL is not set +# CONFIG_FB_GOLDFISH is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_METRONOME is not set # CONFIG_FB_BROADSHEET is not set @@ -1872,12 +1893,14 @@ CONFIG_HID_PS3REMOTE=m CONFIG_HID_SAMSUNG=y CONFIG_HID_SONY=y # CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEELSERIES is not set CONFIG_HID_SPINELPLUS=y CONFIG_HID_SUNPLUS=y # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set # CONFIG_HID_TIVO is not set CONFIG_HID_TOPSEED=y +# CONFIG_HID_THINGM is not set # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_WACOM is not set CONFIG_HID_WIIMOTE=m @@ -1913,6 +1936,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_DWC3 is not set CONFIG_USB_MON=m # CONFIG_USB_WUSB_CBAF is not set @@ -2019,6 +2043,7 @@ CONFIG_USB_SERIAL_PL2303=m # CONFIG_USB_SERIAL_OMNINET is not set # CONFIG_USB_SERIAL_OPTICON is not set # CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_XSENS_MT is not set # CONFIG_USB_SERIAL_ZIO is not set # CONFIG_USB_SERIAL_ZTE is not set # CONFIG_USB_SERIAL_SSU100 is not set @@ -2048,10 +2073,13 @@ CONFIG_USB_SERIAL_PL2303=m # CONFIG_USB_ISIGHTFW is not set # CONFIG_USB_YUREX is not set # CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HSIC_USB3503 is not set # # USB Physical Layer drivers # +# CONFIG_OMAP_USB3 is not set +# CONFIG_OMAP_CONTROL_USB is not set # CONFIG_USB_ISP1301 is not set # CONFIG_USB_RCAR_PHY is not set # CONFIG_USB_GADGET is not set @@ -2087,7 +2115,6 @@ CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_PXAV2 is not set CONFIG_MMC_SDHCI_BCM2708=y CONFIG_MMC_SDHCI_BCM2708_DMA=y -# CONFIG_MMC_BCM2708 is not set # CONFIG_MMC_SPI is not set # CONFIG_MMC_DW is not set # CONFIG_MMC_VUB300 is not set @@ -2154,6 +2181,7 @@ CONFIG_STAGING=y # CONFIG_W35UND is not set # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set +# CONFIG_COMEDI is not set # CONFIG_ASUS_OLED is not set # CONFIG_RTLLIB is not set CONFIG_R8712U=m @@ -2164,7 +2192,6 @@ CONFIG_RTS5139=m CONFIG_VT6656=m CONFIG_ZRAM=y # CONFIG_ZRAM_DEBUG is not set -CONFIG_ZCACHE=y CONFIG_ZSMALLOC=y # CONFIG_USB_ENESTORAGE is not set # CONFIG_BCM_WIMAX is not set @@ -2196,20 +2223,22 @@ CONFIG_LIRC_RPI=m # CONFIG_CSR_WIFI is not set # CONFIG_CED1401 is not set # CONFIG_DGRP is not set +CONFIG_ZCACHE=y CONFIG_CLKDEV_LOOKUP=y # # Hardware Spinlock drivers # +# CONFIG_MAILBOX is not set # CONFIG_IOMMU_SUPPORT is not set # -# Remoteproc drivers (EXPERIMENTAL) +# Remoteproc drivers # # CONFIG_STE_MODEM_RPROC is not set # -# Rpmsg drivers (EXPERIMENTAL) +# Rpmsg drivers # # CONFIG_VIRT_DRIVERS is not set # CONFIG_PM_DEVFREQ is not set @@ -2453,8 +2482,6 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_MUTEXES is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_PROVE_LOCKING is not set -# CONFIG_PROVE_RCU_DELAY is not set -# CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -2472,6 +2499,12 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_CREDENTIALS is not set CONFIG_FRAME_POINTER=y # CONFIG_BOOT_PRINTK_DELAY is not set + +# +# RCU Debugging +# +# CONFIG_PROVE_RCU_DELAY is not set +# CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TRACE is not set # CONFIG_BACKTRACE_SELF_TEST is not set @@ -2518,6 +2551,7 @@ CONFIG_KEYS=y # CONFIG_SECURITYFS is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_DEFAULT_SECURITY="" +CONFIG_XOR_BLOCKS=y CONFIG_CRYPTO=y # @@ -2572,6 +2606,7 @@ CONFIG_CRYPTO_HMAC=y # Digest # CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_GHASH is not set CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y @@ -2627,12 +2662,12 @@ CONFIG_CRYPTO_LZO=y # # Library routines # +CONFIG_RAID6_PQ=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IO=y -CONFIG_PERCPU_RWSEM=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y # CONFIG_CRC_T10DIF is not set @@ -2670,3 +2705,4 @@ CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y CONFIG_AVERAGE=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set +# CONFIG_VIRTUALIZATION is not set diff --git a/projects/RPi/options b/projects/RPi/options index e54f7bcab..11edfbd21 100755 --- a/projects/RPi/options +++ b/projects/RPi/options @@ -100,7 +100,7 @@ # Kernel to use. values can be: # default: default mainline kernel # ti-omap4: Ti's OMAP4 kernel - LINUX="3.8" + LINUX="default" # use linux-next (latest rc) instead latest released version LINUX_NEXT="no" diff --git a/projects/RPi/patches/linux/linux-01-RPi_support-ebe08d8.patch b/projects/RPi/patches/linux/linux-01-RPi_support-5ded0f9.patch similarity index 90% rename from projects/RPi/patches/linux/linux-01-RPi_support-ebe08d8.patch rename to projects/RPi/patches/linux/linux-01-RPi_support-5ded0f9.patch index 0d47778c3..547d2b272 100644 --- a/projects/RPi/patches/linux/linux-01-RPi_support-ebe08d8.patch +++ b/projects/RPi/patches/linux/linux-01-RPi_support-5ded0f9.patch @@ -1,17 +1,14 @@ -From f465edd0e52778a25df6a51b08095ff51acec55a Mon Sep 17 00:00:00 2001 +From cbf7cb1e733f0b7c117d55519ffaab6513b3db93 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 26 Mar 2013 17:10:14 +0000 -Subject: [PATCH 001/169] Add dwc_otg driver +Date: Wed, 1 May 2013 19:46:17 +0100 +Subject: [PATCH 01/95] Add dwc_otg driver Signed-off-by: popcornmix --- - arch/arm/lib/Makefile | 3 +- drivers/usb/Makefile | 1 + drivers/usb/core/generic.c | 1 + - drivers/usb/core/hub.c | 58 +- drivers/usb/core/message.c | 79 + drivers/usb/core/otg_whitelist.h | 172 +- - drivers/usb/gadget/Kconfig | 108 +- drivers/usb/gadget/file_storage.c | 3676 +++++++++++++ drivers/usb/host/Kconfig | 13 + drivers/usb/host/Makefile | 2 + @@ -59,7 +56,7 @@ Signed-off-by: popcornmix drivers/usb/host/dwc_otg/test/dwc_otg_test.pm | 337 ++ drivers/usb/host/dwc_otg/test/test_mod_param.pl | 133 + drivers/usb/host/dwc_otg/test/test_sysfs.pl | 193 + - 54 files changed, 44754 insertions(+), 113 deletions(-) + 51 files changed, 44649 insertions(+), 49 deletions(-) create mode 100644 drivers/usb/gadget/file_storage.c create mode 100644 drivers/usb/host/dwc_common_port/Makefile create mode 100644 drivers/usb/host/dwc_common_port/Makefile.linux @@ -106,23 +103,8 @@ Signed-off-by: popcornmix create mode 100644 drivers/usb/host/dwc_otg/test/test_mod_param.pl create mode 100644 drivers/usb/host/dwc_otg/test/test_sysfs.pl -diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile -index af72969..0ade0ac 100644 ---- a/arch/arm/lib/Makefile -+++ b/arch/arm/lib/Makefile -@@ -6,8 +6,9 @@ - - lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \ - csumpartialcopy.o csumpartialcopyuser.o clearbit.o \ -- delay.o delay-loop.o findbit.o memchr.o memcpy.o \ -+ delay.o findbit.o memchr.o memcpy.o \ - memmove.o memset.o memzero.o setbit.o \ -+ strncpy_from_user.o strnlen_user.o \ - strchr.o strrchr.o \ - testchangebit.o testclearbit.o testsetbit.o \ - ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \ diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile -index f5ed3d7..15cde5c 100644 +index 8f5ebce..3c435e3 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -25,6 +25,7 @@ obj-$(CONFIG_USB_U132_HCD) += host/ @@ -134,7 +116,7 @@ index f5ed3d7..15cde5c 100644 obj-$(CONFIG_USB_FSL_MPH_DR_OF) += host/ diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c -index eff2010..40e8e1e 100644 +index 271e761..3144db8 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -152,6 +152,7 @@ int usb_choose_configuration(struct usb_device *udev) @@ -145,132 +127,8 @@ index eff2010..40e8e1e 100644 } return i; } -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 2a89588..4217b55 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -25,7 +25,6 @@ - #include - #include - #include --#include - - #include - #include -@@ -2132,6 +2131,12 @@ static inline void announce_device(struct usb_device *udev) { } - #endif - - #ifdef CONFIG_USB_OTG -+ -+static int enable_whitelist; -+module_param(enable_whitelist, bool, S_IRUGO | S_IWUSR); -+MODULE_PARM_DESC(enable_whitelist, -+ "only recognize devices in OTG whitelist if true"); -+ - #include "otg_whitelist.h" - #endif - -@@ -2186,9 +2191,15 @@ static int usb_enumerate_device_otg(struct usb_device *udev) - dev_info(&udev->dev, - "can't set HNP mode: %d\n", - err); -+ dev_printk(KERN_CRIT, &udev->dev, -+ "Not Connected/Responding\n"); -+ - bus->b_hnp_enable = 0; -+ } else { -+ dev_info(&udev->dev, -+ "HNP Not Supported\n"); - } -- } -+ } - } - } - -@@ -2197,12 +2208,27 @@ static int usb_enumerate_device_otg(struct usb_device *udev) - /* Maybe it can talk to us, though we can't talk to it. - * (Includes HNP test device.) - */ -- if (udev->bus->b_hnp_enable || udev->bus->is_b_host) { -+ if (udev->bus->b_hnp_enable || udev->bus->is_b_host || -+ udev->descriptor.idVendor == 0x1a0a) { - err = usb_port_suspend(udev, PMSG_SUSPEND); -- if (err < 0) -+ if (err < 0) { - dev_dbg(&udev->dev, "HNP fail, %d\n", err); -+ } else { -+ /* Return Connection Refused(ECONNREFUSED) -+ * instead of No Device(ENODEV) so that the -+ * retry loop in hub_port_connect_change() is -+ * exited without disabling the port -+ */ -+ err = -ECONNREFUSED; -+ goto fail; -+ } - } -- err = -ENOTSUPP; -+ //err = -ENOTSUPP; -+ /* Return Not Connected (ENOTCONN) instead of No -+ * Device(ENODEV) so that the retry loop in -+ * hub_port_connect_change() is exited -+ */ -+ err = -ENOTCONN; - goto fail; - } - fail: -@@ -2345,14 +2371,6 @@ int usb_new_device(struct usb_device *udev) - /* Tell the world! */ - announce_device(udev); - -- if (udev->serial) -- add_device_randomness(udev->serial, strlen(udev->serial)); -- if (udev->product) -- add_device_randomness(udev->product, strlen(udev->product)); -- if (udev->manufacturer) -- add_device_randomness(udev->manufacturer, -- strlen(udev->manufacturer)); -- - device_enable_async_suspend(&udev->dev); - - /* -@@ -3000,9 +3018,9 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) - status = 0; - } else { - /* device has up to 10 msec to fully suspend */ -- dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n", -+ /*dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n", - (PMSG_IS_AUTO(msg) ? "auto-" : ""), -- udev->do_remote_wakeup); -+ udev->do_remote_wakeup);*/ - usb_set_device_state(udev, USB_STATE_SUSPENDED); - udev->port_is_suspended = 1; - msleep(10); -@@ -4048,7 +4066,9 @@ static int hub_set_address(struct usb_device *udev, int devnum) - buf->bMaxPacketSize0 = 0; - r = usb_control_msg(udev, usb_rcvaddr0pipe(), - USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, -- USB_DT_DEVICE << 8, 0, -+ USB_DT_DEVICE << 8, -+ //USB_DT_DEVICE << 64, // DWC patch suggestion! -+ 0, - buf, GET_DESCRIPTOR_BUFSIZE, - initial_descriptor_timeout); - switch (buf->bMaxPacketSize0) { -@@ -4500,8 +4520,10 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, - release_devnum(udev); - hub_free_dev(udev); - usb_put_dev(udev); -- if ((status == -ENOTCONN) || (status == -ENOTSUPP)) -- break; -+ if (status == -ENOTCONN || status == -ENOTSUPP || -+ status == -ECONNREFUSED) -+ // break; //DWC patch -+ return; - } - if (hub->hdev->parent || - !hcd->driver->port_handed_over || diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c -index 131f736..2dceeee 100644 +index 444d30e..3ff77fa 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -1875,6 +1875,85 @@ int usb_set_configuration(struct usb_device *dev, int configuration) @@ -579,391 +437,6 @@ index e8cdce5..3a0da17 100644 #endif } -diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig -index 14625fd..51ab5fd 100644 ---- a/drivers/usb/gadget/Kconfig -+++ b/drivers/usb/gadget/Kconfig -@@ -154,25 +154,16 @@ config USB_LPC32XX - - config USB_ATMEL_USBA - tristate "Atmel USBA" -+ select USB_GADGET_DUALSPEED - depends on AVR32 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 - help - USBA is the integrated high-speed USB Device controller on - the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel. - --config USB_BCM63XX_UDC -- tristate "Broadcom BCM63xx Peripheral Controller" -- depends on BCM63XX -- help -- Many Broadcom BCM63xx chipsets (such as the BCM6328) have a -- high speed USB Device Port with support for four fixed endpoints -- (plus endpoint zero). -- -- Say "y" to link the driver statically, or "m" to build a -- dynamically linked module called "bcm63xx_udc". -- - config USB_FSL_USB2 - tristate "Freescale Highspeed USB DR Peripheral Controller" - depends on FSL_SOC || ARCH_MXC -+ select USB_GADGET_DUALSPEED - select USB_FSL_MPH_DR_OF if OF - help - Some of Freescale PowerPC and i.MX processors have a High Speed -@@ -188,6 +179,7 @@ config USB_FSL_USB2 - config USB_FUSB300 - tristate "Faraday FUSB300 USB Peripheral Controller" - depends on !PHYS_ADDR_T_64BIT -+ select USB_GADGET_DUALSPEED - help - Faraday usb device controller FUSB300 driver - -@@ -235,6 +227,7 @@ config USB_PXA25X_SMALL - - config USB_R8A66597 - tristate "Renesas R8A66597 USB Peripheral Controller" -+ select USB_GADGET_DUALSPEED - help - R8A66597 is a discrete USB host and peripheral controller chip that - supports both full and high speed USB 2.0 data transfers. -@@ -247,6 +240,7 @@ config USB_R8A66597 - config USB_RENESAS_USBHS_UDC - tristate 'Renesas USBHS controller' - depends on USB_RENESAS_USBHS -+ select USB_GADGET_DUALSPEED - help - Renesas USBHS is a discrete USB host and peripheral controller chip - that supports both full and high speed USB 2.0 data transfers. -@@ -274,6 +268,7 @@ config USB_PXA27X - config USB_S3C_HSOTG - tristate "S3C HS/OtG USB Device controller" - depends on S3C_DEV_USB_HSOTG -+ select USB_GADGET_DUALSPEED - help - The Samsung S3C64XX USB2.0 high-speed gadget controller - integrated into the S3C64XX series SoC. -@@ -310,6 +305,7 @@ config USB_S3C2410_DEBUG - config USB_S3C_HSUDC - tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller" - depends on ARCH_S3C24XX -+ select USB_GADGET_DUALSPEED - help - Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC - integrated with dual speed USB 2.0 device controller. It has -@@ -319,6 +315,7 @@ config USB_S3C_HSUDC - - config USB_MV_UDC - tristate "Marvell USB2.0 Device Controller" -+ select USB_GADGET_DUALSPEED - help - Marvell Socs (including PXA and MMP series) include a high speed - USB2.0 OTG controller, which can be configured as high speed or -@@ -341,12 +338,14 @@ config USB_MV_U3D - config USB_GADGET_MUSB_HDRC - tristate "Inventra HDRC USB Peripheral (TI, ADI, ...)" - depends on USB_MUSB_HDRC -+ select USB_GADGET_DUALSPEED - help - This OTG-capable silicon IP is used in dual designs including - the TI DaVinci, OMAP 243x, OMAP 343x, TUSB 6010, and ADI Blackfin - - config USB_M66592 - tristate "Renesas M66592 USB Peripheral Controller" -+ select USB_GADGET_DUALSPEED - help - M66592 is a discrete USB peripheral controller chip that - supports both full and high speed USB 2.0 data transfers. -@@ -363,6 +362,7 @@ config USB_M66592 - config USB_AMD5536UDC - tristate "AMD5536 UDC" - depends on PCI -+ select USB_GADGET_DUALSPEED - help - The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge. - It is a USB Highspeed DMA capable USB device controller. Beside ep0 -@@ -389,6 +389,7 @@ config USB_FSL_QE - - config USB_NET2272 - tristate "PLX NET2272" -+ select USB_GADGET_DUALSPEED - help - PLX NET2272 is a USB peripheral controller which supports - both full and high speed USB 2.0 data transfers. -@@ -412,6 +413,7 @@ config USB_NET2272_DMA - config USB_NET2280 - tristate "NetChip 228x" - depends on PCI -+ select USB_GADGET_DUALSPEED - help - NetChip 2280 / 2282 is a PCI based USB peripheral controller which - supports both full and high speed USB 2.0 data transfers. -@@ -441,6 +443,7 @@ config USB_GOKU - config USB_EG20T - tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC" - depends on PCI -+ select USB_GADGET_DUALSPEED - help - This is a USB device driver for EG20T PCH. - EG20T PCH is the platform controller hub that is used in Intel's -@@ -467,6 +470,8 @@ config USB_EG20T - config USB_DUMMY_HCD - tristate "Dummy HCD (DEVELOPMENT)" - depends on USB=y || (USB=m && USB_GADGET=m) -+ select USB_GADGET_DUALSPEED -+ select USB_GADGET_SUPERSPEED - help - This host controller driver emulates USB, looping all data transfer - requests back to a USB "gadget driver" in the same host. The host -@@ -491,15 +496,18 @@ config USB_DUMMY_HCD - - endmenu - -+# Selected by UDC drivers that support high-speed operation. -+config USB_GADGET_DUALSPEED -+ bool -+ -+# Selected by UDC drivers that support super-speed opperation -+config USB_GADGET_SUPERSPEED -+ bool -+ depends on USB_GADGET_DUALSPEED -+ - # - # USB Gadget Drivers - # -- --# composite based drivers --config USB_LIBCOMPOSITE -- tristate -- depends on USB_GADGET -- - choice - tristate "USB Gadget Drivers" - default USB_ETH -@@ -523,7 +531,6 @@ choice - - config USB_ZERO - tristate "Gadget Zero (DEVELOPMENT)" -- select USB_LIBCOMPOSITE - help - Gadget Zero is a two-configuration device. It either sinks and - sources bulk data; or it loops back a configurable number of -@@ -557,9 +564,8 @@ config USB_ZERO_HNPTEST - one serve as the USB host instead (in the "B-Host" role). - - config USB_AUDIO -- tristate "Audio Gadget" -+ tristate "Audio Gadget (EXPERIMENTAL)" - depends on SND -- select USB_LIBCOMPOSITE - select SND_PCM - help - This Gadget Audio driver is compatible with USB Audio Class -@@ -588,7 +594,6 @@ config GADGET_UAC1 - config USB_ETH - tristate "Ethernet Gadget (with CDC Ethernet support)" - depends on NET -- select USB_LIBCOMPOSITE - select CRC32 - help - This driver implements Ethernet style communication, in one of -@@ -624,7 +629,6 @@ config USB_ETH - config USB_ETH_RNDIS - bool "RNDIS support" - depends on USB_ETH -- select USB_LIBCOMPOSITE - default y - help - Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, -@@ -643,7 +647,6 @@ config USB_ETH_RNDIS - config USB_ETH_EEM - bool "Ethernet Emulation Model (EEM) support" - depends on USB_ETH -- select USB_LIBCOMPOSITE - default n - help - CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM -@@ -660,7 +663,6 @@ config USB_ETH_EEM - config USB_G_NCM - tristate "Network Control Model (NCM) support" - depends on NET -- select USB_LIBCOMPOSITE - select CRC32 - help - This driver implements USB CDC NCM subclass standard. NCM is -@@ -672,7 +674,8 @@ config USB_G_NCM - dynamically linked module called "g_ncm". - - config USB_GADGETFS -- tristate "Gadget Filesystem" -+ tristate "Gadget Filesystem (EXPERIMENTAL)" -+ depends on EXPERIMENTAL - help - This driver provides a filesystem based API that lets user mode - programs implement a single-configuration USB device, including -@@ -680,12 +683,15 @@ config USB_GADGETFS - All endpoints, transfer speeds, and transfer types supported by - the hardware are available, through read() and write() calls. - -+ Currently, this option is still labelled as EXPERIMENTAL because -+ of existing race conditions in the underlying in-kernel AIO core. -+ - Say "y" to link the driver statically, or "m" to build a - dynamically linked module called "gadgetfs". - - config USB_FUNCTIONFS -- tristate "Function Filesystem" -- select USB_LIBCOMPOSITE -+ tristate "Function Filesystem (EXPERIMENTAL)" -+ depends on EXPERIMENTAL - select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS) - help - The Function Filesystem (FunctionFS) lets one create USB -@@ -721,18 +727,42 @@ config USB_FUNCTIONFS_GENERIC - Include a configuration with the Function Filesystem alone with - no Ethernet interface. - -+config USB_FILE_STORAGE -+ tristate "File-backed Storage Gadget (DEPRECATED)" -+ depends on BLOCK -+ help -+ The File-backed Storage Gadget acts as a USB Mass Storage -+ disk drive. As its storage repository it can use a regular -+ file or a block device (in much the same way as the "loop" -+ device driver), specified as a module parameter. -+ -+ Say "y" to link the driver statically, or "m" to build a -+ dynamically linked module called "g_file_storage". -+ -+ NOTE: This driver is deprecated. Its replacement is the -+ Mass Storage Gadget. -+ -+config USB_FILE_STORAGE_TEST -+ bool "File-backed Storage Gadget testing version" -+ depends on USB_FILE_STORAGE -+ default n -+ help -+ Say "y" to generate the larger testing version of the -+ File-backed Storage Gadget, useful for probing the -+ behavior of USB Mass Storage hosts. Not needed for -+ normal operation. -+ - config USB_MASS_STORAGE - tristate "Mass Storage Gadget" - depends on BLOCK -- select USB_LIBCOMPOSITE - help - The Mass Storage Gadget acts as a USB Mass Storage disk drive. - As its storage repository it can use a regular file or a block - device (in much the same way as the "loop" device driver), - specified as a module parameter or sysfs option. - -- This driver is a replacement for now removed File-backed -- Storage Gadget (g_file_storage). -+ This driver is an updated replacement for the deprecated -+ File-backed Storage Gadget (g_file_storage). - - Say "y" to link the driver statically, or "m" to build - a dynamically linked module called "g_mass_storage". -@@ -740,7 +770,6 @@ config USB_MASS_STORAGE - config USB_GADGET_TARGET - tristate "USB Gadget Target Fabric Module" - depends on TARGET_CORE -- select USB_LIBCOMPOSITE - help - This fabric is an USB gadget. Two USB protocols are supported that is - BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is -@@ -750,7 +779,6 @@ config USB_GADGET_TARGET - - config USB_G_SERIAL - tristate "Serial Gadget (with CDC ACM and CDC OBEX support)" -- select USB_LIBCOMPOSITE - help - The Serial Gadget talks to the Linux-USB generic serial driver. - This driver supports a CDC-ACM module option, which can be used -@@ -769,9 +797,8 @@ config USB_G_SERIAL - make MS-Windows work with CDC ACM. - - config USB_MIDI_GADGET -- tristate "MIDI Gadget" -- depends on SND -- select USB_LIBCOMPOSITE -+ tristate "MIDI Gadget (EXPERIMENTAL)" -+ depends on SND && EXPERIMENTAL - select SND_RAWMIDI - help - The MIDI Gadget acts as a USB Audio device, with one MIDI -@@ -785,7 +812,6 @@ config USB_MIDI_GADGET - - config USB_G_PRINTER - tristate "Printer Gadget" -- select USB_LIBCOMPOSITE - help - The Printer Gadget channels data between the USB host and a - userspace program driving the print engine. The user space -@@ -802,7 +828,6 @@ config USB_G_PRINTER - config USB_CDC_COMPOSITE - tristate "CDC Composite Device (Ethernet and ACM)" - depends on NET -- select USB_LIBCOMPOSITE - help - This driver provides two functions in one configuration: - a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link. -@@ -817,7 +842,6 @@ config USB_CDC_COMPOSITE - config USB_G_NOKIA - tristate "Nokia composite gadget" - depends on PHONET -- select USB_LIBCOMPOSITE - help - The Nokia composite gadget provides support for acm, obex - and phonet in only one composite gadget driver. -@@ -828,7 +852,6 @@ config USB_G_NOKIA - config USB_G_ACM_MS - tristate "CDC Composite Device (ACM and mass storage)" - depends on BLOCK -- select USB_LIBCOMPOSITE - help - This driver provides two functions in one configuration: - a mass storage, and a CDC ACM (serial port) link. -@@ -837,10 +860,9 @@ config USB_G_ACM_MS - dynamically linked module called "g_acm_ms". - - config USB_G_MULTI -- tristate "Multifunction Composite Gadget" -+ tristate "Multifunction Composite Gadget (EXPERIMENTAL)" - depends on BLOCK && NET - select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS -- select USB_LIBCOMPOSITE - help - The Multifunction Composite Gadget provides Ethernet (RNDIS - and/or CDC Ethernet), mass storage and ACM serial link -@@ -881,7 +903,6 @@ config USB_G_MULTI_CDC - - config USB_G_HID - tristate "HID Gadget" -- select USB_LIBCOMPOSITE - help - The HID gadget driver provides generic emulation of USB - Human Interface Devices (HID). -@@ -892,10 +913,8 @@ config USB_G_HID - Say "y" to link the driver statically, or "m" to build a - dynamically linked module called "g_hid". - --# Standalone / single function gadgets - config USB_G_DBGP - tristate "EHCI Debug Device Gadget" -- select USB_LIBCOMPOSITE - help - This gadget emulates an EHCI Debug device. This is useful when you want - to interact with an EHCI Debug Port. -@@ -927,7 +946,6 @@ endif - config USB_G_WEBCAM - tristate "USB Webcam Gadget" - depends on VIDEO_DEV -- select USB_LIBCOMPOSITE - help - The Webcam Gadget acts as a composite USB Audio and Video Class - device. It provides a userspace API to process UVC control requests diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c new file mode 100644 index 0000000..a896d73 @@ -4647,7 +4120,7 @@ index 0000000..a896d73 +} +module_exit(fsg_cleanup); diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig -index 3a21c5d..28e4234 100644 +index c59a112..dc69918 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -623,6 +623,19 @@ config USB_HWA_HCD @@ -41463,7 +40936,7 @@ index 0000000..f89e878 +#endif /* DWC_HOST_ONLY */ diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c new file mode 100644 -index 0000000..aae78a7 +index 0000000..6ce0d97 --- /dev/null +++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c @@ -0,0 +1,1288 @@ @@ -42526,7 +41999,7 @@ index 0000000..aae78a7 + d->gadget.dev.parent = &_dev->dev; + d->gadget.dev.release = dwc_otg_pcd_gadget_release; + d->gadget.ops = &dwc_otg_pcd_ops; -+ d->gadget.is_dualspeed = dwc_otg_pcd_is_dualspeed(otg_dev->pcd); ++ d->gadget.max_speed = dwc_otg_pcd_is_dualspeed(otg_dev->pcd) ? USB_SPEED_HIGH:USB_SPEED_FULL; + d->gadget.is_otg = dwc_otg_pcd_is_otg(otg_dev->pcd); + + d->driver = 0; @@ -42678,7 +42151,7 @@ index 0000000..aae78a7 + DWC_DEBUGPL(DBG_PCD, "registering gadget driver '%s'\n", + driver->driver.name); + -+ if (!driver || driver->speed == USB_SPEED_UNKNOWN || ++ if (!driver || driver->max_speed == USB_SPEED_UNKNOWN || +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) + !driver->bind || +#else @@ -45702,65 +45175,69 @@ index 0000000..abcf284 +test_main(); +0; -- -1.8.1.5 +1.8.1.6 -From d8a6867a1a783413eb13d21a735b3aac610dd980 Mon Sep 17 00:00:00 2001 +From f85fdade5cdd7807608bfec780a40c70ddf920a9 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 26 Mar 2013 17:17:56 +0000 -Subject: [PATCH 002/169] Main bcm2708 linux port +Date: Wed, 8 May 2013 11:59:48 +0100 +Subject: [PATCH 02/95] Main bcm2708 linux port Signed-off-by: popcornmix --- - arch/arm/Kconfig | 14 + + arch/arm/Kconfig | 16 + + arch/arm/Kconfig.debug | 8 + arch/arm/Makefile | 1 + - arch/arm/configs/bcmrpi_cutdown_defconfig | 1558 ++++++++++++++++++++++ - arch/arm/mach-bcm2708/Kconfig | 25 + + arch/arm/configs/bcmrpi_cutdown_defconfig | 474 +++++++ + arch/arm/configs/bcmrpi_defconfig | 510 +++++++ + arch/arm/configs/bcmrpi_emergency_defconfig | 532 ++++++++ + arch/arm/mach-bcm2708/Kconfig | 34 + arch/arm/mach-bcm2708/Makefile | 8 + arch/arm/mach-bcm2708/Makefile.boot | 3 + - arch/arm/mach-bcm2708/armctrl.c | 399 ++++++ + arch/arm/mach-bcm2708/armctrl.c | 208 +++ arch/arm/mach-bcm2708/armctrl.h | 27 + - arch/arm/mach-bcm2708/bcm2708.c | 631 +++++++++ + arch/arm/mach-bcm2708/bcm2708.c | 638 +++++++++ arch/arm/mach-bcm2708/bcm2708.h | 51 + - arch/arm/mach-bcm2708/bcm2708_gpio.c | 323 +++++ + arch/arm/mach-bcm2708/bcm2708_gpio.c | 339 +++++ arch/arm/mach-bcm2708/clock.c | 61 + arch/arm/mach-bcm2708/clock.h | 24 + arch/arm/mach-bcm2708/dma.c | 397 ++++++ arch/arm/mach-bcm2708/include/mach/arm_control.h | 419 ++++++ arch/arm/mach-bcm2708/include/mach/arm_power.h | 60 + arch/arm/mach-bcm2708/include/mach/clkdev.h | 7 + - arch/arm/mach-bcm2708/include/mach/debug-macro.S | 24 + + arch/arm/mach-bcm2708/include/mach/debug-macro.S | 22 + arch/arm/mach-bcm2708/include/mach/dma.h | 84 ++ arch/arm/mach-bcm2708/include/mach/entry-macro.S | 69 + arch/arm/mach-bcm2708/include/mach/frc.h | 38 + - arch/arm/mach-bcm2708/include/mach/gpio.h | 48 + + arch/arm/mach-bcm2708/include/mach/gpio.h | 18 + arch/arm/mach-bcm2708/include/mach/hardware.h | 28 + - arch/arm/mach-bcm2708/include/mach/io.h | 28 + - arch/arm/mach-bcm2708/include/mach/irqs.h | 190 +++ - arch/arm/mach-bcm2708/include/mach/memory.h | 59 + - arch/arm/mach-bcm2708/include/mach/platform.h | 210 +++ + arch/arm/mach-bcm2708/include/mach/io.h | 27 + + arch/arm/mach-bcm2708/include/mach/irqs.h | 196 +++ + arch/arm/mach-bcm2708/include/mach/memory.h | 57 + + arch/arm/mach-bcm2708/include/mach/platform.h | 220 +++ arch/arm/mach-bcm2708/include/mach/power.h | 26 + arch/arm/mach-bcm2708/include/mach/system.h | 53 + arch/arm/mach-bcm2708/include/mach/timex.h | 23 + - arch/arm/mach-bcm2708/include/mach/uncompress.h | 49 + + arch/arm/mach-bcm2708/include/mach/uncompress.h | 85 ++ arch/arm/mach-bcm2708/include/mach/vc_mem.h | 35 + arch/arm/mach-bcm2708/include/mach/vcio.h | 42 + arch/arm/mach-bcm2708/include/mach/vmalloc.h | 20 + - arch/arm/mach-bcm2708/power.c | 193 +++ + arch/arm/mach-bcm2708/power.c | 194 +++ arch/arm/mach-bcm2708/vc_mem.c | 466 +++++++ - arch/arm/mach-bcm2708/vcio.c | 309 +++++ + arch/arm/mach-bcm2708/vcio.c | 308 +++++ arch/arm/mm/Kconfig | 2 +- arch/arm/mm/proc-v6.S | 15 +- - drivers/mmc/host/Kconfig | 31 + - drivers/mmc/host/Makefile | 2 + - drivers/mmc/host/bcm2708_mci.c | 889 ++++++++++++ - drivers/mmc/host/bcm2708_mci.h | 101 ++ - drivers/mmc/host/sdhci-bcm2708.c | 1461 ++++++++++++++++++++ + arch/arm/tools/mach-types | 1 + + drivers/mmc/host/Kconfig | 21 + + drivers/mmc/host/Makefile | 1 + + drivers/mmc/host/sdhci-bcm2708.c | 1555 ++++++++++++++++++++++ drivers/mmc/host/sdhci.c | 288 ++-- drivers/mmc/host/sdhci.h | 42 + include/linux/mmc/sdhci.h | 2 + - 47 files changed, 8746 insertions(+), 89 deletions(-) + 49 files changed, 7666 insertions(+), 89 deletions(-) create mode 100644 arch/arm/configs/bcmrpi_cutdown_defconfig + create mode 100644 arch/arm/configs/bcmrpi_defconfig + create mode 100644 arch/arm/configs/bcmrpi_emergency_defconfig create mode 100644 arch/arm/mach-bcm2708/Kconfig create mode 100644 arch/arm/mach-bcm2708/Makefile create mode 100644 arch/arm/mach-bcm2708/Makefile.boot @@ -45795,23 +45272,23 @@ Signed-off-by: popcornmix create mode 100644 arch/arm/mach-bcm2708/power.c create mode 100644 arch/arm/mach-bcm2708/vc_mem.c create mode 100644 arch/arm/mach-bcm2708/vcio.c - create mode 100644 drivers/mmc/host/bcm2708_mci.c - create mode 100644 drivers/mmc/host/bcm2708_mci.h create mode 100644 drivers/mmc/host/sdhci-bcm2708.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 67874b8..0b8ca00 100644 +index 1cacda4..81540e7 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -949,6 +949,19 @@ config ARCH_OMAP - help - Support for TI's OMAP platform (OMAP1/2/3/4). +@@ -361,6 +361,21 @@ config ARCH_AT91 + This enables support for systems based on Atmel + AT91RM9200 and AT91SAM9* processors. +config ARCH_BCM2708 + bool "Broadcom BCM2708 family" + select CPU_V6 + select ARM_AMBA + select HAVE_CLK ++ select HAVE_SCHED_CLOCK ++ select NEED_MACH_MEMORY_H + select CLKDEV_LOOKUP + select GENERIC_CLOCKEVENTS + select ARM_ERRATA_411920 @@ -45820,10 +45297,10 @@ index 67874b8..0b8ca00 100644 + help + This enables support for Broadcom BCM2708 boards. + - config ARCH_VT8500_SINGLE - bool "VIA/WonderMedia 85xx" - select ARCH_HAS_CPUFREQ -@@ -1130,6 +1143,7 @@ source "arch/arm/plat-versatile/Kconfig" + config ARCH_BCM2835 + bool "Broadcom BCM2835 family" + select ARCH_REQUIRE_GPIOLIB +@@ -1142,6 +1157,7 @@ source "arch/arm/mach-virt/Kconfig" source "arch/arm/mach-vt8500/Kconfig" source "arch/arm/mach-w90x900/Kconfig" @@ -45831,8 +45308,27 @@ index 67874b8..0b8ca00 100644 source "arch/arm/mach-zynq/Kconfig" +diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug +index 9b31f43..13afe3c 100644 +--- a/arch/arm/Kconfig.debug ++++ b/arch/arm/Kconfig.debug +@@ -483,6 +483,14 @@ choice + For more details about semihosting, please see + chapter 8 of DUI0203I_rvct_developer_guide.pdf from ARM Ltd. + ++ config DEBUG_BCM2708_UART0 ++ bool "Broadcom BCM2708 UART0 (PL011)" ++ depends on MACH_BCM2708 ++ help ++ Say Y here if you want the debug print routines to direct ++ their output to UART 0. The port must have been initialised ++ by the boot-loader before use. ++ + endchoice + + config DEBUG_IMX_UART_PORT diff --git a/arch/arm/Makefile b/arch/arm/Makefile -index 30c443c..ea2c324 100644 +index ee4605f..95cc937 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -139,6 +139,7 @@ textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 @@ -45845,1314 +45341,423 @@ index 30c443c..ea2c324 100644 machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig new file mode 100644 -index 0000000..4862854 +index 0000000..74f2dc9 --- /dev/null +++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -0,0 +1,1558 @@ -+# -+# Automatically generated file; DO NOT EDIT. -+# Linux/arm 3.1.9 Kernel Configuration -+# -+CONFIG_ARM=y -+CONFIG_SYS_SUPPORTS_APM_EMULATION=y -+CONFIG_GENERIC_GPIO=y -+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set -+CONFIG_GENERIC_CLOCKEVENTS=y -+CONFIG_KTIME_SCALAR=y -+CONFIG_HAVE_PROC_CPU=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_CPU_IDLE_WAIT=y -+CONFIG_GENERIC_HWEIGHT=y -+CONFIG_GENERIC_CALIBRATE_DELAY=y -+CONFIG_NEED_DMA_MAP_STATE=y -+CONFIG_VECTORS_BASE=0xffff0000 -+# CONFIG_ARM_PATCH_PHYS_VIRT is not set -+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -+CONFIG_HAVE_IRQ_WORK=y -+ -+# -+# General setup -+# +@@ -0,0 +1,474 @@ +CONFIG_EXPERIMENTAL=y -+CONFIG_BROKEN_ON_SMP=y -+CONFIG_INIT_ENV_ARG_LIMIT=32 -+CONFIG_CROSS_COMPILE="" -+CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_HAVE_KERNEL_GZIP=y -+CONFIG_HAVE_KERNEL_LZMA=y -+CONFIG_HAVE_KERNEL_LZO=y -+CONFIG_KERNEL_GZIP=y -+# CONFIG_KERNEL_LZMA is not set -+# CONFIG_KERNEL_LZO is not set -+CONFIG_DEFAULT_HOSTNAME="(none)" -+CONFIG_SWAP=y +CONFIG_SYSVIPC=y -+CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y -+CONFIG_POSIX_MQUEUE_SYSCTL=y -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_FHANDLE is not set -+# CONFIG_TASKSTATS is not set -+# CONFIG_AUDIT is not set -+CONFIG_HAVE_GENERIC_HARDIRQS=y -+ -+# -+# IRQ subsystem -+# -+CONFIG_GENERIC_HARDIRQS=y -+CONFIG_HAVE_SPARSE_IRQ=y -+CONFIG_GENERIC_IRQ_SHOW=y -+# CONFIG_SPARSE_IRQ is not set -+ -+# -+# RCU Subsystem -+# -+CONFIG_TINY_RCU=y -+# CONFIG_PREEMPT_RCU is not set -+# CONFIG_RCU_TRACE is not set -+# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y -+CONFIG_LOG_BUF_SHIFT=17 -+# CONFIG_CGROUPS is not set -+# CONFIG_NAMESPACES is not set -+# CONFIG_SCHED_AUTOGROUP is not set -+# CONFIG_SYSFS_DEPRECATED is not set -+# CONFIG_RELAY is not set -+# CONFIG_BLK_DEV_INITRD is not set -+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -+CONFIG_SYSCTL=y -+CONFIG_ANON_INODES=y -+CONFIG_EXPERT=y +# CONFIG_UID16 is not set -+CONFIG_SYSCTL_SYSCALL=y +# CONFIG_KALLSYMS is not set -+CONFIG_HOTPLUG=y -+CONFIG_PRINTK=y -+CONFIG_BUG=y -+# CONFIG_ELF_CORE is not set -+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_EMBEDDED=y -+CONFIG_HAVE_PERF_EVENTS=y -+CONFIG_PERF_USE_VMALLOC=y -+ -+# -+# Kernel Performance Events And Counters -+# -+# CONFIG_PERF_EVENTS is not set -+# CONFIG_PERF_COUNTERS is not set +# CONFIG_VM_EVENT_COUNTERS is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y -+# CONFIG_SLUB is not set -+# CONFIG_SLOB is not set -+# CONFIG_PROFILING is not set -+CONFIG_HAVE_OPROFILE=y -+# CONFIG_KPROBES is not set -+CONFIG_HAVE_KPROBES=y -+CONFIG_HAVE_KRETPROBES=y -+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -+CONFIG_HAVE_CLK=y -+CONFIG_HAVE_DMA_API_DEBUG=y -+ -+# -+# GCOV-based kernel profiling -+# -+CONFIG_HAVE_GENERIC_DMA_COHERENT=y -+CONFIG_SLABINFO=y -+CONFIG_RT_MUTEXES=y -+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=y +CONFIG_MODULE_SRCVERSION_ALL=y -+CONFIG_BLOCK=y -+CONFIG_LBDAF=y +# CONFIG_BLK_DEV_BSG is not set -+# CONFIG_BLK_DEV_BSGLIB is not set -+# CONFIG_BLK_DEV_INTEGRITY is not set -+ -+# -+# IO Schedulers -+# -+CONFIG_IOSCHED_NOOP=y -+CONFIG_IOSCHED_DEADLINE=y -+CONFIG_IOSCHED_CFQ=y -+# CONFIG_DEFAULT_DEADLINE is not set -+CONFIG_DEFAULT_CFQ=y -+# CONFIG_DEFAULT_NOOP is not set -+CONFIG_DEFAULT_IOSCHED="cfq" -+# CONFIG_INLINE_SPIN_TRYLOCK is not set -+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK is not set -+# CONFIG_INLINE_SPIN_LOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -+CONFIG_INLINE_SPIN_UNLOCK=y -+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set -+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_READ_TRYLOCK is not set -+# CONFIG_INLINE_READ_LOCK is not set -+# CONFIG_INLINE_READ_LOCK_BH is not set -+# CONFIG_INLINE_READ_LOCK_IRQ is not set -+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -+CONFIG_INLINE_READ_UNLOCK=y -+# CONFIG_INLINE_READ_UNLOCK_BH is not set -+CONFIG_INLINE_READ_UNLOCK_IRQ=y -+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_WRITE_TRYLOCK is not set -+# CONFIG_INLINE_WRITE_LOCK is not set -+# CONFIG_INLINE_WRITE_LOCK_BH is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -+CONFIG_INLINE_WRITE_UNLOCK=y -+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set -+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set -+# CONFIG_MUTEX_SPIN_ON_OWNER is not set -+CONFIG_FREEZER=y -+ -+# -+# System Type -+# -+CONFIG_MMU=y -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_REALVIEW is not set -+# CONFIG_ARCH_VERSATILE is not set -+# CONFIG_ARCH_VEXPRESS is not set -+# CONFIG_ARCH_AT91 is not set -+# CONFIG_ARCH_BCMRING is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_CNS3XXX is not set -+# CONFIG_ARCH_GEMINI is not set -+# CONFIG_ARCH_PRIMA2 is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_EP93XX is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_MXC is not set -+# CONFIG_ARCH_MXS is not set -+# CONFIG_ARCH_NETX is not set -+# CONFIG_ARCH_H720X 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_DOVE is not set -+# CONFIG_ARCH_KIRKWOOD is not set -+# CONFIG_ARCH_LPC32XX is not set -+# CONFIG_ARCH_MV78XX0 is not set -+# CONFIG_ARCH_ORION5X is not set -+# CONFIG_ARCH_MMP is not set -+# CONFIG_ARCH_KS8695 is not set -+# CONFIG_ARCH_W90X900 is not set -+# CONFIG_ARCH_NUC93X is not set -+# CONFIG_ARCH_TEGRA is not set -+# CONFIG_ARCH_PNX4008 is not set -+# CONFIG_ARCH_PXA is not set -+# CONFIG_ARCH_MSM is not set -+# CONFIG_ARCH_SHMOBILE is not set -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+# CONFIG_ARCH_S3C2410 is not set -+# CONFIG_ARCH_S3C64XX is not set -+# CONFIG_ARCH_S5P64X0 is not set -+# CONFIG_ARCH_S5PC100 is not set -+# CONFIG_ARCH_S5PV210 is not set -+# CONFIG_ARCH_EXYNOS4 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_TCC_926 is not set -+# CONFIG_ARCH_U300 is not set -+# CONFIG_ARCH_U8500 is not set -+# CONFIG_ARCH_NOMADIK is not set -+# CONFIG_ARCH_DAVINCI is not set -+# CONFIG_ARCH_OMAP is not set -+# CONFIG_PLAT_SPEAR is not set +CONFIG_ARCH_BCM2708=y -+# CONFIG_ARCH_VT8500 is not set -+# CONFIG_ARCH_ZYNQ is not set -+ -+# -+# System MMU -+# -+ -+# -+# Broadcom BCM2708 Implementations -+# -+CONFIG_MACH_BCM2708=y -+CONFIG_BCM2708_GPIO=y -+CONFIG_BCM2708_VCMEM=y -+ -+# -+# Processor Type -+# -+CONFIG_CPU_V6=y -+CONFIG_CPU_32v6=y -+CONFIG_CPU_ABRT_EV6=y -+CONFIG_CPU_PABRT_V6=y -+CONFIG_CPU_CACHE_V6=y -+CONFIG_CPU_CACHE_VIPT=y -+CONFIG_CPU_COPY_V6=y -+CONFIG_CPU_TLB_V6=y -+CONFIG_CPU_HAS_ASID=y -+CONFIG_CPU_CP15=y -+CONFIG_CPU_CP15_MMU=y -+CONFIG_CPU_USE_DOMAINS=y -+ -+# -+# Processor Features -+# -+CONFIG_ARM_THUMB=y -+# CONFIG_CPU_ICACHE_DISABLE is not set -+# CONFIG_CPU_DCACHE_DISABLE is not set -+# CONFIG_CPU_BPREDICT_DISABLE is not set -+CONFIG_ARM_L1_CACHE_SHIFT=5 -+CONFIG_ARM_DMA_MEM_BUFFERABLE=y -+CONFIG_CPU_HAS_PMU=y -+CONFIG_ARM_ERRATA_411920=y -+# CONFIG_ARM_ERRATA_364296 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 is not set -+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_NONE=y -+# CONFIG_PREEMPT_VOLUNTARY is not set -+# CONFIG_PREEMPT is not set -+CONFIG_HZ=100 ++CONFIG_HIGH_RES_TIMERS=y +CONFIG_AEABI=y -+CONFIG_OABI_COMPAT=y -+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set -+CONFIG_HAVE_ARCH_PFN_VALID=y -+# CONFIG_HIGHMEM is not set -+CONFIG_SELECT_MEMORY_MODEL=y -+CONFIG_FLATMEM_MANUAL=y -+CONFIG_FLATMEM=y -+CONFIG_FLAT_NODE_MEM_MAP=y -+CONFIG_HAVE_MEMBLOCK=y -+CONFIG_PAGEFLAGS_EXTENDED=y -+CONFIG_SPLIT_PTLOCK_CPUS=4 -+# CONFIG_COMPACTION is not set -+# CONFIG_PHYS_ADDR_T_64BIT is not set -+CONFIG_ZONE_DMA_FLAG=0 -+CONFIG_VIRT_TO_BUS=y -+# CONFIG_KSM is not set -+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -+CONFIG_NEED_PER_CPU_KM=y -+# CONFIG_CLEANCACHE is not set -+CONFIG_FORCE_MAX_ZONEORDER=11 -+CONFIG_ALIGNMENT_TRAP=y -+# CONFIG_UACCESS_WITH_MEMCPY is not set -+# CONFIG_SECCOMP is not set -+# CONFIG_CC_STACKPROTECTOR is not set -+# CONFIG_DEPRECATED_PARAM_STRUCT is not set -+ -+# -+# Boot options -+# -+# CONFIG_USE_OF is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" -+CONFIG_CMDLINE_FROM_BOOTLOADER=y -+# CONFIG_CMDLINE_EXTEND is not set -+# CONFIG_CMDLINE_FORCE is not set -+# CONFIG_XIP_KERNEL is not set -+# CONFIG_KEXEC is not set -+# CONFIG_CRASH_DUMP is not set -+# CONFIG_AUTO_ZRELADDR is not set -+ -+# -+# CPU Power Management -+# +CONFIG_CPU_IDLE=y -+CONFIG_CPU_IDLE_GOV_LADDER=y -+CONFIG_CPU_IDLE_GOV_MENU=y -+ -+# -+# Floating point emulation -+# -+ -+# -+# At least one emulation must be selected -+# -+# CONFIG_FPE_NWFPE is not set -+# CONFIG_FPE_FASTFPE is not set +CONFIG_VFP=y -+ -+# -+# Userspace binary formats -+# -+CONFIG_BINFMT_ELF=y -+CONFIG_HAVE_AOUT=y -+# CONFIG_BINFMT_AOUT is not set -+# CONFIG_BINFMT_MISC is not set -+ -+# -+# Power management options -+# -+CONFIG_SUSPEND=y -+CONFIG_SUSPEND_FREEZER=y -+CONFIG_PM_SLEEP=y -+# CONFIG_PM_RUNTIME is not set -+CONFIG_PM=y -+# CONFIG_PM_DEBUG is not set -+# CONFIG_APM_EMULATION is not set -+CONFIG_PM_CLK=y -+CONFIG_ARCH_SUSPEND_POSSIBLE=y ++CONFIG_BINFMT_MISC=m +CONFIG_NET=y -+ -+# -+# Networking options -+# +CONFIG_PACKET=y +CONFIG_UNIX=y -+CONFIG_XFRM=y +CONFIG_XFRM_USER=y -+# CONFIG_XFRM_SUB_POLICY is not set -+# CONFIG_XFRM_MIGRATE is not set -+# CONFIG_XFRM_STATISTICS is not set +CONFIG_NET_KEY=m -+# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y -+# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y -+# CONFIG_IP_PNP_BOOTP is not set +CONFIG_IP_PNP_RARP=y -+# CONFIG_NET_IPIP is not set -+# CONFIG_NET_IPGRE_DEMUX is not set -+# CONFIG_IP_MROUTE is not set -+# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y -+# CONFIG_INET_AH is not set -+# CONFIG_INET_ESP is not set -+# CONFIG_INET_IPCOMP is not set -+# CONFIG_INET_XFRM_TUNNEL is not set -+# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set -+# 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 is not set -+# CONFIG_NETWORK_SECMARK is not set -+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -+# CONFIG_NETFILTER is not set -+# CONFIG_IP_DCCP is not set -+# CONFIG_IP_SCTP is not set -+# CONFIG_RDS is not set -+# CONFIG_TIPC is not set -+# CONFIG_ATM is not set -+# CONFIG_L2TP is not set -+# CONFIG_BRIDGE is not set -+# CONFIG_NET_DSA is not set -+# CONFIG_VLAN_8021Q is not set -+# CONFIG_DECNET is not set -+# CONFIG_LLC2 is not set -+# CONFIG_IPX is not set -+# CONFIG_ATALK is not set -+# CONFIG_X25 is not set -+# CONFIG_LAPB is not set -+# CONFIG_ECONET is not set -+# CONFIG_WAN_ROUTER is not set -+# CONFIG_PHONET is not set -+# CONFIG_IEEE802154 is not set -+# CONFIG_NET_SCHED is not set -+# CONFIG_DCB is not set -+CONFIG_DNS_RESOLVER=y -+# CONFIG_BATMAN_ADV is not set -+ -+# -+# Network testing -+# +CONFIG_NET_PKTGEN=m -+# 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_WIRELESS=y -+CONFIG_WEXT_CORE=y -+CONFIG_WEXT_PROC=y -+CONFIG_CFG80211=y -+# CONFIG_NL80211_TESTMODE is not set -+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -+# CONFIG_CFG80211_REG_DEBUG is not set -+CONFIG_CFG80211_DEFAULT_PS=y -+# CONFIG_CFG80211_INTERNAL_REGDB is not set -+CONFIG_CFG80211_WEXT=y -+CONFIG_WIRELESS_EXT_SYSFS=y -+# CONFIG_LIB80211 is not set -+# CONFIG_MAC80211 is not set -+# CONFIG_WIMAX is not set -+# CONFIG_RFKILL is not set -+# CONFIG_NET_9P is not set -+# CONFIG_CAIF is not set -+# CONFIG_CEPH_LIB is not set -+# CONFIG_NFC is not set -+ -+# -+# Device Drivers -+# -+ -+# -+# Generic Driver Options -+# -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+# CONFIG_DEVTMPFS is not set -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+CONFIG_FW_LOADER=y -+CONFIG_FIRMWARE_IN_KERNEL=y -+CONFIG_EXTRA_FIRMWARE="" -+# CONFIG_DEBUG_DRIVER is not set -+# CONFIG_DEBUG_DEVRES is not set -+# CONFIG_SYS_HYPERVISOR is not set -+# CONFIG_CONNECTOR is not set -+# CONFIG_MTD is not set -+# CONFIG_PARPORT is not set -+CONFIG_BLK_DEV=y -+# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_IRDA=m ++CONFIG_IRLAN=m ++CONFIG_IRCOMM=m ++CONFIG_IRDA_ULTRA=y ++CONFIG_IRDA_CACHE_LAST_LSAP=y ++CONFIG_IRDA_FAST_RR=y ++CONFIG_IRTTY_SIR=m ++CONFIG_KINGSUN_DONGLE=m ++CONFIG_KSDAZZLE_DONGLE=m ++CONFIG_KS959_DONGLE=m ++CONFIG_USB_IRDA=m ++CONFIG_SIGMATEL_FIR=m ++CONFIG_MCS_FIR=m ++CONFIG_BT=m ++CONFIG_BT_L2CAP=y ++CONFIG_BT_SCO=y ++CONFIG_BT_RFCOMM=m ++CONFIG_BT_RFCOMM_TTY=y ++CONFIG_BT_BNEP=m ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++CONFIG_BT_HIDP=m ++CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBCM203X=m ++CONFIG_BT_HCIBPA10X=m ++CONFIG_BT_HCIBFUSB=m ++CONFIG_BT_HCIVHCI=m ++CONFIG_BT_MRVL=m ++CONFIG_BT_MRVL_SDIO=m ++CONFIG_BT_ATH3K=m ++CONFIG_CFG80211=m ++CONFIG_MAC80211=m ++CONFIG_MAC80211_RC_PID=y ++CONFIG_MAC80211_MESH=y ++CONFIG_WIMAX=m ++CONFIG_NET_9P=m ++CONFIG_NFC=m ++CONFIG_NFC_PN533=m ++CONFIG_DEVTMPFS=y +CONFIG_BLK_DEV_LOOP=y -+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 -+# CONFIG_BLK_DEV_CRYPTOLOOP is not set -+ -+# -+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -+# -+# CONFIG_BLK_DEV_NBD is not set -+# CONFIG_BLK_DEV_UB is not set ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_COUNT=16 -+CONFIG_BLK_DEV_RAM_SIZE=4096 -+# CONFIG_BLK_DEV_XIP is not set -+# CONFIG_CDROM_PKTCDVD is not set -+# CONFIG_ATA_OVER_ETH is not set -+# CONFIG_MG_DISK is not set -+# CONFIG_BLK_DEV_RBD is not set -+# CONFIG_SENSORS_LIS3LV02D is not set ++CONFIG_CDROM_PKTCDVD=m +CONFIG_MISC_DEVICES=y -+# CONFIG_ENCLOSURE_SERVICES is not set -+# CONFIG_C2PORT is not set -+ -+# -+# EEPROM support -+# -+# CONFIG_EEPROM_93CX6 is not set -+# CONFIG_IWMC3200TOP is not set -+ -+# -+# Texas Instruments shared transport line discipline -+# -+# CONFIG_TI_ST is not set -+CONFIG_BCM2708_VCHIQ=y -+CONFIG_HAVE_IDE=y -+# CONFIG_IDE is not set -+ -+# -+# SCSI device support -+# -+CONFIG_SCSI_MOD=y -+# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y -+CONFIG_SCSI_DMA=y -+# CONFIG_SCSI_TGT is not set -+# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set -+ -+# -+# SCSI support type (disk, tape, CD-ROM) -+# +CONFIG_BLK_DEV_SD=m -+# CONFIG_CHR_DEV_ST is not set -+# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m -+# CONFIG_BLK_DEV_SR_VENDOR is not set -+# CONFIG_CHR_DEV_SG is not set -+# CONFIG_CHR_DEV_SCH is not set +CONFIG_SCSI_MULTI_LUN=y -+# CONFIG_SCSI_CONSTANTS is not set -+# CONFIG_SCSI_LOGGING is not set -+# CONFIG_SCSI_SCAN_ASYNC is not set -+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 is not set -+# CONFIG_SCSI_SAS_ATTRS is not set -+# 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_SCSI_OSD_INITIATOR is not set -+# CONFIG_ATA is not set -+# CONFIG_MD is not set -+# CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y -+# CONFIG_DUMMY is not set -+# CONFIG_BONDING is not set -+# CONFIG_MACVLAN is not set -+# CONFIG_EQUALIZER is not set +CONFIG_TUN=m -+# CONFIG_VETH is not set -+CONFIG_MII=y +CONFIG_PHYLIB=m -+ -+# -+# MII PHY device drivers -+# -+# CONFIG_MARVELL_PHY is not set -+# CONFIG_DAVICOM_PHY is not set -+# CONFIG_QSEMI_PHY is not set -+# CONFIG_LXT_PHY is not set -+# CONFIG_CICADA_PHY is not set -+# CONFIG_VITESSE_PHY is not set -+# CONFIG_SMSC_PHY is not set -+# CONFIG_BROADCOM_PHY is not set -+# CONFIG_ICPLUS_PHY is not set -+# CONFIG_REALTEK_PHY is not set -+# CONFIG_NATIONAL_PHY is not set -+# CONFIG_STE10XP is not set -+# CONFIG_LSI_ET1011C_PHY is not set -+# CONFIG_MICREL_PHY is not set +CONFIG_MDIO_BITBANG=m -+# CONFIG_MDIO_GPIO is not set +CONFIG_NET_ETHERNET=y -+CONFIG_AX88796=m -+# CONFIG_AX88796_93CX6 is not set -+# CONFIG_SMC91X is not set -+# CONFIG_DM9000 is not set -+# CONFIG_ETHOC is not set -+# CONFIG_SMC911X is not set -+# CONFIG_SMSC911X is not set -+# CONFIG_DNET is not set -+# CONFIG_IBM_NEW_EMAC_ZMII is not set -+# CONFIG_IBM_NEW_EMAC_RGMII is not set -+# CONFIG_IBM_NEW_EMAC_TAH is not set -+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set -+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set -+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set -+# CONFIG_B44 is not set -+# CONFIG_KS8851_MLL is not set -+# CONFIG_FTMAC100 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set -+# CONFIG_WLAN is not set -+ -+# -+# Enable WiMAX (Networking options) to see the WiMAX drivers -+# -+ -+# -+# 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_LIBERTAS_THINFIRM=m ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_AT76C50X_USB=m ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8187=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_ATH_COMMON=m ++CONFIG_ATH9K=m ++CONFIG_ATH9K_HTC=m ++CONFIG_CARL9170=m ++CONFIG_B43=m ++CONFIG_B43LEGACY=m ++CONFIG_HOSTAP=m ++CONFIG_IWM=m ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_SDIO=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RTL8192CU=m ++CONFIG_WL1251=m ++CONFIG_WL12XX_MENU=m ++CONFIG_ZD1211RW=m ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_WIMAX_I2400M_USB=m ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=m -+# CONFIG_USB_NET_CDCETHER is not set -+# CONFIG_USB_NET_CDC_EEM is not set -+CONFIG_USB_NET_CDC_NCM=y -+# CONFIG_USB_NET_DM9601 is not set -+# CONFIG_USB_NET_SMSC75XX is not set ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_DM9601=m ++CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=y -+# CONFIG_USB_NET_GL620A is not set -+# CONFIG_USB_NET_NET1080 is not set -+# CONFIG_USB_NET_PLUSB is not set -+# CONFIG_USB_NET_MCS7830 is not set -+# CONFIG_USB_NET_RNDIS_HOST is not set -+# CONFIG_USB_NET_CDC_SUBSET is not set ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_NET1080=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_NET_CDC_SUBSET=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_KC2190=y +# CONFIG_USB_NET_ZAURUS is not set -+# CONFIG_USB_NET_CX82310_ETH is not set -+# CONFIG_USB_NET_KALMIA is not set -+# CONFIG_USB_NET_INT51X1 is not set -+# CONFIG_USB_IPHETH is not set -+# CONFIG_USB_SIERRA_NET is not set -+# CONFIG_WAN is not set -+ -+# -+# CAIF transport drivers -+# -+# 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 -+# CONFIG_PHONE is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=y -+# CONFIG_INPUT_FF_MEMLESS is not set -+# CONFIG_INPUT_POLLDEV is not set -+# CONFIG_INPUT_SPARSEKMAP is not set -+ -+# -+# Userland interfaces -+# -+CONFIG_INPUT_MOUSEDEV=y ++CONFIG_USB_NET_CX82310_ETH=m ++CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_USB_VL600=m ++CONFIG_PPP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_NETCONSOLE=m ++CONFIG_INPUT_POLLDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -+# CONFIG_INPUT_JOYDEV is not set ++CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m -+# CONFIG_INPUT_EVBUG is not set -+ -+# -+# Input Device Drivers -+# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set -+# CONFIG_INPUT_JOYSTICK is not set -+# CONFIG_INPUT_TABLET is not set -+# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y -+# CONFIG_INPUT_AD714X is not set -+# CONFIG_INPUT_ATI_REMOTE is not set -+# CONFIG_INPUT_ATI_REMOTE2 is not set -+# CONFIG_INPUT_KEYSPAN_REMOTE is not set -+# CONFIG_INPUT_POWERMATE is not set -+# CONFIG_INPUT_YEALINK is not set -+# CONFIG_INPUT_CM109 is not set ++CONFIG_INPUT_AD714X=m ++CONFIG_INPUT_ATI_REMOTE=m ++CONFIG_INPUT_ATI_REMOTE2=m ++CONFIG_INPUT_KEYSPAN_REMOTE=m ++CONFIG_INPUT_POWERMATE=m ++CONFIG_INPUT_YEALINK=m ++CONFIG_INPUT_CM109=m +CONFIG_INPUT_UINPUT=m -+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -+# CONFIG_INPUT_ADXL34X is not set -+# CONFIG_INPUT_CMA3000 is not set -+ -+# -+# Hardware I/O ports -+# ++CONFIG_INPUT_GPIO_ROTARY_ENCODER=m ++CONFIG_INPUT_ADXL34X=m ++CONFIG_INPUT_CMA3000=m +CONFIG_SERIO=m -+CONFIG_SERIO_SERPORT=m -+# CONFIG_SERIO_AMBAKMI is not set -+# CONFIG_SERIO_LIBPS2 is not set +CONFIG_SERIO_RAW=m -+# CONFIG_SERIO_ALTERA_PS2 is not set -+# CONFIG_SERIO_PS2MULT is not set +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m -+ -+# -+# Character devices -+# -+CONFIG_VT=y -+CONFIG_CONSOLE_TRANSLATIONS=y -+CONFIG_VT_CONSOLE=y -+CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y -+CONFIG_UNIX98_PTYS=y -+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set -+# CONFIG_SERIAL_NONSTANDARD is not set -+# CONFIG_N_GSM is not set -+# CONFIG_TRACE_SINK is not set +# CONFIG_DEVKMEM is not set -+ -+# -+# Serial drivers -+# -+# CONFIG_SERIAL_8250 is not set -+ -+# -+# Non-8250 serial port support -+# -+# CONFIG_SERIAL_AMBA_PL010 is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+# CONFIG_SERIAL_TIMBERDALE is not set -+# CONFIG_SERIAL_ALTERA_JTAGUART is not set -+# CONFIG_SERIAL_ALTERA_UART is not set -+# CONFIG_SERIAL_XILINX_PS_UART is not set -+# CONFIG_TTY_PRINTK is not set -+# CONFIG_HVC_DCC is not set -+# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set -+# CONFIG_R3964 is not set +CONFIG_RAW_DRIVER=y -+CONFIG_MAX_RAW_DEVS=256 -+# CONFIG_TCG_TPM is not set -+# CONFIG_RAMOOPS is not set -+# CONFIG_I2C is not set -+# CONFIG_SPI is not set -+ -+# -+# PPS support -+# -+# CONFIG_PPS is not set -+ -+# -+# PPS generators support -+# -+ -+# -+# PTP clock support -+# -+ -+# -+# Enable Device Drivers -> PPS to see the PTP clock options. -+# -+CONFIG_ARCH_REQUIRE_GPIOLIB=y -+CONFIG_GPIOLIB=y -+# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y -+ -+# -+# Memory mapped GPIO drivers: -+# -+# CONFIG_GPIO_GENERIC_PLATFORM is not set -+# CONFIG_GPIO_IT8761E is not set -+# CONFIG_GPIO_PL061 is not set -+ -+# -+# I2C GPIO expanders: -+# -+ -+# -+# PCI GPIO expanders: -+# -+ -+# -+# SPI GPIO expanders: -+# -+ -+# -+# AC97 GPIO expanders: -+# -+ -+# -+# MODULbus GPIO expanders: -+# -+# CONFIG_W1 is not set -+# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set -+# CONFIG_THERMAL is not set -+# CONFIG_WATCHDOG is not set -+CONFIG_SSB_POSSIBLE=y -+ -+# -+# Sonics Silicon Backplane -+# -+# CONFIG_SSB is not set -+CONFIG_BCMA_POSSIBLE=y -+ -+# -+# Broadcom specific AMBA -+# -+# CONFIG_BCMA is not set ++CONFIG_WATCHDOG=y ++CONFIG_BCM2708_WDT=m +# CONFIG_MFD_SUPPORT is not set -+# CONFIG_REGULATOR is not set -+# CONFIG_MEDIA_SUPPORT is not set -+ -+# -+# Graphics support -+# -+# CONFIG_DRM is not set -+# CONFIG_VGASTATE is not set -+# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y -+# CONFIG_FIRMWARE_EDID is not set -+# CONFIG_FB_DDC is not set -+# CONFIG_FB_BOOT_VESA_SUPPORT is not set -+CONFIG_FB_CFB_FILLRECT=y -+CONFIG_FB_CFB_COPYAREA=y -+CONFIG_FB_CFB_IMAGEBLIT=y -+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -+# CONFIG_FB_SYS_FILLRECT is not set -+# CONFIG_FB_SYS_COPYAREA is not set -+# CONFIG_FB_SYS_IMAGEBLIT is not set -+# CONFIG_FB_FOREIGN_ENDIAN is not set -+# CONFIG_FB_SYS_FOPS is not set -+# CONFIG_FB_WMT_GE_ROPS is not set -+# CONFIG_FB_SVGALIB is not set -+# CONFIG_FB_MACMODES is not set -+# CONFIG_FB_BACKLIGHT is not set -+# CONFIG_FB_MODE_HELPERS is not set -+# CONFIG_FB_TILEBLITTING is not set -+ -+# -+# Frame buffer hardware drivers -+# +CONFIG_FB_BCM2708=y -+# CONFIG_FB_ARMCLCD is not set -+# CONFIG_FB_S1D13XXX is not set -+# CONFIG_FB_UDL is not set -+# CONFIG_FB_VIRTUAL is not set -+# CONFIG_FB_METRONOME is not set -+# CONFIG_FB_BROADSHEET is not set -+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set -+ -+# -+# Display device support -+# -+# CONFIG_DISPLAY_SUPPORT is not set -+ -+# -+# Console display driver support -+# -+CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y -+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -+# CONFIG_FONTS is not set -+CONFIG_FONT_8x8=y -+CONFIG_FONT_8x16=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set -+CONFIG_LOGO_LINUX_CLUT224=y -+# CONFIG_SOUND is not set -+CONFIG_HID_SUPPORT=y -+CONFIG_HID=y -+# CONFIG_HIDRAW is not set -+ -+# -+# USB Input Devices -+# -+CONFIG_USB_HID=y +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y -+ -+# -+# Special HID drivers -+# +CONFIG_HID_A4TECH=m -+# CONFIG_HID_ACRUX is not set ++CONFIG_HID_ACRUX=m +CONFIG_HID_APPLE=m +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m -+# CONFIG_DRAGONRISE_FF is not set -+# CONFIG_HID_EMS_FF is not set ++CONFIG_HID_EMS_FF=m ++CONFIG_HID_ELECOM=m +CONFIG_HID_EZKEY=m -+# CONFIG_HID_HOLTEK is not set -+# CONFIG_HID_KEYTOUCH is not set ++CONFIG_HID_HOLTEK=m ++CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m -+# CONFIG_HID_UCLOGIC is not set -+# CONFIG_HID_WALTOP is not set ++CONFIG_HID_UCLOGIC=m ++CONFIG_HID_WALTOP=m +CONFIG_HID_GYRATION=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=m -+# CONFIG_HID_LCPOWER is not set ++CONFIG_HID_LCPOWER=m +CONFIG_HID_LOGITECH=m -+# CONFIG_LOGITECH_FF is not set -+# CONFIG_LOGIRUMBLEPAD2_FF is not set -+# CONFIG_LOGIG940_FF is not set -+# CONFIG_LOGIWII_FF is not set ++CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m -+# CONFIG_HID_MULTITOUCH is not set -+# CONFIG_HID_NTRIG is not set ++CONFIG_HID_MULTITOUCH=m ++CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m -+# CONFIG_PANTHERLORD_FF is not set +CONFIG_HID_PETALYNX=m -+# CONFIG_HID_PICOLCD is not set -+# CONFIG_HID_QUANTA is not set -+# CONFIG_HID_ROCCAT is not set ++CONFIG_HID_PICOLCD=m ++CONFIG_HID_QUANTA=m ++CONFIG_HID_ROCCAT=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m -+# CONFIG_HID_SPEEDLINK is not set ++CONFIG_HID_SPEEDLINK=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_GREENASIA=m -+# CONFIG_GREENASIA_FF is not set +CONFIG_HID_SMARTJOYPLUS=m -+# CONFIG_SMARTJOYPLUS_FF is not set +CONFIG_HID_TOPSEED=m +CONFIG_HID_THRUSTMASTER=m -+# CONFIG_THRUSTMASTER_FF is not set ++CONFIG_HID_WACOM=m ++CONFIG_HID_WIIMOTE=m +CONFIG_HID_ZEROPLUS=m -+# CONFIG_ZEROPLUS_FF is not set -+# CONFIG_HID_ZYDACRON 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 is not set ++CONFIG_HID_ZYDACRON=m +CONFIG_USB=y -+# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -+ -+# -+# Miscellaneous USB options -+# -+# CONFIG_USB_DEVICEFS is not set -+CONFIG_USB_DEVICE_CLASS=y -+# CONFIG_USB_DYNAMIC_MINORS is not set -+# CONFIG_USB_OTG_WHITELIST is not set -+# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=m -+# 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_OXU210HP_HCD is not set -+# CONFIG_USB_ISP116X_HCD is not set -+# CONFIG_USB_ISP1760_HCD is not set -+# CONFIG_USB_ISP1362_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 +CONFIG_USB_DWCOTG=y -+ -+# -+# 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 info -+# +CONFIG_USB_STORAGE=y -+# CONFIG_USB_STORAGE_DEBUG is not set -+# CONFIG_USB_STORAGE_REALTEK 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_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_STORAGE_ENE_UB6250 is not set -+# CONFIG_USB_UAS is not set ++CONFIG_USB_STORAGE_REALTEK=m ++CONFIG_USB_STORAGE_DATAFAB=m ++CONFIG_USB_STORAGE_FREECOM=m ++CONFIG_USB_STORAGE_ISD200=m ++CONFIG_USB_STORAGE_USBAT=m ++CONFIG_USB_STORAGE_SDDR09=m ++CONFIG_USB_STORAGE_SDDR55=m ++CONFIG_USB_STORAGE_JUMPSHOT=m ++CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m ++CONFIG_USB_STORAGE_ENE_UB6250=m ++CONFIG_USB_UAS=m +CONFIG_USB_LIBUSUAL=y -+ -+# -+# 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_LED is not set -+# CONFIG_USB_CYPRESS_CY7C63 is not set -+# CONFIG_USB_CYTHERM 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_YUREX is not set -+# CONFIG_USB_GADGET is not set -+ -+# -+# OTG and related infrastructure -+# -+# CONFIG_USB_GPIO_VBUS is not set -+# CONFIG_USB_ULPI is not set -+# CONFIG_NOP_USB_XCEIV is not set ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m ++CONFIG_USB_SERIAL=m ++CONFIG_USB_SERIAL_GENERIC=y ++CONFIG_USB_SERIAL_AIRCABLE=m ++CONFIG_USB_SERIAL_ARK3116=m ++CONFIG_USB_SERIAL_BELKIN=m ++CONFIG_USB_SERIAL_CH341=m ++CONFIG_USB_SERIAL_WHITEHEAT=m ++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m ++CONFIG_USB_SERIAL_CP210X=m ++CONFIG_USB_SERIAL_CYPRESS_M8=m ++CONFIG_USB_SERIAL_EMPEG=m ++CONFIG_USB_SERIAL_FTDI_SIO=m ++CONFIG_USB_SERIAL_FUNSOFT=m ++CONFIG_USB_SERIAL_VISOR=m ++CONFIG_USB_SERIAL_IPAQ=m ++CONFIG_USB_SERIAL_IR=m ++CONFIG_USB_SERIAL_EDGEPORT=m ++CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_GARMIN=m ++CONFIG_USB_SERIAL_IPW=m ++CONFIG_USB_SERIAL_IUU=m ++CONFIG_USB_SERIAL_KEYSPAN_PDA=m ++CONFIG_USB_SERIAL_KEYSPAN=m ++CONFIG_USB_SERIAL_KLSI=m ++CONFIG_USB_SERIAL_KOBIL_SCT=m ++CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_MOS7720=m ++CONFIG_USB_SERIAL_MOS7840=m ++CONFIG_USB_SERIAL_MOTOROLA=m ++CONFIG_USB_SERIAL_NAVMAN=m ++CONFIG_USB_SERIAL_PL2303=m ++CONFIG_USB_SERIAL_OTI6858=m ++CONFIG_USB_SERIAL_QCAUX=m ++CONFIG_USB_SERIAL_QUALCOMM=m ++CONFIG_USB_SERIAL_SPCP8X5=m ++CONFIG_USB_SERIAL_HP4X=m ++CONFIG_USB_SERIAL_SAFE=m ++CONFIG_USB_SERIAL_SIEMENS_MPI=m ++CONFIG_USB_SERIAL_SIERRAWIRELESS=m ++CONFIG_USB_SERIAL_SYMBOL=m ++CONFIG_USB_SERIAL_TI=m ++CONFIG_USB_SERIAL_CYBERJACK=m ++CONFIG_USB_SERIAL_XIRCOM=m ++CONFIG_USB_SERIAL_OPTION=m ++CONFIG_USB_SERIAL_OMNINET=m ++CONFIG_USB_SERIAL_OPTICON=m ++CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m ++CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_SERIAL_DEBUG=m ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++CONFIG_USB_ADUTUX=m ++CONFIG_USB_SEVSEG=m ++CONFIG_USB_RIO500=m ++CONFIG_USB_LEGOTOWER=m ++CONFIG_USB_LCD=m ++CONFIG_USB_LED=m ++CONFIG_USB_CYPRESS_CY7C63=m ++CONFIG_USB_CYTHERM=m ++CONFIG_USB_IDMOUSE=m ++CONFIG_USB_FTDI_ELAN=m ++CONFIG_USB_APPLEDISPLAY=m ++CONFIG_USB_LD=m ++CONFIG_USB_TRANCEVIBRATOR=m ++CONFIG_USB_IOWARRIOR=m ++CONFIG_USB_TEST=m ++CONFIG_USB_ISIGHTFW=m ++CONFIG_USB_YUREX=m +CONFIG_MMC=y -+# CONFIG_MMC_DEBUG is not set -+# CONFIG_MMC_UNSAFE_RESUME is not set -+# CONFIG_MMC_CLKGATE is not set -+ -+# -+# MMC/SD/SDIO Card Drivers -+# -+CONFIG_MMC_BLOCK=y -+CONFIG_MMC_BLOCK_MINORS=8 -+CONFIG_MMC_BLOCK_BOUNCE=y -+# CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set -+ -+# -+# MMC/SD/SDIO Host Controller Drivers -+# -+# CONFIG_MMC_ARMMMCI is not set +CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_PLTFM=y -+# CONFIG_MMC_SDHCI_PXAV3 is not set -+# CONFIG_MMC_SDHCI_PXAV2 is not set +CONFIG_MMC_SDHCI_BCM2708=y +CONFIG_MMC_SDHCI_BCM2708_DMA=y -+# CONFIG_MMC_BCM2708 is not set -+# CONFIG_MMC_DW is not set -+# CONFIG_MMC_VUB300 is not set -+# CONFIG_MMC_USHC is not set -+# CONFIG_MEMSTICK is not set -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=y -+ -+# -+# LED drivers -+# +CONFIG_LEDS_GPIO=y -+# CONFIG_LEDS_LT3593 is not set -+CONFIG_LEDS_TRIGGERS=y -+ -+# -+# LED Triggers -+# +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m -+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -+# CONFIG_LEDS_TRIGGER_GPIO is not set +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -+ -+# -+# iptables trigger is under Netfilter config (LED target) -+# -+# CONFIG_ACCESSIBILITY is not set -+CONFIG_RTC_LIB=y -+# CONFIG_RTC_CLASS is not set -+# CONFIG_DMADEVICES is not set -+# CONFIG_AUXDISPLAY is not set -+# CONFIG_UIO is not set -+ -+# -+# Virtio drivers -+# -+# CONFIG_VIRTIO_BALLOON is not set -+# CONFIG_STAGING is not set -+CONFIG_CLKDEV_LOOKUP=y ++CONFIG_UIO=m ++CONFIG_UIO_PDRV=m ++CONFIG_UIO_PDRV_GENIRQ=m +# CONFIG_IOMMU_SUPPORT is not set -+# CONFIG_VIRT_DRIVERS is not set -+ -+# -+# File systems -+# -+CONFIG_EXT2_FS=m -+CONFIG_EXT2_FS_XATTR=y -+CONFIG_EXT2_FS_POSIX_ACL=y -+CONFIG_EXT2_FS_SECURITY=y -+CONFIG_EXT2_FS_XIP=y -+CONFIG_EXT3_FS=y -+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set -+CONFIG_EXT3_FS_XATTR=y -+CONFIG_EXT3_FS_POSIX_ACL=y -+CONFIG_EXT3_FS_SECURITY=y -+CONFIG_EXT4_FS=m -+CONFIG_EXT4_FS_XATTR=y ++CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y -+# CONFIG_EXT4_DEBUG is not set -+CONFIG_FS_XIP=y -+CONFIG_JBD=y -+CONFIG_JBD2=m -+CONFIG_FS_MBCACHE=y -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+# CONFIG_XFS_FS is not set -+# CONFIG_GFS2_FS is not set -+# CONFIG_OCFS2_FS is not set -+# CONFIG_BTRFS_FS is not set -+# CONFIG_NILFS2_FS is not set -+CONFIG_FS_POSIX_ACL=y -+CONFIG_FILE_LOCKING=y -+CONFIG_FSNOTIFY=y -+CONFIG_DNOTIFY=y -+CONFIG_INOTIFY_USER=y -+# CONFIG_FANOTIFY is not set -+# CONFIG_QUOTA is not set -+# CONFIG_QUOTACTL is not set ++CONFIG_REISERFS_FS=m ++CONFIG_REISERFS_FS_XATTR=y ++CONFIG_REISERFS_FS_POSIX_ACL=y ++CONFIG_REISERFS_FS_SECURITY=y ++CONFIG_JFS_FS=m ++CONFIG_JFS_POSIX_ACL=y ++CONFIG_JFS_SECURITY=y ++CONFIG_XFS_FS=m ++CONFIG_XFS_QUOTA=y ++CONFIG_XFS_POSIX_ACL=y ++CONFIG_XFS_RT=y ++CONFIG_GFS2_FS=m ++CONFIG_OCFS2_FS=m ++CONFIG_BTRFS_FS=m ++CONFIG_BTRFS_FS_POSIX_ACL=y ++CONFIG_NILFS2_FS=m +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=m +CONFIG_CUSE=m -+ -+# -+# Caches -+# +CONFIG_FSCACHE=y -+# CONFIG_FSCACHE_STATS is not set -+# CONFIG_FSCACHE_HISTOGRAM is not set -+# CONFIG_FSCACHE_DEBUG is not set -+# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=y -+# CONFIG_CACHEFILES_DEBUG is not set -+# CONFIG_CACHEFILES_HISTOGRAM is not set -+ -+# -+# CD-ROM/DVD Filesystems -+# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m -+CONFIG_UDF_NLS=y -+ -+# -+# 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="ascii" +CONFIG_NTFS_FS=m -+# CONFIG_NTFS_DEBUG is not set -+# CONFIG_NTFS_RW is not set -+ -+# -+# 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 is not set -+# CONFIG_TMPFS_XATTR is not set -+# CONFIG_HUGETLB_PAGE is not set ++CONFIG_TMPFS_POSIX_ACL=y +CONFIG_CONFIGFS_FS=y -+CONFIG_MISC_FILESYSTEMS=y -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_ECRYPT_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_LOGFS is not set -+# CONFIG_CRAMFS is not set -+# CONFIG_SQUASHFS 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_PSTORE is not set -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set -+CONFIG_NETWORK_FILESYSTEMS=y ++CONFIG_SQUASHFS=m ++CONFIG_SQUASHFS_XATTR=y ++CONFIG_SQUASHFS_LZO=y ++CONFIG_SQUASHFS_XZ=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y -+# CONFIG_NFS_V4_1 is not set +CONFIG_ROOT_NFS=y +CONFIG_NFS_FSCACHE=y -+# CONFIG_NFS_USE_LEGACY_DNS is not set -+CONFIG_NFS_USE_KERNEL_DNS=y -+# CONFIG_NFS_USE_NEW_IDMAPPER is not set -+# CONFIG_NFSD is not set -+CONFIG_LOCKD=y -+CONFIG_LOCKD_V4=y -+CONFIG_NFS_ACL_SUPPORT=y -+CONFIG_NFS_COMMON=y -+CONFIG_SUNRPC=y -+CONFIG_SUNRPC_GSS=y -+# CONFIG_CEPH_FS is not set +CONFIG_CIFS=m -+# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y -+# CONFIG_CIFS_UPCALL is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y -+# CONFIG_CIFS_DEBUG2 is not set -+# CONFIG_CIFS_DFS_UPCALL is not set -+# CONFIG_CIFS_FSCACHE is not set -+# CONFIG_CIFS_ACL is not set -+# CONFIG_NCP_FS is not set -+# CONFIG_CODA_FS is not set -+# CONFIG_AFS_FS is not set -+ -+# -+# Partition Types -+# ++CONFIG_9P_FS=m +CONFIG_PARTITION_ADVANCED=y -+# CONFIG_ACORN_PARTITION is not set -+# CONFIG_OSF_PARTITION is not set -+# CONFIG_AMIGA_PARTITION is not set -+# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y -+CONFIG_MSDOS_PARTITION=y -+# CONFIG_BSD_DISKLABEL is not set -+# CONFIG_MINIX_SUBPARTITION is not set -+# CONFIG_SOLARIS_X86_PARTITION is not set -+# CONFIG_UNIXWARE_DISKLABEL is not set -+# CONFIG_LDM_PARTITION is not set -+# CONFIG_SGI_PARTITION is not set -+# CONFIG_ULTRIX_PARTITION is not set -+# CONFIG_SUN_PARTITION is not set -+# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y -+# CONFIG_SYSV68_PARTITION is not set -+CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m @@ -47192,232 +45797,1095 @@ index 0000000..4862854 +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m -+# CONFIG_DLM is not set -+ -+# -+# Kernel hacking -+# -+# CONFIG_PRINTK_TIME is not set -+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 -+CONFIG_ENABLE_WARN_DEPRECATED=y -+CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 -+# CONFIG_MAGIC_SYSRQ is not set -+# CONFIG_STRIP_ASM_SYMS is not set -+# CONFIG_UNUSED_SYMBOLS is not set -+# CONFIG_DEBUG_FS is not set -+# CONFIG_HEADERS_CHECK is not set -+# CONFIG_DEBUG_SECTION_MISMATCH is not set -+CONFIG_DEBUG_KERNEL=y -+# CONFIG_DEBUG_SHIRQ is not set -+# CONFIG_LOCKUP_DETECTOR is not set -+# CONFIG_HARDLOCKUP_DETECTOR is not set -+# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_SCHED_DEBUG is not set -+# CONFIG_SCHEDSTATS is not set -+# CONFIG_TIMER_STATS is not set -+# CONFIG_DEBUG_OBJECTS is not set -+# CONFIG_DEBUG_SLAB is not set -+# CONFIG_DEBUG_KMEMLEAK is not set -+# CONFIG_DEBUG_RT_MUTEXES is not set -+# CONFIG_RT_MUTEX_TESTER is not set -+# CONFIG_DEBUG_SPINLOCK is not set -+# CONFIG_DEBUG_MUTEXES is not set -+# CONFIG_DEBUG_LOCK_ALLOC is not set -+# CONFIG_PROVE_LOCKING is not set -+# CONFIG_SPARSE_RCU_POINTER is not set -+# CONFIG_LOCK_STAT is not set -+# CONFIG_DEBUG_ATOMIC_SLEEP is not set -+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -+# CONFIG_DEBUG_STACK_USAGE is not set -+# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set -+# CONFIG_DEBUG_INFO is not set -+# CONFIG_DEBUG_VM is not set -+# CONFIG_DEBUG_WRITECOUNT is not set -+# CONFIG_DEBUG_MEMORY_INIT is not set -+# CONFIG_DEBUG_LIST is not set -+# CONFIG_TEST_LIST_SORT is not set -+# CONFIG_DEBUG_SG is not set -+# CONFIG_DEBUG_NOTIFIERS is not set -+# CONFIG_DEBUG_CREDENTIALS is not set -+CONFIG_FRAME_POINTER=y -+# CONFIG_BOOT_PRINTK_DELAY is not set -+# CONFIG_RCU_TORTURE_TEST is not set -+# CONFIG_BACKTRACE_SELF_TEST is not set -+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -+# CONFIG_FAULT_INJECTION is not set -+# CONFIG_LATENCYTOP is not set -+# CONFIG_SYSCTL_SYSCALL_CHECK is not set -+# CONFIG_DEBUG_PAGEALLOC is not set -+CONFIG_HAVE_FUNCTION_TRACER=y -+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -+CONFIG_HAVE_DYNAMIC_FTRACE=y -+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -+CONFIG_HAVE_C_RECORDMCOUNT=y -+CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set -+# CONFIG_DMA_API_DEBUG is not set -+# CONFIG_ATOMIC64_SELFTEST is not set -+# CONFIG_SAMPLES is not set -+CONFIG_HAVE_ARCH_KGDB=y -+# CONFIG_KGDB is not set -+# CONFIG_TEST_KSTRTOX is not set -+# CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_UNWIND is not set -+# CONFIG_DEBUG_USER is not set -+# CONFIG_DEBUG_LL is not set -+# CONFIG_OC_ETM is not set -+ -+# -+# Security options -+# -+CONFIG_KEYS=y -+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set -+# CONFIG_SECURITY_DMESG_RESTRICT is not set -+# CONFIG_SECURITY is not set -+# CONFIG_SECURITYFS is not set -+CONFIG_DEFAULT_SECURITY_DAC=y -+CONFIG_DEFAULT_SECURITY="" -+CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# -+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_RNG=m -+CONFIG_CRYPTO_RNG2=y -+CONFIG_CRYPTO_PCOMP2=y -+CONFIG_CRYPTO_MANAGER=y -+CONFIG_CRYPTO_MANAGER2=y -+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -+# CONFIG_CRYPTO_GF128MUL is not set -+# CONFIG_CRYPTO_NULL is not set -+CONFIG_CRYPTO_WORKQUEUE=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=m -+ -+# -+# Block modes -+# +CONFIG_CRYPTO_CBC=y -+# CONFIG_CRYPTO_CTR is not set -+# CONFIG_CRYPTO_CTS is not set -+CONFIG_CRYPTO_ECB=m -+# 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=m -+# CONFIG_CRYPTO_VMAC is not set -+ -+# -+# Digest -+# -+CONFIG_CRYPTO_CRC32C=y -+# CONFIG_CRYPTO_GHASH is not set -+CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y -+CONFIG_CRYPTO_MICHAEL_MIC=m -+# 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=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_WP512=m -+ -+# -+# Ciphers -+# -+# CONFIG_CRYPTO_AES is not set -+# CONFIG_CRYPTO_ANUBIS is not set -+CONFIG_CRYPTO_ARC4=m -+# CONFIG_CRYPTO_BLOWFISH is not set -+# CONFIG_CRYPTO_CAMELLIA is not set +CONFIG_CRYPTO_CAST5=m -+# 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_ZLIB is not set -+# CONFIG_CRYPTO_LZO is not set -+ -+# -+# Random Number Generation -+# +# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_USER_API_HASH is not set -+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +# CONFIG_CRYPTO_HW is not set -+# CONFIG_BINARY_PRINTF is not set -+ -+# -+# Library routines -+# -+CONFIG_BITREVERSE=y -+CONFIG_CRC_CCITT=m -+CONFIG_CRC16=y -+# CONFIG_CRC_T10DIF is not set +CONFIG_CRC_ITU_T=y -+CONFIG_CRC32=y -+# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y -+# CONFIG_CRC8 is not set -+CONFIG_ZLIB_INFLATE=m -+CONFIG_ZLIB_DEFLATE=m -+# CONFIG_XZ_DEC is not set -+# CONFIG_XZ_DEC_BCJ is not set -+CONFIG_HAS_IOMEM=y -+CONFIG_HAS_IOPORT=y -+CONFIG_HAS_DMA=y -+CONFIG_NLATTR=y -+CONFIG_GENERIC_ATOMIC64=y -+# CONFIG_AVERAGE is not set -+# CONFIG_CORDIC is not set +diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig +new file mode 100644 +index 0000000..339aabf +--- /dev/null ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -0,0 +1,510 @@ ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_FHANDLE=y ++CONFIG_AUDIT=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_CGROUP_FREEZER=y ++CONFIG_CGROUP_DEVICE=y ++CONFIG_CGROUP_CPUACCT=y ++CONFIG_RESOURCE_COUNTERS=y ++CONFIG_BLK_CGROUP=y ++CONFIG_NAMESPACES=y ++CONFIG_SCHED_AUTOGROUP=y ++CONFIG_EMBEDDED=y ++# CONFIG_COMPAT_BRK is not set ++CONFIG_SLAB=y ++CONFIG_PROFILING=y ++CONFIG_OPROFILE=m ++CONFIG_KPROBES=y ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++CONFIG_MODVERSIONS=y ++CONFIG_MODULE_SRCVERSION_ALL=y ++# CONFIG_BLK_DEV_BSG is not set ++CONFIG_BLK_DEV_THROTTLING=y ++CONFIG_CFQ_GROUP_IOSCHED=y ++CONFIG_ARCH_BCM2708=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_AEABI=y ++CONFIG_SECCOMP=y ++CONFIG_CC_STACKPROTECTOR=y ++CONFIG_ZBOOT_ROM_TEXT=0x0 ++CONFIG_ZBOOT_ROM_BSS=0x0 ++CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" ++CONFIG_KEXEC=y ++CONFIG_CPU_IDLE=y ++CONFIG_VFP=y ++CONFIG_BINFMT_MISC=m ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_XFRM_USER=y ++CONFIG_NET_KEY=m ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_RARP=y ++CONFIG_SYN_COOKIES=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++CONFIG_NET_PKTGEN=m ++CONFIG_IRDA=m ++CONFIG_IRLAN=m ++CONFIG_IRCOMM=m ++CONFIG_IRDA_ULTRA=y ++CONFIG_IRDA_CACHE_LAST_LSAP=y ++CONFIG_IRDA_FAST_RR=y ++CONFIG_IRTTY_SIR=m ++CONFIG_KINGSUN_DONGLE=m ++CONFIG_KSDAZZLE_DONGLE=m ++CONFIG_KS959_DONGLE=m ++CONFIG_USB_IRDA=m ++CONFIG_SIGMATEL_FIR=m ++CONFIG_MCS_FIR=m ++CONFIG_BT=m ++CONFIG_BT_L2CAP=y ++CONFIG_BT_SCO=y ++CONFIG_BT_RFCOMM=m ++CONFIG_BT_RFCOMM_TTY=y ++CONFIG_BT_BNEP=m ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++CONFIG_BT_HIDP=m ++CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBCM203X=m ++CONFIG_BT_HCIBPA10X=m ++CONFIG_BT_HCIBFUSB=m ++CONFIG_BT_HCIVHCI=m ++CONFIG_BT_MRVL=m ++CONFIG_BT_MRVL_SDIO=m ++CONFIG_BT_ATH3K=m ++CONFIG_CFG80211=m ++CONFIG_MAC80211=m ++CONFIG_MAC80211_RC_PID=y ++CONFIG_MAC80211_MESH=y ++CONFIG_WIMAX=m ++CONFIG_NET_9P=m ++CONFIG_NFC=m ++CONFIG_NFC_PN533=m ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++CONFIG_BLK_DEV_NBD=m ++CONFIG_BLK_DEV_RAM=y ++CONFIG_CDROM_PKTCDVD=m ++CONFIG_MISC_DEVICES=y ++CONFIG_SCSI=y ++# CONFIG_SCSI_PROC_FS is not set ++CONFIG_BLK_DEV_SD=m ++CONFIG_BLK_DEV_SR=m ++CONFIG_SCSI_MULTI_LUN=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_MD=y ++CONFIG_NETDEVICES=y ++CONFIG_TUN=m ++CONFIG_PHYLIB=m ++CONFIG_MDIO_BITBANG=m ++CONFIG_NET_ETHERNET=y ++# CONFIG_NETDEV_1000 is not set ++# CONFIG_NETDEV_10000 is not set ++CONFIG_LIBERTAS_THINFIRM=m ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_AT76C50X_USB=m ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8187=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_ATH_COMMON=m ++CONFIG_ATH9K=m ++CONFIG_ATH9K_HTC=m ++CONFIG_CARL9170=m ++CONFIG_B43=m ++CONFIG_B43LEGACY=m ++CONFIG_HOSTAP=m ++CONFIG_IWM=m ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_SDIO=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RTL8192CU=m ++CONFIG_WL1251=m ++CONFIG_WL12XX_MENU=m ++CONFIG_ZD1211RW=m ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_WIMAX_I2400M_USB=m ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m ++CONFIG_USB_USBNET=y ++CONFIG_USB_NET_AX8817X=m ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_DM9601=m ++CONFIG_USB_NET_SMSC75XX=m ++CONFIG_USB_NET_SMSC95XX=y ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_NET1080=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_NET_CDC_SUBSET=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_KC2190=y ++# CONFIG_USB_NET_ZAURUS is not set ++CONFIG_USB_NET_CX82310_ETH=m ++CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_USB_VL600=m ++CONFIG_PPP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_NETCONSOLE=m ++CONFIG_INPUT_POLLDEV=m ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_JOYDEV=m ++CONFIG_INPUT_EVDEV=m ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++CONFIG_INPUT_MISC=y ++CONFIG_INPUT_AD714X=m ++CONFIG_INPUT_ATI_REMOTE=m ++CONFIG_INPUT_ATI_REMOTE2=m ++CONFIG_INPUT_KEYSPAN_REMOTE=m ++CONFIG_INPUT_POWERMATE=m ++CONFIG_INPUT_YEALINK=m ++CONFIG_INPUT_CM109=m ++CONFIG_INPUT_UINPUT=m ++CONFIG_INPUT_GPIO_ROTARY_ENCODER=m ++CONFIG_INPUT_ADXL34X=m ++CONFIG_INPUT_CMA3000=m ++CONFIG_SERIO=m ++CONFIG_SERIO_RAW=m ++CONFIG_GAMEPORT=m ++CONFIG_GAMEPORT_NS558=m ++CONFIG_GAMEPORT_L4=m ++CONFIG_VT_HW_CONSOLE_BINDING=y ++# CONFIG_LEGACY_PTYS is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_AMBA_PL011=y ++CONFIG_SERIAL_AMBA_PL011_CONSOLE=y ++# CONFIG_HW_RANDOM is not set ++CONFIG_RAW_DRIVER=y ++CONFIG_GPIO_SYSFS=y ++# CONFIG_HWMON is not set ++CONFIG_WATCHDOG=y ++CONFIG_BCM2708_WDT=m ++# CONFIG_MFD_SUPPORT is not set ++CONFIG_FB=y ++CONFIG_FB_BCM2708=y ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_LOGO=y ++# CONFIG_LOGO_LINUX_MONO is not set ++# CONFIG_LOGO_LINUX_VGA16 is not set ++CONFIG_HID_PID=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_A4TECH=m ++CONFIG_HID_ACRUX=m ++CONFIG_HID_APPLE=m ++CONFIG_HID_BELKIN=m ++CONFIG_HID_CHERRY=m ++CONFIG_HID_CHICONY=m ++CONFIG_HID_CYPRESS=m ++CONFIG_HID_DRAGONRISE=m ++CONFIG_HID_EMS_FF=m ++CONFIG_HID_ELECOM=m ++CONFIG_HID_EZKEY=m ++CONFIG_HID_HOLTEK=m ++CONFIG_HID_KEYTOUCH=m ++CONFIG_HID_KYE=m ++CONFIG_HID_UCLOGIC=m ++CONFIG_HID_WALTOP=m ++CONFIG_HID_GYRATION=m ++CONFIG_HID_TWINHAN=m ++CONFIG_HID_KENSINGTON=m ++CONFIG_HID_LCPOWER=m ++CONFIG_HID_LOGITECH=m ++CONFIG_HID_MAGICMOUSE=m ++CONFIG_HID_MICROSOFT=m ++CONFIG_HID_MONTEREY=m ++CONFIG_HID_MULTITOUCH=m ++CONFIG_HID_NTRIG=m ++CONFIG_HID_ORTEK=m ++CONFIG_HID_PANTHERLORD=m ++CONFIG_HID_PETALYNX=m ++CONFIG_HID_PICOLCD=m ++CONFIG_HID_QUANTA=m ++CONFIG_HID_ROCCAT=m ++CONFIG_HID_SAMSUNG=m ++CONFIG_HID_SONY=m ++CONFIG_HID_SPEEDLINK=m ++CONFIG_HID_SUNPLUS=m ++CONFIG_HID_GREENASIA=m ++CONFIG_HID_SMARTJOYPLUS=m ++CONFIG_HID_TOPSEED=m ++CONFIG_HID_THRUSTMASTER=m ++CONFIG_HID_WACOM=m ++CONFIG_HID_WIIMOTE=m ++CONFIG_HID_ZEROPLUS=m ++CONFIG_HID_ZYDACRON=m ++CONFIG_USB=y ++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y ++CONFIG_USB_MON=m ++CONFIG_USB_DWCOTG=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_STORAGE_REALTEK=m ++CONFIG_USB_STORAGE_DATAFAB=m ++CONFIG_USB_STORAGE_FREECOM=m ++CONFIG_USB_STORAGE_ISD200=m ++CONFIG_USB_STORAGE_USBAT=m ++CONFIG_USB_STORAGE_SDDR09=m ++CONFIG_USB_STORAGE_SDDR55=m ++CONFIG_USB_STORAGE_JUMPSHOT=m ++CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m ++CONFIG_USB_STORAGE_ENE_UB6250=m ++CONFIG_USB_UAS=m ++CONFIG_USB_LIBUSUAL=y ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m ++CONFIG_USB_SERIAL=m ++CONFIG_USB_SERIAL_GENERIC=y ++CONFIG_USB_SERIAL_AIRCABLE=m ++CONFIG_USB_SERIAL_ARK3116=m ++CONFIG_USB_SERIAL_BELKIN=m ++CONFIG_USB_SERIAL_CH341=m ++CONFIG_USB_SERIAL_WHITEHEAT=m ++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m ++CONFIG_USB_SERIAL_CP210X=m ++CONFIG_USB_SERIAL_CYPRESS_M8=m ++CONFIG_USB_SERIAL_EMPEG=m ++CONFIG_USB_SERIAL_FTDI_SIO=m ++CONFIG_USB_SERIAL_FUNSOFT=m ++CONFIG_USB_SERIAL_VISOR=m ++CONFIG_USB_SERIAL_IPAQ=m ++CONFIG_USB_SERIAL_IR=m ++CONFIG_USB_SERIAL_EDGEPORT=m ++CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_GARMIN=m ++CONFIG_USB_SERIAL_IPW=m ++CONFIG_USB_SERIAL_IUU=m ++CONFIG_USB_SERIAL_KEYSPAN_PDA=m ++CONFIG_USB_SERIAL_KEYSPAN=m ++CONFIG_USB_SERIAL_KLSI=m ++CONFIG_USB_SERIAL_KOBIL_SCT=m ++CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_MOS7720=m ++CONFIG_USB_SERIAL_MOS7840=m ++CONFIG_USB_SERIAL_MOTOROLA=m ++CONFIG_USB_SERIAL_NAVMAN=m ++CONFIG_USB_SERIAL_PL2303=m ++CONFIG_USB_SERIAL_OTI6858=m ++CONFIG_USB_SERIAL_QCAUX=m ++CONFIG_USB_SERIAL_QUALCOMM=m ++CONFIG_USB_SERIAL_SPCP8X5=m ++CONFIG_USB_SERIAL_HP4X=m ++CONFIG_USB_SERIAL_SAFE=m ++CONFIG_USB_SERIAL_SIEMENS_MPI=m ++CONFIG_USB_SERIAL_SIERRAWIRELESS=m ++CONFIG_USB_SERIAL_SYMBOL=m ++CONFIG_USB_SERIAL_TI=m ++CONFIG_USB_SERIAL_CYBERJACK=m ++CONFIG_USB_SERIAL_XIRCOM=m ++CONFIG_USB_SERIAL_OPTION=m ++CONFIG_USB_SERIAL_OMNINET=m ++CONFIG_USB_SERIAL_OPTICON=m ++CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m ++CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_SERIAL_DEBUG=m ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++CONFIG_USB_ADUTUX=m ++CONFIG_USB_SEVSEG=m ++CONFIG_USB_RIO500=m ++CONFIG_USB_LEGOTOWER=m ++CONFIG_USB_LCD=m ++CONFIG_USB_LED=m ++CONFIG_USB_CYPRESS_CY7C63=m ++CONFIG_USB_CYTHERM=m ++CONFIG_USB_IDMOUSE=m ++CONFIG_USB_FTDI_ELAN=m ++CONFIG_USB_APPLEDISPLAY=m ++CONFIG_USB_LD=m ++CONFIG_USB_TRANCEVIBRATOR=m ++CONFIG_USB_IOWARRIOR=m ++CONFIG_USB_TEST=m ++CONFIG_USB_ISIGHTFW=m ++CONFIG_USB_YUREX=m ++CONFIG_MMC=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_PLTFM=y ++CONFIG_MMC_SDHCI_BCM2708=y ++CONFIG_MMC_SDHCI_BCM2708_DMA=y ++CONFIG_LEDS_GPIO=y ++CONFIG_LEDS_TRIGGER_TIMER=m ++CONFIG_LEDS_TRIGGER_HEARTBEAT=m ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=m ++CONFIG_UIO=m ++CONFIG_UIO_PDRV=m ++CONFIG_UIO_PDRV_GENIRQ=m ++# CONFIG_IOMMU_SUPPORT is not set ++CONFIG_EXT4_FS=y ++CONFIG_EXT4_FS_POSIX_ACL=y ++CONFIG_EXT4_FS_SECURITY=y ++CONFIG_REISERFS_FS=m ++CONFIG_REISERFS_FS_XATTR=y ++CONFIG_REISERFS_FS_POSIX_ACL=y ++CONFIG_REISERFS_FS_SECURITY=y ++CONFIG_JFS_FS=m ++CONFIG_JFS_POSIX_ACL=y ++CONFIG_JFS_SECURITY=y ++CONFIG_JFS_STATISTICS=y ++CONFIG_XFS_FS=m ++CONFIG_XFS_QUOTA=y ++CONFIG_XFS_POSIX_ACL=y ++CONFIG_XFS_RT=y ++CONFIG_GFS2_FS=m ++CONFIG_OCFS2_FS=m ++CONFIG_BTRFS_FS=m ++CONFIG_BTRFS_FS_POSIX_ACL=y ++CONFIG_NILFS2_FS=m ++CONFIG_FANOTIFY=y ++CONFIG_AUTOFS4_FS=y ++CONFIG_FUSE_FS=m ++CONFIG_CUSE=m ++CONFIG_FSCACHE=y ++CONFIG_FSCACHE_STATS=y ++CONFIG_FSCACHE_HISTOGRAM=y ++CONFIG_CACHEFILES=y ++CONFIG_ISO9660_FS=m ++CONFIG_JOLIET=y ++CONFIG_ZISOFS=y ++CONFIG_UDF_FS=m ++CONFIG_MSDOS_FS=y ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_IOCHARSET="ascii" ++CONFIG_NTFS_FS=m ++CONFIG_TMPFS=y ++CONFIG_TMPFS_POSIX_ACL=y ++CONFIG_CONFIGFS_FS=y ++CONFIG_SQUASHFS=m ++CONFIG_SQUASHFS_XATTR=y ++CONFIG_SQUASHFS_LZO=y ++CONFIG_SQUASHFS_XZ=y ++CONFIG_NFS_FS=y ++CONFIG_NFS_V3=y ++CONFIG_NFS_V3_ACL=y ++CONFIG_NFS_V4=y ++CONFIG_ROOT_NFS=y ++CONFIG_NFS_FSCACHE=y ++CONFIG_CIFS=m ++CONFIG_CIFS_WEAK_PW_HASH=y ++CONFIG_CIFS_XATTR=y ++CONFIG_CIFS_POSIX=y ++CONFIG_9P_FS=m ++CONFIG_9P_FS_POSIX_ACL=y ++CONFIG_PARTITION_ADVANCED=y ++CONFIG_MAC_PARTITION=y ++CONFIG_EFI_PARTITION=y ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_CODEPAGE_437=y ++CONFIG_NLS_CODEPAGE_737=m ++CONFIG_NLS_CODEPAGE_775=m ++CONFIG_NLS_CODEPAGE_850=m ++CONFIG_NLS_CODEPAGE_852=m ++CONFIG_NLS_CODEPAGE_855=m ++CONFIG_NLS_CODEPAGE_857=m ++CONFIG_NLS_CODEPAGE_860=m ++CONFIG_NLS_CODEPAGE_861=m ++CONFIG_NLS_CODEPAGE_862=m ++CONFIG_NLS_CODEPAGE_863=m ++CONFIG_NLS_CODEPAGE_864=m ++CONFIG_NLS_CODEPAGE_865=m ++CONFIG_NLS_CODEPAGE_866=m ++CONFIG_NLS_CODEPAGE_869=m ++CONFIG_NLS_CODEPAGE_936=m ++CONFIG_NLS_CODEPAGE_950=m ++CONFIG_NLS_CODEPAGE_932=m ++CONFIG_NLS_CODEPAGE_949=m ++CONFIG_NLS_CODEPAGE_874=m ++CONFIG_NLS_ISO8859_8=m ++CONFIG_NLS_CODEPAGE_1250=m ++CONFIG_NLS_CODEPAGE_1251=m ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_ISO8859_1=m ++CONFIG_NLS_ISO8859_2=m ++CONFIG_NLS_ISO8859_3=m ++CONFIG_NLS_ISO8859_4=m ++CONFIG_NLS_ISO8859_5=m ++CONFIG_NLS_ISO8859_6=m ++CONFIG_NLS_ISO8859_7=m ++CONFIG_NLS_ISO8859_9=m ++CONFIG_NLS_ISO8859_13=m ++CONFIG_NLS_ISO8859_14=m ++CONFIG_NLS_ISO8859_15=m ++CONFIG_NLS_KOI8_R=m ++CONFIG_NLS_KOI8_U=m ++CONFIG_NLS_UTF8=m ++CONFIG_PRINTK_TIME=y ++CONFIG_DETECT_HUNG_TASK=y ++CONFIG_TIMER_STATS=y ++CONFIG_DEBUG_STACK_USAGE=y ++CONFIG_DEBUG_INFO=y ++CONFIG_DEBUG_MEMORY_INIT=y ++CONFIG_BOOT_PRINTK_DELAY=y ++CONFIG_LATENCYTOP=y ++CONFIG_SYSCTL_SYSCALL_CHECK=y ++CONFIG_IRQSOFF_TRACER=y ++CONFIG_SCHED_TRACER=y ++CONFIG_STACK_TRACER=y ++CONFIG_BLK_DEV_IO_TRACE=y ++CONFIG_FUNCTION_PROFILER=y ++CONFIG_KGDB=y ++CONFIG_KGDB_KDB=y ++CONFIG_KDB_KEYBOARD=y ++CONFIG_STRICT_DEVMEM=y ++CONFIG_CRYPTO_AUTHENC=m ++CONFIG_CRYPTO_SEQIV=m ++CONFIG_CRYPTO_CBC=y ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_XCBC=m ++CONFIG_CRYPTO_MD5=y ++CONFIG_CRYPTO_SHA1=y ++CONFIG_CRYPTO_SHA256=m ++CONFIG_CRYPTO_SHA512=m ++CONFIG_CRYPTO_TGR192=m ++CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_CAST5=m ++CONFIG_CRYPTO_DES=y ++CONFIG_CRYPTO_DEFLATE=m ++# CONFIG_CRYPTO_ANSI_CPRNG is not set ++# CONFIG_CRYPTO_HW is not set ++CONFIG_CRC_ITU_T=y ++CONFIG_LIBCRC32C=y +diff --git a/arch/arm/configs/bcmrpi_emergency_defconfig b/arch/arm/configs/bcmrpi_emergency_defconfig +new file mode 100644 +index 0000000..3b40c49 +--- /dev/null ++++ b/arch/arm/configs/bcmrpi_emergency_defconfig +@@ -0,0 +1,532 @@ ++CONFIG_EXPERIMENTAL=y ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_FHANDLE=y ++CONFIG_AUDIT=y ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_BLK_DEV_INITRD=y ++CONFIG_INITRAMFS_SOURCE="../target_fs" ++CONFIG_CGROUP_FREEZER=y ++CONFIG_CGROUP_DEVICE=y ++CONFIG_CGROUP_CPUACCT=y ++CONFIG_RESOURCE_COUNTERS=y ++CONFIG_BLK_CGROUP=y ++CONFIG_NAMESPACES=y ++CONFIG_SCHED_AUTOGROUP=y ++CONFIG_EMBEDDED=y ++# CONFIG_COMPAT_BRK is not set ++CONFIG_SLAB=y ++CONFIG_PROFILING=y ++CONFIG_OPROFILE=m ++CONFIG_KPROBES=y ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++CONFIG_MODVERSIONS=y ++CONFIG_MODULE_SRCVERSION_ALL=y ++# CONFIG_BLK_DEV_BSG is not set ++CONFIG_BLK_DEV_THROTTLING=y ++CONFIG_CFQ_GROUP_IOSCHED=y ++CONFIG_ARCH_BCM2708=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_AEABI=y ++CONFIG_SECCOMP=y ++CONFIG_CC_STACKPROTECTOR=y ++CONFIG_ZBOOT_ROM_TEXT=0x0 ++CONFIG_ZBOOT_ROM_BSS=0x0 ++CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" ++CONFIG_KEXEC=y ++CONFIG_CPU_IDLE=y ++CONFIG_VFP=y ++CONFIG_BINFMT_MISC=m ++CONFIG_NET=y ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++CONFIG_XFRM_USER=y ++CONFIG_NET_KEY=m ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_RARP=y ++CONFIG_SYN_COOKIES=y ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_IPV6 is not set ++CONFIG_NET_PKTGEN=m ++CONFIG_IRDA=m ++CONFIG_IRLAN=m ++CONFIG_IRCOMM=m ++CONFIG_IRDA_ULTRA=y ++CONFIG_IRDA_CACHE_LAST_LSAP=y ++CONFIG_IRDA_FAST_RR=y ++CONFIG_IRTTY_SIR=m ++CONFIG_KINGSUN_DONGLE=m ++CONFIG_KSDAZZLE_DONGLE=m ++CONFIG_KS959_DONGLE=m ++CONFIG_USB_IRDA=m ++CONFIG_SIGMATEL_FIR=m ++CONFIG_MCS_FIR=m ++CONFIG_BT=m ++CONFIG_BT_L2CAP=y ++CONFIG_BT_SCO=y ++CONFIG_BT_RFCOMM=m ++CONFIG_BT_RFCOMM_TTY=y ++CONFIG_BT_BNEP=m ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++CONFIG_BT_HIDP=m ++CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBCM203X=m ++CONFIG_BT_HCIBPA10X=m ++CONFIG_BT_HCIBFUSB=m ++CONFIG_BT_HCIVHCI=m ++CONFIG_BT_MRVL=m ++CONFIG_BT_MRVL_SDIO=m ++CONFIG_BT_ATH3K=m ++CONFIG_CFG80211=m ++CONFIG_MAC80211=m ++CONFIG_MAC80211_RC_PID=y ++CONFIG_MAC80211_MESH=y ++CONFIG_WIMAX=m ++CONFIG_NET_9P=m ++CONFIG_NFC=m ++CONFIG_NFC_PN533=m ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++CONFIG_BLK_DEV_NBD=m ++CONFIG_BLK_DEV_RAM=y ++CONFIG_CDROM_PKTCDVD=m ++CONFIG_MISC_DEVICES=y ++CONFIG_SCSI=y ++# CONFIG_SCSI_PROC_FS is not set ++CONFIG_BLK_DEV_SD=y ++CONFIG_BLK_DEV_SR=m ++CONFIG_SCSI_MULTI_LUN=y ++# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_MD=y ++CONFIG_NETDEVICES=y ++CONFIG_TUN=m ++CONFIG_PHYLIB=m ++CONFIG_MDIO_BITBANG=m ++CONFIG_NET_ETHERNET=y ++# CONFIG_NETDEV_1000 is not set ++# CONFIG_NETDEV_10000 is not set ++CONFIG_LIBERTAS_THINFIRM=m ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_AT76C50X_USB=m ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8187=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_ATH_COMMON=m ++CONFIG_ATH9K=m ++CONFIG_ATH9K_HTC=m ++CONFIG_CARL9170=m ++CONFIG_B43=m ++CONFIG_B43LEGACY=m ++CONFIG_HOSTAP=m ++CONFIG_IWM=m ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_SDIO=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RTL8192CU=m ++CONFIG_WL1251=m ++CONFIG_WL12XX_MENU=m ++CONFIG_ZD1211RW=m ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_WIMAX_I2400M_USB=m ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m ++CONFIG_USB_USBNET=y ++CONFIG_USB_NET_AX8817X=m ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_DM9601=m ++CONFIG_USB_NET_SMSC75XX=m ++CONFIG_USB_NET_SMSC95XX=y ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_NET1080=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_NET_CDC_SUBSET=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_KC2190=y ++# CONFIG_USB_NET_ZAURUS is not set ++CONFIG_USB_NET_CX82310_ETH=m ++CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_USB_VL600=m ++CONFIG_PPP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_NETCONSOLE=m ++CONFIG_INPUT_POLLDEV=m ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_JOYDEV=m ++CONFIG_INPUT_EVDEV=m ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++CONFIG_INPUT_MISC=y ++CONFIG_INPUT_AD714X=m ++CONFIG_INPUT_ATI_REMOTE=m ++CONFIG_INPUT_ATI_REMOTE2=m ++CONFIG_INPUT_KEYSPAN_REMOTE=m ++CONFIG_INPUT_POWERMATE=m ++CONFIG_INPUT_YEALINK=m ++CONFIG_INPUT_CM109=m ++CONFIG_INPUT_UINPUT=m ++CONFIG_INPUT_GPIO_ROTARY_ENCODER=m ++CONFIG_INPUT_ADXL34X=m ++CONFIG_INPUT_CMA3000=m ++CONFIG_SERIO=m ++CONFIG_SERIO_RAW=m ++CONFIG_GAMEPORT=m ++CONFIG_GAMEPORT_NS558=m ++CONFIG_GAMEPORT_L4=m ++CONFIG_VT_HW_CONSOLE_BINDING=y ++# CONFIG_LEGACY_PTYS is not set ++# CONFIG_DEVKMEM is not set ++CONFIG_SERIAL_AMBA_PL011=y ++CONFIG_SERIAL_AMBA_PL011_CONSOLE=y ++# CONFIG_HW_RANDOM is not set ++CONFIG_RAW_DRIVER=y ++CONFIG_GPIO_SYSFS=y ++# CONFIG_HWMON is not set ++CONFIG_WATCHDOG=y ++CONFIG_BCM2708_WDT=m ++# CONFIG_MFD_SUPPORT is not set ++CONFIG_FB=y ++CONFIG_FB_BCM2708=y ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_LOGO=y ++# CONFIG_LOGO_LINUX_MONO is not set ++# CONFIG_LOGO_LINUX_VGA16 is not set ++CONFIG_SOUND=y ++CONFIG_SND=m ++CONFIG_SND_SEQUENCER=m ++CONFIG_SND_SEQ_DUMMY=m ++CONFIG_SND_MIXER_OSS=m ++CONFIG_SND_PCM_OSS=m ++CONFIG_SND_SEQUENCER_OSS=y ++CONFIG_SND_HRTIMER=m ++CONFIG_SND_DUMMY=m ++CONFIG_SND_ALOOP=m ++CONFIG_SND_VIRMIDI=m ++CONFIG_SND_MTPAV=m ++CONFIG_SND_SERIAL_U16550=m ++CONFIG_SND_MPU401=m ++CONFIG_SND_BCM2835=m ++CONFIG_SND_USB_AUDIO=m ++CONFIG_SND_USB_UA101=m ++CONFIG_SND_USB_CAIAQ=m ++CONFIG_SND_USB_6FIRE=m ++CONFIG_SOUND_PRIME=m ++CONFIG_HID_PID=y ++CONFIG_USB_HIDDEV=y ++CONFIG_HID_A4TECH=m ++CONFIG_HID_ACRUX=m ++CONFIG_HID_APPLE=m ++CONFIG_HID_BELKIN=m ++CONFIG_HID_CHERRY=m ++CONFIG_HID_CHICONY=m ++CONFIG_HID_CYPRESS=m ++CONFIG_HID_DRAGONRISE=m ++CONFIG_HID_EMS_FF=m ++CONFIG_HID_ELECOM=m ++CONFIG_HID_EZKEY=m ++CONFIG_HID_HOLTEK=m ++CONFIG_HID_KEYTOUCH=m ++CONFIG_HID_KYE=m ++CONFIG_HID_UCLOGIC=m ++CONFIG_HID_WALTOP=m ++CONFIG_HID_GYRATION=m ++CONFIG_HID_TWINHAN=m ++CONFIG_HID_KENSINGTON=m ++CONFIG_HID_LCPOWER=m ++CONFIG_HID_LOGITECH=m ++CONFIG_HID_MAGICMOUSE=m ++CONFIG_HID_MICROSOFT=m ++CONFIG_HID_MONTEREY=m ++CONFIG_HID_MULTITOUCH=m ++CONFIG_HID_NTRIG=m ++CONFIG_HID_ORTEK=m ++CONFIG_HID_PANTHERLORD=m ++CONFIG_HID_PETALYNX=m ++CONFIG_HID_PICOLCD=m ++CONFIG_HID_QUANTA=m ++CONFIG_HID_ROCCAT=m ++CONFIG_HID_SAMSUNG=m ++CONFIG_HID_SONY=m ++CONFIG_HID_SPEEDLINK=m ++CONFIG_HID_SUNPLUS=m ++CONFIG_HID_GREENASIA=m ++CONFIG_HID_SMARTJOYPLUS=m ++CONFIG_HID_TOPSEED=m ++CONFIG_HID_THRUSTMASTER=m ++CONFIG_HID_WACOM=m ++CONFIG_HID_WIIMOTE=m ++CONFIG_HID_ZEROPLUS=m ++CONFIG_HID_ZYDACRON=m ++CONFIG_USB=y ++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y ++CONFIG_USB_MON=m ++CONFIG_USB_DWCOTG=y ++CONFIG_USB_STORAGE=y ++CONFIG_USB_STORAGE_REALTEK=m ++CONFIG_USB_STORAGE_DATAFAB=m ++CONFIG_USB_STORAGE_FREECOM=m ++CONFIG_USB_STORAGE_ISD200=m ++CONFIG_USB_STORAGE_USBAT=m ++CONFIG_USB_STORAGE_SDDR09=m ++CONFIG_USB_STORAGE_SDDR55=m ++CONFIG_USB_STORAGE_JUMPSHOT=m ++CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m ++CONFIG_USB_STORAGE_ENE_UB6250=m ++CONFIG_USB_UAS=y ++CONFIG_USB_LIBUSUAL=y ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m ++CONFIG_USB_SERIAL=m ++CONFIG_USB_SERIAL_GENERIC=y ++CONFIG_USB_SERIAL_AIRCABLE=m ++CONFIG_USB_SERIAL_ARK3116=m ++CONFIG_USB_SERIAL_BELKIN=m ++CONFIG_USB_SERIAL_CH341=m ++CONFIG_USB_SERIAL_WHITEHEAT=m ++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m ++CONFIG_USB_SERIAL_CP210X=m ++CONFIG_USB_SERIAL_CYPRESS_M8=m ++CONFIG_USB_SERIAL_EMPEG=m ++CONFIG_USB_SERIAL_FTDI_SIO=m ++CONFIG_USB_SERIAL_FUNSOFT=m ++CONFIG_USB_SERIAL_VISOR=m ++CONFIG_USB_SERIAL_IPAQ=m ++CONFIG_USB_SERIAL_IR=m ++CONFIG_USB_SERIAL_EDGEPORT=m ++CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_GARMIN=m ++CONFIG_USB_SERIAL_IPW=m ++CONFIG_USB_SERIAL_IUU=m ++CONFIG_USB_SERIAL_KEYSPAN_PDA=m ++CONFIG_USB_SERIAL_KEYSPAN=m ++CONFIG_USB_SERIAL_KLSI=m ++CONFIG_USB_SERIAL_KOBIL_SCT=m ++CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_MOS7720=m ++CONFIG_USB_SERIAL_MOS7840=m ++CONFIG_USB_SERIAL_MOTOROLA=m ++CONFIG_USB_SERIAL_NAVMAN=m ++CONFIG_USB_SERIAL_PL2303=m ++CONFIG_USB_SERIAL_OTI6858=m ++CONFIG_USB_SERIAL_QCAUX=m ++CONFIG_USB_SERIAL_QUALCOMM=m ++CONFIG_USB_SERIAL_SPCP8X5=m ++CONFIG_USB_SERIAL_HP4X=m ++CONFIG_USB_SERIAL_SAFE=m ++CONFIG_USB_SERIAL_SIEMENS_MPI=m ++CONFIG_USB_SERIAL_SIERRAWIRELESS=m ++CONFIG_USB_SERIAL_SYMBOL=m ++CONFIG_USB_SERIAL_TI=m ++CONFIG_USB_SERIAL_CYBERJACK=m ++CONFIG_USB_SERIAL_XIRCOM=m ++CONFIG_USB_SERIAL_OPTION=m ++CONFIG_USB_SERIAL_OMNINET=m ++CONFIG_USB_SERIAL_OPTICON=m ++CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m ++CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_SERIAL_DEBUG=m ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++CONFIG_USB_ADUTUX=m ++CONFIG_USB_SEVSEG=m ++CONFIG_USB_RIO500=m ++CONFIG_USB_LEGOTOWER=m ++CONFIG_USB_LCD=m ++CONFIG_USB_LED=m ++CONFIG_USB_CYPRESS_CY7C63=m ++CONFIG_USB_CYTHERM=m ++CONFIG_USB_IDMOUSE=m ++CONFIG_USB_FTDI_ELAN=m ++CONFIG_USB_APPLEDISPLAY=m ++CONFIG_USB_LD=m ++CONFIG_USB_TRANCEVIBRATOR=m ++CONFIG_USB_IOWARRIOR=m ++CONFIG_USB_TEST=m ++CONFIG_USB_ISIGHTFW=m ++CONFIG_USB_YUREX=m ++CONFIG_MMC=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_PLTFM=y ++CONFIG_MMC_SDHCI_BCM2708=y ++CONFIG_MMC_SDHCI_BCM2708_DMA=y ++CONFIG_LEDS_GPIO=y ++CONFIG_LEDS_TRIGGER_TIMER=m ++CONFIG_LEDS_TRIGGER_HEARTBEAT=m ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=m ++CONFIG_UIO=m ++CONFIG_UIO_PDRV=m ++CONFIG_UIO_PDRV_GENIRQ=m ++# CONFIG_IOMMU_SUPPORT is not set ++CONFIG_EXT4_FS=y ++CONFIG_EXT4_FS_POSIX_ACL=y ++CONFIG_EXT4_FS_SECURITY=y ++CONFIG_REISERFS_FS=m ++CONFIG_REISERFS_FS_XATTR=y ++CONFIG_REISERFS_FS_POSIX_ACL=y ++CONFIG_REISERFS_FS_SECURITY=y ++CONFIG_JFS_FS=m ++CONFIG_JFS_POSIX_ACL=y ++CONFIG_JFS_SECURITY=y ++CONFIG_JFS_STATISTICS=y ++CONFIG_XFS_FS=m ++CONFIG_XFS_QUOTA=y ++CONFIG_XFS_POSIX_ACL=y ++CONFIG_XFS_RT=y ++CONFIG_GFS2_FS=m ++CONFIG_OCFS2_FS=m ++CONFIG_BTRFS_FS=m ++CONFIG_BTRFS_FS_POSIX_ACL=y ++CONFIG_NILFS2_FS=m ++CONFIG_FANOTIFY=y ++CONFIG_AUTOFS4_FS=y ++CONFIG_FUSE_FS=m ++CONFIG_CUSE=m ++CONFIG_FSCACHE=y ++CONFIG_FSCACHE_STATS=y ++CONFIG_FSCACHE_HISTOGRAM=y ++CONFIG_CACHEFILES=y ++CONFIG_ISO9660_FS=m ++CONFIG_JOLIET=y ++CONFIG_ZISOFS=y ++CONFIG_UDF_FS=m ++CONFIG_MSDOS_FS=y ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_IOCHARSET="ascii" ++CONFIG_NTFS_FS=m ++CONFIG_TMPFS=y ++CONFIG_TMPFS_POSIX_ACL=y ++CONFIG_CONFIGFS_FS=y ++CONFIG_SQUASHFS=m ++CONFIG_SQUASHFS_XATTR=y ++CONFIG_SQUASHFS_LZO=y ++CONFIG_SQUASHFS_XZ=y ++CONFIG_NFS_FS=y ++CONFIG_NFS_V3=y ++CONFIG_NFS_V3_ACL=y ++CONFIG_NFS_V4=y ++CONFIG_ROOT_NFS=y ++CONFIG_NFS_FSCACHE=y ++CONFIG_CIFS=m ++CONFIG_CIFS_WEAK_PW_HASH=y ++CONFIG_CIFS_XATTR=y ++CONFIG_CIFS_POSIX=y ++CONFIG_9P_FS=m ++CONFIG_9P_FS_POSIX_ACL=y ++CONFIG_PARTITION_ADVANCED=y ++CONFIG_MAC_PARTITION=y ++CONFIG_EFI_PARTITION=y ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_CODEPAGE_437=y ++CONFIG_NLS_CODEPAGE_737=m ++CONFIG_NLS_CODEPAGE_775=m ++CONFIG_NLS_CODEPAGE_850=m ++CONFIG_NLS_CODEPAGE_852=m ++CONFIG_NLS_CODEPAGE_855=m ++CONFIG_NLS_CODEPAGE_857=m ++CONFIG_NLS_CODEPAGE_860=m ++CONFIG_NLS_CODEPAGE_861=m ++CONFIG_NLS_CODEPAGE_862=m ++CONFIG_NLS_CODEPAGE_863=m ++CONFIG_NLS_CODEPAGE_864=m ++CONFIG_NLS_CODEPAGE_865=m ++CONFIG_NLS_CODEPAGE_866=m ++CONFIG_NLS_CODEPAGE_869=m ++CONFIG_NLS_CODEPAGE_936=m ++CONFIG_NLS_CODEPAGE_950=m ++CONFIG_NLS_CODEPAGE_932=m ++CONFIG_NLS_CODEPAGE_949=m ++CONFIG_NLS_CODEPAGE_874=m ++CONFIG_NLS_ISO8859_8=m ++CONFIG_NLS_CODEPAGE_1250=m ++CONFIG_NLS_CODEPAGE_1251=m ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_ISO8859_1=m ++CONFIG_NLS_ISO8859_2=m ++CONFIG_NLS_ISO8859_3=m ++CONFIG_NLS_ISO8859_4=m ++CONFIG_NLS_ISO8859_5=m ++CONFIG_NLS_ISO8859_6=m ++CONFIG_NLS_ISO8859_7=m ++CONFIG_NLS_ISO8859_9=m ++CONFIG_NLS_ISO8859_13=m ++CONFIG_NLS_ISO8859_14=m ++CONFIG_NLS_ISO8859_15=m ++CONFIG_NLS_KOI8_R=m ++CONFIG_NLS_KOI8_U=m ++CONFIG_NLS_UTF8=m ++CONFIG_PRINTK_TIME=y ++CONFIG_DETECT_HUNG_TASK=y ++CONFIG_TIMER_STATS=y ++CONFIG_DEBUG_STACK_USAGE=y ++CONFIG_DEBUG_INFO=y ++CONFIG_DEBUG_MEMORY_INIT=y ++CONFIG_BOOT_PRINTK_DELAY=y ++CONFIG_LATENCYTOP=y ++CONFIG_SYSCTL_SYSCALL_CHECK=y ++CONFIG_IRQSOFF_TRACER=y ++CONFIG_SCHED_TRACER=y ++CONFIG_STACK_TRACER=y ++CONFIG_BLK_DEV_IO_TRACE=y ++CONFIG_FUNCTION_PROFILER=y ++CONFIG_KGDB=y ++CONFIG_KGDB_KDB=y ++CONFIG_KDB_KEYBOARD=y ++CONFIG_STRICT_DEVMEM=y ++CONFIG_CRYPTO_AUTHENC=m ++CONFIG_CRYPTO_SEQIV=m ++CONFIG_CRYPTO_CBC=y ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_XCBC=m ++CONFIG_CRYPTO_MD5=y ++CONFIG_CRYPTO_SHA1=y ++CONFIG_CRYPTO_SHA256=m ++CONFIG_CRYPTO_SHA512=m ++CONFIG_CRYPTO_TGR192=m ++CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_CAST5=m ++CONFIG_CRYPTO_DES=y ++CONFIG_CRYPTO_DEFLATE=m ++# CONFIG_CRYPTO_ANSI_CPRNG is not set ++# CONFIG_CRYPTO_HW is not set ++CONFIG_CRC_ITU_T=y ++CONFIG_LIBCRC32C=y diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig new file mode 100644 -index 0000000..44c7866 +index 0000000..63bb76c --- /dev/null +++ b/arch/arm/mach-bcm2708/Kconfig -@@ -0,0 +1,25 @@ +@@ -0,0 +1,34 @@ +menu "Broadcom BCM2708 Implementations" + depends on ARCH_BCM2708 + +config MACH_BCM2708 + bool "Broadcom BCM2708 Development Platform" ++ select NEED_MACH_MEMORY_H ++ select NEED_MACH_IO_H + select CPU_V6 + help + Include support for the Broadcom(R) BCM2708 platform. @@ -47437,6 +46905,13 @@ index 0000000..44c7866 + help + Helper for videocore memory access and total size allocation. + ++config BCM2708_NOL2CACHE ++ bool "Videocore L2 cache disable" ++ depends on MACH_BCM2708 ++ default n ++ help ++ Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt. ++ +endmenu diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile new file mode 100644 @@ -47463,10 +46938,10 @@ index 0000000..67039c3 +initrd_phys-y := 0x00800000 diff --git a/arch/arm/mach-bcm2708/armctrl.c b/arch/arm/mach-bcm2708/armctrl.c new file mode 100644 -index 0000000..6b97124 +index 0000000..da18725 --- /dev/null +++ b/arch/arm/mach-bcm2708/armctrl.c -@@ -0,0 +1,399 @@ +@@ -0,0 +1,208 @@ +/* + * linux/arch/arm/mach-bcm2708/armctrl.c + * @@ -47490,11 +46965,7 @@ index 0000000..6b97124 +#include +#include +#include -+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,39) +#include -+#else -+#include -+#endif +#include + +#include @@ -47516,44 +46987,30 @@ index 0000000..6b97124 + INTERRUPT_VC_ARASANSDIO +}; + -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) +static void armctrl_mask_irq(struct irq_data *d) -+#else -+static void armctrl_mask_irq(unsigned int irq) -+#endif +{ + static const unsigned int disables[4] = { -+ IO_ADDRESS(ARM_IRQ_DIBL1), -+ IO_ADDRESS(ARM_IRQ_DIBL2), -+ IO_ADDRESS(ARM_IRQ_DIBL3), ++ ARM_IRQ_DIBL1, ++ ARM_IRQ_DIBL2, ++ ARM_IRQ_DIBL3, + 0 + }; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) ++ + unsigned int data = (unsigned int)irq_get_chip_data(d->irq); -+#else -+ unsigned int data = (unsigned int)get_irq_chip_data(irq); -+#endif -+ writel(1 << (data & 0x1f), __io(disables[(data >> 5) & 0x3])); ++ writel(1 << (data & 0x1f), __io_address(disables[(data >> 5) & 0x3])); +} + -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) +static void armctrl_unmask_irq(struct irq_data *d) -+#else -+static void armctrl_unmask_irq(unsigned int irq) -+#endif +{ + static const unsigned int enables[4] = { -+ IO_ADDRESS(ARM_IRQ_ENBL1), -+ IO_ADDRESS(ARM_IRQ_ENBL2), -+ IO_ADDRESS(ARM_IRQ_ENBL3), ++ ARM_IRQ_ENBL1, ++ ARM_IRQ_ENBL2, ++ ARM_IRQ_ENBL3, + 0 + }; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) ++ + unsigned int data = (unsigned int)irq_get_chip_data(d->irq); -+#else -+ unsigned int data = (unsigned int)get_irq_chip_data(irq); -+#endif -+ writel(1 << (data & 0x1f), __io(enables[(data >> 5) & 0x3])); ++ writel(1 << (data & 0x1f), __io_address(enables[(data >> 5) & 0x3])); +} + +#if defined(CONFIG_PM) @@ -47572,89 +47029,16 @@ index 0000000..6b97124 + * @soft_int: Save for VIC_INT_SOFT. + * @protect: Save for VIC_PROTECT. + */ -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+struct armctrl_device { -+ struct sys_device sysdev; -+#else -+ struct armctrl_info { -+#endif -+ void __iomem *base; -+ int irq; -+ u32 resume_sources; -+ u32 resume_irqs; -+ u32 int_select; -+ u32 int_enable; -+ u32 soft_int; -+ u32 protect; -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+}; -+#else -+ } armctrl; -+#endif -+ -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+ -+static struct armctrl_device armctrl_devices[1]; -+ -+static inline struct armctrl_device *to_vic(struct sys_device *sys) -+{ -+ return container_of(sys, struct armctrl_device, sysdev); -+} -+ -+static int armctrl_id; -+ -+static int armctrl_class_resume(struct sys_device *dev) -+{ -+#if 0 // FIXME -+ struct armctrl_device *armctrl = to_vic(dev); -+ void __iomem *base = armctrl->base; -+ -+ printk(KERN_DEBUG "%s: resuming armctrl at %p\n", __func__, base); -+ -+ writel(armctrl->int_select, base + VIC_INT_SELECT); -+ writel(armctrl->protect, base + VIC_PROTECT); -+ -+ /* set the enabled ints and then clear the non-enabled */ -+ writel(armctrl->int_enable, base + VIC_INT_ENABLE); -+ writel(~armctrl->int_enable, base + VIC_INT_ENABLE_CLEAR); -+ -+ /* and the same for the soft-int register */ -+ -+ writel(armctrl->soft_int, base + VIC_INT_SOFT); -+ writel(~armctrl->soft_int, base + VIC_INT_SOFT_CLEAR); -+#endif -+ return 0; -+} -+ -+static int armctrl_class_suspend(struct sys_device *dev, pm_message_t state) -+{ -+#if 0 // FIXME -+ struct armctrl_device *armctrl = to_vic(dev); -+ void __iomem *base = armctrl->base; -+ -+ printk(KERN_DEBUG "%s: suspending armctrl at %p\n", __func__, base); -+ -+ armctrl->int_select = readl(base + VIC_INT_SELECT); -+ armctrl->int_enable = readl(base + VIC_INT_ENABLE); -+ armctrl->soft_int = readl(base + VIC_INT_SOFT); -+ armctrl->protect = readl(base + VIC_PROTECT); -+ -+ /* set the interrupts (if any) that are used for -+ * resuming the system */ -+ -+ writel(armctrl->resume_irqs, base + VIC_INT_ENABLE); -+ writel(~armctrl->resume_irqs, base + VIC_INT_ENABLE_CLEAR); -+#endif -+ return 0; -+} -+ -+struct sysdev_class armctrl_class = { -+ .name = "armctrl", -+ .suspend = armctrl_class_suspend, -+ .resume = armctrl_class_resume, -+}; -+ -+#endif // < 2.6.39 ++struct armctrl_info { ++ void __iomem *base; ++ int irq; ++ u32 resume_sources; ++ u32 resume_irqs; ++ u32 int_select; ++ u32 int_enable; ++ u32 soft_int; ++ u32 protect; ++} armctrl; + +static int armctrl_suspend(void) +{ @@ -47666,7 +47050,6 @@ index 0000000..6b97124 + return; +} + -+ +/** + * armctrl_pm_register - Register a VIC for later power management control + * @base: The base address of the VIC. @@ -47681,98 +47064,16 @@ index 0000000..6b97124 +static void __init armctrl_pm_register(void __iomem * base, unsigned int irq, + u32 resume_sources) +{ -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+ struct armctrl_device *v; -+ -+ if (armctrl_id >= ARRAY_SIZE(armctrl_devices)) -+ printk(KERN_ERR -+ "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", -+ __func__); -+ else { -+ v = &armctrl_devices[armctrl_id]; -+ v->base = base; -+ v->resume_sources = resume_sources; -+ v->irq = irq; -+ armctrl_id++; -+ } -+#else + armctrl.base = base; + armctrl.resume_sources = resume_sources; + armctrl.irq = irq; -+#endif +} + -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+ -+/** -+ * armctrl_pm_init - initicall to register VIC pm -+ * -+ * This is called via late_initcall() to register -+ * the resources for the VICs due to the early -+ * nature of the VIC's registration. -+*/ -+static int __init armctrl_pm_init(void) -+{ -+ struct armctrl_device *dev = armctrl_devices; -+ int err; -+ int id; -+ -+ if (armctrl_id == 0) -+ return 0; -+ -+ err = sysdev_class_register(&armctrl_class); -+ if (err) { -+ printk(KERN_ERR "%s: cannot register class\n", __func__); -+ return err; -+ } -+ -+ for (id = 0; id < armctrl_id; id++, dev++) { -+ dev->sysdev.id = id; -+ dev->sysdev.cls = &armctrl_class; -+ -+ err = sysdev_register(&dev->sysdev); -+ if (err) { -+ printk(KERN_ERR "%s: failed to register device\n", -+ __func__); -+ return err; -+ } -+ } -+ -+ return 0; -+} -+ -+late_initcall(armctrl_pm_init); -+ -+#endif // VERSION check -+ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) +static int armctrl_set_wake(struct irq_data *d, unsigned int on) -+#else -+static int armctrl_set_wake(unsigned int irq, unsigned int on) -+#endif +{ -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+ struct armctrl_device *armctrl = &armctrl_devices[0]; -+#endif -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + unsigned int off = d->irq & 31; -+#else -+ unsigned int off = irq & 31; -+#endif + u32 bit = 1 << off; + -+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -+ if (!armctrl) -+ return -EINVAL; -+ -+ if (!(bit & armctrl->resume_sources)) -+ return -EINVAL; -+ -+ if (on) -+ armctrl->resume_irqs |= bit; -+ else -+ armctrl->resume_irqs &= ~bit; -+#else + if (!(bit & armctrl.resume_sources)) + return -EINVAL; + @@ -47780,26 +47081,24 @@ index 0000000..6b97124 + armctrl.resume_irqs |= bit; + else + armctrl.resume_irqs &= ~bit; -+#endif + + return 0; +} + +#else -+static inline void armctrl_pm_register(void __iomem *base, unsigned int irq, ++static inline void armctrl_pm_register(void __iomem * base, unsigned int irq, + u32 arg1) +{ +} ++ +#define armctrl_suspend NULL +#define armctrl_resume NULL +#define armctrl_set_wake NULL +#endif /* CONFIG_PM */ + -+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,39) -+ +static struct syscore_ops armctrl_syscore_ops = { + .suspend = armctrl_suspend, -+ .resume = armctrl_resume, ++ .resume = armctrl_resume, +}; + +/** @@ -47817,21 +47116,12 @@ index 0000000..6b97124 + +late_initcall(armctrl_syscore_init); + -+#endif -+ +static struct irq_chip armctrl_chip = { + .name = "ARMCTRL", -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + .irq_ack = armctrl_mask_irq, + .irq_mask = armctrl_mask_irq, + .irq_unmask = armctrl_unmask_irq, + .irq_set_wake = armctrl_set_wake, -+#else -+ .ack = armctrl_mask_irq, -+ .mask = armctrl_mask_irq, -+ .unmask = armctrl_unmask_irq, -+ .set_wake = armctrl_set_wake, -+#endif +}; + +/** @@ -47848,18 +47138,12 @@ index 0000000..6b97124 + + for (irq = 0; irq < NR_IRQS; irq++) { + unsigned int data = irq; -+ if (irq >= INTERRUPT_JPEG) ++ if (irq >= INTERRUPT_JPEG && irq <= INTERRUPT_ARASANSDIO) + data = remap_irqs[irq - INTERRUPT_JPEG]; + -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + irq_set_chip(irq, &armctrl_chip); + irq_set_chip_data(irq, (void *)data); + irq_set_handler(irq, handle_level_irq); -+#else -+ set_irq_chip(irq, &armctrl_chip); -+ set_irq_chip_data(irq, (void *)data); -+ set_irq_handler(irq, handle_level_irq); -+#endif + set_irq_flags(irq, IRQF_VALID | IRQF_PROBE | IRQF_DISABLED); + } + @@ -47901,10 +47185,10 @@ index 0000000..0aa916e +#endif diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c new file mode 100644 -index 0000000..d9dc628 +index 0000000..544ed1e --- /dev/null +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -0,0 +1,631 @@ +@@ -0,0 +1,638 @@ +/* + * linux/arch/arm/mach-bcm2708/bcm2708.c + * @@ -47930,7 +47214,7 @@ index 0000000..d9dc628 +#include +#include +#include -+#include ++#include +#include +#include +#include @@ -47940,16 +47224,13 @@ index 0000000..d9dc628 +#include + +#include -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) +#include -+#else -+#include -+#endif +#include +#include +#include +#include +#include ++#include + +#include +#include @@ -47960,6 +47241,9 @@ index 0000000..d9dc628 +#include +#include +#include ++#include ++ ++#include + +#include "bcm2708.h" +#include "armctrl.h" @@ -47992,69 +47276,47 @@ index 0000000..d9dc628 + .virtual = IO_ADDRESS(ARMCTRL_BASE), + .pfn = __phys_to_pfn(ARMCTRL_BASE), + .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ .virtual = IO_ADDRESS(UART0_BASE), -+ .pfn = __phys_to_pfn(UART0_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ .virtual = -+ IO_ADDRESS(UART1_BASE), -+ .pfn = -+ __phys_to_pfn(UART1_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, { -+#ifdef CONFIG_MMC_BCM2708 /* broadcom legacy SD */ -+ . -+ virtual -+ = -+ IO_ADDRESS -+ (MMCI0_BASE), -+ .pfn = -+ __phys_to_pfn -+ (MMCI0_BASE), -+ . -+ length = -+ SZ_4K, -+ .type = -+ MT_DEVICE}, ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(UART0_BASE), ++ .pfn = __phys_to_pfn(UART0_BASE), ++ .length = SZ_4K, ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(UART1_BASE), ++ .pfn = __phys_to_pfn(UART1_BASE), ++ .length = SZ_4K, ++ .type = MT_DEVICE}, + { -+#endif + .virtual = IO_ADDRESS(DMA_BASE), + .pfn = __phys_to_pfn(DMA_BASE), + .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ .virtual = IO_ADDRESS(MCORE_BASE), -+ .pfn = __phys_to_pfn(MCORE_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ .virtual = -+ IO_ADDRESS(ST_BASE), -+ .pfn = -+ __phys_to_pfn(ST_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ . -+ virtual -+ = -+ IO_ADDRESS -+ (USB_BASE), -+ .pfn = -+ __phys_to_pfn -+ (USB_BASE), -+ . -+ length = -+ SZ_128K, -+ .type = -+ MT_DEVICE}, ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(MCORE_BASE), ++ .pfn = __phys_to_pfn(MCORE_BASE), ++ .length = SZ_4K, ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(ST_BASE), ++ .pfn = __phys_to_pfn(ST_BASE), ++ .length = SZ_4K, ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(USB_BASE), ++ .pfn = __phys_to_pfn(USB_BASE), ++ .length = SZ_128K, ++ .type = MT_DEVICE}, + { + .virtual = IO_ADDRESS(PM_BASE), + .pfn = __phys_to_pfn(PM_BASE), + .length = SZ_4K, -+ .type = MT_DEVICE}, { -+ .virtual = IO_ADDRESS(GPIO_BASE), -+ .pfn = __phys_to_pfn(GPIO_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE} ++ .type = MT_DEVICE}, ++ { ++ .virtual = IO_ADDRESS(GPIO_BASE), ++ .pfn = __phys_to_pfn(GPIO_BASE), ++ .length = SZ_4K, ++ .type = MT_DEVICE} +}; + +void __init bcm2708_map_io(void) @@ -48062,32 +47324,57 @@ index 0000000..d9dc628 + iotable_init(bcm2708_io_desc, ARRAY_SIZE(bcm2708_io_desc)); +} + -+unsigned long frc_clock_ticks32(void) ++/* The STC is a free running counter that increments at the rate of 1MHz */ ++#define STC_FREQ_HZ 1000000 ++ ++static inline uint32_t timer_read(void) +{ + /* STC: a free running counter that increments at the rate of 1MHz */ + return readl(__io_address(ST_BASE + 0x04)); +} + -+unsigned long long frc_clock_ticks63(void) ++static unsigned long bcm2708_read_current_timer(void) +{ -+ unsigned long t = frc_clock_ticks32(); -+ /* For cnt32_to_63 to work correctly we MUST call this routine -+ * at least once every half-32-bit-wraparound period - that's once -+ * every 35minutes or so - using it in sched_clock() should ensure this -+ */ -+ return cnt32_to_63(t); ++ return timer_read(); +} + -+unsigned long long sched_clock(void) ++static u32 notrace bcm2708_read_sched_clock(void) +{ -+ return 1000ull * frc_clock_ticks63(); ++ return timer_read(); +} + ++static cycle_t clksrc_read(struct clocksource *cs) ++{ ++ return timer_read(); ++} ++ ++static struct clocksource clocksource_stc = { ++ .name = "stc", ++ .rating = 300, ++ .read = clksrc_read, ++ .mask = CLOCKSOURCE_MASK(32), ++ .flags = CLOCK_SOURCE_IS_CONTINUOUS, ++}; ++ ++unsigned long frc_clock_ticks32(void) ++{ ++ return timer_read(); ++} ++ ++static void __init bcm2708_clocksource_init(void) ++{ ++ if (clocksource_register_hz(&clocksource_stc, STC_FREQ_HZ)) { ++ printk(KERN_ERR "timer: failed to initialize clock " ++ "source %s\n", clocksource_stc.name); ++ } ++} ++ ++ +/* + * These are fixed clocks. + */ +static struct clk ref24_clk = { -+ .rate = 3000000, /* The UART is clocked at 3MHz via APB_CLK */ ++ .rate = UART0_CLOCK, /* The UART is clocked at 3MHz via APB_CLK */ +}; + +static struct clk osc_clk = { @@ -48118,16 +47405,10 @@ index 0000000..d9dc628 + { /* USB */ + .dev_id = "bcm2708_usb", + .clk = &osc_clk, -+#ifdef CONFIG_MMC_BCM2708 -+ }, -+ { /* MCI */ -+ .dev_id = "bcm2708_mci.0", -+ .clk = &sdhost_clk, -+#endif + } +}; + -+#define UART0_IRQ { IRQ_UART, NO_IRQ } ++#define UART0_IRQ { IRQ_UART, 0 /*NO_IRQ*/ } +#define UART0_DMA { 15, 14 } + +AMBA_DEVICE(uart0, "dev:f1", UART0, NULL); @@ -48151,30 +47432,6 @@ index 0000000..d9dc628 + .num_resources = ARRAY_SIZE(bcm2708_dmaman_resources), +}; + -+#ifdef CONFIG_MMC_BCM2708 -+static struct resource bcm2708_mci_resources[] = { -+ { -+ .start = MMCI0_BASE, -+ .end = MMCI0_BASE + SZ_4K - 1, -+ .flags = IORESOURCE_MEM, -+ }, { -+ .start = IRQ_SDIO, -+ .end = IRQ_SDIO, -+ .flags = IORESOURCE_IRQ, -+ } -+}; -+ -+static struct platform_device bcm2708_mci_device = { -+ .name = "bcm2708_mci", -+ .id = 0, /* first bcm2708_mci */ -+ .resource = bcm2708_mci_resources, -+ .num_resources = ARRAY_SIZE(bcm2708_mci_resources), -+ .dev = { -+ .coherent_dma_mask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON), -+ }, -+}; -+#endif /* CONFIG_MMC_BCM2708 */ -+ +static u64 fb_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); + +static struct platform_device bcm2708_fb_device = { @@ -48286,11 +47543,12 @@ index 0000000..d9dc628 + .start = ST_BASE, + .end = ST_BASE + SZ_4K - 1, + .flags = IORESOURCE_MEM, -+ }, { -+ .start = IRQ_TIMER3, -+ .end = IRQ_TIMER3, -+ .flags = IORESOURCE_IRQ, -+ } ++ }, ++ { ++ .start = IRQ_TIMER3, ++ .end = IRQ_TIMER3, ++ .flags = IORESOURCE_IRQ, ++ } + +}; + @@ -48367,10 +47625,23 @@ index 0000000..d9dc628 + return ret; +} + ++/* We can't really power off, but if we do the normal reset scheme, and indicate to bootcode.bin not to reboot, then most of the chip will be powered off */ ++static void bcm2708_power_off(void) ++{ ++ /* we set the watchdog hard reset bit here to distinguish this reset from the normal (full) reset. bootcode.bin will not reboot after a hard reset */ ++ uint32_t pm_rsts = readl(__io_address(PM_RSTS)); ++ pm_rsts = PM_PASSWORD | (pm_rsts & PM_RSTC_WRCFG_CLR) | PM_RSTS_HADWRH_SET; ++ writel(pm_rsts, __io_address(PM_RSTS)); ++ /* continue with normal reset mechanism */ ++ arch_reset(0, ""); ++} ++ +void __init bcm2708_init(void) +{ + int i; + ++ pm_power_off = bcm2708_power_off; ++ + for (i = 0; i < ARRAY_SIZE(lookups); i++) + clkdev_add(&lookups[i]); + @@ -48380,17 +47651,16 @@ index 0000000..d9dc628 + bcm_register_device(&bcm2708_gpio_device); +#endif + bcm_register_device(&bcm2708_systemtimer_device); -+#ifdef CONFIG_MMC_BCM2708 -+ bcm_register_device(&bcm2708_mci_device); -+#endif + bcm_register_device(&bcm2708_fb_device); + bcm_register_device(&bcm2708_usb_device); + bcm_register_device(&bcm2708_uart1_device); + bcm_register_device(&bcm2708_powerman_device); ++ +#ifdef CONFIG_MMC_SDHCI_BCM2708 + bcm_register_device(&bcm2708_emmc_device); +#endif + bcm2708_init_led(); ++ +#ifdef CONFIG_BCM2708_VCMEM + { + extern void vc_mem_connected_init(void); @@ -48405,21 +47675,18 @@ index 0000000..d9dc628 + system_serial_low = serial; +} + -+#define TIMER_PERIOD 10000 /* HZ in microsecs */ -+ +static void timer_set_mode(enum clock_event_mode mode, + struct clock_event_device *clk) +{ -+ unsigned long stc; -+ + switch (mode) { -+ case CLOCK_EVT_MODE_PERIODIC: -+ stc = readl(__io_address(ST_BASE + 0x04)); -+ writel(stc + TIMER_PERIOD, __io_address(ST_BASE + 0x18)); /* stc3 */ -+ break; -+ case CLOCK_EVT_MODE_ONESHOT: -+ case CLOCK_EVT_MODE_UNUSED: ++ case CLOCK_EVT_MODE_ONESHOT: /* Leave the timer disabled, .set_next_event will enable it */ + case CLOCK_EVT_MODE_SHUTDOWN: ++ break; ++ case CLOCK_EVT_MODE_PERIODIC: ++ ++ case CLOCK_EVT_MODE_UNUSED: ++ case CLOCK_EVT_MODE_RESUME: ++ + default: + printk(KERN_ERR "timer_set_mode: unhandled mode:%d\n", + (int)mode); @@ -48428,13 +47695,13 @@ index 0000000..d9dc628 + +} + -+static int timer_set_next_event(unsigned long evt, ++static int timer_set_next_event(unsigned long cycles, + struct clock_event_device *unused) +{ + unsigned long stc; + + stc = readl(__io_address(ST_BASE + 0x04)); -+ writel(stc + TIMER_PERIOD, __io_address(ST_BASE + 0x18)); /* stc3 */ ++ writel(stc + cycles, __io_address(ST_BASE + 0x18)); /* stc3 */ + return 0; +} + @@ -48469,8 +47736,17 @@ index 0000000..d9dc628 +/* + * Set up timer interrupt, and return the current time in seconds. + */ ++ ++static struct delay_timer bcm2708_delay_timer = { ++ .read_current_timer = bcm2708_read_current_timer, ++ .freq = STC_FREQ_HZ, ++}; ++ +static void __init bcm2708_timer_init(void) +{ ++ /* init high res timer */ ++ bcm2708_clocksource_init(); ++ + /* + * Initialise to a known state (all timers off) + */ @@ -48480,8 +47756,10 @@ index 0000000..d9dc628 + */ + setup_irq(IRQ_TIMER3, &bcm2708_timer_irq); + ++ setup_sched_clock(bcm2708_read_sched_clock, 32, STC_FREQ_HZ); ++ + timer0_clockevent.mult = -+ div_sc(1000000, NSEC_PER_SEC, timer0_clockevent.shift); ++ div_sc(STC_FREQ_HZ, NSEC_PER_SEC, timer0_clockevent.shift); + timer0_clockevent.max_delta_ns = + clockevent_delta2ns(0xffffffff, &timer0_clockevent); + timer0_clockevent.min_delta_ns = @@ -48489,11 +47767,9 @@ index 0000000..d9dc628 + + timer0_clockevent.cpumask = cpumask_of(0); + clockevents_register_device(&timer0_clockevent); -+} + -+struct sys_timer bcm2708_timer = { -+ .init = bcm2708_timer_init, -+}; ++ register_current_timer_delay(&bcm2708_delay_timer); ++} + +#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) +#include @@ -48503,7 +47779,7 @@ index 0000000..d9dc628 + .gpio = 16, + .name = "led0", + .default_trigger = "mmc0", -+ .active_low = 0, ++ .active_low = 1, + }, +}; + @@ -48530,11 +47806,26 @@ index 0000000..d9dc628 +} +#endif + ++void __init bcm2708_init_early(void) ++{ ++ /* ++ * Some devices allocate their coherent buffers from atomic ++ * context. Increase size of atomic coherent pool to make sure such ++ * the allocations won't fail. ++ */ ++ init_dma_coherent_pool_size(SZ_2M); ++} ++ +MACHINE_START(BCM2708, "BCM2708") + /* Maintainer: Broadcom Europe Ltd. */ -+.map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = -+ &bcm2708_timer,.init_machine = -+ bcm2708_init, MACHINE_END module_param(boardrev, uint, 0644); ++ .map_io = bcm2708_map_io, ++ .init_irq = bcm2708_init_irq, ++ .init_time = bcm2708_timer_init, ++ .init_machine = bcm2708_init, ++ .init_early = bcm2708_init_early, ++MACHINE_END ++ ++module_param(boardrev, uint, 0644); +module_param(serial, uint, 0644); diff --git a/arch/arm/mach-bcm2708/bcm2708.h b/arch/arm/mach-bcm2708/bcm2708.h new file mode 100644 @@ -48595,10 +47886,10 @@ index 0000000..dfe8700 +#endif diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c new file mode 100644 -index 0000000..59df912 +index 0000000..d0339eb --- /dev/null +++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c -@@ -0,0 +1,323 @@ +@@ -0,0 +1,339 @@ +/* + * linux/arch/arm/mach-bcm2708/bcm2708_gpio.c + * @@ -48615,15 +47906,16 @@ index 0000000..59df912 +#include +#include +#include ++#include +#include ++#include +#include +#include +#include -+#include + +#define BCM_GPIO_DRIVER_NAME "bcm2708_gpio" +#define DRIVER_NAME BCM_GPIO_DRIVER_NAME -+#define BCM_GPIO_USE_IRQ 0 ++#define BCM_GPIO_USE_IRQ 1 + +#define GPIOFSEL(x) (0x00+(x)*4) +#define GPIOSET(x) (0x1c+(x)*4) @@ -48639,40 +47931,35 @@ index 0000000..59df912 +#define GPIOUD(x) (0x94+(x)*4) +#define GPIOUDCLK(x) (0x98+(x)*4) + -+enum { GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, -+ GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, -+ GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, -+ GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, }; ++enum { GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, ++ GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, ++ GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, ++ GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, ++}; + + /* Each of the two spinlocks protects a different set of hardware + * regiters and data structurs. This decouples the code of the IRQ from + * the GPIO code. This also makes the case of a GPIO routine call from + * the IRQ code simpler. + */ -+static DEFINE_SPINLOCK(lock); /* GPIO registers */ -+static DEFINE_SPINLOCK(irq_lock); /* IRQ registers */ -+ ++static DEFINE_SPINLOCK(lock); /* GPIO registers */ + +struct bcm2708_gpio { -+ /* We use a list of bcm2708_gpio structs for each trigger IRQ in the main -+ * interrupts controller of the system. We need this to support systems -+ * in which more that one bcm2708s are connected to the same IRQ. The ISR -+ * interates through this list to find the source of the interrupt. -+ */ -+ struct list_head list; -+ -+ void __iomem *base; -+ unsigned irq_base; -+ struct gpio_chip gc; ++ struct list_head list; ++ void __iomem *base; ++ struct gpio_chip gc; ++ unsigned long rising; ++ unsigned long falling; +}; + -+static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, int function) ++static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, ++ int function) +{ + struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); + unsigned long flags; + unsigned gpiodir; -+ unsigned gpio_bank = offset/10; -+ unsigned gpio_field_offset = (offset - 10*gpio_bank) * 3; ++ unsigned gpio_bank = offset / 10; ++ unsigned gpio_field_offset = (offset - 10 * gpio_bank) * 3; + +//printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set_function %p (%d,%d)\n", gc, offset, function); + if (offset >= ARCH_NR_GPIOS) @@ -48682,7 +47969,7 @@ index 0000000..59df912 + + gpiodir = readl(gpio->base + GPIOFSEL(gpio_bank)); + gpiodir &= ~(7 << gpio_field_offset); -+ gpiodir |= function << gpio_field_offset; ++ gpiodir |= function << gpio_field_offset; + writel(gpiodir, gpio->base + GPIOFSEL(gpio_bank)); + spin_unlock_irqrestore(&lock, flags); + gpiodir = readl(gpio->base + GPIOFSEL(gpio_bank)); @@ -48690,157 +47977,177 @@ index 0000000..59df912 + return 0; +} + -+ +static int bcm2708_gpio_dir_in(struct gpio_chip *gc, unsigned offset) +{ + return bcm2708_set_function(gc, offset, GPIO_FSEL_INPUT); +} + +static void bcm2708_gpio_set(struct gpio_chip *gc, unsigned offset, int value); -+static int bcm2708_gpio_dir_out(struct gpio_chip *gc, unsigned offset, int value) ++static int bcm2708_gpio_dir_out(struct gpio_chip *gc, unsigned offset, ++ int value) +{ + int ret; -+ ret = bcm2708_set_function(gc, offset, GPIO_FSEL_OUTPUT); -+ if (ret >= 0) -+ bcm2708_gpio_set(gc, offset, value); ++ ret = bcm2708_set_function(gc, offset, GPIO_FSEL_OUTPUT); ++ if (ret >= 0) ++ bcm2708_gpio_set(gc, offset, value); + return ret; +} + +static int bcm2708_gpio_get(struct gpio_chip *gc, unsigned offset) +{ + struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); -+ unsigned gpio_bank = offset/32; -+ unsigned gpio_field_offset = (offset - 32*gpio_bank); -+ unsigned lev; ++ unsigned gpio_bank = offset / 32; ++ unsigned gpio_field_offset = (offset - 32 * gpio_bank); ++ unsigned lev; + + if (offset >= ARCH_NR_GPIOS) + return 0; -+ lev = readl(gpio->base + GPIOLEV(gpio_bank)); ++ lev = readl(gpio->base + GPIOLEV(gpio_bank)); +//printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_get %p (%d)=%d\n", gc, offset, 0x1 & (lev>>gpio_field_offset)); -+ return 0x1 & (lev>>gpio_field_offset); ++ return 0x1 & (lev >> gpio_field_offset); +} + +static void bcm2708_gpio_set(struct gpio_chip *gc, unsigned offset, int value) +{ + struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); -+ unsigned gpio_bank = offset/32; -+ unsigned gpio_field_offset = (offset - 32*gpio_bank); ++ unsigned gpio_bank = offset / 32; ++ unsigned gpio_field_offset = (offset - 32 * gpio_bank); +//printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set %p (%d=%d)\n", gc, offset, value); + if (offset >= ARCH_NR_GPIOS) + return; + if (value) -+ writel(1<base + GPIOSET(gpio_bank)); ++ writel(1 << gpio_field_offset, gpio->base + GPIOSET(gpio_bank)); + else -+ writel(1<base + GPIOCLR(gpio_bank)); ++ writel(1 << gpio_field_offset, gpio->base + GPIOCLR(gpio_bank)); +} + -+/* ++/************************************************************************************************************************* + * bcm2708 GPIO IRQ + */ + +#if BCM_GPIO_USE_IRQ -+static void bcm2708_irq_disable(unsigned irq) -+{ -+ struct bcm2708_gpio *chip = get_irq_chip_data(irq); -+ //int offset = irq - gpio->irq_base; -+ unsigned long flags; + -+ spin_lock_irqsave(&chip->irq_lock, flags); -+ // disable gpio interrupts here -+ spin_unlock_irqrestore(&chip->irq_lock, flags); ++static int bcm2708_gpio_to_irq(struct gpio_chip *chip, unsigned gpio) ++{ ++ return gpio_to_irq(gpio); +} + -+static void bcm2708_irq_enable(unsigned irq) ++static int bcm2708_gpio_irq_set_type(struct irq_data *d, unsigned type) +{ -+ struct bcm2708_gpio *chip = get_irq_chip_data(irq); -+ //int offset = irq - chip->irq_base; -+ unsigned long flags; ++ unsigned irq = d->irq; ++ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); + -+ spin_lock_irqsave(&chip->irq_lock, flags); -+ // enable gpio interrupts here -+ spin_unlock_irqrestore(&chip->irq_lock, flags); -+} -+ -+static int bcm2708_irq_type(unsigned irq, unsigned trigger) -+{ -+ struct bcm2708_gpio *chip = get_irq_chip_data(irq); -+ int offset = irq - chip->irq_base; -+ unsigned long flags; -+ unsigned gpio_bank = offset/32; -+ unsigned gpio_field_offset = (offset - 32*gpio_bank); -+ unsigned gpioren, gpiofen, gpiohen, gpiolen; -+ -+ if (offset < 0 || offset >= ARCH_NR_GPIOS) ++ if (type & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) + return -EINVAL; + -+ spin_lock_irqsave(&chip->irq_lock, flags); -+ -+ gpioren = readl(chip->base + GPIOREN(gpio_bank)); -+ gpiofen = readl(chip->base + GPIOFEN(gpio_bank)); -+ gpiohen = readl(chip->base + GPIOHEN(gpio_bank)); -+ gpiolen = readl(chip->base + GPIOLEN(gpio_bank)); -+ -+ if (trigger & (IRQ_TYPE_EDGE_RISING)) -+ gpioren |= (1<base + GPIOREN(gpio_bank)); -+ writel(gpiofen, chip->base + GPIOFEN(gpio_bank)); -+ writel(gpiohen, chip->base + GPIOHEN(gpio_bank)); -+ writel(gpiolen, chip->base + GPIOLEN(gpio_bank)); -+ -+ spin_unlock_irqrestore(&chip->irq_lock, flags); ++ if (type & IRQ_TYPE_EDGE_RISING) { ++ gpio->rising |= (1 << irq_to_gpio(irq)); ++ } else { ++ gpio->rising &= ~(1 << irq_to_gpio(irq)); ++ } + ++ if (type & IRQ_TYPE_EDGE_FALLING) { ++ gpio->falling |= (1 << irq_to_gpio(irq)); ++ } else { ++ gpio->falling &= ~(1 << irq_to_gpio(irq)); ++ } + return 0; +} + ++static void bcm2708_gpio_irq_mask(struct irq_data *d) ++{ ++ unsigned irq = d->irq; ++ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); ++ unsigned gn = irq_to_gpio(irq); ++ unsigned gb = gn / 32; ++ unsigned long rising = readl(gpio->base + GPIOREN(gb)); ++ unsigned long falling = readl(gpio->base + GPIOFEN(gb)); ++ ++ gn = gn % 32; ++ ++ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb)); ++ writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb)); ++} ++ ++static void bcm2708_gpio_irq_unmask(struct irq_data *d) ++{ ++ unsigned irq = d->irq; ++ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); ++ unsigned gn = irq_to_gpio(irq); ++ unsigned gb = gn / 32; ++ unsigned long rising = readl(gpio->base + GPIOREN(gb)); ++ unsigned long falling = readl(gpio->base + GPIOFEN(gb)); ++ ++ gn = gn % 32; ++ ++ writel(1 << gn, gpio->base + GPIOEDS(gb)); ++ ++ if (gpio->rising & (1 << gn)) { ++ writel(rising | (1 << gn), gpio->base + GPIOREN(gb)); ++ } else { ++ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb)); ++ } ++ ++ if (gpio->falling & (1 << gn)) { ++ writel(falling | (1 << gn), gpio->base + GPIOFEN(gb)); ++ } else { ++ writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb)); ++ } ++} ++ +static struct irq_chip bcm2708_irqchip = { -+ .name = "GPIO", -+ .enable = bcm2708_irq_enable, -+ .disable = bcm2708_irq_disable, -+ .set_type = bcm2708_irq_type, ++ .name = "GPIO", ++ .irq_enable = bcm2708_gpio_irq_unmask, ++ .irq_disable = bcm2708_gpio_irq_mask, ++ .irq_unmask = bcm2708_gpio_irq_unmask, ++ .irq_mask = bcm2708_gpio_irq_mask, ++ .irq_set_type = bcm2708_gpio_irq_set_type, +}; + -+static void bcm2708_irq_handler(unsigned irq, struct irq_desc *desc) ++static irqreturn_t bcm2708_gpio_interrupt(int irq, void *dev_id) +{ -+ struct list_head *chip_list = get_irq_data(irq); -+ struct list_head *ptr; -+ struct bcm2708_gpio *chip; -+ unsigned gpio_bank; -+ -+ desc->chip->ack(irq); -+ list_for_each(ptr, chip_list) { -+ unsigned long pending; -+ int offset; -+ -+ chip = list_entry(ptr, struct bcm2708_gpio, list); -+ for (gpio_bank = 0; gpio_bank < ARCH_NR_GPIOS/32; gpio_bank++) { -+ pending = readl(chip->base + GPIOEDS(gpio_bank)); -+ writel(pending, chip->base + GPIOEDS(gpio_bank)); -+ -+ if (pending == 0) -+ continue; -+ -+ for_each_set_bit(offset, &pending, ARCH_NR_GPIOS) -+ generic_handle_irq(gpio_to_irq(offset+32*gpio_bank)); ++ unsigned long edsr; ++ unsigned bank; ++ int i; ++ unsigned gpio; ++ for (bank = 0; bank <= 1; bank++) { ++ edsr = readl(__io_address(GPIO_BASE) + GPIOEDS(bank)); ++ for_each_set_bit(i, &edsr, 32) { ++ gpio = i + bank * 32; ++ generic_handle_irq(gpio_to_irq(gpio)); + } ++ writel(0xffffffff, __io_address(GPIO_BASE) + GPIOEDS(bank)); + } -+ desc->chip->unmask(irq); ++ return IRQ_HANDLED; +} -+#endif /* #if BCM_GPIO_USE_IRQ */ ++ ++static struct irqaction bcm2708_gpio_irq = { ++ .name = "BCM2708 GPIO catchall handler", ++ .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, ++ .handler = bcm2708_gpio_interrupt, ++}; ++ ++static void bcm2708_gpio_irq_init(struct bcm2708_gpio *ucb) ++{ ++ unsigned irq; ++ ++ ucb->gc.to_irq = bcm2708_gpio_to_irq; ++ ++ for (irq = GPIO_IRQ_START; irq < (GPIO_IRQ_START + GPIO_IRQS); irq++) { ++ irq_set_chip_data(irq, ucb); ++ irq_set_chip(irq, &bcm2708_irqchip); ++ set_irq_flags(irq, IRQF_VALID); ++ } ++ setup_irq(IRQ_GPIO3, &bcm2708_gpio_irq); ++} ++ ++#else ++ ++static void bcm2708_gpio_irq_init(struct bcm2708_gpio *ucb) ++{ ++} ++ ++#endif /* #if BCM_GPIO_USE_IRQ ***************************************************************************************************************** */ + +static int bcm2708_gpio_probe(struct platform_device *dev) +{ @@ -48848,7 +48155,7 @@ index 0000000..59df912 + struct resource *res; + int err = 0; + -+ printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); ++ printk(KERN_INFO DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); + + ucb = kzalloc(sizeof(*ucb), GFP_KERNEL); + if (NULL == ucb) { @@ -48861,7 +48168,7 @@ index 0000000..59df912 + res = platform_get_resource(dev, IORESOURCE_MEM, 0); + + platform_set_drvdata(dev, ucb); -+ ucb->base = __io_address(GPIO_BASE); ++ ucb->base = __io_address(GPIO_BASE); + + ucb->gc.label = "bcm2708_gpio"; + ucb->gc.base = 0; @@ -48874,6 +48181,8 @@ index 0000000..59df912 + ucb->gc.set = bcm2708_gpio_set; + ucb->gc.can_sleep = 0; + ++ bcm2708_gpio_irq_init(ucb); ++ + err = gpiochip_add(&ucb->gc); + if (err) + goto err; @@ -48899,11 +48208,10 @@ index 0000000..59df912 +} + +static struct platform_driver bcm2708_gpio_driver = { -+ .probe = bcm2708_gpio_probe, -+ .remove = bcm2708_gpio_remove, -+ .driver = { -+ .name = "bcm2708_gpio" -+ }, ++ .probe = bcm2708_gpio_probe, ++ .remove = bcm2708_gpio_remove, ++ .driver = { ++ .name = "bcm2708_gpio"}, +}; + +static int __init bcm2708_gpio_init(void) @@ -48921,7 +48229,6 @@ index 0000000..59df912 + +MODULE_DESCRIPTION("Broadcom BCM2708 GPIO driver"); +MODULE_LICENSE("GPL"); -+ diff --git a/arch/arm/mach-bcm2708/clock.c b/arch/arm/mach-bcm2708/clock.c new file mode 100644 index 0000000..4fc556e @@ -49928,10 +49235,10 @@ index 0000000..04b37a8 +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/debug-macro.S b/arch/arm/mach-bcm2708/include/mach/debug-macro.S new file mode 100644 -index 0000000..8abbf32 +index 0000000..2d0dc1c --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/debug-macro.S -@@ -0,0 +1,24 @@ +@@ -0,0 +1,22 @@ +/* arch/arm/mach-bcm2708/include/mach/debug-macro.S + * + * Debugging macro include header @@ -49946,13 +49253,11 @@ index 0000000..8abbf32 + * +*/ + -+ .macro addruart, rx, tmp -+ mrc p15, 0, \rx, c1, c0 -+ tst \rx, #1 @ MMU enabled? -+ moveq \rx, #0x08000000 -+ movne \rx, #0xf8000000 @ virtual base -+ orr \rx, \rx, #0x00200000 -+ orr \rx, \rx, #0x00001000 ++#include ++ ++ .macro addruart, rp, rv, tmp ++ ldr \rp, =UART0_BASE ++ ldr \rv, =IO_ADDRESS(UART0_BASE) + .endm + +#include @@ -50167,10 +49472,10 @@ index 0000000..dd51e07 +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/gpio.h b/arch/arm/mach-bcm2708/include/mach/gpio.h new file mode 100644 -index 0000000..526004f +index 0000000..f600bc7 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/gpio.h -@@ -0,0 +1,48 @@ +@@ -0,0 +1,18 @@ +/* + * arch/arm/mach-bcm2708/include/mach/gpio.h + * @@ -50184,41 +49489,11 @@ index 0000000..526004f + +#define ARCH_NR_GPIOS 54 // number of gpio lines + -+#include -+ -+ -+#ifdef CONFIG_GPIOLIB -+ -+static inline int gpio_get_value(unsigned gpio) -+{ -+ return __gpio_get_value(gpio); -+} -+ -+static inline void gpio_set_value(unsigned gpio, int value) -+{ -+ __gpio_set_value(gpio, value); -+} -+ -+static inline int gpio_cansleep(unsigned gpio) -+{ -+ return __gpio_cansleep(gpio); -+} -+ -+static inline int gpio_to_irq(unsigned gpio) -+{ -+ WARN_ON(1); -+ return -ENOSYS; -+} -+ -+static inline int irq_to_gpio(unsigned int irq) -+{ -+ WARN_ON(1); -+ return -EINVAL; -+} -+ -+#endif /* CONFIG_GPIOLIB */ ++#define gpio_to_irq(x) ((x) + GPIO_IRQ_START) ++#define irq_to_gpio(x) ((x) - GPIO_IRQ_START) + +#endif ++ diff --git a/arch/arm/mach-bcm2708/include/mach/hardware.h b/arch/arm/mach-bcm2708/include/mach/hardware.h new file mode 100644 index 0000000..c2954e8 @@ -50255,10 +49530,10 @@ index 0000000..c2954e8 +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/io.h b/arch/arm/mach-bcm2708/include/mach/io.h new file mode 100644 -index 0000000..e8c7fca +index 0000000..e6eb84d --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/io.h -@@ -0,0 +1,28 @@ +@@ -0,0 +1,27 @@ +/* + * arch/arm/mach-bcm2708/include/mach/io.h + * @@ -50284,15 +49559,14 @@ index 0000000..e8c7fca +#define IO_SPACE_LIMIT 0xffffffff + +#define __io(a) __typesafe_io(a) -+#define __mem_pci(a) (a) + +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/irqs.h b/arch/arm/mach-bcm2708/include/mach/irqs.h new file mode 100644 -index 0000000..f59d474 +index 0000000..e8bb068 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/irqs.h -@@ -0,0 +1,190 @@ +@@ -0,0 +1,196 @@ +/* + * arch/arm/mach-bcm2708/include/mach/irqs.h + * @@ -50480,15 +49754,21 @@ index 0000000..f59d474 +#define FIQ_PENDING1 INT_PENDING1 +#define FIQ_PENDING2 INT_PENDING2 + -+#define NR_IRQS (64 + 21) ++#define HARD_IRQS (64 + 21) ++#define GPIO_IRQ_START HARD_IRQS ++ ++#define GPIO_IRQS 32*5 ++ ++#define NR_IRQS HARD_IRQS+GPIO_IRQS ++ + +#endif /* _BCM2708_IRQS_H_ */ diff --git a/arch/arm/mach-bcm2708/include/mach/memory.h b/arch/arm/mach-bcm2708/include/mach/memory.h new file mode 100644 -index 0000000..c6a21cb +index 0000000..521540d --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/memory.h -@@ -0,0 +1,59 @@ +@@ -0,0 +1,57 @@ +/* + * arch/arm/mach-bcm2708/include/mach/memory.h + * @@ -50523,9 +49803,14 @@ index 0000000..c6a21cb +/* + * Physical DRAM offset. + */ -+#define PHYS_OFFSET UL(0x00000000) -+#define ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ -+#define _REAL_BUS_OFFSET UL(0xC0000000) /* don't use L1 or L2 caches */ ++#define PLAT_PHYS_OFFSET UL(0x00000000) ++#define VC_ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ ++ ++#ifdef CONFIG_BCM2708_NOL2CACHE ++ #define _REAL_BUS_OFFSET UL(0xC0000000) /* don't use L1 or L2 caches */ ++#else ++ #define _REAL_BUS_OFFSET UL(0x40000000) /* use L2 cache */ ++#endif + +/* We're using the memory at 64M in the VideoCore for Linux - this adjustment + * will provide the offset into this area as well as setting the bits that @@ -50534,26 +49819,19 @@ index 0000000..c6a21cb + * WARNING: this only works because the ARM is given memory at a fixed location + * (ARMMEM_OFFSET) + */ -+#define BUS_OFFSET (ARMMEM_OFFSET + _REAL_BUS_OFFSET) ++#define BUS_OFFSET (VC_ARMMEM_OFFSET + _REAL_BUS_OFFSET) +#define __virt_to_bus(x) ((x) + (BUS_OFFSET - PAGE_OFFSET)) +#define __bus_to_virt(x) ((x) - (BUS_OFFSET - PAGE_OFFSET)) -+#define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET)) -+#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET)) -+ -+/* -+ * Consistent DMA area set to 2M. Framebuffer now allocated on host -+ */ -+ -+ -+#define CONSISTENT_DMA_SIZE 0x00200000 ++#define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PLAT_PHYS_OFFSET)) ++#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PLAT_PHYS_OFFSET)) + +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h new file mode 100644 -index 0000000..5cb1caa +index 0000000..110ce07 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/platform.h -@@ -0,0 +1,210 @@ +@@ -0,0 +1,220 @@ +/* + * arch/arm/mach-bcm2708/include/mach/platform.h + * @@ -50581,7 +49859,7 @@ index 0000000..5cb1caa +/* macros to get at IO space when running virtually */ +#define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000) + -+#define __io_address(a) __io(IO_ADDRESS(a)) ++#define __io_address(n) IOMEM(IO_ADDRESS(n)) + + +/* @@ -50747,6 +50025,7 @@ index 0000000..5cb1caa + * Watchdog + */ +#define PM_RSTC (PM_BASE+0x1c) ++#define PM_RSTS (PM_BASE+0x20) +#define PM_WDOG (PM_BASE+0x24) + +#define PM_WDOG_RESET 0000000000 @@ -50755,11 +50034,20 @@ index 0000000..5cb1caa +#define PM_RSTC_WRCFG_CLR 0xffffffcf +#define PM_RSTC_WRCFG_SET 0x00000030 +#define PM_RSTC_WRCFG_FULL_RESET 0x00000020 -+#define PM_RSTC_RESET 0x00000102 -+ -+ ++#define PM_RSTC_RESET 0x00000102 + ++#define PM_RSTS_HADPOR_SET 0x00001000 ++#define PM_RSTS_HADSRH_SET 0x00000400 ++#define PM_RSTS_HADSRF_SET 0x00000200 ++#define PM_RSTS_HADSRQ_SET 0x00000100 ++#define PM_RSTS_HADWRH_SET 0x00000040 ++#define PM_RSTS_HADWRF_SET 0x00000020 ++#define PM_RSTS_HADWRQ_SET 0x00000010 ++#define PM_RSTS_HADDRH_SET 0x00000004 ++#define PM_RSTS_HADDRF_SET 0x00000002 ++#define PM_RSTS_HADDRQ_SET 0x00000001 + ++#define UART0_CLOCK 3000000 + +#endif + @@ -50886,10 +50174,10 @@ index 0000000..64a660c +#define CLOCK_TICK_RATE (1000000) diff --git a/arch/arm/mach-bcm2708/include/mach/uncompress.h b/arch/arm/mach-bcm2708/include/mach/uncompress.h new file mode 100644 -index 0000000..8ad4f5c +index 0000000..6ff8f94 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/uncompress.h -@@ -0,0 +1,49 @@ +@@ -0,0 +1,85 @@ +/* + * arch/arm/mach-bcn2708/include/mach/uncompress.h + * @@ -50912,33 +50200,69 @@ index 0000000..8ad4f5c + */ + +#include ++#include +#include + -+#define BCM2708_UART_DR __io_address(UART0_BASE + 0x00) -+#define BCM2708_UART_FR __io_address(UART0_BASE + 0x18) ++#define UART_BAUD 115200 ++ ++#define BCM2708_UART_DR __io(UART0_BASE + UART01x_DR) ++#define BCM2708_UART_FR __io(UART0_BASE + UART01x_FR) ++#define BCM2708_UART_IBRD __io(UART0_BASE + UART011_IBRD) ++#define BCM2708_UART_FBRD __io(UART0_BASE + UART011_FBRD) ++#define BCM2708_UART_LCRH __io(UART0_BASE + UART011_LCRH) ++#define BCM2708_UART_CR __io(UART0_BASE + UART011_CR) + +/* + * This does not append a newline + */ +static inline void putc(int c) +{ -+ while (readl(BCM2708_UART_FR) & (1 << 5)) ++ while (__raw_readl(BCM2708_UART_FR) & UART01x_FR_TXFF) + barrier(); + -+ writel(c, BCM2708_UART_DR); ++ __raw_writel(c, BCM2708_UART_DR); +} + +static inline void flush(void) +{ -+ while (readl(BCM2708_UART_FR) & (1 << 3)) ++ int fr; ++ ++ do { ++ fr = __raw_readl(BCM2708_UART_FR); + barrier(); ++ } while ((fr & (UART011_FR_TXFE | UART01x_FR_BUSY)) != UART011_FR_TXFE); ++} ++ ++static inline void arch_decomp_setup(void) ++{ ++ int temp, div, rem, frac; ++ ++ temp = 16 * UART_BAUD; ++ div = UART0_CLOCK / temp; ++ rem = UART0_CLOCK % temp; ++ temp = (8 * rem) / UART_BAUD; ++ frac = (temp >> 1) + (temp & 1); ++ ++ /* Make sure the UART is disabled before we start */ ++ __raw_writel(0, BCM2708_UART_CR); ++ ++ /* Set the baud rate */ ++ __raw_writel(div, BCM2708_UART_IBRD); ++ __raw_writel(frac, BCM2708_UART_FBRD); ++ ++ /* Set the UART to 8n1, FIFO enabled */ ++ __raw_writel(UART01x_LCRH_WLEN_8 | UART01x_LCRH_FEN, BCM2708_UART_LCRH); ++ ++ /* Enable the UART */ ++ __raw_writel(UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_RXE, ++ BCM2708_UART_CR); +} + +/* + * nothing to do + */ -+#define arch_decomp_setup() +#define arch_decomp_wdog() ++ diff --git a/arch/arm/mach-bcm2708/include/mach/vc_mem.h b/arch/arm/mach-bcm2708/include/mach/vc_mem.h new file mode 100644 index 0000000..9d41c3a @@ -51056,10 +50380,10 @@ index 0000000..28ecc15 +#define VMALLOC_END (0xd8000000) diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c new file mode 100644 -index 0000000..10aef47 +index 0000000..256bf1a --- /dev/null +++ b/arch/arm/mach-bcm2708/power.c -@@ -0,0 +1,193 @@ +@@ -0,0 +1,194 @@ +/* + * linux/arch/arm/mach-bcm2708/power.c + * @@ -51223,6 +50547,7 @@ index 0000000..10aef47 + int i; + + printk(KERN_INFO "bcm_power: Broadcom power driver\n"); ++ bcm_mailbox_write(MBOX_CHAN_POWER, 0); + + for (i = 0; i < BCM_POWER_MAXCLIENTS; i++) + g_state.client_request[i] = BCM_POWER_NOCLIENT; @@ -51727,10 +51052,10 @@ index 0000000..67c10ee +MODULE_AUTHOR("Broadcom Corporation"); diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c new file mode 100644 -index 0000000..b7d1e14 +index 0000000..799a0ac --- /dev/null +++ b/arch/arm/mach-bcm2708/vcio.c -@@ -0,0 +1,309 @@ +@@ -0,0 +1,308 @@ +/* + * linux/arch/arm/mach-bcm2708/vcio.c + * @@ -51852,8 +51177,7 @@ index 0000000..b7d1e14 + if (mbox->magic != MBOX_MAGIC) + rc = -EINVAL; + else { -+ if (mbox->msg[chan] || -+ (down_interruptible(&mbox->sema[chan]) == 0)) { ++ if (down_interruptible(&mbox->sema[chan]) == 0) { + *data28 = MBOX_DATA28(mbox->msg[chan]); + mbox->msg[chan] = 0; + rc = 0; @@ -52041,7 +51365,7 @@ index 0000000..b7d1e14 +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:bcm-mbox"); diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig -index 3fd629d..596d9ad 100644 +index 4045c49..f5cc7bb 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig @@ -358,7 +358,7 @@ config CPU_PJ4B @@ -52054,7 +51378,7 @@ index 3fd629d..596d9ad 100644 select CPU_ABRT_EV6 select CPU_CACHE_V6 diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S -index 09c5233..433df86 100644 +index 5c07ee4..f7992a5 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S @@ -73,10 +73,19 @@ ENDPROC(cpu_v6_reset) @@ -52080,11 +51404,23 @@ index 09c5233..433df86 100644 mov pc, lr ENTRY(cpu_v6_dcache_clean_area) +diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types +index 831e1fd..bcd2fdb 100644 +--- a/arch/arm/tools/mach-types ++++ b/arch/arm/tools/mach-types +@@ -517,6 +517,7 @@ torbreck MACH_TORBRECK TORBRECK 3090 + prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103 + paz00 MACH_PAZ00 PAZ00 3128 + acmenetusfoxg20 MACH_ACMENETUSFOXG20 ACMENETUSFOXG20 3129 ++bcm2708 MACH_BCM2708 BCM2708 3138 + ag5evm MACH_AG5EVM AG5EVM 3189 + tsunagi MACH_TSUNAGI TSUNAGI 3197 + ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206 diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig -index 8d13c65..3210927 100644 +index 9c581c2..92f0790 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig -@@ -241,6 +241,27 @@ config MMC_SDHCI_S3C_DMA +@@ -238,6 +238,27 @@ config MMC_SDHCI_S3C_DMA YMMV. @@ -52102,35 +51438,18 @@ index 8d13c65..3210927 100644 + +config MMC_SDHCI_BCM2708_DMA + bool "DMA support on BCM2708 Arasan controller" -+ depends on MMC_SDHCI_BCM2708 && EXPERIMENTAL ++ depends on MMC_SDHCI_BCM2708 + help -+ Enable DMA support on the Arasan SDHCI controller in Broadcom 2708 -+ based chips. -+ -+ If unsure, say N. -+ - config MMC_OMAP - tristate "TI OMAP Multimedia Card Interface support" - depends on ARCH_OMAP -@@ -292,6 +313,16 @@ config MMC_ATMELMCI - - If unsure, say N. - -+endchoice -+config MMC_BCM2708 -+ tristate "BCM2708 Multimedia Card Interface support" -+ help -+ This selects the BCM2708 Multimedia Card Interface driver. If -+ you have a BCM2708 platform with a Multimedia Card -+ slot, say Y or M here. ++ Enable DMA support on the Arasan SDHCI controller in Broadcom 2708 ++ based chips. + + If unsure, say N. + - config MMC_ATMELMCI_DMA - bool "Atmel MCI DMA support" - depends on MMC_ATMELMCI && (AVR32 || ARCH_AT91SAM9G45) && DMA_ENGINE + config MMC_SDHCI_BCM2835 + tristate "SDHCI platform support for the BCM2835 SD/MMC Controller" + depends on ARCH_BCM2835 diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile -index e4e218c..16055fb 100644 +index c380e3c..497b3a5 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_MMC_SDHCI_PXAV3) += sdhci-pxav3.o @@ -52141,1022 +51460,12 @@ index e4e218c..16055fb 100644 obj-$(CONFIG_MMC_WBSD) += wbsd.o obj-$(CONFIG_MMC_AU1X) += au1xmmc.o obj-$(CONFIG_MMC_OMAP) += omap.o -@@ -36,6 +37,7 @@ tmio_mmc_core-$(subst m,y,$(CONFIG_MMC_SDHI)) += tmio_mmc_dma.o - obj-$(CONFIG_MMC_SDHI) += sh_mobile_sdhi.o - obj-$(CONFIG_MMC_CB710) += cb710-mmc.o - obj-$(CONFIG_MMC_VIA_SDMMC) += via-sdmmc.o -+obj-$(CONFIG_MMC_BCM2708) += bcm2708_mci.o - obj-$(CONFIG_SDH_BFIN) += bfin_sdh.o - obj-$(CONFIG_MMC_DW) += dw_mmc.o - obj-$(CONFIG_MMC_DW_PLTFM) += dw_mmc-pltfm.o -diff --git a/drivers/mmc/host/bcm2708_mci.c b/drivers/mmc/host/bcm2708_mci.c -new file mode 100644 -index 0000000..3c7de96 ---- /dev/null -+++ b/drivers/mmc/host/bcm2708_mci.c -@@ -0,0 +1,889 @@ -+/* -+ * linux/drivers/mmc/host/bcm2708_mci.c - Broadcom BCM2708 MCI driver -+ * -+ * Copyright (C) 2010 Broadcom, All Rights Reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+//#include -+ -+#include -+ -+#include "bcm2708_mci.h" -+ -+#define DRIVER_NAME "bcm2708_mci" -+ -+//#define PIO_DEBUG -+#ifdef PIO_DEBUG -+#define DBG(host,fmt,args...) \ -+ printk(KERN_ERR"%s: %s: " fmt, mmc_hostname(host->mmc), __func__ , args) -+#else -+#define DBG(host,fmt,args...) \ -+ pr_debug("%s: %s: " fmt, mmc_hostname(host->mmc), __func__ , args) -+#endif -+ -+#define USE_DMA -+#define USE_DMA_IRQ -+ -+#ifdef USE_DMA -+#define SDHOST_DMA_CHANNEL 5 -+#endif -+ -+#define BCM2708_DMA_ACTIVE (1 << 0) -+#define BCM2708_DMA_INT (1 << 2) -+ -+#define BCM2708_DMA_INT_EN (1 << 0) -+#define BCM2708_DMA_D_INC (1 << 4) -+#define BCM2708_DMA_D_WIDTH (1 << 5) -+#define BCM2708_DMA_D_DREQ (1 << 6) -+#define BCM2708_DMA_S_INC (1 << 8) -+#define BCM2708_DMA_S_WIDTH (1 << 9) -+#define BCM2708_DMA_S_DREQ (1 << 10) -+ -+#define BCM2708_DMA_PER_MAP(x) ((x) << 16) -+ -+#define BCM2708_DMA_DREQ_SDHOST 13 -+ -+#define BCM2708_DMA_CS 0x00 -+#define BCM2708_DMA_ADDR 0x04 -+ -+static void dump_sd_regs(void * mmc_base ); -+static int bcm2708_mci_reset(struct bcm2708_mci_host *host); -+ -+static void do_command(void __iomem *base, u32 c, u32 a) -+{ -+ u32 cmdsts = 0; -+ writel(a, base + BCM2708_MCI_ARGUMENT); -+ writel(c | BCM2708_MCI_ENABLE, base + BCM2708_MCI_COMMAND); -+ -+ /* check for error and command done */ -+ cmdsts = readl(base + BCM2708_MCI_COMMAND); -+ while ((cmdsts & BCM2708_MCI_ENABLE) && (!(cmdsts & BCM2708_MCI_FAIL_FLAG))) -+ cmdsts = readl(base + BCM2708_MCI_COMMAND); -+ if (cmdsts & BCM2708_MCI_FAIL_FLAG) { -+ printk(KERN_DEBUG"%s: Command %d failed with arg %d\n", __func__, c, a); -+ dump_sd_regs(base); -+ } -+} -+ -+//static void discard_words(void __iomem *base, int words) -+//{ -+// int i; -+// for (i = 0; i < words; i++) { -+// while (!(readl(base + BCM2708_MCI_STATUS) & BCM2708_MCI_DATAFLAG)); -+// readl(base + BCM2708_MCI_DATA); -+// } -+//} -+ -+#define CACHE_LINE_MASK 31 -+ -+static int suitable_for_dma(struct scatterlist *sg_ptr, int sg_len) -+{ -+ int i; -+ -+ for (i = 0; i < sg_len; i++) { -+ if (sg_ptr[i].offset & CACHE_LINE_MASK || sg_ptr[i].length & CACHE_LINE_MASK) -+ return 0; -+ } -+ -+ return 1; -+} -+ -+static void wait_for_complete(struct bcm2708_mci_host *host, -+ void __iomem *mmc_base) -+{ -+#ifdef USE_SDHOST_IRQ -+#error not implemented yet -+#else -+ while ((readl(mmc_base + BCM2708_MCI_STATUS) & -+ (BCM2708_MCI_HSTS_BUSY | BCM2708_MCI_HSTS_BLOCK)) == 0) -+ continue; -+ -+ writel(BCM2708_MCI_HSTS_BUSY | BCM2708_MCI_HSTS_BLOCK, -+ mmc_base + BCM2708_MCI_STATUS); -+#endif -+} -+ -+static void dump_sd_regs(void * mmc_base ) -+{ -+ printk(KERN_DEBUG"Registers:\n"); -+ printk(KERN_DEBUG"SDCMD:0x%x\n", readl(mmc_base + BCM2708_MCI_COMMAND)); -+ printk(KERN_DEBUG"SDARG:0x%x\n", readl(mmc_base + BCM2708_MCI_ARGUMENT)); -+ printk(KERN_DEBUG"SDTOUT:0x%x\n", readl(mmc_base + BCM2708_MCI_TIMEOUT)); -+ printk(KERN_DEBUG"SDCDIV:0x%x\n", readl(mmc_base + BCM2708_MCI_CLKDIV)); -+ printk(KERN_DEBUG"SDRSP0:0x%x\n", readl(mmc_base + BCM2708_MCI_RESPONSE0)); -+ printk(KERN_DEBUG"SDRSP1:0x%x\n", readl(mmc_base + BCM2708_MCI_RESPONSE1)); -+ printk(KERN_DEBUG"SDRSP2:0x%x\n", readl(mmc_base + BCM2708_MCI_RESPONSE2)); -+ printk(KERN_DEBUG"SDRSP3:0x%x\n", readl(mmc_base + BCM2708_MCI_RESPONSE3)); -+ printk(KERN_DEBUG"SDHSTS:0x%x\n", readl(mmc_base + BCM2708_MCI_STATUS)); -+ printk(KERN_DEBUG"SDPO:0x%x\n", readl(mmc_base + BCM2708_MCI_VDD)); -+ printk(KERN_DEBUG"SDEDM:0x%x\n", readl(mmc_base + BCM2708_MCI_EDM)); -+ printk(KERN_DEBUG"SDHCFG:0x%x\n", readl(mmc_base + BCM2708_MCI_HOSTCONFIG)); -+ printk(KERN_DEBUG"SDHBCT:0x%x\n", readl(mmc_base + BCM2708_MCI_HBCT)); -+ //printk(KERN_ERR"SDDATA:0x%x\n", readl(mmc_base + BCM2708_MCI_DATA)); -+ printk(KERN_DEBUG"SDHBLC:0x%x\n", readl(mmc_base + BCM2708_MCI_HBLC)); -+} -+ -+ -+static void -+bcm2708_mci_start_command(struct bcm2708_mci_host *host, struct mmc_command *cmd, struct mmc_data *data) -+{ -+ void __iomem *mmc_base = host->mmc_base; -+ void __iomem *dma_base = host->dma_base; -+ u32 status; -+ u32 c; -+ int redo = 0; -+ -+ DBG(host, "op %02x arg %08x flags %08x\n", -+ cmd->opcode, cmd->arg, cmd->flags); -+ -+back: -+ -+ /* -+ * clear the controller status register -+ */ -+ -+ writel(-1, mmc_base + BCM2708_MCI_STATUS); -+ -+ /* -+ * build the command register write, incorporating no -+ * response, long response, busy, read and write flags -+ */ -+ -+ c = cmd->opcode; -+ if (cmd->flags & MMC_RSP_PRESENT) { -+ if (cmd->flags & MMC_RSP_136) -+ c |= BCM2708_MCI_LONGRESP; -+ } else -+ c |= BCM2708_MCI_NORESP; -+ if (cmd->flags & MMC_RSP_BUSY) -+ c |= BCM2708_MCI_BUSY; -+ -+ if (data) { -+ if (data->flags & MMC_DATA_READ) -+ c |= BCM2708_MCI_READ; -+ else -+ c |= BCM2708_MCI_WRITE; -+ -+ DBG(host, "BYTECOUT %d BLOCKCOUNT %d .. ",readl(mmc_base + BCM2708_MCI_HBCT), readl(mmc_base + BCM2708_MCI_HBLC)); -+ DBG(host, "set blocksize to %d\n", data->blksz); -+ DBG(host, "set blockcnt to %d\n", data->blocks); -+ writel( data->blksz, mmc_base + BCM2708_MCI_HBCT); -+ writel(data->blocks, mmc_base + BCM2708_MCI_HBLC); -+ } -+ -+ /* -+ * run the command and wait for it to complete -+ */ -+ -+ DBG(host, "executing command=%d\n", cmd->opcode); -+ -+ do_command(mmc_base, c, cmd->arg); -+ -+ DBG(host, "done cmd=%d\n", cmd->opcode); -+ -+ if (c & BCM2708_MCI_BUSY) { -+ -+ DBG(host, "waiting for command(%d) to complete\n", cmd->opcode); -+ wait_for_complete(host, mmc_base); -+ DBG(host, "done waiting for command(%d)\n", cmd->opcode); -+ } -+ -+ /* -+ * retrieve the response and error (if any) -+ */ -+ -+ status = readl(mmc_base + BCM2708_MCI_STATUS); -+ -+ if (cmd->flags & MMC_RSP_136) { -+ cmd->resp[3] = readl(mmc_base + BCM2708_MCI_RESPONSE0); -+ cmd->resp[2] = readl(mmc_base + BCM2708_MCI_RESPONSE1); -+ cmd->resp[1] = readl(mmc_base + BCM2708_MCI_RESPONSE2); -+ cmd->resp[0] = readl(mmc_base + BCM2708_MCI_RESPONSE3); -+ } else { -+ cmd->resp[0] = readl(mmc_base + BCM2708_MCI_RESPONSE0); -+ } -+ -+ if (status & BCM2708_MCI_CMDTIMEOUT) { -+ printk(KERN_DEBUG "mmc driver saw timeout with opcode = %d, data = 0x%08x, timeout = %d", cmd->opcode, (unsigned int)data, readl(mmc_base + BCM2708_MCI_TIMEOUT)); -+ if (data) -+ printk(KERN_DEBUG " data->sg_len = %d\n", data->sg_len); -+ else -+ printk(KERN_DEBUG "\n"); -+ if (!redo) { -+ printk(KERN_DEBUG "redo\n"); -+ redo = 1; -+ goto back; -+ } else -+ cmd->error = -ETIMEDOUT; -+ } -+ -+ /* -+ * pump data if necessary -+ */ -+ -+ if (data) { -+ unsigned int sg_len = data->sg_len; -+ struct scatterlist *sg_ptr = data->sg; -+ -+ data->bytes_xfered = 0; -+ -+#ifdef USE_DMA -+ if (suitable_for_dma(sg_ptr, sg_len)) { -+ int i, count = dma_map_sg(&host->dev->dev, sg_ptr, sg_len, data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE); -+ -+ for (i = 0; i < count; i++) { -+ BCM2708_DMA_CB_T *cb = &host->cb_base[i]; -+ -+ if (data->flags & MMC_DATA_READ) { -+ cb->info = BCM2708_DMA_PER_MAP(BCM2708_DMA_DREQ_SDHOST)|BCM2708_DMA_S_DREQ|BCM2708_DMA_D_WIDTH|BCM2708_DMA_D_INC; -+ cb->src = 0x7e202040; -+ cb->dst = sg_dma_address(&sg_ptr[i]); -+ } else { -+ cb->info = BCM2708_DMA_PER_MAP(BCM2708_DMA_DREQ_SDHOST)|BCM2708_DMA_S_WIDTH|BCM2708_DMA_S_INC|BCM2708_DMA_D_DREQ; -+ cb->src = sg_dma_address(&sg_ptr[i]); -+ cb->dst = 0x7e202040; -+ } -+ -+ cb->length = sg_dma_len(&sg_ptr[i]); -+ cb->stride = 0; -+ -+ if (i == count - 1) { -+#ifdef USE_DMA_IRQ -+ cb->info |= BCM2708_DMA_INT_EN; -+#endif -+ cb->next = 0; -+ } else -+ cb->next = host->cb_handle + (i + 1) * sizeof(BCM2708_DMA_CB_T); -+ -+ cb->pad[0] = 0; -+ cb->pad[1] = 0; -+ -+ data->bytes_xfered += sg_ptr[i].length; -+ } -+ -+ dsb(); // data barrier operation -+ -+ writel(host->cb_handle, dma_base + BCM2708_DMA_ADDR); -+ writel(BCM2708_DMA_ACTIVE, dma_base + BCM2708_DMA_CS); -+ -+#ifdef USE_DMA_IRQ -+ down(&host->sem); -+#else -+ while ((readl(dma_base + BCM2708_DMA_CS) & BCM2708_DMA_ACTIVE)); -+#endif -+ dma_unmap_sg(&host->dev->dev, sg_ptr, sg_len, data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE); -+ } else -+#endif -+ while (sg_len) { -+ unsigned long flags; -+ char *buffer; -+ u32 *ptr, *lim; -+ -+ DBG(host, "sg_len=%d sg_ptr=%p len=%d\n", sg_len, sg_ptr, sg_ptr->length); -+ -+ /* -+ * map the current scatter buffer -+ */ -+ -+ buffer = bcm2708_mci_kmap_atomic(sg_ptr, &flags); -+ -+ /* -+ * pump the data -+ */ -+ -+ ptr = (u32 *)(buffer); -+ lim = (u32 *)(buffer + sg_ptr->length); -+ -+ while (ptr < lim) -+ { -+#ifdef PIO_DEBUG -+ unsigned int wait_count = 1; -+#endif -+ while (!(readl(mmc_base + BCM2708_MCI_STATUS) & BCM2708_MCI_DATAFLAG)) -+ { -+#ifdef PIO_DEBUG -+ wait_count++; -+ if ( 0 == (wait_count % 20000) ) { -+ -+ printk(KERN_ERR"Timeout waiting for data flag\n"); -+ dump_sd_regs(mmc_base); -+ } -+#endif -+ } -+ -+ if (data->flags & MMC_DATA_READ) -+ *ptr++ = readl(mmc_base + BCM2708_MCI_DATA); -+ else -+ { -+#ifdef PIO_DEBUG -+ uint32_t fifo_bytes, fifo_wait_count = 1; -+ -+ fifo_bytes = readl(mmc_base + BCM2708_MCI_EDM); -+ fifo_bytes = (fifo_bytes >> 4) & 0xf; -+ -+ while(fifo_bytes > 3) -+ { -+ fifo_wait_count++; -+ if ( 0 == (fifo_wait_count % 20000) ) { -+ printk(KERN_ERR"waiting for fifo_bytes < 3\n"); -+ dump_sd_regs(mmc_base); -+ } -+ -+ fifo_bytes = readl(mmc_base + BCM2708_MCI_EDM); -+ fifo_bytes = (fifo_bytes >> 4) & 0xf; -+ } -+ -+ BUG_ON(fifo_bytes > 3); -+#endif -+ writel(*ptr++, mmc_base + BCM2708_MCI_DATA); -+ } -+ } -+ -+ DBG(host, "done reading/writing %d bytes from mmc\n", sg_ptr->length); -+ -+ -+ /* -+ * unmap the buffer -+ */ -+ -+ bcm2708_mci_kunmap_atomic(buffer, &flags); -+ -+ /* -+ * if we were reading, and we have completed this -+ * page, ensure that the data cache is coherent -+ */ -+ -+ if (data->flags & MMC_DATA_READ) -+ flush_dcache_page(sg_page(sg_ptr)); -+ -+ data->bytes_xfered += sg_ptr->length; -+ -+ sg_ptr++; -+ sg_len--; -+ } -+ -+// if (host->is_acmd && cmd->opcode == SD_APP_SEND_SCR) -+// discard_words(mmc_base, 126); -+// if (host->is_acmd && cmd->opcode == SD_APP_SEND_NUM_WR_BLKS) -+// discard_words(mmc_base, 127); -+// if (!host->is_acmd && cmd->opcode == SD_SWITCH) -+// discard_words(mmc_base, 112); -+ -+ if (data->stop) { -+ -+ DBG(host, "sending stop command %p\n", data->stop); -+ bcm2708_mci_start_command(host, data->stop, 0); -+ -+ while ((readl(mmc_base + BCM2708_MCI_STATUS) & -+ BCM2708_MCI_DATAFLAG)) -+ { -+ DBG(host, "error data flag still set read=%d bytes\n", sg_ptr->length); -+ printk(KERN_ERR"SDDATA:0x%x\n", readl(mmc_base + BCM2708_MCI_DATA)); -+ dump_sd_regs(mmc_base); -+ } -+ } -+ } -+ /* -+ * remember if we're an application command -+ */ -+ host->is_acmd = cmd->opcode == MMC_APP_CMD; -+} -+ -+static void bcm2708_mci_request(struct mmc_host *mmc, struct mmc_request *mrq) -+{ -+ struct bcm2708_mci_host *host = mmc_priv(mmc); -+ -+ if (mrq->data && !is_power_of_2(mrq->data->blksz)) { -+ printk(KERN_ERR "%s: Unsupported block size (%d bytes)\n", -+ mmc_hostname(mmc), mrq->data->blksz); -+ mrq->cmd->error = -EINVAL; -+ mmc_request_done(mmc, mrq); -+ return; -+ } -+ -+ bcm2708_mci_start_command(host, mrq->cmd, mrq->data); -+ -+ mmc_request_done(host->mmc, mrq); -+} -+ -+static void bcm2708_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) -+{ -+ -+ struct bcm2708_mci_host *host = mmc_priv(mmc); -+ void *mmc_base = host->mmc_base; -+ -+ -+ printk(KERN_DEBUG"%s: Want to set clock: %d width: %d\n", mmc_hostname(mmc), -+ ios->clock, ios->bus_width); -+ -+ if (ios->clock == 25000000 || ios->clock == 26000000) { -+ printk(KERN_DEBUG"%s setting clock div to 10 (8+2)\n", mmc_hostname(mmc)); -+ writel(0x8, mmc_base + BCM2708_MCI_CLKDIV); -+ } else if (ios->clock == 50000000 || ios->clock == 52000000) { -+ printk(KERN_DEBUG"%s setting clock div to 5 (3+2)\n", mmc_hostname(mmc)); -+ writel(0x3, mmc_base + BCM2708_MCI_CLKDIV); -+ } else { -+ // On init or unknown clock, we set the clock really low -+ printk(KERN_DEBUG"%s Setting clock div to 0x4e0\n", mmc_hostname(mmc)); -+ writel(0x4e0, mmc_base + BCM2708_MCI_CLKDIV); -+ } -+ -+ if (ios->bus_width) { -+ uint32_t hcfg; -+ hcfg = readl(mmc_base + BCM2708_MCI_HOSTCONFIG); -+ printk(KERN_DEBUG"%s setting bus width to %d\n", mmc_hostname(mmc), ios->bus_width); -+ -+ hcfg &= BCM2708_MCI_HOSTCONFIG_WIDEEXT_CLR; -+ hcfg |= (ios->bus_width == MMC_BUS_WIDTH_4) ? BCM2708_MCI_HOSTCONFIG_WIDEEXT_4BIT : 0; -+ -+ writel(hcfg, mmc_base + BCM2708_MCI_HOSTCONFIG); -+ } -+} -+ -+static int bcm2708_mci_get_cd(struct mmc_host *mmc) -+{ -+ int present = -ENOSYS; -+ -+ struct bcm2708_mci_host *host = mmc_priv(mmc); -+ void *gpio_base = host->gpio_base; -+ -+ present = readl( (gpio_base + GP_LEV0) ); -+ -+ if ((present & (1<<29))==(1<<29)) -+ present = 0; -+ else -+ present = 1; -+ -+ printk(KERN_DEBUG"***sdcard present***=%d\n", present); -+ -+ // FIXME - For now force SD card present for 2835DK -+ present = 1; -+ return present; -+} -+ -+/* -+ * Handle completion of command and data transfers. -+ */ -+ -+//static irqreturn_t bcm2708_mci_command_irq(int irq, void *dev_id) -+//{ -+// struct bcm2708_mci_host *host = dev_id; -+// -+// writel(BCM2708_DMA_INT, host->dma_base + BCM2708_DMA_CS); -+// -+// printk(KERN_ERR "irq\n"); -+// -+// return IRQ_RETVAL(0); -+//} -+ -+static irqreturn_t bcm2708_mci_sddet_irq(int irq, void *dev_id) -+{ -+ struct bcm2708_mci_host *host = dev_id; -+ irqreturn_t handled = IRQ_NONE; -+ int present; -+ -+ present = bcm2708_mci_get_cd(host->mmc); -+ -+ if (present!=host->present) -+ { -+ host->present = present; -+ printk(KERN_DEBUG "SDDET IRQ: sdcard present: %d\n",present); -+ bcm2708_mci_reset(host); -+ mmc_detect_change(host->mmc, msecs_to_jiffies(500)); -+ } -+ -+ return IRQ_RETVAL(handled); -+} -+ -+#ifdef USE_DMA_IRQ -+static irqreturn_t bcm2708_mci_data_irq(int irq, void *dev_id) -+{ -+ struct bcm2708_mci_host *host = dev_id; -+ irqreturn_t handled = IRQ_NONE; -+ -+ if (0 != (BCM2708_DMA_INT & readl(host->dma_base + BCM2708_DMA_CS))) { -+ writel(BCM2708_DMA_INT, host->dma_base + BCM2708_DMA_CS); -+ dsb(); -+ handled = IRQ_HANDLED; -+ up(&host->sem); -+ } else { -+ printk(KERN_ERR"bcm2708_mci irq check failed !!\n"); -+ } -+ -+ return IRQ_RETVAL(handled); -+} -+#endif -+ -+static const struct mmc_host_ops bcm2708_mci_ops = { -+ .request = bcm2708_mci_request, -+ .set_ios = bcm2708_mci_set_ios, -+ .get_cd = bcm2708_mci_get_cd, -+}; -+ -+static int bcm2708_mci_reset(struct bcm2708_mci_host *host) -+{ -+ -+ void *mmc_base = host->mmc_base; -+ -+ // pin muxing/gpios is done by vcloader -+ -+ printk(KERN_DEBUG"%s:Resetting BCM2708 MCI Controller.\n", __func__ ); -+ -+ writel(0, mmc_base + BCM2708_MCI_COMMAND); -+ writel(0, mmc_base + BCM2708_MCI_ARGUMENT); -+ writel(0x00F00000, mmc_base + BCM2708_MCI_TIMEOUT); -+ writel(0, mmc_base + BCM2708_MCI_CLKDIV); -+ writel(0, mmc_base + BCM2708_MCI_STATUS); -+ writel(0, mmc_base + BCM2708_MCI_VDD); -+ writel(0, mmc_base + BCM2708_MCI_HOSTCONFIG); -+ writel(0, mmc_base + BCM2708_MCI_HBCT); -+ writel(0, mmc_base + BCM2708_MCI_HBLC); -+ -+ writel( BCM2708_MCI_HOSTCONFIG_SLOW_CARD | BCM2708_MCI_HOSTCONFIG_BUSY_IRPT_EN | -+ BCM2708_MCI_HOSTCONFIG_BLOCK_IRPT_EN | BCM2708_MCI_HOSTCONFIG_WIDE_INT_BUS, -+ mmc_base + BCM2708_MCI_HOSTCONFIG); -+ -+ // On A0 silicon it has been observed that the following must hold -+ // WRITE_THRESHOLD<=5 and READ_THRESHOLD<=WRITE_THRESHOLD+1 -+ // with the chip running at 150MHz (with the interface running @ 150/22 = 6.8 MHz) -+ // the second requirement suggests that the verilog does not properly separate the read / write FIFOs -+ // On V3XDS Read=2 & Write=6 -+ -+#define READ_THRESHOLD 3 -+#define WRITE_THRESHOLD 3 -+#if 1 // !!! This is still required, without it we get CRC16 errors in data. -+ { -+ uint32_t temp; -+ temp = readl(mmc_base + BCM2708_MCI_EDM); -+ temp &= ~((0x1F<<14) | (0x1F<<9)); -+ temp |= (WRITE_THRESHOLD << 9) | (READ_THRESHOLD << 14); -+ writel(temp, mmc_base + BCM2708_MCI_EDM); -+ } -+#endif -+ -+ // Power on delay -+ mdelay(10); -+ writel(BCM2708_MCI_VDD_ENABLE, mmc_base + BCM2708_MCI_VDD); -+ mdelay(10); -+ -+ return 0; -+} -+ -+ -+static int __devinit bcm2708_mci_probe(struct platform_device *pdev) -+{ -+ struct mmc_host *mmc; -+ struct bcm2708_mci_host *host; -+ struct resource *mmc_res; -+ struct resource *dma_res; -+ struct resource *gpio_res; -+ struct resource *dat_res; -+ struct resource *sddet_res; -+ int ret; -+ -+ mmc = mmc_alloc_host(sizeof(struct bcm2708_mci_host), &pdev->dev); -+ if (!mmc) { -+ ret = -ENOMEM; -+ dev_dbg(&pdev->dev, "couldn't allocate mmc host\n"); -+ goto fail0; -+ } -+ -+ host = mmc_priv(mmc); -+ host->mmc = mmc; -+ -+ host->dev = pdev; -+ -+ sema_init(&host->sem, 0); -+ -+#ifdef USE_DMA -+ host->cb_base = dma_alloc_writecombine(&pdev->dev, SZ_4K, &host->cb_handle, GFP_KERNEL); -+ if (!host->cb_base) { -+ ret = -ENOMEM; -+ dev_dbg(&pdev->dev, "couldn't allocate dma base\n"); -+ goto fail1; -+ } -+#endif -+ -+ mmc_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ if (!mmc_res) { -+ ret = -ENXIO; -+ dev_dbg(&pdev->dev, "couldn't allocate mmc memory resource 0\n"); -+ goto fail2; -+ } -+ -+ if (!request_mem_region(mmc_res->start, mmc_res->end - mmc_res->start + 1, DRIVER_NAME)) { -+ ret = -EBUSY; -+ goto fail2; -+ } -+ -+ dma_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); -+ if (!dma_res) { -+ ret = -ENXIO; -+ dev_dbg(&pdev->dev, "couldn't allocate dma memory resource 1\n"); -+ goto fail3; -+ } -+ -+ /* -+ * Map I/O regions -+ */ -+ -+ host->mmc_base = ioremap(mmc_res->start, resource_size(mmc_res)); -+ if (!host->mmc_base) { -+ ret = -ENOMEM; -+ goto fail3; -+ } -+ -+ gpio_res = platform_get_resource(pdev, IORESOURCE_MEM, 2); -+ if (!gpio_res) { -+ ret = -ENXIO; -+ dev_dbg(&pdev->dev, "couldn't allocate gpio resource\n"); -+ goto fail4; -+ } -+ -+ /* -+ * Map I/O regions -+ */ -+ -+ host->gpio_base = ioremap(gpio_res->start, resource_size(gpio_res)); -+ if (!host->gpio_base) { -+ ret = -ENOMEM; -+ goto fail4; -+ } -+ -+#ifdef USE_DMA -+ host->dma_base = __io_address(dma_res->start); -+ -+ if (!host->dma_base) { -+ ret = -ENOMEM; -+ goto fail5; -+ } -+ -+ // USE DMA5 channel -+ host->dma_base = (void __iomem *)((char *) host->dma_base + (SDHOST_DMA_CHANNEL * 0x100)); -+ -+ dev_dbg(&pdev->dev, "%s: using dma channel %d for sdhost\n", __func__, SDHOST_DMA_CHANNEL); -+ -+ /* -+ * Grab interrupts. -+ */ -+#ifdef USE_DMA_IRQ -+ dat_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -+ if (!dat_res) { -+ ret = -ENXIO; -+ dev_dbg(&pdev->dev, "couldn't allocate irq for dma\n"); -+ goto fail5; -+ } -+ -+ ret = request_irq(dat_res->start, bcm2708_mci_data_irq, 0, DRIVER_NAME " (dat)", host); -+ if (ret) { -+ goto fail5; -+ } -+ dev_dbg(&pdev->dev, "%s: using dma interrupt number %d for sdhost\n", __func__, dat_res->start); -+ -+#endif -+#endif -+ -+ host->present = bcm2708_mci_get_cd(host->mmc); -+ -+ sddet_res = platform_get_resource(pdev, IORESOURCE_IRQ, 1); -+ if (!sddet_res) { -+ ret = -ENXIO; -+ dev_dbg(&pdev->dev, "couldn't allocate irq for sd detect\n"); -+ goto fail6; -+ } -+ -+ ret = request_irq(sddet_res->start, bcm2708_mci_sddet_irq, 0, DRIVER_NAME " (cmd)", host); -+ if (ret) { -+ goto fail6; -+ } -+ -+ host->is_acmd = 0; -+ -+ mmc->ops = &bcm2708_mci_ops; -+ mmc->f_min = 200000; -+ mmc->f_max = 52000000; -+ mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; -+ -+ /* -+ * We can do SGIO -+ */ -+ mmc->max_segs = NR_SG; -+ -+ /* -+ * Since we only have a 16-bit data length register, we must -+ * ensure that we don't exceed 2^16-1 bytes in a single request. -+ */ -+ mmc->max_req_size = 65535; -+ -+ /* -+ * Set the maximum segment size. Since we aren't doing DMA -+ * (yet) we are only limited by the data length register. -+ */ -+ mmc->max_seg_size = mmc->max_req_size; -+ -+ /* -+ * Block size can be up to 2048 bytes, but must be a power of two. -+ */ -+ mmc->max_blk_size = 2048; -+ -+ /* -+ * No limit on the number of blocks transferred. -+ */ -+ mmc->max_blk_count = mmc->max_req_size; -+ -+ /* -+ * We support 4-bit data (at least on the DB) -+ */ -+ -+ mmc->caps |= (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED) ; -+ -+ bcm2708_mci_reset(host); -+ -+ mmc_add_host(mmc); -+ -+ printk(KERN_INFO "%s: BCM2708 SD host at 0x%08llx 0x%08llx\n", -+ mmc_hostname(mmc), -+ (unsigned long long)mmc_res->start, (unsigned long long)dma_res->start); -+ -+ return 0; -+ -+fail6: -+#ifdef USE_DMA_IRQ -+ free_irq(dat_res->start, host); -+#endif -+fail5: -+ iounmap(host->gpio_base); -+fail4: -+ iounmap(host->mmc_base); -+fail3: -+ release_mem_region(mmc_res->start, mmc_res->end - mmc_res->start + 1); -+fail2: -+ dma_free_writecombine(&pdev->dev, SZ_4K, host->cb_base, host->cb_handle); -+fail1: -+ mmc_free_host(mmc); -+fail0: -+ dev_err(&pdev->dev, "probe failed, err %d\n", ret); -+ return ret; -+} -+ -+static int __devexit bcm2708_mci_remove(struct platform_device *pdev) -+{ -+ struct mmc_host *mmc = platform_get_drvdata(pdev); -+ -+ if (mmc) { -+ struct bcm2708_mci_host *host = mmc_priv(mmc); -+ struct resource *res; -+ struct resource *res2; -+ -+ mmc_remove_host(mmc); -+#ifdef USE_DMA -+#ifdef USE_DMA_IRQ -+ res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -+ free_irq(res->start, host); -+#endif -+#endif -+ -+ res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 1); -+ free_irq(res2->start, host); -+ -+ iounmap(host->mmc_base); -+ iounmap(host->gpio_base); -+ iounmap(host->dma_base); -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ release_mem_region(res->start, resource_size(res)); -+#ifdef USE_DMA -+ dma_free_writecombine(&pdev->dev, SZ_4K, host->cb_base, host->cb_handle); -+#endif -+ -+ mmc_free_host(mmc); -+ platform_set_drvdata(pdev, NULL); -+ -+ return 0; -+ } else -+ return -1; -+} -+ -+#ifdef CONFIG_PM -+static int bcm2708_mci_suspend(struct platform_device *dev, pm_message_t state) -+{ -+ struct mmc_host *mmc = platform_get_drvdata(dev); -+ int ret = 0; -+ -+ if (mmc) { -+ ret = mmc_suspend_host(mmc); -+ } -+ -+ return ret; -+} -+ -+static int bcm2708_mci_resume(struct platform_device *dev) -+{ -+ struct mmc_host *mmc = platform_get_drvdata(dev); -+ int ret = 0; -+ -+ if (mmc) { -+ ret = mmc_resume_host(mmc); -+ } -+ -+ return ret; -+} -+#else -+#define bcm2708_mci_suspend NULL -+#define bcm2708_mci_resume NULL -+#endif -+ -+static struct platform_driver bcm2708_mci_driver = { -+ .probe = bcm2708_mci_probe, -+ .remove = bcm2708_mci_remove, -+ .suspend = bcm2708_mci_suspend, -+ .resume = bcm2708_mci_resume, -+ .driver = { -+ .name = DRIVER_NAME, -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init bcm2708_mci_init(void) -+{ -+ return platform_driver_register(&bcm2708_mci_driver); -+} -+ -+static void __exit bcm2708_mci_exit(void) -+{ -+ platform_driver_unregister(&bcm2708_mci_driver); -+} -+ -+module_init(bcm2708_mci_init); -+module_exit(bcm2708_mci_exit); -+ -+MODULE_DESCRIPTION("BCM2708 Multimedia Card Interface driver"); -+MODULE_LICENSE("GPL"); -+MODULE_ALIAS("platform:bcm2708_mci"); -diff --git a/drivers/mmc/host/bcm2708_mci.h b/drivers/mmc/host/bcm2708_mci.h -new file mode 100644 -index 0000000..b2851d9 ---- /dev/null -+++ b/drivers/mmc/host/bcm2708_mci.h -@@ -0,0 +1,101 @@ -+/* -+ * linux/drivers/mmc/host/bcm2708_mci.c - Broadcom BCM2708 MCI driver -+ * -+ * Copyright (C) 2010 Broadcom, All Rights Reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+struct clk; -+ -+#define BCM2708_MCI_COMMAND 0x00 -+ -+#define BCM2708_MCI_READ (1 << 6) -+#define BCM2708_MCI_WRITE (1 << 7) -+#define BCM2708_MCI_LONGRESP (1 << 9) -+#define BCM2708_MCI_NORESP (1 << 10) -+#define BCM2708_MCI_BUSY (1 << 11) -+#define BCM2708_MCI_FAIL_FLAG (1 << 14) -+#define BCM2708_MCI_ENABLE (1 << 15) -+ -+#define BCM2708_MCI_ARGUMENT 0x04 -+ -+#define BCM2708_MCI_TIMEOUT 0x08 -+#define BCM2708_MCI_CLKDIV 0x0c -+ -+ -+#define BCM2708_MCI_RESPONSE0 0x10 -+#define BCM2708_MCI_RESPONSE1 0x14 -+#define BCM2708_MCI_RESPONSE2 0x18 -+#define BCM2708_MCI_RESPONSE3 0x1c -+ -+#define BCM2708_MCI_STATUS 0x20 -+ -+#define BCM2708_MCI_VDD 0x30 -+#define BCM2708_MCI_VDD_ENABLE (1 << 0) -+ -+#define BCM2708_MCI_EDM 0x34 -+ -+#define BCM2708_MCI_HOSTCONFIG 0x38 -+ -+#define BCM2708_MCI_HOSTCONFIG_WIDE_INT_BUS 0x2 -+#define BCM2708_MCI_HOSTCONFIG_WIDEEXT_4BIT 0x4 -+#define BCM2708_MCI_HOSTCONFIG_SLOW_CARD 0x8 -+#define BCM2708_MCI_HOSTCONFIG_BLOCK_IRPT_EN (1<<8) -+#define BCM2708_MCI_HOSTCONFIG_BUSY_IRPT_EN (1<<10) -+#define BCM2708_MCI_HOSTCONFIG_WIDEEXT_CLR 0xFFFFFFFB -+ -+ -+#define BCM2708_MCI_DATAFLAG (1 << 0) -+#define BCM2708_MCI_CMDTIMEOUT (1 << 6) -+#define BCM2708_MCI_HSTS_BLOCK (1 << 9) /**< block flag in status reg */ -+#define BCM2708_MCI_HSTS_BUSY (1 << 10) /**< Busy flag in status reg */ -+ -+#define BCM2708_MCI_HBCT 0x3c -+#define BCM2708_MCI_DATA 0x40 -+#define BCM2708_MCI_HBLC 0x50 -+ -+#define NR_SG 16 -+ -+typedef struct bulk_data_struct -+{ -+ unsigned long info; -+ unsigned long src; -+ unsigned long dst; -+ unsigned long length; -+ unsigned long stride; -+ unsigned long next; -+ unsigned long pad[2]; -+} BCM2708_DMA_CB_T; -+ -+struct bcm2708_mci_host { -+ struct platform_device *dev; -+ -+ void __iomem *mmc_base; -+ void __iomem *dma_base; -+ void __iomem *gpio_base; -+ -+ BCM2708_DMA_CB_T *cb_base; -+ dma_addr_t cb_handle; -+ -+ struct mmc_host *mmc; -+ -+ struct semaphore sem; -+ -+ int is_acmd; -+ int present; -+}; -+ -+static inline char *bcm2708_mci_kmap_atomic(struct scatterlist *sg, unsigned long *flags) -+{ -+// local_irq_save(*flags); -+ return kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset; -+} -+ -+static inline void bcm2708_mci_kunmap_atomic(void *buffer, unsigned long *flags) -+{ -+ kunmap_atomic(buffer, KM_BIO_SRC_IRQ); -+// local_irq_restore(*flags); -+} diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c new file mode 100644 -index 0000000..2dd6bed +index 0000000..4b23c8b --- /dev/null +++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -0,0 +1,1461 @@ +@@ -0,0 +1,1555 @@ +/* + * sdhci-bcm2708.c Support for SDHCI device on BCM2708 + * Copyright (c) 2010 Broadcom @@ -53185,7 +51494,9 @@ index 0000000..2dd6bed +#include +#include +#include ++#include +#include ++#include + +#include +#include @@ -53216,6 +51527,9 @@ index 0000000..2dd6bed +//#define LOG_REGISTERS + +#define USE_SCHED_TIME ++#define USE_SPACED_WRITES_2CLK 1 /* space consecutive register writes */ ++#define USE_SOFTWARE_TIMEOUTS 1 /* not hardware timeouts */ ++#define SOFTWARE_ERASE_TIMEOUT_SEC 30 + +#define SDHCI_BCM_DMA_CHAN 4 /* this default is normally overriden */ +#define SDHCI_BCM_DMA_WAITS 0 /* delays slowing DMA transfers: 0-31 */ @@ -53227,6 +51541,9 @@ index 0000000..2dd6bed + +#define BCM2708_SDHCI_SLEEP_TIMEOUT 1000 /* msecs */ + ++/* Mhz clock that the EMMC core is running at. Should match the platform clockman settings */ ++#define BCM2708_EMMC_CLOCK_FREQ 80000000 ++ +#define POWER_OFF 0 +#define POWER_LAZY_OFF 1 +#define POWER_ON 2 @@ -53381,6 +51698,12 @@ index 0000000..2dd6bed + +static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) +{ ++ u32 ier; ++ ++#if USE_SPACED_WRITES_2CLK ++ static bool timeout_disabled = false; ++ unsigned int ns_2clk = 0; ++ + /* The Arasan has a bugette whereby it may lose the content of + * successive writes to registers that are within two SD-card clock + * cycles of each other (a clock domain crossing problem). @@ -53388,12 +51711,11 @@ index 0000000..2dd6bed + * (Which is just as well - otherwise we'd have to nobble the DMA engine + * too) + */ -+#if 1 + if (reg != SDHCI_BUFFER && host->clock != 0) { + /* host->clock is the clock freq in Hz */ + static hptime_t last_write_hpt; + hptime_t now = hptime(); -+ unsigned int ns_2clk = 2000000000/host->clock; ++ ns_2clk = 2000000000/host->clock; + + if (now == last_write_hpt || now == last_write_hpt+1) { + /* we can't guarantee any significant time has @@ -53409,6 +51731,27 @@ index 0000000..2dd6bed + } + last_write_hpt = now; + } ++#if USE_SOFTWARE_TIMEOUTS ++ /* The Arasan is clocked for timeouts using the SD clock which is too ++ * fast for ERASE commands and causes issues. So we disable timeouts ++ * for ERASE */ ++ if (host->cmd != NULL && host->cmd->opcode == MMC_ERASE && ++ reg == (SDHCI_COMMAND & ~3)) { ++ mod_timer(&host->timer, ++ jiffies + SOFTWARE_ERASE_TIMEOUT_SEC * HZ); ++ ier = readl(host->ioaddr + SDHCI_SIGNAL_ENABLE); ++ ier &= ~SDHCI_INT_DATA_TIMEOUT; ++ writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE); ++ timeout_disabled = true; ++ udelay((ns_2clk+1000-1)/1000); ++ } else if (timeout_disabled) { ++ ier = readl(host->ioaddr + SDHCI_SIGNAL_ENABLE); ++ ier |= SDHCI_INT_DATA_TIMEOUT; ++ writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE); ++ timeout_disabled = false; ++ udelay((ns_2clk+1000-1)/1000); ++ } ++#endif + writel(val, host->ioaddr + reg); +#else + void __iomem * regaddr = host->ioaddr + reg; @@ -53484,14 +51827,68 @@ index 0000000..2dd6bed + +static unsigned int sdhci_bcm2708_get_max_clock(struct sdhci_host *host) +{ -+ return 100000000; // this value is in Hz (100MHz/4) ++ return 20000000; // this value is in Hz (20MHz) +} + +static unsigned int sdhci_bcm2708_get_timeout_clock(struct sdhci_host *host) +{ -+ return 100000; // this value is in kHz (100MHz/4) ++ if(host->clock) ++ return (host->clock / 1000); // this value is in kHz (100MHz) ++ else ++ return (sdhci_bcm2708_get_max_clock(host) / 1000); +} + ++static void sdhci_bcm2708_set_clock(struct sdhci_host *host, unsigned int clock) ++{ ++ int div = 0; ++ u16 clk = 0; ++ unsigned long timeout; ++ ++ if (clock == host->clock) ++ return; ++ ++ sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL); ++ ++ if (clock == 0) ++ goto out; ++ ++ if (BCM2708_EMMC_CLOCK_FREQ <= clock) ++ div = 1; ++ else { ++ for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) { ++ if ((BCM2708_EMMC_CLOCK_FREQ / div) <= clock) ++ break; ++ } ++ } ++ ++ DBG( "desired SD clock: %d, actual: %d\n", ++ clock, BCM2708_EMMC_CLOCK_FREQ / div); ++ ++ clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; ++ clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) ++ << SDHCI_DIVIDER_HI_SHIFT; ++ clk |= SDHCI_CLOCK_INT_EN; ++ ++ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); ++ ++ timeout = 20; ++ while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL)) ++ & SDHCI_CLOCK_INT_STABLE)) { ++ if (timeout == 0) { ++ printk(KERN_ERR "%s: Internal clock never " ++ "stabilised.\n", mmc_hostname(host->mmc)); ++ return; ++ } ++ timeout--; ++ mdelay(1); ++ } ++ ++ clk |= SDHCI_CLOCK_CARD_EN; ++ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); ++out: ++ host->clock = clock; ++ } ++ +/*****************************************************************************\ + * * + * DMA Operation * @@ -53588,7 +51985,8 @@ index 0000000..2dd6bed + cb->stride = 0; + + if (is_last) { -+ cb->info |= BCM2708_DMA_INT_EN; ++ cb->info |= BCM2708_DMA_INT_EN | ++ BCM2708_DMA_WAIT_RESP; + cb->next = 0; + } else + cb->next = host->cb_handle + @@ -53619,7 +52017,8 @@ index 0000000..2dd6bed + cb->stride = 0; + + if (is_last) { -+ cb->info |= BCM2708_DMA_INT_EN; ++ cb->info |= BCM2708_DMA_INT_EN | ++ BCM2708_DMA_WAIT_RESP; + cb->next = 0; + } else + cb->next = host->cb_handle + @@ -53980,7 +52379,7 @@ index 0000000..2dd6bed + continue; + + if (1000000-timeout > 4000) /*ave. is about 3250*/ -+ printk(KERN_INFO "%s: note - long %s sync %luns - " ++ DBG("%s: note - long %s sync %luns - " + "%d its.\n", + mmc_hostname(host->mmc), + data->flags & MMC_DATA_READ? "read": "write", @@ -54378,7 +52777,7 @@ index 0000000..2dd6bed +#error The BCM2708 SDHCI driver needs CONFIG_MMC_SDHCI_IO_ACCESSORS to be set +#endif + //.enable_dma = NULL, -+ //.set_clock = NULL, ++ .set_clock = sdhci_bcm2708_set_clock, + .get_max_clock = sdhci_bcm2708_get_max_clock, + //.get_min_clock = NULL, + .get_timeout_clock = sdhci_bcm2708_get_timeout_clock, @@ -54441,7 +52840,9 @@ index 0000000..2dd6bed + host->irq = platform_get_irq(pdev, 0); + + host->quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | -+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK; ++ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | ++ SDHCI_QUIRK_BROKEN_TIMEOUT_VAL | ++ SDHCI_QUIRK_NONSTANDARD_CLOCK; +#ifdef CONFIG_MMC_SDHCI_BCM2708_DMA + host->flags = SDHCI_USE_PLATDMA; +#endif @@ -54508,6 +52909,8 @@ index 0000000..2dd6bed + host_priv->cb_base, (unsigned)host_priv->cb_handle, + host_priv->dma_chan, host_priv->dma_chan_base, + host_priv->dma_irq); ++ ++ host->mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; +#endif + + ret = sdhci_add_host(host); @@ -54619,7 +53022,7 @@ index 0000000..2dd6bed +MODULE_ALIAS("platform:"DRIVER_NAME); + diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index 6f0bfc0..728ef5a 100644 +index 51bbba4..79f9efd 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -29,6 +29,7 @@ @@ -54630,7 +53033,7 @@ index 6f0bfc0..728ef5a 100644 #include "sdhci.h" -@@ -314,7 +315,7 @@ static void sdhci_read_block_pio(struct sdhci_host *host) +@@ -315,7 +316,7 @@ static void sdhci_read_block_pio(struct sdhci_host *host) u32 uninitialized_var(scratch); u8 *buf; @@ -54639,7 +53042,7 @@ index 6f0bfc0..728ef5a 100644 blksize = host->data->blksz; chunk = 0; -@@ -359,7 +360,7 @@ static void sdhci_write_block_pio(struct sdhci_host *host) +@@ -360,7 +361,7 @@ static void sdhci_write_block_pio(struct sdhci_host *host) u32 scratch; u8 *buf; @@ -54648,7 +53051,7 @@ index 6f0bfc0..728ef5a 100644 blksize = host->data->blksz; chunk = 0; -@@ -398,19 +399,28 @@ static void sdhci_write_block_pio(struct sdhci_host *host) +@@ -399,19 +400,28 @@ static void sdhci_write_block_pio(struct sdhci_host *host) local_irq_restore(flags); } @@ -54680,7 +53083,7 @@ index 6f0bfc0..728ef5a 100644 /* * Some controllers (JMicron JMB38x) mess up the buffer bits -@@ -421,7 +431,7 @@ static void sdhci_transfer_pio(struct sdhci_host *host) +@@ -422,7 +432,7 @@ static void sdhci_transfer_pio(struct sdhci_host *host) (host->data->blocks == 1)) mask = ~0; @@ -54689,7 +53092,7 @@ index 6f0bfc0..728ef5a 100644 if (host->quirks & SDHCI_QUIRK_PIO_NEEDS_DELAY) udelay(100); -@@ -433,9 +443,11 @@ static void sdhci_transfer_pio(struct sdhci_host *host) +@@ -434,9 +444,11 @@ static void sdhci_transfer_pio(struct sdhci_host *host) host->blocks--; if (host->blocks == 0) break; @@ -54702,7 +53105,7 @@ index 6f0bfc0..728ef5a 100644 } static char *sdhci_kmap_atomic(struct scatterlist *sg, unsigned long *flags) -@@ -708,7 +720,9 @@ static void sdhci_set_transfer_irqs(struct sdhci_host *host) +@@ -709,7 +721,9 @@ static void sdhci_set_transfer_irqs(struct sdhci_host *host) u32 pio_irqs = SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL; u32 dma_irqs = SDHCI_INT_DMA_END | SDHCI_INT_ADMA_ERROR; @@ -54713,7 +53116,7 @@ index 6f0bfc0..728ef5a 100644 sdhci_clear_set_irqs(host, pio_irqs, dma_irqs); else sdhci_clear_set_irqs(host, dma_irqs, pio_irqs); -@@ -740,44 +754,25 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) +@@ -741,44 +755,25 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) host->data_early = 0; host->data->bytes_xfered = 0; @@ -54766,7 +53169,7 @@ index 6f0bfc0..728ef5a 100644 int broken, i; struct scatterlist *sg; -@@ -836,7 +831,8 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) +@@ -837,7 +832,8 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) */ WARN_ON(1); host->flags &= ~SDHCI_REQ_USE_DMA; @@ -54776,7 +53179,7 @@ index 6f0bfc0..728ef5a 100644 WARN_ON(sg_cnt != 1); sdhci_writel(host, sg_dma_address(data->sg), SDHCI_DMA_ADDRESS); -@@ -852,11 +848,13 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) +@@ -853,11 +849,13 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) if (host->version >= SDHCI_SPEC_200) { ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); ctrl &= ~SDHCI_CTRL_DMA_MASK; @@ -54795,7 +53198,7 @@ index 6f0bfc0..728ef5a 100644 sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); } -@@ -908,7 +906,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, +@@ -909,7 +907,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, if (data->flags & MMC_DATA_READ) mode |= SDHCI_TRNS_READ; @@ -54805,7 +53208,7 @@ index 6f0bfc0..728ef5a 100644 mode |= SDHCI_TRNS_DMA; sdhci_writew(host, mode, SDHCI_TRANSFER_MODE); -@@ -924,13 +923,16 @@ static void sdhci_finish_data(struct sdhci_host *host) +@@ -925,13 +924,16 @@ static void sdhci_finish_data(struct sdhci_host *host) host->data = NULL; if (host->flags & SDHCI_REQ_USE_DMA) { @@ -54826,7 +53229,7 @@ index 6f0bfc0..728ef5a 100644 } /* -@@ -983,6 +985,12 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) +@@ -984,6 +986,12 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) if ((cmd->data != NULL) || (cmd->flags & MMC_RSP_BUSY)) mask |= SDHCI_DATA_INHIBIT; @@ -54839,7 +53242,7 @@ index 6f0bfc0..728ef5a 100644 /* We shouldn't wait for data inihibit for stop commands, even though they might use busy signaling */ if (host->mrq->data && (cmd == host->mrq->data->stop)) -@@ -1000,10 +1008,16 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) +@@ -1001,10 +1009,16 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) timeout--; mdelay(1); } @@ -54856,7 +53259,7 @@ index 6f0bfc0..728ef5a 100644 sdhci_prepare_data(host, cmd); -@@ -1249,6 +1263,35 @@ static int sdhci_set_power(struct sdhci_host *host, unsigned short power) +@@ -1299,6 +1313,35 @@ static int sdhci_set_power(struct sdhci_host *host, unsigned short power) return power; } @@ -54892,7 +53295,7 @@ index 6f0bfc0..728ef5a 100644 /*****************************************************************************\ * * * MMC callbacks * -@@ -1345,6 +1388,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +@@ -1398,6 +1441,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) unsigned long flags; int vdd_bit = -1; u8 ctrl; @@ -54900,16 +53303,16 @@ index 6f0bfc0..728ef5a 100644 spin_lock_irqsave(&host->lock, flags); -@@ -1413,7 +1457,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +@@ -1470,7 +1514,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) else ctrl &= ~SDHCI_CTRL_HISPD; - if (host->version >= SDHCI_SPEC_300) { + if (host->version >= SDHCI_SPEC_300 && !(host->ops->uhs_broken)) { u16 clk, ctrl_2; - unsigned int clock; -@@ -1422,7 +1466,8 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) + /* In case of UHS-I modes, set High Speed Enable */ +@@ -1478,7 +1522,8 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) (ios->timing == MMC_TIMING_UHS_SDR50) || (ios->timing == MMC_TIMING_UHS_SDR104) || (ios->timing == MMC_TIMING_UHS_DDR50) || @@ -54919,7 +53322,7 @@ index 6f0bfc0..728ef5a 100644 ctrl |= SDHCI_CTRL_HISPD; ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2); -@@ -1504,6 +1549,12 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +@@ -1570,6 +1615,12 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) mmiowb(); spin_unlock_irqrestore(&host->lock, flags); @@ -54932,7 +53335,7 @@ index 6f0bfc0..728ef5a 100644 } static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) -@@ -2121,7 +2172,7 @@ static void sdhci_timeout_timer(unsigned long data) +@@ -2132,7 +2183,7 @@ static void sdhci_timeout_timer(unsigned long data) if (host->mrq) { pr_err("%s: Timeout waiting for hardware " @@ -54941,7 +53344,7 @@ index 6f0bfc0..728ef5a 100644 sdhci_dumpregs(host); if (host->data) { -@@ -2166,10 +2217,13 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask) +@@ -2177,10 +2228,13 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask) BUG_ON(intmask == 0); if (!host->cmd) { @@ -54959,7 +53362,7 @@ index 6f0bfc0..728ef5a 100644 return; } -@@ -2239,6 +2293,19 @@ static void sdhci_show_adma_error(struct sdhci_host *host) +@@ -2250,6 +2304,19 @@ static void sdhci_show_adma_error(struct sdhci_host *host) static void sdhci_show_adma_error(struct sdhci_host *host) { } #endif @@ -54979,7 +53382,7 @@ index 6f0bfc0..728ef5a 100644 static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) { u32 command; -@@ -2267,24 +2334,40 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) +@@ -2278,24 +2345,40 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) return; } } @@ -55031,7 +53434,7 @@ index 6f0bfc0..728ef5a 100644 pr_err("%s: ADMA error\n", mmc_hostname(host->mmc)); sdhci_show_adma_error(host); host->data->error = -EIO; -@@ -2292,11 +2375,18 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) +@@ -2303,11 +2386,18 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) host->ops->adma_workaround(host, intmask); } @@ -55054,7 +53457,7 @@ index 6f0bfc0..728ef5a 100644 /* * We currently don't do anything fancy with DMA -@@ -2325,18 +2415,8 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) +@@ -2336,18 +2426,8 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) sdhci_writel(host, dmanow, SDHCI_DMA_ADDRESS); } @@ -55075,7 +53478,7 @@ index 6f0bfc0..728ef5a 100644 } } -@@ -2392,6 +2472,22 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) +@@ -2403,6 +2483,22 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) tasklet_schedule(&host->card_tasklet); } @@ -55098,7 +53501,7 @@ index 6f0bfc0..728ef5a 100644 if (intmask & SDHCI_INT_CMD_MASK) { sdhci_writel(host, intmask & SDHCI_INT_CMD_MASK, SDHCI_INT_STATUS); -@@ -2406,7 +2502,13 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) +@@ -2417,7 +2513,13 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) intmask &= ~(SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK); @@ -55113,7 +53516,7 @@ index 6f0bfc0..728ef5a 100644 if (intmask & SDHCI_INT_BUS_POWER) { pr_err("%s: Card is consuming too much power!\n", -@@ -2495,7 +2597,14 @@ int sdhci_resume_host(struct sdhci_host *host) +@@ -2537,7 +2639,14 @@ int sdhci_resume_host(struct sdhci_host *host) { int ret; @@ -55129,7 +53532,7 @@ index 6f0bfc0..728ef5a 100644 if (host->ops->enable_dma) host->ops->enable_dma(host); } -@@ -2713,14 +2822,16 @@ int sdhci_add_host(struct sdhci_host *host) +@@ -2753,14 +2862,16 @@ int sdhci_add_host(struct sdhci_host *host) host->flags &= ~SDHCI_USE_ADMA; } @@ -55148,7 +53551,7 @@ index 6f0bfc0..728ef5a 100644 } } } -@@ -2831,7 +2942,7 @@ int sdhci_add_host(struct sdhci_host *host) +@@ -2871,7 +2982,7 @@ int sdhci_add_host(struct sdhci_host *host) /* Auto-CMD23 stuff only works in ADMA or PIO. */ if ((host->version >= SDHCI_SPEC_300) && ((host->flags & SDHCI_USE_ADMA) || @@ -55157,7 +53560,7 @@ index 6f0bfc0..728ef5a 100644 host->flags |= SDHCI_AUTO_CMD23; DBG("%s: Auto-CMD23 available\n", mmc_hostname(mmc)); } else { -@@ -2999,6 +3110,12 @@ int sdhci_add_host(struct sdhci_host *host) +@@ -3043,6 +3154,12 @@ int sdhci_add_host(struct sdhci_host *host) SDHCI_MAX_CURRENT_MULTIPLIER; } @@ -55170,7 +53573,7 @@ index 6f0bfc0..728ef5a 100644 mmc->ocr_avail = ocr_avail; mmc->ocr_avail_sdio = ocr_avail; if (host->ocr_avail_sdio) -@@ -3129,6 +3246,7 @@ int sdhci_add_host(struct sdhci_host *host) +@@ -3173,6 +3290,7 @@ int sdhci_add_host(struct sdhci_host *host) pr_info("%s: SDHCI controller on %s [%s] using %s\n", mmc_hostname(mmc), host->hw_name, dev_name(mmc_dev(mmc)), @@ -55179,10 +53582,10 @@ index 6f0bfc0..728ef5a 100644 (host->flags & SDHCI_USE_SDMA) ? "DMA" : "PIO"); diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h -index a6d69b7..9ab319b 100644 +index 379e09d..45592d2 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h -@@ -277,6 +277,25 @@ struct sdhci_ops { +@@ -289,6 +289,25 @@ struct sdhci_ops { void (*platform_reset_enter)(struct sdhci_host *host, u8 mask); void (*platform_reset_exit)(struct sdhci_host *host, u8 mask); int (*set_uhs_signaling)(struct sdhci_host *host, unsigned int uhs); @@ -55208,7 +53611,7 @@ index a6d69b7..9ab319b 100644 void (*hw_reset)(struct sdhci_host *host); void (*platform_suspend)(struct sdhci_host *host); void (*platform_resume)(struct sdhci_host *host); -@@ -387,6 +406,29 @@ static inline void *sdhci_priv(struct sdhci_host *host) +@@ -399,6 +418,29 @@ static inline void *sdhci_priv(struct sdhci_host *host) extern void sdhci_enable_irq_wakeups(struct sdhci_host *host); #endif @@ -55239,10 +53642,10 @@ index a6d69b7..9ab319b 100644 extern int sdhci_runtime_suspend_host(struct sdhci_host *host); extern int sdhci_runtime_resume_host(struct sdhci_host *host); diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h -index 4bbc330..d4014c9 100644 +index b838ffc..f3a39c1 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h -@@ -127,6 +127,7 @@ struct sdhci_host { +@@ -128,6 +128,7 @@ struct sdhci_host { #define SDHCI_SDIO_IRQ_ENABLED (1<<9) /* SDIO irq enabled */ #define SDHCI_HS200_NEEDS_TUNING (1<<10) /* HS200 needs tuning */ #define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */ @@ -55250,7 +53653,7 @@ index 4bbc330..d4014c9 100644 unsigned int version; /* SDHCI spec. version */ -@@ -141,6 +142,7 @@ struct sdhci_host { +@@ -142,6 +143,7 @@ struct sdhci_host { struct mmc_request *mrq; /* Current request */ struct mmc_command *cmd; /* Current command */ @@ -55259,13 +53662,13 @@ index 4bbc330..d4014c9 100644 unsigned int data_early:1; /* Data finished before cmd */ -- -1.8.1.5 +1.8.1.6 -From 794b157d90b27f53a28232b3f590dcc8e405a1cb Mon Sep 17 00:00:00 2001 +From ecad00d36ce5d320c249f468ede434324ccae6ab Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 17 Jan 2012 19:20:57 +0000 -Subject: [PATCH 003/169] bcm2708 watchdog driver +Date: Wed, 1 May 2013 19:54:32 +0100 +Subject: [PATCH 03/95] bcm2708 watchdog driver Signed-off-by: popcornmix --- @@ -55276,12 +53679,12 @@ Signed-off-by: popcornmix create mode 100644 drivers/watchdog/bcm2708_wdog.c diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig -index 19fa73a..cd0c346 100644 +index e89fc31..60ca320 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig -@@ -365,6 +365,12 @@ config IMX2_WDT +@@ -391,6 +391,12 @@ config RETU_WATCHDOG To compile this driver as a module, choose M here: the - module will be called imx2_wdt. + module will be called retu_wdt. +config BCM2708_WDT + tristate "BCM2708 Watchdog" @@ -55293,13 +53696,13 @@ index 19fa73a..cd0c346 100644 config AT32AP700X_WDT diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile -index 97bbdb3a..903e99a 100644 +index a300b94..0e35771 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile -@@ -52,6 +52,7 @@ obj-$(CONFIG_STMP3XXX_WATCHDOG) += stmp3xxx_wdt.o - obj-$(CONFIG_NUC900_WATCHDOG) += nuc900_wdt.o - obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o +@@ -54,6 +54,7 @@ obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o + obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o + obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o +obj-$(CONFIG_BCM2708_WDT) += bcm2708_wdog.o # AVR32 Architecture @@ -55696,28 +54099,28 @@ index 0000000..dd33c35 +MODULE_LICENSE("GPL"); + -- -1.8.1.5 +1.8.1.6 -From fe367ac6d2a62b23aa823592b8c54e9728932862 Mon Sep 17 00:00:00 2001 +From 1bb23e111d60adab8df63ef766d2f3bc185778af Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 17 Jan 2012 19:21:26 +0000 -Subject: [PATCH 004/169] bcm2708 framebuffer driver +Date: Wed, 1 May 2013 19:55:09 +0100 +Subject: [PATCH 04/95] bcm2708 framebuffer driver Signed-off-by: popcornmix --- drivers/video/Kconfig | 14 + drivers/video/Makefile | 1 + - drivers/video/bcm2708_fb.c | 461 ++++++ + drivers/video/bcm2708_fb.c | 487 ++++++ drivers/video/logo/logo_linux_clut224.ppm | 2483 ++++++++++------------------- - 4 files changed, 1357 insertions(+), 1602 deletions(-) + 4 files changed, 1383 insertions(+), 1602 deletions(-) create mode 100644 drivers/video/bcm2708_fb.c diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig -index e7068c5..0dc46de 100644 +index 4c1546f..044b867 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig -@@ -312,6 +312,20 @@ config FB_PM2_FIFO_DISCONNECT +@@ -334,6 +334,20 @@ config FB_PM2_FIFO_DISCONNECT help Support the Permedia2 FIFO disconnect feature. @@ -55739,23 +54142,23 @@ index e7068c5..0dc46de 100644 tristate "ARM PrimeCell PL110 support" depends on FB && ARM && ARM_AMBA diff --git a/drivers/video/Makefile b/drivers/video/Makefile -index 768a137..b5e6515 100644 +index 9df3873..7fcb865 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile -@@ -98,6 +98,7 @@ obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o - obj-$(CONFIG_FB_PVR2) += pvr2fb.o +@@ -100,6 +100,7 @@ obj-$(CONFIG_FB_PVR2) += pvr2fb.o obj-$(CONFIG_FB_VOODOO1) += sstfb.o obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o + obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o +obj-$(CONFIG_FB_BCM2708) += bcm2708_fb.o obj-$(CONFIG_FB_68328) += 68328fb.o obj-$(CONFIG_FB_GBE) += gbefb.o obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c new file mode 100644 -index 0000000..5b27287 +index 0000000..c82dd90 --- /dev/null +++ b/drivers/video/bcm2708_fb.c -@@ -0,0 +1,461 @@ +@@ -0,0 +1,487 @@ +/* + * linux/drivers/video/bcm2708_fb.c + * @@ -55776,7 +54179,6 @@ index 0000000..5b27287 +#include +#include +#include -+#include +#include +#include +#include @@ -55785,6 +54187,7 @@ index 0000000..5b27287 +#include +#include +#include ++#include + +#include +#include @@ -55806,6 +54209,7 @@ index 0000000..5b27287 + u32 xoffset, yoffset; + u32 base; + u32 screen_size; ++ u16 cmap[256]; +}; + +struct bcm2708_fb { @@ -55871,7 +54275,12 @@ index 0000000..5b27287 + * encoded in the pixel data. Calculate their position from + * the bitfield length defined above. + */ -+ if (ret == 0 && var->bits_per_pixel >= 16) { ++ if (ret == 0 && var->bits_per_pixel >= 24) { ++ var->red.offset = 0; ++ var->green.offset = var->red.offset + var->red.length; ++ var->blue.offset = var->green.offset + var->green.length; ++ var->transp.offset = var->blue.offset + var->blue.length; ++ } else if (ret == 0 && var->bits_per_pixel >= 16) { + var->blue.offset = 0; + var->green.offset = var->blue.offset + var->blue.length; + var->red.offset = var->green.offset + var->green.length; @@ -55973,8 +54382,7 @@ index 0000000..5b27287 + /* inform vc about new framebuffer */ + bcm_mailbox_write(MBOX_CHAN_FB, fb->dma); + -+ /* workaround occasional failure to read results. TODO: replace fb driver with vchiq version */ -+ msleep(10); ++ /* TODO: replace fb driver with vchiq version */ + /* wait for response */ + bcm_mailbox_read(MBOX_CHAN_FB, &val); + @@ -55996,8 +54404,13 @@ index 0000000..5b27287 + iounmap(fb->fb.screen_base); + fb->fb.screen_base = + (void *)ioremap_wc(fb->fb.fix.smem_start, fb->fb.screen_size); -+ if (!fb->fb.screen_base) ++ if (!fb->fb.screen_base) { ++ /* the console may currently be locked */ ++ console_trylock(); ++ console_unlock(); ++ + BUG(); /* what can we do here */ ++ } + } + pr_info + ("BCM2708FB: start = %p,%p width=%d, height=%d, bpp=%d, pitch=%d size=%d success=%d\n", @@ -56015,18 +54428,31 @@ index 0000000..5b27287 + return (val >> (16 - bf->length) & mask) << bf->offset; +} + ++ +static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info) +{ + struct bcm2708_fb *fb = to_bcm2708(info); + -+ if (regno < 16) ++ /*pr_info("BCM2708FB: setcolreg %d:(%02x,%02x,%02x,%02x) %x\n", regno, red, green, blue, transp, fb->fb.fix.visual);*/ ++ if (fb->fb.var.bits_per_pixel <= 8) { ++ if (regno < 256) { ++ /* blue [0:4], green [5:10], red [11:15] */ ++ fb->info->cmap[regno] = ((red >> (16-5)) & 0x1f) << 11 | ++ ((green >> (16-6)) & 0x3f) << 5 | ++ ((blue >> (16-5)) & 0x1f) << 0; ++ } ++ /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */ ++ /* So just call it for what looks like the last colour in a list for now. */ ++ if (regno == 15 || regno == 255) ++ bcm2708_fb_set_par(info); ++ } else if (regno < 16) { + fb->cmap[regno] = convert_bitfield(transp, &fb->fb.var.transp) | + convert_bitfield(blue, &fb->fb.var.blue) | + convert_bitfield(green, &fb->fb.var.green) | + convert_bitfield(red, &fb->fb.var.red); -+ ++ } + return regno > 255; +} + @@ -56070,6 +54496,7 @@ index 0000000..5b27287 + +static int fbwidth = 800; /* module parameter */ +static int fbheight = 480; /* module parameter */ ++static int fbdepth = 16; /* module parameter */ + +static int bcm2708_fb_register(struct bcm2708_fb *fb) +{ @@ -56104,12 +54531,12 @@ index 0000000..5b27287 + fb->fb.var.yres = fbheight; + fb->fb.var.xres_virtual = fbwidth; + fb->fb.var.yres_virtual = fbheight; -+ fb->fb.var.bits_per_pixel = 16; ++ fb->fb.var.bits_per_pixel = fbdepth; + fb->fb.var.vmode = FB_VMODE_NONINTERLACED; + fb->fb.var.activate = FB_ACTIVATE_NOW; + fb->fb.var.nonstd = 0; -+ fb->fb.var.height = fbwidth; -+ fb->fb.var.width = fbheight; ++ fb->fb.var.height = -1; /* height of picture in mm */ ++ fb->fb.var.width = -1; /* width of picture in mm */ + fb->fb.var.accel_flags = 0; + + fb->fb.monspecs.hfmin = 0; @@ -56127,8 +54554,8 @@ index 0000000..5b27287 + + fb_set_var(&fb->fb, &fb->fb.var); + -+ pr_info("BCM2708FB: registering framebuffer (%d, %d)\n", fbwidth, -+ fbheight); ++ pr_info("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, ++ fbheight, fbdepth); + + ret = register_framebuffer(&fb->fb); + pr_info("BCM2708FB: register framebuffer (%d)\n", ret); @@ -56211,12 +54638,14 @@ index 0000000..5b27287 + +module_param(fbwidth, int, 0644); +module_param(fbheight, int, 0644); ++module_param(fbdepth, int, 0644); + +MODULE_DESCRIPTION("BCM2708 framebuffer driver"); +MODULE_LICENSE("GPL"); + +MODULE_PARM_DESC(fbwidth, "Width of ARM Framebuffer"); +MODULE_PARM_DESC(fbheight, "Height of ARM Framebuffer"); ++MODULE_PARM_DESC(fbdepth, "Bit depth of ARM Framebuffer"); diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm index 3c14e43..7626beb 100644 --- a/drivers/video/logo/logo_linux_clut224.ppm @@ -58708,13 +57137,13 @@ index 3c14e43..7626beb 100644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 -- -1.8.1.5 +1.8.1.6 -From a14df142883773f541e6f62e0cb95c3b32f6a59b Mon Sep 17 00:00:00 2001 +From eba16ea8bf19dee42d87a9cfac55f88aca4e3fd8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 27 Mar 2013 23:10:07 +0000 -Subject: [PATCH 005/169] bcm2708 vchiq driver +Subject: [PATCH 05/95] bcm2708 vchiq driver Signed-off-by: popcornmix --- @@ -58741,7 +57170,7 @@ Signed-off-by: popcornmix .../vc04_services/interface/vchiq_arm/vchiq_core.c | 3818 ++++++++++++++++++++ .../vc04_services/interface/vchiq_arm/vchiq_core.h | 703 ++++ .../interface/vchiq_arm/vchiq_genversion | 89 + - .../vc04_services/interface/vchiq_arm/vchiq_if.h | 185 + + .../vc04_services/interface/vchiq_arm/vchiq_if.h | 188 + .../interface/vchiq_arm/vchiq_ioctl.h | 129 + .../interface/vchiq_arm/vchiq_kern_lib.c | 454 +++ .../interface/vchiq_arm/vchiq_memdrv.h | 71 + @@ -58751,7 +57180,7 @@ Signed-off-by: popcornmix .../vc04_services/interface/vchiq_arm/vchiq_util.c | 120 + .../vc04_services/interface/vchiq_arm/vchiq_util.h | 82 + .../interface/vchiq_arm/vchiq_version.c | 59 + - 33 files changed, 12162 insertions(+) + 33 files changed, 12165 insertions(+) create mode 100644 drivers/misc/vc04_services/Kconfig create mode 100644 drivers/misc/vc04_services/Makefile create mode 100644 drivers/misc/vc04_services/interface/vchi/connections/connection.h @@ -58785,24 +57214,24 @@ Signed-off-by: popcornmix create mode 100644 drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig -index b151b7c..95547c8 100644 +index e83fdfe..f66f044 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig -@@ -507,4 +507,6 @@ source "drivers/misc/lis3lv02d/Kconfig" - source "drivers/misc/carma/Kconfig" +@@ -519,4 +519,6 @@ source "drivers/misc/carma/Kconfig" source "drivers/misc/altera-stapl/Kconfig" source "drivers/misc/mei/Kconfig" + source "drivers/misc/vmw_vmci/Kconfig" +source "drivers/misc/vc04_services/Kconfig" endmenu + diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile -index 2129377..7142d0a 100644 +index 35a1463..720ba76 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile -@@ -49,3 +49,5 @@ obj-y += carma/ - obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o - obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/ - obj-$(CONFIG_INTEL_MEI) += mei/ +@@ -52,3 +52,5 @@ obj-$(CONFIG_INTEL_MEI) += mei/ + obj-$(CONFIG_MAX8997_MUIC) += max8997-muic.o + obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/ + obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o +obj-y += vc04_services/ + diff --git a/drivers/misc/vc04_services/Kconfig b/drivers/misc/vc04_services/Kconfig @@ -64250,7 +62679,7 @@ index 0000000..e4cfdcc + diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c new file mode 100644 -index 0000000..5470470 +index 0000000..2efb124 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c @@ -0,0 +1,3818 @@ @@ -65106,7 +63535,7 @@ index 0000000..5470470 + VCHIQ_LOG_INFO) + vchiq_log_dump_mem("Sent", 0, + header->data + pos, -+ min(64, ++ min(64u, + elements[0].size)); + } + } @@ -65254,7 +63683,7 @@ index 0000000..5470470 + VCHIQ_LOG_TRACE) + vchiq_log_dump_mem("Sent Sync", + 0, header->data + pos, -+ min(64, ++ min(64u, + elements[0].size)); + } + } @@ -67563,7 +65992,7 @@ index 0000000..5470470 + +VCHIQ_STATUS_T +vchiq_queue_message(VCHIQ_SERVICE_HANDLE_T handle, -+ const VCHIQ_ELEMENT_T *elements, int count) ++ const VCHIQ_ELEMENT_T *elements, unsigned int count) +{ + VCHIQ_SERVICE_T *service = find_service_by_handle(handle); + VCHIQ_STATUS_T status = VCHIQ_ERROR; @@ -68878,10 +67307,10 @@ index 0000000..77dd613 + diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h new file mode 100644 -index 0000000..c2c2d53 +index 0000000..50359b0 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h -@@ -0,0 +1,185 @@ +@@ -0,0 +1,188 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -68973,7 +67402,7 @@ index 0000000..c2c2d53 + +typedef struct { + const void *data; -+ int size; ++ unsigned int size; +} VCHIQ_ELEMENT_T; + +typedef unsigned int VCHIQ_SERVICE_HANDLE_T; @@ -68996,11 +67425,12 @@ index 0000000..c2c2d53 +} VCHIQ_SERVICE_PARAMS_T; + +typedef struct vchiq_config_struct { -+ int max_msg_size; -+ int bulk_threshold; /* The message size aboce which it is better to use -+ a bulk transfer (<= max_msg_size) */ -+ int max_outstanding_bulks; -+ int max_services; ++ unsigned int max_msg_size; ++ unsigned int bulk_threshold; /* The message size above which it ++ is better to use a bulk transfer ++ (<= max_msg_size) */ ++ unsigned int max_outstanding_bulks; ++ unsigned int max_services; + short version; /* The version of VCHIQ */ + short version_min; /* The minimum compatible version of VCHIQ */ +} VCHIQ_CONFIG_T; @@ -69025,29 +67455,31 @@ index 0000000..c2c2d53 +extern VCHIQ_STATUS_T vchiq_release_service(VCHIQ_SERVICE_HANDLE_T service); + +extern VCHIQ_STATUS_T vchiq_queue_message(VCHIQ_SERVICE_HANDLE_T service, -+ const VCHIQ_ELEMENT_T *elements, int count); ++ const VCHIQ_ELEMENT_T *elements, unsigned int count); +extern void vchiq_release_message(VCHIQ_SERVICE_HANDLE_T service, + VCHIQ_HEADER_T *header); +extern VCHIQ_STATUS_T vchiq_queue_bulk_transmit(VCHIQ_SERVICE_HANDLE_T service, -+ const void *data, int size, void *userdata); ++ const void *data, unsigned int size, void *userdata); +extern VCHIQ_STATUS_T vchiq_queue_bulk_receive(VCHIQ_SERVICE_HANDLE_T service, -+ void *data, int size, void *userdata); ++ void *data, unsigned int size, void *userdata); +extern VCHIQ_STATUS_T vchiq_queue_bulk_transmit_handle( + VCHIQ_SERVICE_HANDLE_T service, VCHI_MEM_HANDLE_T handle, -+ const void *offset, int size, void *userdata); ++ const void *offset, unsigned int size, void *userdata); +extern VCHIQ_STATUS_T vchiq_queue_bulk_receive_handle( + VCHIQ_SERVICE_HANDLE_T service, VCHI_MEM_HANDLE_T handle, -+ void *offset, int size, void *userdata); ++ void *offset, unsigned int size, void *userdata); +extern VCHIQ_STATUS_T vchiq_bulk_transmit(VCHIQ_SERVICE_HANDLE_T service, -+ const void *data, int size, void *userdata, VCHIQ_BULK_MODE_T mode); ++ const void *data, unsigned int size, void *userdata, ++ VCHIQ_BULK_MODE_T mode); +extern VCHIQ_STATUS_T vchiq_bulk_receive(VCHIQ_SERVICE_HANDLE_T service, -+ void *data, int size, void *userdata, VCHIQ_BULK_MODE_T mode); ++ void *data, unsigned int size, void *userdata, ++ VCHIQ_BULK_MODE_T mode); +extern VCHIQ_STATUS_T vchiq_bulk_transmit_handle(VCHIQ_SERVICE_HANDLE_T service, -+ VCHI_MEM_HANDLE_T handle, const void *offset, int size, void *userdata, -+ VCHIQ_BULK_MODE_T mode); ++ VCHI_MEM_HANDLE_T handle, const void *offset, unsigned int size, ++ void *userdata, VCHIQ_BULK_MODE_T mode); +extern VCHIQ_STATUS_T vchiq_bulk_receive_handle(VCHIQ_SERVICE_HANDLE_T service, -+ VCHI_MEM_HANDLE_T handle, void *offset, int size, void *userdata, -+ VCHIQ_BULK_MODE_T mode); ++ VCHI_MEM_HANDLE_T handle, void *offset, unsigned int size, ++ void *userdata, VCHIQ_BULK_MODE_T mode); +extern int vchiq_get_client_id(VCHIQ_SERVICE_HANDLE_T service); +extern void *vchiq_get_service_userdata(VCHIQ_SERVICE_HANDLE_T service); +extern int vchiq_get_service_fourcc(VCHIQ_SERVICE_HANDLE_T service); @@ -69069,7 +67501,7 @@ index 0000000..c2c2d53 +#endif /* VCHIQ_IF_H */ diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h new file mode 100644 -index 0000000..c5a0158 +index 0000000..e248037 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h @@ -0,0 +1,129 @@ @@ -69113,25 +67545,25 @@ index 0000000..c5a0158 +#include "vchiq_if.h" + +#define VCHIQ_IOC_MAGIC 0xc4 -+#define VCHIQ_INVALID_HANDLE -1 ++#define VCHIQ_INVALID_HANDLE (~0) + +typedef struct { + VCHIQ_SERVICE_PARAMS_T params; + int is_open; + int is_vchi; -+ int handle; /* OUT */ ++ unsigned int handle; /* OUT */ +} VCHIQ_CREATE_SERVICE_T; + +typedef struct { -+ int handle; -+ int count; ++ unsigned int handle; ++ unsigned int count; + const VCHIQ_ELEMENT_T *elements; +} VCHIQ_QUEUE_MESSAGE_T; + +typedef struct { -+ int handle; ++ unsigned int handle; + void *data; -+ int size; ++ unsigned int size; + void *userdata; + VCHIQ_BULK_MODE_T mode; +} VCHIQ_QUEUE_BULK_TRANSFER_T; @@ -69144,27 +67576,27 @@ index 0000000..c5a0158 +} VCHIQ_COMPLETION_DATA_T; + +typedef struct { -+ int count; ++ unsigned int count; + VCHIQ_COMPLETION_DATA_T *buf; -+ int msgbufsize; -+ int msgbufcount; /* IN/OUT */ ++ unsigned int msgbufsize; ++ unsigned int msgbufcount; /* IN/OUT */ + void **msgbufs; +} VCHIQ_AWAIT_COMPLETION_T; + +typedef struct { -+ int handle; ++ unsigned int handle; + int blocking; -+ int bufsize; ++ unsigned int bufsize; + void *buf; +} VCHIQ_DEQUEUE_MESSAGE_T; + +typedef struct { -+ int config_size; ++ unsigned int config_size; + VCHIQ_CONFIG_T *pconfig; +} VCHIQ_GET_CONFIG_T; + +typedef struct { -+ int handle; ++ unsigned int handle; + VCHIQ_SERVICE_OPTION_T option; + int value; +} VCHIQ_SET_SERVICE_OPTION_T; @@ -69204,7 +67636,7 @@ index 0000000..c5a0158 +#endif diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c new file mode 100644 -index 0000000..36b3d34 +index 0000000..62965c6 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c @@ -0,0 +1,454 @@ @@ -69271,7 +67703,7 @@ index 0000000..36b3d34 + +static VCHIQ_STATUS_T +vchiq_blocking_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle, void *data, -+ int size, VCHIQ_BULK_DIR_T dir); ++ unsigned int size, VCHIQ_BULK_DIR_T dir); + +/**************************************************************************** +* @@ -69512,7 +67944,7 @@ index 0000000..36b3d34 + +VCHIQ_STATUS_T +vchiq_queue_bulk_transmit(VCHIQ_SERVICE_HANDLE_T handle, -+ const void *data, int size, void *userdata) ++ const void *data, unsigned int size, void *userdata) +{ + return vchiq_bulk_transfer(handle, + VCHI_MEM_HANDLE_INVALID, (void *)data, size, userdata, @@ -69521,8 +67953,8 @@ index 0000000..36b3d34 +EXPORT_SYMBOL(vchiq_queue_bulk_transmit); + +VCHIQ_STATUS_T -+vchiq_queue_bulk_receive(VCHIQ_SERVICE_HANDLE_T handle, void *data, int size, -+ void *userdata) ++vchiq_queue_bulk_receive(VCHIQ_SERVICE_HANDLE_T handle, void *data, ++ unsigned int size, void *userdata) +{ + return vchiq_bulk_transfer(handle, + VCHI_MEM_HANDLE_INVALID, data, size, userdata, @@ -69531,8 +67963,8 @@ index 0000000..36b3d34 +EXPORT_SYMBOL(vchiq_queue_bulk_receive); + +VCHIQ_STATUS_T -+vchiq_bulk_transmit(VCHIQ_SERVICE_HANDLE_T handle, const void *data, int size, -+ void *userdata, VCHIQ_BULK_MODE_T mode) ++vchiq_bulk_transmit(VCHIQ_SERVICE_HANDLE_T handle, const void *data, ++ unsigned int size, void *userdata, VCHIQ_BULK_MODE_T mode) +{ + VCHIQ_STATUS_T status; + @@ -69556,8 +67988,8 @@ index 0000000..36b3d34 +EXPORT_SYMBOL(vchiq_bulk_transmit); + +VCHIQ_STATUS_T -+vchiq_bulk_receive(VCHIQ_SERVICE_HANDLE_T handle, void *data, int size, -+ void *userdata, VCHIQ_BULK_MODE_T mode) ++vchiq_bulk_receive(VCHIQ_SERVICE_HANDLE_T handle, void *data, ++ unsigned int size, void *userdata, VCHIQ_BULK_MODE_T mode) +{ + VCHIQ_STATUS_T status; + @@ -69582,7 +68014,7 @@ index 0000000..36b3d34 + +static VCHIQ_STATUS_T +vchiq_blocking_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle, void *data, -+ int size, VCHIQ_BULK_DIR_T dir) ++ unsigned int size, VCHIQ_BULK_DIR_T dir) +{ + VCHIQ_INSTANCE_T instance; + VCHIQ_SERVICE_T *service; @@ -71150,25 +69582,25 @@ index 0000000..b6bfa21 + return vchiq_build_time; +} -- -1.8.1.5 +1.8.1.6 -From 64a56541033216dda2eb666ebe61e103f6c38c4f Mon Sep 17 00:00:00 2001 +From e80667986ce0db068d72fe1aae8a37a48ae19a45 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 28 Mar 2013 00:10:21 +0000 -Subject: [PATCH 006/169] cma: Add vc_cma driver to enable use of CMA +Subject: [PATCH 06/95] cma: Add vc_cma driver to enable use of CMA Signed-off-by: popcornmix --- drivers/char/Kconfig | 2 + drivers/char/Makefile | 3 + - drivers/char/broadcom/Kconfig | 18 + + drivers/char/broadcom/Kconfig | 17 + drivers/char/broadcom/Makefile | 2 + drivers/char/broadcom/vc_cma/Makefile | 15 + drivers/char/broadcom/vc_cma/vc_cma.c | 1145 +++++++++++++++++++++++++++++++++ - drivers/misc/Makefile | 3 +- + drivers/misc/Makefile | 2 +- include/linux/broadcom/vc_cma.h | 30 + - 8 files changed, 1216 insertions(+), 2 deletions(-) + 8 files changed, 1215 insertions(+), 1 deletion(-) create mode 100644 drivers/char/broadcom/Kconfig create mode 100644 drivers/char/broadcom/Makefile create mode 100644 drivers/char/broadcom/vc_cma/Makefile @@ -71176,10 +69608,10 @@ Signed-off-by: popcornmix create mode 100644 include/linux/broadcom/vc_cma.h diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig -index 72bedad..f2d8992 100644 +index 3bb6fa3..022b91c 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig -@@ -585,6 +585,8 @@ config DEVPORT +@@ -586,6 +586,8 @@ config DEVPORT source "drivers/s390/char/Kconfig" @@ -71201,10 +69633,10 @@ index 7ff1d0d..c594502 100644 + diff --git a/drivers/char/broadcom/Kconfig b/drivers/char/broadcom/Kconfig new file mode 100644 -index 0000000..9790e31 +index 0000000..6ec2528 --- /dev/null +++ b/drivers/char/broadcom/Kconfig -@@ -0,0 +1,18 @@ +@@ -0,0 +1,17 @@ +# +# Broadcom char driver config +# @@ -71216,8 +69648,7 @@ index 0000000..9790e31 + Broadcom's char drivers + +config BCM_VC_CMA -+ tristate "Videocore CMA" -+ #depends on BCM_VC_SERVICES ++ bool "Videocore CMA" + depends on CMA + default n + help @@ -71254,7 +69685,7 @@ index 0000000..ae71918 + diff --git a/drivers/char/broadcom/vc_cma/vc_cma.c b/drivers/char/broadcom/vc_cma/vc_cma.c new file mode 100644 -index 0000000..926b609 +index 0000000..6d8b4df --- /dev/null +++ b/drivers/char/broadcom/vc_cma/vc_cma.c @@ -0,0 +1,1145 @@ @@ -71413,7 +69844,7 @@ index 0000000..926b609 + unsigned short param1, unsigned short param2); +static bool send_worker_msg(VCHIQ_HEADER_T * msg); + -+static int __init early_vc_cma_mem(char *p) ++static int early_vc_cma_mem(char *p) +{ + unsigned int new_size; + printk(KERN_NOTICE "early_vc_cma_mem(%s)", p); @@ -71443,7 +69874,7 @@ index 0000000..926b609 + +early_param("vc-cma-mem", early_vc_cma_mem); + -+void __init vc_cma_early_init(void) ++void vc_cma_early_init(void) +{ + LOG_DBG("vc_cma_early_init - vc_cma_chunks = %d", vc_cma_chunks); + if (vc_cma_size) { @@ -71452,7 +69883,7 @@ index 0000000..926b609 + } +} + -+void __init vc_cma_reserve(void) ++void vc_cma_reserve(void) +{ + /* if vc_cma_size is set, then declare vc CMA area of the same + * size from the end of memory @@ -72275,7 +70706,7 @@ index 0000000..926b609 +} +#endif + -+static int __init vc_cma_init(void) ++static int vc_cma_init(void) +{ + int rc = -EFAULT; + struct device *dev; @@ -72404,16 +70835,16 @@ index 0000000..926b609 +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Broadcom Corporation"); diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile -index 7142d0a..958adc5 100644 +index 720ba76..d0567ef 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile -@@ -49,5 +49,4 @@ obj-y += carma/ - obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o - obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/ - obj-$(CONFIG_INTEL_MEI) += mei/ +@@ -52,5 +52,5 @@ obj-$(CONFIG_INTEL_MEI) += mei/ + obj-$(CONFIG_MAX8997_MUIC) += max8997-muic.o + obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/ + obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o -obj-y += vc04_services/ -- +obj-$(CONFIG_BCM2708_VCHIQ) += vc04_services/ + diff --git a/include/linux/broadcom/vc_cma.h b/include/linux/broadcom/vc_cma.h new file mode 100644 index 0000000..bdc9d79 @@ -72451,13 +70882,13 @@ index 0000000..bdc9d79 +#endif /* VC_CMA_H */ + -- -1.8.1.5 +1.8.1.6 -From 0cb319a525ffbc04c782884aafa78848e2d40b21 Mon Sep 17 00:00:00 2001 +From a53cbc1c13befbe10a0c06ff81d0cb9f0c699b14 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 17:26:38 +0000 -Subject: [PATCH 007/169] Allow mac address to be set in smsc95xx +Subject: [PATCH 07/95] Allow mac address to be set in smsc95xx Signed-off-by: popcornmix --- @@ -72465,18 +70896,18 @@ Signed-off-by: popcornmix 1 file changed, 56 insertions(+) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c -index 6214181..71819f5 100644 +index e6d2dea..9709314 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c -@@ -54,6 +54,7 @@ - #define FEATURE_8_WAKEUP_FILTERS (0x01) - #define FEATURE_PHY_NLP_CROSSOVER (0x02) - #define FEATURE_AUTOSUSPEND (0x04) +@@ -61,6 +61,7 @@ + #define SUSPEND_SUSPEND3 (0x08) + #define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \ + SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3) +#define MAC_ADDR_LEN (6) struct smsc95xx_priv { u32 mac_cr; -@@ -68,6 +69,10 @@ struct smsc95xx_priv { +@@ -76,6 +77,10 @@ struct smsc95xx_priv { module_param(turbo_mode, bool, 0644); MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction"); @@ -72487,7 +70918,7 @@ index 6214181..71819f5 100644 static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data, int in_pm) { -@@ -775,8 +780,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) +@@ -765,8 +770,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); } @@ -72548,3290 +70979,13 @@ index 6214181..71819f5 100644 if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, dev->net->dev_addr) == 0) { -- -1.8.1.5 +1.8.1.6 -From dcb2238b2c0186e95e740bf31b3de6a4d936b8e3 Mon Sep 17 00:00:00 2001 -From: Dom Cobley -Date: Wed, 1 Feb 2012 21:35:47 +0000 -Subject: [PATCH 008/169] Build anything reasonable as a module. Thanks to asb - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 1579 +++++------------------------ - 1 file changed, 247 insertions(+), 1332 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index 4862854..302053b 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -1,1307 +1,415 @@ --# --# Automatically generated file; DO NOT EDIT. --# Linux/arm 3.1.9 Kernel Configuration --# --CONFIG_ARM=y --CONFIG_SYS_SUPPORTS_APM_EMULATION=y --CONFIG_GENERIC_GPIO=y --# CONFIG_ARCH_USES_GETTIMEOFFSET is not set --CONFIG_GENERIC_CLOCKEVENTS=y --CONFIG_KTIME_SCALAR=y --CONFIG_HAVE_PROC_CPU=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_CPU_IDLE_WAIT=y --CONFIG_GENERIC_HWEIGHT=y --CONFIG_GENERIC_CALIBRATE_DELAY=y --CONFIG_NEED_DMA_MAP_STATE=y --CONFIG_VECTORS_BASE=0xffff0000 --# CONFIG_ARM_PATCH_PHYS_VIRT is not set --CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" --CONFIG_HAVE_IRQ_WORK=y -- --# --# General setup --# - CONFIG_EXPERIMENTAL=y --CONFIG_BROKEN_ON_SMP=y --CONFIG_INIT_ENV_ARG_LIMIT=32 --CONFIG_CROSS_COMPILE="" --CONFIG_LOCALVERSION="" - # CONFIG_LOCALVERSION_AUTO is not set --CONFIG_HAVE_KERNEL_GZIP=y --CONFIG_HAVE_KERNEL_LZMA=y --CONFIG_HAVE_KERNEL_LZO=y --CONFIG_KERNEL_GZIP=y --# CONFIG_KERNEL_LZMA is not set --# CONFIG_KERNEL_LZO is not set --CONFIG_DEFAULT_HOSTNAME="(none)" --CONFIG_SWAP=y - CONFIG_SYSVIPC=y --CONFIG_SYSVIPC_SYSCTL=y - CONFIG_POSIX_MQUEUE=y --CONFIG_POSIX_MQUEUE_SYSCTL=y --# CONFIG_BSD_PROCESS_ACCT is not set --# CONFIG_FHANDLE is not set --# CONFIG_TASKSTATS is not set --# CONFIG_AUDIT is not set --CONFIG_HAVE_GENERIC_HARDIRQS=y -- --# --# IRQ subsystem --# --CONFIG_GENERIC_HARDIRQS=y --CONFIG_HAVE_SPARSE_IRQ=y --CONFIG_GENERIC_IRQ_SHOW=y --# CONFIG_SPARSE_IRQ is not set -- --# --# RCU Subsystem --# --CONFIG_TINY_RCU=y --# CONFIG_PREEMPT_RCU is not set --# CONFIG_RCU_TRACE is not set --# CONFIG_TREE_RCU_TRACE is not set - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y --CONFIG_LOG_BUF_SHIFT=17 --# CONFIG_CGROUPS is not set --# CONFIG_NAMESPACES is not set --# CONFIG_SCHED_AUTOGROUP is not set --# CONFIG_SYSFS_DEPRECATED is not set --# CONFIG_RELAY is not set --# CONFIG_BLK_DEV_INITRD is not set --# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set --CONFIG_SYSCTL=y --CONFIG_ANON_INODES=y --CONFIG_EXPERT=y - # CONFIG_UID16 is not set --CONFIG_SYSCTL_SYSCALL=y - # CONFIG_KALLSYMS is not set --CONFIG_HOTPLUG=y --CONFIG_PRINTK=y --CONFIG_BUG=y --# CONFIG_ELF_CORE is not set --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_EMBEDDED=y --CONFIG_HAVE_PERF_EVENTS=y --CONFIG_PERF_USE_VMALLOC=y -- --# --# Kernel Performance Events And Counters --# --# CONFIG_PERF_EVENTS is not set --# CONFIG_PERF_COUNTERS is not set - # CONFIG_VM_EVENT_COUNTERS is not set - # CONFIG_COMPAT_BRK is not set - CONFIG_SLAB=y --# CONFIG_SLUB is not set --# CONFIG_SLOB is not set --# CONFIG_PROFILING is not set --CONFIG_HAVE_OPROFILE=y --# CONFIG_KPROBES is not set --CONFIG_HAVE_KPROBES=y --CONFIG_HAVE_KRETPROBES=y --CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y --CONFIG_HAVE_CLK=y --CONFIG_HAVE_DMA_API_DEBUG=y -- --# --# GCOV-based kernel profiling --# --CONFIG_HAVE_GENERIC_DMA_COHERENT=y --CONFIG_SLABINFO=y --CONFIG_RT_MUTEXES=y --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=y - CONFIG_MODULE_SRCVERSION_ALL=y --CONFIG_BLOCK=y --CONFIG_LBDAF=y - # CONFIG_BLK_DEV_BSG is not set --# CONFIG_BLK_DEV_BSGLIB is not set --# CONFIG_BLK_DEV_INTEGRITY is not set -- --# --# IO Schedulers --# --CONFIG_IOSCHED_NOOP=y --CONFIG_IOSCHED_DEADLINE=y --CONFIG_IOSCHED_CFQ=y --# CONFIG_DEFAULT_DEADLINE is not set --CONFIG_DEFAULT_CFQ=y --# CONFIG_DEFAULT_NOOP is not set --CONFIG_DEFAULT_IOSCHED="cfq" --# CONFIG_INLINE_SPIN_TRYLOCK is not set --# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set --# CONFIG_INLINE_SPIN_LOCK is not set --# CONFIG_INLINE_SPIN_LOCK_BH is not set --# CONFIG_INLINE_SPIN_LOCK_IRQ is not set --# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set --CONFIG_INLINE_SPIN_UNLOCK=y --# CONFIG_INLINE_SPIN_UNLOCK_BH is not set --CONFIG_INLINE_SPIN_UNLOCK_IRQ=y --# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set --# CONFIG_INLINE_READ_TRYLOCK is not set --# CONFIG_INLINE_READ_LOCK is not set --# CONFIG_INLINE_READ_LOCK_BH is not set --# CONFIG_INLINE_READ_LOCK_IRQ is not set --# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set --CONFIG_INLINE_READ_UNLOCK=y --# CONFIG_INLINE_READ_UNLOCK_BH is not set --CONFIG_INLINE_READ_UNLOCK_IRQ=y --# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set --# CONFIG_INLINE_WRITE_TRYLOCK is not set --# CONFIG_INLINE_WRITE_LOCK is not set --# CONFIG_INLINE_WRITE_LOCK_BH is not set --# CONFIG_INLINE_WRITE_LOCK_IRQ is not set --# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set --CONFIG_INLINE_WRITE_UNLOCK=y --# CONFIG_INLINE_WRITE_UNLOCK_BH is not set --CONFIG_INLINE_WRITE_UNLOCK_IRQ=y --# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set --# CONFIG_MUTEX_SPIN_ON_OWNER is not set --CONFIG_FREEZER=y -- --# --# System Type --# --CONFIG_MMU=y --# CONFIG_ARCH_INTEGRATOR is not set --# CONFIG_ARCH_REALVIEW is not set --# CONFIG_ARCH_VERSATILE is not set --# CONFIG_ARCH_VEXPRESS is not set --# CONFIG_ARCH_AT91 is not set --# CONFIG_ARCH_BCMRING is not set --# CONFIG_ARCH_CLPS711X is not set --# CONFIG_ARCH_CNS3XXX is not set --# CONFIG_ARCH_GEMINI is not set --# CONFIG_ARCH_PRIMA2 is not set --# CONFIG_ARCH_EBSA110 is not set --# CONFIG_ARCH_EP93XX is not set --# CONFIG_ARCH_FOOTBRIDGE is not set --# CONFIG_ARCH_MXC is not set --# CONFIG_ARCH_MXS is not set --# CONFIG_ARCH_NETX is not set --# CONFIG_ARCH_H720X 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_DOVE is not set --# CONFIG_ARCH_KIRKWOOD is not set --# CONFIG_ARCH_LPC32XX is not set --# CONFIG_ARCH_MV78XX0 is not set --# CONFIG_ARCH_ORION5X is not set --# CONFIG_ARCH_MMP is not set --# CONFIG_ARCH_KS8695 is not set --# CONFIG_ARCH_W90X900 is not set --# CONFIG_ARCH_NUC93X is not set --# CONFIG_ARCH_TEGRA is not set --# CONFIG_ARCH_PNX4008 is not set --# CONFIG_ARCH_PXA is not set --# CONFIG_ARCH_MSM is not set --# CONFIG_ARCH_SHMOBILE is not set --# CONFIG_ARCH_RPC is not set --# CONFIG_ARCH_SA1100 is not set --# CONFIG_ARCH_S3C2410 is not set --# CONFIG_ARCH_S3C64XX is not set --# CONFIG_ARCH_S5P64X0 is not set --# CONFIG_ARCH_S5PC100 is not set --# CONFIG_ARCH_S5PV210 is not set --# CONFIG_ARCH_EXYNOS4 is not set --# CONFIG_ARCH_SHARK is not set --# CONFIG_ARCH_TCC_926 is not set --# CONFIG_ARCH_U300 is not set --# CONFIG_ARCH_U8500 is not set --# CONFIG_ARCH_NOMADIK is not set --# CONFIG_ARCH_DAVINCI is not set --# CONFIG_ARCH_OMAP is not set --# CONFIG_PLAT_SPEAR is not set - CONFIG_ARCH_BCM2708=y --# CONFIG_ARCH_VT8500 is not set --# CONFIG_ARCH_ZYNQ is not set -- --# --# System MMU --# -- --# --# Broadcom BCM2708 Implementations --# --CONFIG_MACH_BCM2708=y --CONFIG_BCM2708_GPIO=y --CONFIG_BCM2708_VCMEM=y -- --# --# Processor Type --# --CONFIG_CPU_V6=y --CONFIG_CPU_32v6=y --CONFIG_CPU_ABRT_EV6=y --CONFIG_CPU_PABRT_V6=y --CONFIG_CPU_CACHE_V6=y --CONFIG_CPU_CACHE_VIPT=y --CONFIG_CPU_COPY_V6=y --CONFIG_CPU_TLB_V6=y --CONFIG_CPU_HAS_ASID=y --CONFIG_CPU_CP15=y --CONFIG_CPU_CP15_MMU=y --CONFIG_CPU_USE_DOMAINS=y -- --# --# Processor Features --# --CONFIG_ARM_THUMB=y --# CONFIG_CPU_ICACHE_DISABLE is not set --# CONFIG_CPU_DCACHE_DISABLE is not set --# CONFIG_CPU_BPREDICT_DISABLE is not set --CONFIG_ARM_L1_CACHE_SHIFT=5 --CONFIG_ARM_DMA_MEM_BUFFERABLE=y --CONFIG_CPU_HAS_PMU=y --CONFIG_ARM_ERRATA_411920=y --# CONFIG_ARM_ERRATA_364296 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 is not set --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_NONE=y --# CONFIG_PREEMPT_VOLUNTARY is not set --# CONFIG_PREEMPT is not set --CONFIG_HZ=100 - CONFIG_AEABI=y --CONFIG_OABI_COMPAT=y --# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set --# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set --CONFIG_HAVE_ARCH_PFN_VALID=y --# CONFIG_HIGHMEM is not set --CONFIG_SELECT_MEMORY_MODEL=y --CONFIG_FLATMEM_MANUAL=y --CONFIG_FLATMEM=y --CONFIG_FLAT_NODE_MEM_MAP=y --CONFIG_HAVE_MEMBLOCK=y --CONFIG_PAGEFLAGS_EXTENDED=y --CONFIG_SPLIT_PTLOCK_CPUS=4 --# CONFIG_COMPACTION is not set --# CONFIG_PHYS_ADDR_T_64BIT is not set --CONFIG_ZONE_DMA_FLAG=0 --CONFIG_VIRT_TO_BUS=y --# CONFIG_KSM is not set --CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 --CONFIG_NEED_PER_CPU_KM=y --# CONFIG_CLEANCACHE is not set --CONFIG_FORCE_MAX_ZONEORDER=11 --CONFIG_ALIGNMENT_TRAP=y --# CONFIG_UACCESS_WITH_MEMCPY is not set --# CONFIG_SECCOMP is not set --# CONFIG_CC_STACKPROTECTOR is not set --# CONFIG_DEPRECATED_PARAM_STRUCT is not set -- --# --# Boot options --# --# CONFIG_USE_OF is not set - CONFIG_ZBOOT_ROM_TEXT=0x0 - CONFIG_ZBOOT_ROM_BSS=0x0 - CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" --CONFIG_CMDLINE_FROM_BOOTLOADER=y --# CONFIG_CMDLINE_EXTEND is not set --# CONFIG_CMDLINE_FORCE is not set --# CONFIG_XIP_KERNEL is not set --# CONFIG_KEXEC is not set --# CONFIG_CRASH_DUMP is not set --# CONFIG_AUTO_ZRELADDR is not set -- --# --# CPU Power Management --# - CONFIG_CPU_IDLE=y --CONFIG_CPU_IDLE_GOV_LADDER=y --CONFIG_CPU_IDLE_GOV_MENU=y -- --# --# Floating point emulation --# -- --# --# At least one emulation must be selected --# --# CONFIG_FPE_NWFPE is not set --# CONFIG_FPE_FASTFPE is not set - CONFIG_VFP=y -- --# --# Userspace binary formats --# --CONFIG_BINFMT_ELF=y --CONFIG_HAVE_AOUT=y --# CONFIG_BINFMT_AOUT is not set --# CONFIG_BINFMT_MISC is not set -- --# --# Power management options --# --CONFIG_SUSPEND=y --CONFIG_SUSPEND_FREEZER=y --CONFIG_PM_SLEEP=y --# CONFIG_PM_RUNTIME is not set --CONFIG_PM=y --# CONFIG_PM_DEBUG is not set --# CONFIG_APM_EMULATION is not set --CONFIG_PM_CLK=y --CONFIG_ARCH_SUSPEND_POSSIBLE=y -+CONFIG_BINFMT_MISC=m - CONFIG_NET=y -- --# --# Networking options --# - CONFIG_PACKET=y - CONFIG_UNIX=y --CONFIG_XFRM=y - CONFIG_XFRM_USER=y --# CONFIG_XFRM_SUB_POLICY is not set --# CONFIG_XFRM_MIGRATE is not set --# CONFIG_XFRM_STATISTICS is not set - CONFIG_NET_KEY=m --# CONFIG_NET_KEY_MIGRATE is not set - CONFIG_INET=y - CONFIG_IP_MULTICAST=y --# CONFIG_IP_ADVANCED_ROUTER is not set - CONFIG_IP_PNP=y - CONFIG_IP_PNP_DHCP=y --# CONFIG_IP_PNP_BOOTP is not set - CONFIG_IP_PNP_RARP=y --# CONFIG_NET_IPIP is not set --# CONFIG_NET_IPGRE_DEMUX is not set --# CONFIG_IP_MROUTE is not set --# CONFIG_ARPD is not set - CONFIG_SYN_COOKIES=y --# CONFIG_INET_AH is not set --# CONFIG_INET_ESP is not set --# CONFIG_INET_IPCOMP is not set --# CONFIG_INET_XFRM_TUNNEL is not set --# CONFIG_INET_TUNNEL is not set - # CONFIG_INET_XFRM_MODE_TRANSPORT is not set - # CONFIG_INET_XFRM_MODE_TUNNEL is not set - # CONFIG_INET_XFRM_MODE_BEET is not set - # CONFIG_INET_LRO is not set - # CONFIG_INET_DIAG is not set --# 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 is not set --# CONFIG_NETWORK_SECMARK is not set --# CONFIG_NETWORK_PHY_TIMESTAMPING is not set --# CONFIG_NETFILTER is not set --# CONFIG_IP_DCCP is not set --# CONFIG_IP_SCTP is not set --# CONFIG_RDS is not set --# CONFIG_TIPC is not set --# CONFIG_ATM is not set --# CONFIG_L2TP is not set --# CONFIG_BRIDGE is not set --# CONFIG_NET_DSA is not set --# CONFIG_VLAN_8021Q is not set --# CONFIG_DECNET is not set --# CONFIG_LLC2 is not set --# CONFIG_IPX is not set --# CONFIG_ATALK is not set --# CONFIG_X25 is not set --# CONFIG_LAPB is not set --# CONFIG_ECONET is not set --# CONFIG_WAN_ROUTER is not set --# CONFIG_PHONET is not set --# CONFIG_IEEE802154 is not set --# CONFIG_NET_SCHED is not set --# CONFIG_DCB is not set --CONFIG_DNS_RESOLVER=y --# CONFIG_BATMAN_ADV is not set -- --# --# Network testing --# - CONFIG_NET_PKTGEN=m --# 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_WIRELESS=y --CONFIG_WEXT_CORE=y --CONFIG_WEXT_PROC=y --CONFIG_CFG80211=y --# CONFIG_NL80211_TESTMODE is not set --# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set --# CONFIG_CFG80211_REG_DEBUG is not set --CONFIG_CFG80211_DEFAULT_PS=y --# CONFIG_CFG80211_INTERNAL_REGDB is not set --CONFIG_CFG80211_WEXT=y --CONFIG_WIRELESS_EXT_SYSFS=y --# CONFIG_LIB80211 is not set --# CONFIG_MAC80211 is not set --# CONFIG_WIMAX is not set --# CONFIG_RFKILL is not set --# CONFIG_NET_9P is not set --# CONFIG_CAIF is not set --# CONFIG_CEPH_LIB is not set --# CONFIG_NFC is not set -- --# --# Device Drivers --# -- --# --# Generic Driver Options --# -+CONFIG_IRDA=m -+CONFIG_IRLAN=m -+CONFIG_IRCOMM=m -+CONFIG_IRDA_ULTRA=y -+CONFIG_IRDA_CACHE_LAST_LSAP=y -+CONFIG_IRDA_FAST_RR=y -+CONFIG_IRTTY_SIR=m -+CONFIG_KINGSUN_DONGLE=m -+CONFIG_KSDAZZLE_DONGLE=m -+CONFIG_KS959_DONGLE=m -+CONFIG_USB_IRDA=m -+CONFIG_SIGMATEL_FIR=m -+CONFIG_MCS_FIR=m -+CONFIG_BT=m -+CONFIG_BT_L2CAP=y -+CONFIG_BT_SCO=y -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+CONFIG_BT_HCIBTUSB=m -+CONFIG_BT_HCIBCM203X=m -+CONFIG_BT_HCIBPA10X=m -+CONFIG_BT_HCIBFUSB=m -+CONFIG_BT_HCIVHCI=m -+CONFIG_BT_MRVL=m -+CONFIG_BT_MRVL_SDIO=m -+CONFIG_BT_ATH3K=m -+CONFIG_CFG80211=m -+CONFIG_MAC80211=m -+CONFIG_MAC80211_RC_PID=y -+CONFIG_MAC80211_MESH=y -+CONFIG_WIMAX=m -+CONFIG_NET_9P=m -+CONFIG_NFC=m -+CONFIG_NFC_PN533=m - CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" --# CONFIG_DEVTMPFS is not set --CONFIG_STANDALONE=y --CONFIG_PREVENT_FIRMWARE_BUILD=y --CONFIG_FW_LOADER=y --CONFIG_FIRMWARE_IN_KERNEL=y --CONFIG_EXTRA_FIRMWARE="" --# CONFIG_DEBUG_DRIVER is not set --# CONFIG_DEBUG_DEVRES is not set --# CONFIG_SYS_HYPERVISOR is not set --# CONFIG_CONNECTOR is not set --# CONFIG_MTD 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_LOOP_MIN_COUNT=8 --# CONFIG_BLK_DEV_CRYPTOLOOP is not set -- --# --# DRBD disabled because PROC_FS, INET or CONNECTOR not selected --# --# CONFIG_BLK_DEV_NBD is not set --# CONFIG_BLK_DEV_UB is not set -+CONFIG_BLK_DEV_CRYPTOLOOP=m -+CONFIG_BLK_DEV_NBD=m - CONFIG_BLK_DEV_RAM=y --CONFIG_BLK_DEV_RAM_COUNT=16 --CONFIG_BLK_DEV_RAM_SIZE=4096 --# CONFIG_BLK_DEV_XIP is not set --# CONFIG_CDROM_PKTCDVD is not set --# CONFIG_ATA_OVER_ETH is not set --# CONFIG_MG_DISK is not set --# CONFIG_BLK_DEV_RBD is not set --# CONFIG_SENSORS_LIS3LV02D is not set -+CONFIG_CDROM_PKTCDVD=m - CONFIG_MISC_DEVICES=y --# CONFIG_ENCLOSURE_SERVICES is not set --# CONFIG_C2PORT is not set -- --# --# EEPROM support --# --# CONFIG_EEPROM_93CX6 is not set --# CONFIG_IWMC3200TOP is not set -- --# --# Texas Instruments shared transport line discipline --# --# CONFIG_TI_ST is not set --CONFIG_BCM2708_VCHIQ=y --CONFIG_HAVE_IDE=y --# CONFIG_IDE is not set -- --# --# SCSI device support --# --CONFIG_SCSI_MOD=y --# CONFIG_RAID_ATTRS is not set - CONFIG_SCSI=y --CONFIG_SCSI_DMA=y --# CONFIG_SCSI_TGT is not set --# CONFIG_SCSI_NETLINK is not set - # CONFIG_SCSI_PROC_FS is not set -- --# --# SCSI support type (disk, tape, CD-ROM) --# - CONFIG_BLK_DEV_SD=m --# CONFIG_CHR_DEV_ST is not set --# CONFIG_CHR_DEV_OSST is not set - CONFIG_BLK_DEV_SR=m --# CONFIG_BLK_DEV_SR_VENDOR is not set --# CONFIG_CHR_DEV_SG is not set --# CONFIG_CHR_DEV_SCH is not set - CONFIG_SCSI_MULTI_LUN=y --# CONFIG_SCSI_CONSTANTS is not set --# CONFIG_SCSI_LOGGING is not set --# CONFIG_SCSI_SCAN_ASYNC is not set --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 is not set --# CONFIG_SCSI_SAS_ATTRS is not set --# 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_SCSI_OSD_INITIATOR is not set --# CONFIG_ATA is not set --# CONFIG_MD is not set --# CONFIG_TARGET_CORE is not set - CONFIG_NETDEVICES=y --# CONFIG_DUMMY is not set --# CONFIG_BONDING is not set --# CONFIG_MACVLAN is not set --# CONFIG_EQUALIZER is not set - CONFIG_TUN=m --# CONFIG_VETH is not set --CONFIG_MII=y - CONFIG_PHYLIB=m -- --# --# MII PHY device drivers --# --# CONFIG_MARVELL_PHY is not set --# CONFIG_DAVICOM_PHY is not set --# CONFIG_QSEMI_PHY is not set --# CONFIG_LXT_PHY is not set --# CONFIG_CICADA_PHY is not set --# CONFIG_VITESSE_PHY is not set --# CONFIG_SMSC_PHY is not set --# CONFIG_BROADCOM_PHY is not set --# CONFIG_ICPLUS_PHY is not set --# CONFIG_REALTEK_PHY is not set --# CONFIG_NATIONAL_PHY is not set --# CONFIG_STE10XP is not set --# CONFIG_LSI_ET1011C_PHY is not set --# CONFIG_MICREL_PHY is not set - CONFIG_MDIO_BITBANG=m --# CONFIG_MDIO_GPIO is not set - CONFIG_NET_ETHERNET=y --CONFIG_AX88796=m --# CONFIG_AX88796_93CX6 is not set --# CONFIG_SMC91X is not set --# CONFIG_DM9000 is not set --# CONFIG_ETHOC is not set --# CONFIG_SMC911X is not set --# CONFIG_SMSC911X is not set --# CONFIG_DNET is not set --# CONFIG_IBM_NEW_EMAC_ZMII is not set --# CONFIG_IBM_NEW_EMAC_RGMII is not set --# CONFIG_IBM_NEW_EMAC_TAH is not set --# CONFIG_IBM_NEW_EMAC_EMAC4 is not set --# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set --# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set --# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set --# CONFIG_B44 is not set --# CONFIG_KS8851_MLL is not set --# CONFIG_FTMAC100 is not set - # CONFIG_NETDEV_1000 is not set - # CONFIG_NETDEV_10000 is not set --# CONFIG_WLAN is not set -- --# --# Enable WiMAX (Networking options) to see the WiMAX drivers --# -- --# --# 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_LIBERTAS_THINFIRM=m -+CONFIG_LIBERTAS_THINFIRM_USB=m -+CONFIG_AT76C50X_USB=m -+CONFIG_USB_ZD1201=m -+CONFIG_USB_NET_RNDIS_WLAN=m -+CONFIG_RTL8187=m -+CONFIG_MAC80211_HWSIM=m -+CONFIG_ATH_COMMON=m -+CONFIG_ATH9K=m -+CONFIG_ATH9K_HTC=m -+CONFIG_CARL9170=m -+CONFIG_B43=m -+CONFIG_B43LEGACY=m -+CONFIG_HOSTAP=m -+CONFIG_IWM=m -+CONFIG_LIBERTAS=m -+CONFIG_LIBERTAS_USB=m -+CONFIG_LIBERTAS_SDIO=m -+CONFIG_P54_COMMON=m -+CONFIG_P54_USB=m -+CONFIG_RT2X00=m -+CONFIG_RT2500USB=m -+CONFIG_RT73USB=m -+CONFIG_RT2800USB=m -+CONFIG_RT2800USB_RT53XX=y -+CONFIG_RTL8192CU=m -+CONFIG_WL1251=m -+CONFIG_WL12XX_MENU=m -+CONFIG_ZD1211RW=m -+CONFIG_MWIFIEX=m -+CONFIG_MWIFIEX_SDIO=m -+CONFIG_WIMAX_I2400M_USB=m -+CONFIG_USB_CATC=m -+CONFIG_USB_KAWETH=m -+CONFIG_USB_PEGASUS=m -+CONFIG_USB_RTL8150=m - CONFIG_USB_USBNET=y - CONFIG_USB_NET_AX8817X=m --# CONFIG_USB_NET_CDCETHER is not set --# CONFIG_USB_NET_CDC_EEM is not set --CONFIG_USB_NET_CDC_NCM=y --# CONFIG_USB_NET_DM9601 is not set --# CONFIG_USB_NET_SMSC75XX is not set -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_DM9601=m -+CONFIG_USB_NET_SMSC75XX=m - CONFIG_USB_NET_SMSC95XX=y --# CONFIG_USB_NET_GL620A is not set --# CONFIG_USB_NET_NET1080 is not set --# CONFIG_USB_NET_PLUSB is not set --# CONFIG_USB_NET_MCS7830 is not set --# CONFIG_USB_NET_RNDIS_HOST is not set --# CONFIG_USB_NET_CDC_SUBSET is not set -+CONFIG_USB_NET_GL620A=m -+CONFIG_USB_NET_NET1080=m -+CONFIG_USB_NET_PLUSB=m -+CONFIG_USB_NET_MCS7830=m -+CONFIG_USB_NET_CDC_SUBSET=m -+CONFIG_USB_ALI_M5632=y -+CONFIG_USB_AN2720=y -+CONFIG_USB_KC2190=y - # CONFIG_USB_NET_ZAURUS is not set --# CONFIG_USB_NET_CX82310_ETH is not set --# CONFIG_USB_NET_KALMIA is not set --# CONFIG_USB_NET_INT51X1 is not set --# CONFIG_USB_IPHETH is not set --# CONFIG_USB_SIERRA_NET is not set --# CONFIG_WAN is not set -- --# --# CAIF transport drivers --# --# 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 --# CONFIG_PHONE is not set -- --# --# Input device support --# --CONFIG_INPUT=y --# CONFIG_INPUT_FF_MEMLESS is not set --# CONFIG_INPUT_POLLDEV is not set --# CONFIG_INPUT_SPARSEKMAP is not set -- --# --# Userland interfaces --# --CONFIG_INPUT_MOUSEDEV=y -+CONFIG_USB_NET_CX82310_ETH=m -+CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_INT51X1=m -+CONFIG_USB_IPHETH=m -+CONFIG_USB_SIERRA_NET=m -+CONFIG_USB_VL600=m -+CONFIG_PPP=m -+CONFIG_PPP_ASYNC=m -+CONFIG_PPP_SYNC_TTY=m -+CONFIG_PPP_DEFLATE=m -+CONFIG_PPP_BSDCOMP=m -+CONFIG_SLIP=m -+CONFIG_SLIP_COMPRESSED=y -+CONFIG_NETCONSOLE=m -+CONFIG_INPUT_POLLDEV=m - # CONFIG_INPUT_MOUSEDEV_PSAUX is not set --CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 --CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 --# CONFIG_INPUT_JOYDEV is not set -+CONFIG_INPUT_JOYDEV=m - CONFIG_INPUT_EVDEV=m --# CONFIG_INPUT_EVBUG is not set -- --# --# Input Device Drivers --# - # CONFIG_INPUT_KEYBOARD is not set - # CONFIG_INPUT_MOUSE is not set --# CONFIG_INPUT_JOYSTICK is not set --# CONFIG_INPUT_TABLET is not set --# CONFIG_INPUT_TOUCHSCREEN is not set - CONFIG_INPUT_MISC=y --# CONFIG_INPUT_AD714X is not set --# CONFIG_INPUT_ATI_REMOTE is not set --# CONFIG_INPUT_ATI_REMOTE2 is not set --# CONFIG_INPUT_KEYSPAN_REMOTE is not set --# CONFIG_INPUT_POWERMATE is not set --# CONFIG_INPUT_YEALINK is not set --# CONFIG_INPUT_CM109 is not set -+CONFIG_INPUT_AD714X=m -+CONFIG_INPUT_ATI_REMOTE=m -+CONFIG_INPUT_ATI_REMOTE2=m -+CONFIG_INPUT_KEYSPAN_REMOTE=m -+CONFIG_INPUT_POWERMATE=m -+CONFIG_INPUT_YEALINK=m -+CONFIG_INPUT_CM109=m - CONFIG_INPUT_UINPUT=m --# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set --# CONFIG_INPUT_ADXL34X is not set --# CONFIG_INPUT_CMA3000 is not set -- --# --# Hardware I/O ports --# -+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m -+CONFIG_INPUT_ADXL34X=m -+CONFIG_INPUT_CMA3000=m - CONFIG_SERIO=m --CONFIG_SERIO_SERPORT=m --# CONFIG_SERIO_AMBAKMI is not set --# CONFIG_SERIO_LIBPS2 is not set - CONFIG_SERIO_RAW=m --# CONFIG_SERIO_ALTERA_PS2 is not set --# CONFIG_SERIO_PS2MULT is not set - CONFIG_GAMEPORT=m - CONFIG_GAMEPORT_NS558=m - CONFIG_GAMEPORT_L4=m -- --# --# Character devices --# --CONFIG_VT=y --CONFIG_CONSOLE_TRANSLATIONS=y --CONFIG_VT_CONSOLE=y --CONFIG_HW_CONSOLE=y - CONFIG_VT_HW_CONSOLE_BINDING=y --CONFIG_UNIX98_PTYS=y --# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set - # CONFIG_LEGACY_PTYS is not set --# CONFIG_SERIAL_NONSTANDARD is not set --# CONFIG_N_GSM is not set --# CONFIG_TRACE_SINK is not set - # CONFIG_DEVKMEM is not set -- --# --# Serial drivers --# --# CONFIG_SERIAL_8250 is not set -- --# --# Non-8250 serial port support --# --# CONFIG_SERIAL_AMBA_PL010 is not set - CONFIG_SERIAL_AMBA_PL011=y - CONFIG_SERIAL_AMBA_PL011_CONSOLE=y --CONFIG_SERIAL_CORE=y --CONFIG_SERIAL_CORE_CONSOLE=y --# CONFIG_SERIAL_TIMBERDALE is not set --# CONFIG_SERIAL_ALTERA_JTAGUART is not set --# CONFIG_SERIAL_ALTERA_UART is not set --# CONFIG_SERIAL_XILINX_PS_UART is not set --# CONFIG_TTY_PRINTK is not set --# CONFIG_HVC_DCC is not set --# CONFIG_IPMI_HANDLER is not set - # CONFIG_HW_RANDOM is not set --# CONFIG_R3964 is not set - CONFIG_RAW_DRIVER=y --CONFIG_MAX_RAW_DEVS=256 --# CONFIG_TCG_TPM is not set --# CONFIG_RAMOOPS is not set --# CONFIG_I2C is not set --# CONFIG_SPI is not set -- --# --# PPS support --# --# CONFIG_PPS is not set -- --# --# PPS generators support --# -- --# --# PTP clock support --# -- --# --# Enable Device Drivers -> PPS to see the PTP clock options. --# --CONFIG_ARCH_REQUIRE_GPIOLIB=y --CONFIG_GPIOLIB=y --# CONFIG_DEBUG_GPIO is not set - CONFIG_GPIO_SYSFS=y -- --# --# Memory mapped GPIO drivers: --# --# CONFIG_GPIO_GENERIC_PLATFORM is not set --# CONFIG_GPIO_IT8761E is not set --# CONFIG_GPIO_PL061 is not set -- --# --# I2C GPIO expanders: --# -- --# --# PCI GPIO expanders: --# -- --# --# SPI GPIO expanders: --# -- --# --# AC97 GPIO expanders: --# -- --# --# MODULbus GPIO expanders: --# --# CONFIG_W1 is not set --# CONFIG_POWER_SUPPLY is not set - # CONFIG_HWMON is not set --# CONFIG_THERMAL is not set --# CONFIG_WATCHDOG is not set --CONFIG_SSB_POSSIBLE=y -- --# --# Sonics Silicon Backplane --# --# CONFIG_SSB is not set --CONFIG_BCMA_POSSIBLE=y -- --# --# Broadcom specific AMBA --# --# CONFIG_BCMA is not set -+CONFIG_WATCHDOG=y -+CONFIG_BCM2708_WDT=m - # CONFIG_MFD_SUPPORT is not set --# CONFIG_REGULATOR is not set --# CONFIG_MEDIA_SUPPORT is not set -- --# --# Graphics support --# --# CONFIG_DRM is not set --# CONFIG_VGASTATE is not set --# CONFIG_VIDEO_OUTPUT_CONTROL is not set - CONFIG_FB=y --# CONFIG_FIRMWARE_EDID is not set --# CONFIG_FB_DDC is not set --# CONFIG_FB_BOOT_VESA_SUPPORT is not set --CONFIG_FB_CFB_FILLRECT=y --CONFIG_FB_CFB_COPYAREA=y --CONFIG_FB_CFB_IMAGEBLIT=y --# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set --# CONFIG_FB_SYS_FILLRECT is not set --# CONFIG_FB_SYS_COPYAREA is not set --# CONFIG_FB_SYS_IMAGEBLIT is not set --# CONFIG_FB_FOREIGN_ENDIAN is not set --# CONFIG_FB_SYS_FOPS is not set --# CONFIG_FB_WMT_GE_ROPS is not set --# CONFIG_FB_SVGALIB is not set --# CONFIG_FB_MACMODES is not set --# CONFIG_FB_BACKLIGHT is not set --# CONFIG_FB_MODE_HELPERS is not set --# CONFIG_FB_TILEBLITTING is not set -- --# --# Frame buffer hardware drivers --# - CONFIG_FB_BCM2708=y --# CONFIG_FB_ARMCLCD is not set --# CONFIG_FB_S1D13XXX is not set --# CONFIG_FB_UDL is not set --# CONFIG_FB_VIRTUAL is not set --# CONFIG_FB_METRONOME is not set --# CONFIG_FB_BROADSHEET is not set --# CONFIG_BACKLIGHT_LCD_SUPPORT is not set -- --# --# Display device support --# --# CONFIG_DISPLAY_SUPPORT is not set -- --# --# Console display driver support --# --CONFIG_DUMMY_CONSOLE=y - CONFIG_FRAMEBUFFER_CONSOLE=y --# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set --# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set --# CONFIG_FONTS is not set --CONFIG_FONT_8x8=y --CONFIG_FONT_8x16=y - CONFIG_LOGO=y - # CONFIG_LOGO_LINUX_MONO is not set - # CONFIG_LOGO_LINUX_VGA16 is not set --CONFIG_LOGO_LINUX_CLUT224=y --# CONFIG_SOUND is not set --CONFIG_HID_SUPPORT=y --CONFIG_HID=y --# CONFIG_HIDRAW is not set -- --# --# USB Input Devices --# --CONFIG_USB_HID=y - CONFIG_HID_PID=y - CONFIG_USB_HIDDEV=y -- --# --# Special HID drivers --# - CONFIG_HID_A4TECH=m --# CONFIG_HID_ACRUX is not set -+CONFIG_HID_ACRUX=m - CONFIG_HID_APPLE=m - CONFIG_HID_BELKIN=m - CONFIG_HID_CHERRY=m - CONFIG_HID_CHICONY=m - CONFIG_HID_CYPRESS=m - CONFIG_HID_DRAGONRISE=m --# CONFIG_DRAGONRISE_FF is not set --# CONFIG_HID_EMS_FF is not set -+CONFIG_HID_EMS_FF=m -+CONFIG_HID_ELECOM=m - CONFIG_HID_EZKEY=m --# CONFIG_HID_HOLTEK is not set --# CONFIG_HID_KEYTOUCH is not set -+CONFIG_HID_HOLTEK=m -+CONFIG_HID_KEYTOUCH=m - CONFIG_HID_KYE=m --# CONFIG_HID_UCLOGIC is not set --# CONFIG_HID_WALTOP is not set -+CONFIG_HID_UCLOGIC=m -+CONFIG_HID_WALTOP=m - CONFIG_HID_GYRATION=m - CONFIG_HID_TWINHAN=m - CONFIG_HID_KENSINGTON=m --# CONFIG_HID_LCPOWER is not set -+CONFIG_HID_LCPOWER=m - CONFIG_HID_LOGITECH=m --# CONFIG_LOGITECH_FF is not set --# CONFIG_LOGIRUMBLEPAD2_FF is not set --# CONFIG_LOGIG940_FF is not set --# CONFIG_LOGIWII_FF is not set -+CONFIG_HID_MAGICMOUSE=m - CONFIG_HID_MICROSOFT=m - CONFIG_HID_MONTEREY=m --# CONFIG_HID_MULTITOUCH is not set --# CONFIG_HID_NTRIG is not set -+CONFIG_HID_MULTITOUCH=m -+CONFIG_HID_NTRIG=m - CONFIG_HID_ORTEK=m - CONFIG_HID_PANTHERLORD=m --# CONFIG_PANTHERLORD_FF is not set - CONFIG_HID_PETALYNX=m --# CONFIG_HID_PICOLCD is not set --# CONFIG_HID_QUANTA is not set --# CONFIG_HID_ROCCAT is not set -+CONFIG_HID_PICOLCD=m -+CONFIG_HID_QUANTA=m -+CONFIG_HID_ROCCAT=m - CONFIG_HID_SAMSUNG=m - CONFIG_HID_SONY=m --# CONFIG_HID_SPEEDLINK is not set -+CONFIG_HID_SPEEDLINK=m - CONFIG_HID_SUNPLUS=m - CONFIG_HID_GREENASIA=m --# CONFIG_GREENASIA_FF is not set - CONFIG_HID_SMARTJOYPLUS=m --# CONFIG_SMARTJOYPLUS_FF is not set - CONFIG_HID_TOPSEED=m - CONFIG_HID_THRUSTMASTER=m --# CONFIG_THRUSTMASTER_FF is not set -+CONFIG_HID_WACOM=m -+CONFIG_HID_WIIMOTE=m - CONFIG_HID_ZEROPLUS=m --# CONFIG_ZEROPLUS_FF is not set --# CONFIG_HID_ZYDACRON 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 is not set -+CONFIG_HID_ZYDACRON=m - CONFIG_USB=y --# CONFIG_USB_DEBUG is not set - CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -- --# --# Miscellaneous USB options --# --# CONFIG_USB_DEVICEFS is not set --CONFIG_USB_DEVICE_CLASS=y --# CONFIG_USB_DYNAMIC_MINORS is not set --# CONFIG_USB_OTG_WHITELIST is not set --# CONFIG_USB_OTG_BLACKLIST_HUB is not set - CONFIG_USB_MON=m --# 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_OXU210HP_HCD is not set --# CONFIG_USB_ISP116X_HCD is not set --# CONFIG_USB_ISP1760_HCD is not set --# CONFIG_USB_ISP1362_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 - CONFIG_USB_DWCOTG=y -- --# --# 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 info --# - CONFIG_USB_STORAGE=y --# CONFIG_USB_STORAGE_DEBUG is not set --# CONFIG_USB_STORAGE_REALTEK 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_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_STORAGE_ENE_UB6250 is not set --# CONFIG_USB_UAS is not set -+CONFIG_USB_STORAGE_REALTEK=m -+CONFIG_USB_STORAGE_DATAFAB=m -+CONFIG_USB_STORAGE_FREECOM=m -+CONFIG_USB_STORAGE_ISD200=m -+CONFIG_USB_STORAGE_USBAT=m -+CONFIG_USB_STORAGE_SDDR09=m -+CONFIG_USB_STORAGE_SDDR55=m -+CONFIG_USB_STORAGE_JUMPSHOT=m -+CONFIG_USB_STORAGE_ALAUDA=m -+CONFIG_USB_STORAGE_ONETOUCH=m -+CONFIG_USB_STORAGE_KARMA=m -+CONFIG_USB_STORAGE_CYPRESS_ATACB=m -+CONFIG_USB_STORAGE_ENE_UB6250=m -+CONFIG_USB_UAS=m - CONFIG_USB_LIBUSUAL=y -- --# --# 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_LED is not set --# CONFIG_USB_CYPRESS_CY7C63 is not set --# CONFIG_USB_CYTHERM 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_YUREX is not set --# CONFIG_USB_GADGET is not set -- --# --# OTG and related infrastructure --# --# CONFIG_USB_GPIO_VBUS is not set --# CONFIG_USB_ULPI is not set --# CONFIG_NOP_USB_XCEIV is not set -+CONFIG_USB_MDC800=m -+CONFIG_USB_MICROTEK=m -+CONFIG_USB_SERIAL=m -+CONFIG_USB_SERIAL_GENERIC=y -+CONFIG_USB_SERIAL_AIRCABLE=m -+CONFIG_USB_SERIAL_ARK3116=m -+CONFIG_USB_SERIAL_BELKIN=m -+CONFIG_USB_SERIAL_CH341=m -+CONFIG_USB_SERIAL_WHITEHEAT=m -+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -+CONFIG_USB_SERIAL_CP210X=m -+CONFIG_USB_SERIAL_CYPRESS_M8=m -+CONFIG_USB_SERIAL_EMPEG=m -+CONFIG_USB_SERIAL_FTDI_SIO=m -+CONFIG_USB_SERIAL_FUNSOFT=m -+CONFIG_USB_SERIAL_VISOR=m -+CONFIG_USB_SERIAL_IPAQ=m -+CONFIG_USB_SERIAL_IR=m -+CONFIG_USB_SERIAL_EDGEPORT=m -+CONFIG_USB_SERIAL_EDGEPORT_TI=m -+CONFIG_USB_SERIAL_GARMIN=m -+CONFIG_USB_SERIAL_IPW=m -+CONFIG_USB_SERIAL_IUU=m -+CONFIG_USB_SERIAL_KEYSPAN_PDA=m -+CONFIG_USB_SERIAL_KEYSPAN=m -+CONFIG_USB_SERIAL_KLSI=m -+CONFIG_USB_SERIAL_KOBIL_SCT=m -+CONFIG_USB_SERIAL_MCT_U232=m -+CONFIG_USB_SERIAL_MOS7720=m -+CONFIG_USB_SERIAL_MOS7840=m -+CONFIG_USB_SERIAL_MOTOROLA=m -+CONFIG_USB_SERIAL_NAVMAN=m -+CONFIG_USB_SERIAL_PL2303=m -+CONFIG_USB_SERIAL_OTI6858=m -+CONFIG_USB_SERIAL_QCAUX=m -+CONFIG_USB_SERIAL_QUALCOMM=m -+CONFIG_USB_SERIAL_SPCP8X5=m -+CONFIG_USB_SERIAL_HP4X=m -+CONFIG_USB_SERIAL_SAFE=m -+CONFIG_USB_SERIAL_SIEMENS_MPI=m -+CONFIG_USB_SERIAL_SIERRAWIRELESS=m -+CONFIG_USB_SERIAL_SYMBOL=m -+CONFIG_USB_SERIAL_TI=m -+CONFIG_USB_SERIAL_CYBERJACK=m -+CONFIG_USB_SERIAL_XIRCOM=m -+CONFIG_USB_SERIAL_OPTION=m -+CONFIG_USB_SERIAL_OMNINET=m -+CONFIG_USB_SERIAL_OPTICON=m -+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m -+CONFIG_USB_SERIAL_ZIO=m -+CONFIG_USB_SERIAL_SSU100=m -+CONFIG_USB_SERIAL_DEBUG=m -+CONFIG_USB_EMI62=m -+CONFIG_USB_EMI26=m -+CONFIG_USB_ADUTUX=m -+CONFIG_USB_SEVSEG=m -+CONFIG_USB_RIO500=m -+CONFIG_USB_LEGOTOWER=m -+CONFIG_USB_LCD=m -+CONFIG_USB_LED=m -+CONFIG_USB_CYPRESS_CY7C63=m -+CONFIG_USB_CYTHERM=m -+CONFIG_USB_IDMOUSE=m -+CONFIG_USB_FTDI_ELAN=m -+CONFIG_USB_APPLEDISPLAY=m -+CONFIG_USB_LD=m -+CONFIG_USB_TRANCEVIBRATOR=m -+CONFIG_USB_IOWARRIOR=m -+CONFIG_USB_TEST=m -+CONFIG_USB_ISIGHTFW=m -+CONFIG_USB_YUREX=m - CONFIG_MMC=y --# CONFIG_MMC_DEBUG is not set --# CONFIG_MMC_UNSAFE_RESUME is not set --# CONFIG_MMC_CLKGATE is not set -- --# --# MMC/SD/SDIO Card Drivers --# --CONFIG_MMC_BLOCK=y --CONFIG_MMC_BLOCK_MINORS=8 --CONFIG_MMC_BLOCK_BOUNCE=y --# CONFIG_SDIO_UART is not set --# CONFIG_MMC_TEST is not set -- --# --# MMC/SD/SDIO Host Controller Drivers --# --# CONFIG_MMC_ARMMMCI is not set - CONFIG_MMC_SDHCI=y --CONFIG_MMC_SDHCI_IO_ACCESSORS=y - CONFIG_MMC_SDHCI_PLTFM=y --# CONFIG_MMC_SDHCI_PXAV3 is not set --# CONFIG_MMC_SDHCI_PXAV2 is not set - CONFIG_MMC_SDHCI_BCM2708=y - CONFIG_MMC_SDHCI_BCM2708_DMA=y --# CONFIG_MMC_BCM2708 is not set --# CONFIG_MMC_DW is not set --# CONFIG_MMC_VUB300 is not set --# CONFIG_MMC_USHC is not set --# CONFIG_MEMSTICK is not set --CONFIG_NEW_LEDS=y --CONFIG_LEDS_CLASS=y -- --# --# LED drivers --# - CONFIG_LEDS_GPIO=y --# CONFIG_LEDS_LT3593 is not set --CONFIG_LEDS_TRIGGERS=y -- --# --# LED Triggers --# - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m --# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set --# CONFIG_LEDS_TRIGGER_GPIO is not set - CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -- --# --# iptables trigger is under Netfilter config (LED target) --# --# CONFIG_ACCESSIBILITY is not set --CONFIG_RTC_LIB=y --# CONFIG_RTC_CLASS is not set --# CONFIG_DMADEVICES is not set --# CONFIG_AUXDISPLAY is not set --# CONFIG_UIO is not set -- --# --# Virtio drivers --# --# CONFIG_VIRTIO_BALLOON is not set --# CONFIG_STAGING is not set --CONFIG_CLKDEV_LOOKUP=y -+CONFIG_UIO=m -+CONFIG_UIO_PDRV=m -+CONFIG_UIO_PDRV_GENIRQ=m - # CONFIG_IOMMU_SUPPORT is not set --# CONFIG_VIRT_DRIVERS is not set -- --# --# File systems --# --CONFIG_EXT2_FS=m --CONFIG_EXT2_FS_XATTR=y --CONFIG_EXT2_FS_POSIX_ACL=y --CONFIG_EXT2_FS_SECURITY=y --CONFIG_EXT2_FS_XIP=y --CONFIG_EXT3_FS=y --# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set --CONFIG_EXT3_FS_XATTR=y --CONFIG_EXT3_FS_POSIX_ACL=y --CONFIG_EXT3_FS_SECURITY=y --CONFIG_EXT4_FS=m --CONFIG_EXT4_FS_XATTR=y -+CONFIG_EXT4_FS=y - CONFIG_EXT4_FS_POSIX_ACL=y - CONFIG_EXT4_FS_SECURITY=y --# CONFIG_EXT4_DEBUG is not set --CONFIG_FS_XIP=y --CONFIG_JBD=y --CONFIG_JBD2=m --CONFIG_FS_MBCACHE=y --# CONFIG_REISERFS_FS is not set --# CONFIG_JFS_FS is not set --# CONFIG_XFS_FS is not set --# CONFIG_GFS2_FS is not set --# CONFIG_OCFS2_FS is not set --# CONFIG_BTRFS_FS is not set --# CONFIG_NILFS2_FS is not set --CONFIG_FS_POSIX_ACL=y --CONFIG_FILE_LOCKING=y --CONFIG_FSNOTIFY=y --CONFIG_DNOTIFY=y --CONFIG_INOTIFY_USER=y --# CONFIG_FANOTIFY is not set --# CONFIG_QUOTA is not set --# CONFIG_QUOTACTL is not set -+CONFIG_REISERFS_FS=m -+CONFIG_REISERFS_FS_XATTR=y -+CONFIG_REISERFS_FS_POSIX_ACL=y -+CONFIG_REISERFS_FS_SECURITY=y -+CONFIG_JFS_FS=m -+CONFIG_JFS_POSIX_ACL=y -+CONFIG_JFS_SECURITY=y -+CONFIG_XFS_FS=m -+CONFIG_XFS_QUOTA=y -+CONFIG_XFS_POSIX_ACL=y -+CONFIG_XFS_RT=y -+CONFIG_GFS2_FS=m -+CONFIG_OCFS2_FS=m -+CONFIG_BTRFS_FS=m -+CONFIG_BTRFS_FS_POSIX_ACL=y -+CONFIG_NILFS2_FS=m - CONFIG_AUTOFS4_FS=y - CONFIG_FUSE_FS=m - CONFIG_CUSE=m -- --# --# Caches --# - CONFIG_FSCACHE=y --# CONFIG_FSCACHE_STATS is not set --# CONFIG_FSCACHE_HISTOGRAM is not set --# CONFIG_FSCACHE_DEBUG is not set --# CONFIG_FSCACHE_OBJECT_LIST is not set - CONFIG_CACHEFILES=y --# CONFIG_CACHEFILES_DEBUG is not set --# CONFIG_CACHEFILES_HISTOGRAM is not set -- --# --# CD-ROM/DVD Filesystems --# - CONFIG_ISO9660_FS=m - CONFIG_JOLIET=y - CONFIG_ZISOFS=y - CONFIG_UDF_FS=m --CONFIG_UDF_NLS=y -- --# --# 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="ascii" - CONFIG_NTFS_FS=m --# CONFIG_NTFS_DEBUG is not set --# CONFIG_NTFS_RW is not set -- --# --# 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 is not set --# CONFIG_TMPFS_XATTR is not set --# CONFIG_HUGETLB_PAGE is not set -+CONFIG_TMPFS_POSIX_ACL=y - CONFIG_CONFIGFS_FS=y --CONFIG_MISC_FILESYSTEMS=y --# CONFIG_ADFS_FS is not set --# CONFIG_AFFS_FS is not set --# CONFIG_ECRYPT_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_LOGFS is not set --# CONFIG_CRAMFS is not set --# CONFIG_SQUASHFS 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_PSTORE is not set --# CONFIG_SYSV_FS is not set --# CONFIG_UFS_FS is not set --CONFIG_NETWORK_FILESYSTEMS=y -+CONFIG_SQUASHFS=m -+CONFIG_SQUASHFS_XATTR=y -+CONFIG_SQUASHFS_LZO=y -+CONFIG_SQUASHFS_XZ=y - CONFIG_NFS_FS=y - CONFIG_NFS_V3=y - CONFIG_NFS_V3_ACL=y - CONFIG_NFS_V4=y --# CONFIG_NFS_V4_1 is not set - CONFIG_ROOT_NFS=y - CONFIG_NFS_FSCACHE=y --# CONFIG_NFS_USE_LEGACY_DNS is not set --CONFIG_NFS_USE_KERNEL_DNS=y --# CONFIG_NFS_USE_NEW_IDMAPPER is not set --# CONFIG_NFSD is not set --CONFIG_LOCKD=y --CONFIG_LOCKD_V4=y --CONFIG_NFS_ACL_SUPPORT=y --CONFIG_NFS_COMMON=y --CONFIG_SUNRPC=y --CONFIG_SUNRPC_GSS=y --# CONFIG_CEPH_FS is not set - CONFIG_CIFS=m --# CONFIG_CIFS_STATS is not set - CONFIG_CIFS_WEAK_PW_HASH=y --# CONFIG_CIFS_UPCALL is not set - CONFIG_CIFS_XATTR=y - CONFIG_CIFS_POSIX=y --# CONFIG_CIFS_DEBUG2 is not set --# CONFIG_CIFS_DFS_UPCALL is not set --# CONFIG_CIFS_FSCACHE is not set --# CONFIG_CIFS_ACL is not set --# CONFIG_NCP_FS is not set --# CONFIG_CODA_FS is not set --# CONFIG_AFS_FS is not set -- --# --# Partition Types --# -+CONFIG_9P_FS=m - CONFIG_PARTITION_ADVANCED=y --# CONFIG_ACORN_PARTITION is not set --# CONFIG_OSF_PARTITION is not set --# CONFIG_AMIGA_PARTITION is not set --# CONFIG_ATARI_PARTITION is not set - CONFIG_MAC_PARTITION=y --CONFIG_MSDOS_PARTITION=y --# CONFIG_BSD_DISKLABEL is not set --# CONFIG_MINIX_SUBPARTITION is not set --# CONFIG_SOLARIS_X86_PARTITION is not set --# CONFIG_UNIXWARE_DISKLABEL is not set --# CONFIG_LDM_PARTITION is not set --# CONFIG_SGI_PARTITION is not set --# CONFIG_ULTRIX_PARTITION is not set --# CONFIG_SUN_PARTITION is not set --# CONFIG_KARMA_PARTITION is not set - CONFIG_EFI_PARTITION=y --# CONFIG_SYSV68_PARTITION is not set --CONFIG_NLS=y - CONFIG_NLS_DEFAULT="utf8" - CONFIG_NLS_CODEPAGE_437=y - CONFIG_NLS_CODEPAGE_737=m -@@ -1341,218 +449,25 @@ CONFIG_NLS_ISO8859_15=m - CONFIG_NLS_KOI8_R=m - CONFIG_NLS_KOI8_U=m - CONFIG_NLS_UTF8=m --# CONFIG_DLM is not set -- --# --# Kernel hacking --# --# CONFIG_PRINTK_TIME is not set --CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 --CONFIG_ENABLE_WARN_DEPRECATED=y --CONFIG_ENABLE_MUST_CHECK=y --CONFIG_FRAME_WARN=1024 --# CONFIG_MAGIC_SYSRQ is not set --# CONFIG_STRIP_ASM_SYMS is not set --# CONFIG_UNUSED_SYMBOLS is not set --# CONFIG_DEBUG_FS is not set --# CONFIG_HEADERS_CHECK is not set --# CONFIG_DEBUG_SECTION_MISMATCH is not set --CONFIG_DEBUG_KERNEL=y --# CONFIG_DEBUG_SHIRQ is not set --# CONFIG_LOCKUP_DETECTOR is not set --# CONFIG_HARDLOCKUP_DETECTOR is not set --# CONFIG_DETECT_HUNG_TASK is not set - # CONFIG_SCHED_DEBUG is not set --# CONFIG_SCHEDSTATS is not set --# CONFIG_TIMER_STATS is not set --# CONFIG_DEBUG_OBJECTS is not set --# CONFIG_DEBUG_SLAB is not set --# CONFIG_DEBUG_KMEMLEAK is not set --# CONFIG_DEBUG_RT_MUTEXES is not set --# CONFIG_RT_MUTEX_TESTER is not set --# CONFIG_DEBUG_SPINLOCK is not set --# CONFIG_DEBUG_MUTEXES is not set --# CONFIG_DEBUG_LOCK_ALLOC is not set --# CONFIG_PROVE_LOCKING is not set --# CONFIG_SPARSE_RCU_POINTER is not set --# CONFIG_LOCK_STAT is not set --# CONFIG_DEBUG_ATOMIC_SLEEP is not set --# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set --# CONFIG_DEBUG_STACK_USAGE is not set --# CONFIG_DEBUG_KOBJECT is not set - # CONFIG_DEBUG_BUGVERBOSE is not set --# CONFIG_DEBUG_INFO is not set --# CONFIG_DEBUG_VM is not set --# CONFIG_DEBUG_WRITECOUNT is not set --# CONFIG_DEBUG_MEMORY_INIT is not set --# CONFIG_DEBUG_LIST is not set --# CONFIG_TEST_LIST_SORT is not set --# CONFIG_DEBUG_SG is not set --# CONFIG_DEBUG_NOTIFIERS is not set --# CONFIG_DEBUG_CREDENTIALS is not set --CONFIG_FRAME_POINTER=y --# CONFIG_BOOT_PRINTK_DELAY is not set --# CONFIG_RCU_TORTURE_TEST is not set --# CONFIG_BACKTRACE_SELF_TEST is not set --# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set --# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set --# CONFIG_FAULT_INJECTION is not set --# CONFIG_LATENCYTOP is not set --# CONFIG_SYSCTL_SYSCALL_CHECK is not set --# CONFIG_DEBUG_PAGEALLOC is not set --CONFIG_HAVE_FUNCTION_TRACER=y --CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y --CONFIG_HAVE_DYNAMIC_FTRACE=y --CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y --CONFIG_HAVE_C_RECORDMCOUNT=y --CONFIG_TRACING_SUPPORT=y - # CONFIG_FTRACE is not set --# CONFIG_DMA_API_DEBUG is not set --# CONFIG_ATOMIC64_SELFTEST is not set --# CONFIG_SAMPLES is not set --CONFIG_HAVE_ARCH_KGDB=y --# CONFIG_KGDB is not set --# CONFIG_TEST_KSTRTOX is not set --# CONFIG_STRICT_DEVMEM is not set - # CONFIG_ARM_UNWIND is not set --# CONFIG_DEBUG_USER is not set --# CONFIG_DEBUG_LL is not set --# CONFIG_OC_ETM is not set -- --# --# Security options --# --CONFIG_KEYS=y --# CONFIG_KEYS_DEBUG_PROC_KEYS is not set --# CONFIG_SECURITY_DMESG_RESTRICT is not set --# CONFIG_SECURITY is not set --# CONFIG_SECURITYFS is not set --CONFIG_DEFAULT_SECURITY_DAC=y --CONFIG_DEFAULT_SECURITY="" --CONFIG_CRYPTO=y -- --# --# Crypto core or helper --# --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_RNG=m --CONFIG_CRYPTO_RNG2=y --CONFIG_CRYPTO_PCOMP2=y --CONFIG_CRYPTO_MANAGER=y --CONFIG_CRYPTO_MANAGER2=y --CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y --# CONFIG_CRYPTO_GF128MUL is not set --# CONFIG_CRYPTO_NULL is not set --CONFIG_CRYPTO_WORKQUEUE=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=m -- --# --# Block modes --# - CONFIG_CRYPTO_CBC=y --# CONFIG_CRYPTO_CTR is not set --# CONFIG_CRYPTO_CTS is not set --CONFIG_CRYPTO_ECB=m --# 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=m --# CONFIG_CRYPTO_VMAC is not set -- --# --# Digest --# --CONFIG_CRYPTO_CRC32C=y --# CONFIG_CRYPTO_GHASH is not set --CONFIG_CRYPTO_MD4=m - CONFIG_CRYPTO_MD5=y --CONFIG_CRYPTO_MICHAEL_MIC=m --# 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=m - CONFIG_CRYPTO_SHA512=m - CONFIG_CRYPTO_TGR192=m - CONFIG_CRYPTO_WP512=m -- --# --# Ciphers --# --# CONFIG_CRYPTO_AES is not set --# CONFIG_CRYPTO_ANUBIS is not set --CONFIG_CRYPTO_ARC4=m --# CONFIG_CRYPTO_BLOWFISH is not set --# CONFIG_CRYPTO_CAMELLIA is not set - CONFIG_CRYPTO_CAST5=m --# 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_ZLIB is not set --# CONFIG_CRYPTO_LZO is not set -- --# --# Random Number Generation --# - # CONFIG_CRYPTO_ANSI_CPRNG is not set --# CONFIG_CRYPTO_USER_API_HASH is not set --# CONFIG_CRYPTO_USER_API_SKCIPHER is not set - # CONFIG_CRYPTO_HW is not set --# CONFIG_BINARY_PRINTF is not set -- --# --# Library routines --# --CONFIG_BITREVERSE=y --CONFIG_CRC_CCITT=m --CONFIG_CRC16=y --# CONFIG_CRC_T10DIF is not set - CONFIG_CRC_ITU_T=y --CONFIG_CRC32=y --# CONFIG_CRC7 is not set - CONFIG_LIBCRC32C=y --# CONFIG_CRC8 is not set --CONFIG_ZLIB_INFLATE=m --CONFIG_ZLIB_DEFLATE=m --# CONFIG_XZ_DEC is not set --# CONFIG_XZ_DEC_BCJ is not set --CONFIG_HAS_IOMEM=y --CONFIG_HAS_IOPORT=y --CONFIG_HAS_DMA=y --CONFIG_NLATTR=y --CONFIG_GENERIC_ATOMIC64=y --# CONFIG_AVERAGE is not set --# CONFIG_CORDIC is not set --- -1.8.1.5 - - -From a8c83806c4316fe21da380d2eebb8989c1fab5d7 Mon Sep 17 00:00:00 2001 -From: Dom Cobley -Date: Sun, 12 Feb 2012 20:27:35 +0000 -Subject: [PATCH 009/169] Add config option to enable L2 cache - -Signed-off-by: Dom Cobley ---- - arch/arm/mach-bcm2708/Kconfig | 7 +++++++ - arch/arm/mach-bcm2708/include/mach/memory.h | 7 ++++++- - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig -index 44c7866..5593167 100644 ---- a/arch/arm/mach-bcm2708/Kconfig -+++ b/arch/arm/mach-bcm2708/Kconfig -@@ -22,4 +22,11 @@ config BCM2708_VCMEM - help - Helper for videocore memory access and total size allocation. - -+config BCM2708_NOL2CACHE -+ bool "Videocore L2 cache disable" -+ depends on MACH_BCM2708 -+ default n -+ help -+ Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt. -+ - endmenu -diff --git a/arch/arm/mach-bcm2708/include/mach/memory.h b/arch/arm/mach-bcm2708/include/mach/memory.h -index c6a21cb..b855d85 100644 ---- a/arch/arm/mach-bcm2708/include/mach/memory.h -+++ b/arch/arm/mach-bcm2708/include/mach/memory.h -@@ -34,7 +34,12 @@ - */ - #define PHYS_OFFSET UL(0x00000000) - #define ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ --#define _REAL_BUS_OFFSET UL(0xC0000000) /* don't use L1 or L2 caches */ -+ -+#ifdef CONFIG_BCM2708_NOL2CACHE -+ #define _REAL_BUS_OFFSET UL(0xC0000000) /* don't use L1 or L2 caches */ -+#else -+ #define _REAL_BUS_OFFSET UL(0x40000000) /* use L2 cache */ -+#endif - - /* We're using the memory at 64M in the VideoCore for Linux - this adjustment - * will provide the offset into this area as well as setting the bits that --- -1.8.1.5 - - -From cdbc993ca1ef2d9ec3398a633d058cb378fe16f7 Mon Sep 17 00:00:00 2001 -From: Dom Cobley -Date: Wed, 7 Mar 2012 23:19:08 +0000 -Subject: [PATCH 010/169] Add devtmpfs for archlinux, and emergency and debug - config - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 2 +- - arch/arm/configs/bcmrpi_defconfig | 509 ++++++++++++++++++++++++++++ - arch/arm/configs/bcmrpi_emergency_defconfig | 475 ++++++++++++++++++++++++++ - 3 files changed, 985 insertions(+), 1 deletion(-) - create mode 100644 arch/arm/configs/bcmrpi_defconfig - create mode 100644 arch/arm/configs/bcmrpi_emergency_defconfig - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index 302053b..2e9fd74 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -80,7 +80,7 @@ CONFIG_WIMAX=m - CONFIG_NET_9P=m - CONFIG_NFC=m - CONFIG_NFC_PN533=m --CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_DEVTMPFS=y - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_NBD=m -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -new file mode 100644 -index 0000000..785000b ---- /dev/null -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -0,0 +1,509 @@ -+CONFIG_EXPERIMENTAL=y -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_SYSVIPC=y -+CONFIG_POSIX_MQUEUE=y -+CONFIG_BSD_PROCESS_ACCT=y -+CONFIG_BSD_PROCESS_ACCT_V3=y -+CONFIG_FHANDLE=y -+CONFIG_AUDIT=y -+CONFIG_IKCONFIG=y -+CONFIG_IKCONFIG_PROC=y -+CONFIG_CGROUP_FREEZER=y -+CONFIG_CGROUP_DEVICE=y -+CONFIG_CGROUP_CPUACCT=y -+CONFIG_RESOURCE_COUNTERS=y -+CONFIG_BLK_CGROUP=y -+CONFIG_NAMESPACES=y -+CONFIG_SCHED_AUTOGROUP=y -+CONFIG_EMBEDDED=y -+# CONFIG_COMPAT_BRK is not set -+CONFIG_SLAB=y -+CONFIG_PROFILING=y -+CONFIG_OPROFILE=m -+CONFIG_KPROBES=y -+CONFIG_MODULES=y -+CONFIG_MODULE_UNLOAD=y -+CONFIG_MODVERSIONS=y -+CONFIG_MODULE_SRCVERSION_ALL=y -+# CONFIG_BLK_DEV_BSG is not set -+CONFIG_BLK_DEV_THROTTLING=y -+CONFIG_CFQ_GROUP_IOSCHED=y -+CONFIG_ARCH_BCM2708=y -+CONFIG_NO_HZ=y -+CONFIG_AEABI=y -+CONFIG_SECCOMP=y -+CONFIG_CC_STACKPROTECTOR=y -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" -+CONFIG_KEXEC=y -+CONFIG_CPU_IDLE=y -+CONFIG_VFP=y -+CONFIG_BINFMT_MISC=m -+CONFIG_NET=y -+CONFIG_PACKET=y -+CONFIG_UNIX=y -+CONFIG_XFRM_USER=y -+CONFIG_NET_KEY=m -+CONFIG_INET=y -+CONFIG_IP_MULTICAST=y -+CONFIG_IP_PNP=y -+CONFIG_IP_PNP_DHCP=y -+CONFIG_IP_PNP_RARP=y -+CONFIG_SYN_COOKIES=y -+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -+# CONFIG_INET_XFRM_MODE_TUNNEL is not set -+# CONFIG_INET_XFRM_MODE_BEET is not set -+# CONFIG_INET_LRO is not set -+# CONFIG_INET_DIAG is not set -+# CONFIG_IPV6 is not set -+CONFIG_NET_PKTGEN=m -+CONFIG_IRDA=m -+CONFIG_IRLAN=m -+CONFIG_IRCOMM=m -+CONFIG_IRDA_ULTRA=y -+CONFIG_IRDA_CACHE_LAST_LSAP=y -+CONFIG_IRDA_FAST_RR=y -+CONFIG_IRTTY_SIR=m -+CONFIG_KINGSUN_DONGLE=m -+CONFIG_KSDAZZLE_DONGLE=m -+CONFIG_KS959_DONGLE=m -+CONFIG_USB_IRDA=m -+CONFIG_SIGMATEL_FIR=m -+CONFIG_MCS_FIR=m -+CONFIG_BT=m -+CONFIG_BT_L2CAP=y -+CONFIG_BT_SCO=y -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+CONFIG_BT_HCIBTUSB=m -+CONFIG_BT_HCIBCM203X=m -+CONFIG_BT_HCIBPA10X=m -+CONFIG_BT_HCIBFUSB=m -+CONFIG_BT_HCIVHCI=m -+CONFIG_BT_MRVL=m -+CONFIG_BT_MRVL_SDIO=m -+CONFIG_BT_ATH3K=m -+CONFIG_CFG80211=m -+CONFIG_MAC80211=m -+CONFIG_MAC80211_RC_PID=y -+CONFIG_MAC80211_MESH=y -+CONFIG_WIMAX=m -+CONFIG_NET_9P=m -+CONFIG_NFC=m -+CONFIG_NFC_PN533=m -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_BLK_DEV_LOOP=y -+CONFIG_BLK_DEV_CRYPTOLOOP=m -+CONFIG_BLK_DEV_NBD=m -+CONFIG_BLK_DEV_RAM=y -+CONFIG_CDROM_PKTCDVD=m -+CONFIG_MISC_DEVICES=y -+CONFIG_SCSI=y -+# CONFIG_SCSI_PROC_FS is not set -+CONFIG_BLK_DEV_SD=m -+CONFIG_BLK_DEV_SR=m -+CONFIG_SCSI_MULTI_LUN=y -+# CONFIG_SCSI_LOWLEVEL is not set -+CONFIG_MD=y -+CONFIG_NETDEVICES=y -+CONFIG_TUN=m -+CONFIG_PHYLIB=m -+CONFIG_MDIO_BITBANG=m -+CONFIG_NET_ETHERNET=y -+# CONFIG_NETDEV_1000 is not set -+# CONFIG_NETDEV_10000 is not set -+CONFIG_LIBERTAS_THINFIRM=m -+CONFIG_LIBERTAS_THINFIRM_USB=m -+CONFIG_AT76C50X_USB=m -+CONFIG_USB_ZD1201=m -+CONFIG_USB_NET_RNDIS_WLAN=m -+CONFIG_RTL8187=m -+CONFIG_MAC80211_HWSIM=m -+CONFIG_ATH_COMMON=m -+CONFIG_ATH9K=m -+CONFIG_ATH9K_HTC=m -+CONFIG_CARL9170=m -+CONFIG_B43=m -+CONFIG_B43LEGACY=m -+CONFIG_HOSTAP=m -+CONFIG_IWM=m -+CONFIG_LIBERTAS=m -+CONFIG_LIBERTAS_USB=m -+CONFIG_LIBERTAS_SDIO=m -+CONFIG_P54_COMMON=m -+CONFIG_P54_USB=m -+CONFIG_RT2X00=m -+CONFIG_RT2500USB=m -+CONFIG_RT73USB=m -+CONFIG_RT2800USB=m -+CONFIG_RT2800USB_RT53XX=y -+CONFIG_RTL8192CU=m -+CONFIG_WL1251=m -+CONFIG_WL12XX_MENU=m -+CONFIG_ZD1211RW=m -+CONFIG_MWIFIEX=m -+CONFIG_MWIFIEX_SDIO=m -+CONFIG_WIMAX_I2400M_USB=m -+CONFIG_USB_CATC=m -+CONFIG_USB_KAWETH=m -+CONFIG_USB_PEGASUS=m -+CONFIG_USB_RTL8150=m -+CONFIG_USB_USBNET=y -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_DM9601=m -+CONFIG_USB_NET_SMSC75XX=m -+CONFIG_USB_NET_SMSC95XX=y -+CONFIG_USB_NET_GL620A=m -+CONFIG_USB_NET_NET1080=m -+CONFIG_USB_NET_PLUSB=m -+CONFIG_USB_NET_MCS7830=m -+CONFIG_USB_NET_CDC_SUBSET=m -+CONFIG_USB_ALI_M5632=y -+CONFIG_USB_AN2720=y -+CONFIG_USB_KC2190=y -+# CONFIG_USB_NET_ZAURUS is not set -+CONFIG_USB_NET_CX82310_ETH=m -+CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_INT51X1=m -+CONFIG_USB_IPHETH=m -+CONFIG_USB_SIERRA_NET=m -+CONFIG_USB_VL600=m -+CONFIG_PPP=m -+CONFIG_PPP_ASYNC=m -+CONFIG_PPP_SYNC_TTY=m -+CONFIG_PPP_DEFLATE=m -+CONFIG_PPP_BSDCOMP=m -+CONFIG_SLIP=m -+CONFIG_SLIP_COMPRESSED=y -+CONFIG_NETCONSOLE=m -+CONFIG_INPUT_POLLDEV=m -+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -+CONFIG_INPUT_JOYDEV=m -+CONFIG_INPUT_EVDEV=m -+# CONFIG_INPUT_KEYBOARD is not set -+# CONFIG_INPUT_MOUSE is not set -+CONFIG_INPUT_MISC=y -+CONFIG_INPUT_AD714X=m -+CONFIG_INPUT_ATI_REMOTE=m -+CONFIG_INPUT_ATI_REMOTE2=m -+CONFIG_INPUT_KEYSPAN_REMOTE=m -+CONFIG_INPUT_POWERMATE=m -+CONFIG_INPUT_YEALINK=m -+CONFIG_INPUT_CM109=m -+CONFIG_INPUT_UINPUT=m -+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m -+CONFIG_INPUT_ADXL34X=m -+CONFIG_INPUT_CMA3000=m -+CONFIG_SERIO=m -+CONFIG_SERIO_RAW=m -+CONFIG_GAMEPORT=m -+CONFIG_GAMEPORT_NS558=m -+CONFIG_GAMEPORT_L4=m -+CONFIG_VT_HW_CONSOLE_BINDING=y -+# CONFIG_LEGACY_PTYS is not set -+# CONFIG_DEVKMEM is not set -+CONFIG_SERIAL_AMBA_PL011=y -+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -+# CONFIG_HW_RANDOM is not set -+CONFIG_RAW_DRIVER=y -+CONFIG_GPIO_SYSFS=y -+# CONFIG_HWMON is not set -+CONFIG_WATCHDOG=y -+CONFIG_BCM2708_WDT=m -+# CONFIG_MFD_SUPPORT is not set -+CONFIG_FB=y -+CONFIG_FB_BCM2708=y -+CONFIG_FRAMEBUFFER_CONSOLE=y -+CONFIG_LOGO=y -+# CONFIG_LOGO_LINUX_MONO is not set -+# CONFIG_LOGO_LINUX_VGA16 is not set -+CONFIG_HID_PID=y -+CONFIG_USB_HIDDEV=y -+CONFIG_HID_A4TECH=m -+CONFIG_HID_ACRUX=m -+CONFIG_HID_APPLE=m -+CONFIG_HID_BELKIN=m -+CONFIG_HID_CHERRY=m -+CONFIG_HID_CHICONY=m -+CONFIG_HID_CYPRESS=m -+CONFIG_HID_DRAGONRISE=m -+CONFIG_HID_EMS_FF=m -+CONFIG_HID_ELECOM=m -+CONFIG_HID_EZKEY=m -+CONFIG_HID_HOLTEK=m -+CONFIG_HID_KEYTOUCH=m -+CONFIG_HID_KYE=m -+CONFIG_HID_UCLOGIC=m -+CONFIG_HID_WALTOP=m -+CONFIG_HID_GYRATION=m -+CONFIG_HID_TWINHAN=m -+CONFIG_HID_KENSINGTON=m -+CONFIG_HID_LCPOWER=m -+CONFIG_HID_LOGITECH=m -+CONFIG_HID_MAGICMOUSE=m -+CONFIG_HID_MICROSOFT=m -+CONFIG_HID_MONTEREY=m -+CONFIG_HID_MULTITOUCH=m -+CONFIG_HID_NTRIG=m -+CONFIG_HID_ORTEK=m -+CONFIG_HID_PANTHERLORD=m -+CONFIG_HID_PETALYNX=m -+CONFIG_HID_PICOLCD=m -+CONFIG_HID_QUANTA=m -+CONFIG_HID_ROCCAT=m -+CONFIG_HID_SAMSUNG=m -+CONFIG_HID_SONY=m -+CONFIG_HID_SPEEDLINK=m -+CONFIG_HID_SUNPLUS=m -+CONFIG_HID_GREENASIA=m -+CONFIG_HID_SMARTJOYPLUS=m -+CONFIG_HID_TOPSEED=m -+CONFIG_HID_THRUSTMASTER=m -+CONFIG_HID_WACOM=m -+CONFIG_HID_WIIMOTE=m -+CONFIG_HID_ZEROPLUS=m -+CONFIG_HID_ZYDACRON=m -+CONFIG_USB=y -+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -+CONFIG_USB_MON=m -+CONFIG_USB_DWCOTG=y -+CONFIG_USB_STORAGE=y -+CONFIG_USB_STORAGE_REALTEK=m -+CONFIG_USB_STORAGE_DATAFAB=m -+CONFIG_USB_STORAGE_FREECOM=m -+CONFIG_USB_STORAGE_ISD200=m -+CONFIG_USB_STORAGE_USBAT=m -+CONFIG_USB_STORAGE_SDDR09=m -+CONFIG_USB_STORAGE_SDDR55=m -+CONFIG_USB_STORAGE_JUMPSHOT=m -+CONFIG_USB_STORAGE_ALAUDA=m -+CONFIG_USB_STORAGE_ONETOUCH=m -+CONFIG_USB_STORAGE_KARMA=m -+CONFIG_USB_STORAGE_CYPRESS_ATACB=m -+CONFIG_USB_STORAGE_ENE_UB6250=m -+CONFIG_USB_UAS=m -+CONFIG_USB_LIBUSUAL=y -+CONFIG_USB_MDC800=m -+CONFIG_USB_MICROTEK=m -+CONFIG_USB_SERIAL=m -+CONFIG_USB_SERIAL_GENERIC=y -+CONFIG_USB_SERIAL_AIRCABLE=m -+CONFIG_USB_SERIAL_ARK3116=m -+CONFIG_USB_SERIAL_BELKIN=m -+CONFIG_USB_SERIAL_CH341=m -+CONFIG_USB_SERIAL_WHITEHEAT=m -+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -+CONFIG_USB_SERIAL_CP210X=m -+CONFIG_USB_SERIAL_CYPRESS_M8=m -+CONFIG_USB_SERIAL_EMPEG=m -+CONFIG_USB_SERIAL_FTDI_SIO=m -+CONFIG_USB_SERIAL_FUNSOFT=m -+CONFIG_USB_SERIAL_VISOR=m -+CONFIG_USB_SERIAL_IPAQ=m -+CONFIG_USB_SERIAL_IR=m -+CONFIG_USB_SERIAL_EDGEPORT=m -+CONFIG_USB_SERIAL_EDGEPORT_TI=m -+CONFIG_USB_SERIAL_GARMIN=m -+CONFIG_USB_SERIAL_IPW=m -+CONFIG_USB_SERIAL_IUU=m -+CONFIG_USB_SERIAL_KEYSPAN_PDA=m -+CONFIG_USB_SERIAL_KEYSPAN=m -+CONFIG_USB_SERIAL_KLSI=m -+CONFIG_USB_SERIAL_KOBIL_SCT=m -+CONFIG_USB_SERIAL_MCT_U232=m -+CONFIG_USB_SERIAL_MOS7720=m -+CONFIG_USB_SERIAL_MOS7840=m -+CONFIG_USB_SERIAL_MOTOROLA=m -+CONFIG_USB_SERIAL_NAVMAN=m -+CONFIG_USB_SERIAL_PL2303=m -+CONFIG_USB_SERIAL_OTI6858=m -+CONFIG_USB_SERIAL_QCAUX=m -+CONFIG_USB_SERIAL_QUALCOMM=m -+CONFIG_USB_SERIAL_SPCP8X5=m -+CONFIG_USB_SERIAL_HP4X=m -+CONFIG_USB_SERIAL_SAFE=m -+CONFIG_USB_SERIAL_SIEMENS_MPI=m -+CONFIG_USB_SERIAL_SIERRAWIRELESS=m -+CONFIG_USB_SERIAL_SYMBOL=m -+CONFIG_USB_SERIAL_TI=m -+CONFIG_USB_SERIAL_CYBERJACK=m -+CONFIG_USB_SERIAL_XIRCOM=m -+CONFIG_USB_SERIAL_OPTION=m -+CONFIG_USB_SERIAL_OMNINET=m -+CONFIG_USB_SERIAL_OPTICON=m -+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m -+CONFIG_USB_SERIAL_ZIO=m -+CONFIG_USB_SERIAL_SSU100=m -+CONFIG_USB_SERIAL_DEBUG=m -+CONFIG_USB_EMI62=m -+CONFIG_USB_EMI26=m -+CONFIG_USB_ADUTUX=m -+CONFIG_USB_SEVSEG=m -+CONFIG_USB_RIO500=m -+CONFIG_USB_LEGOTOWER=m -+CONFIG_USB_LCD=m -+CONFIG_USB_LED=m -+CONFIG_USB_CYPRESS_CY7C63=m -+CONFIG_USB_CYTHERM=m -+CONFIG_USB_IDMOUSE=m -+CONFIG_USB_FTDI_ELAN=m -+CONFIG_USB_APPLEDISPLAY=m -+CONFIG_USB_LD=m -+CONFIG_USB_TRANCEVIBRATOR=m -+CONFIG_USB_IOWARRIOR=m -+CONFIG_USB_TEST=m -+CONFIG_USB_ISIGHTFW=m -+CONFIG_USB_YUREX=m -+CONFIG_MMC=y -+CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_PLTFM=y -+CONFIG_MMC_SDHCI_BCM2708=y -+CONFIG_MMC_SDHCI_BCM2708_DMA=y -+CONFIG_LEDS_GPIO=y -+CONFIG_LEDS_TRIGGER_TIMER=m -+CONFIG_LEDS_TRIGGER_HEARTBEAT=m -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -+CONFIG_UIO=m -+CONFIG_UIO_PDRV=m -+CONFIG_UIO_PDRV_GENIRQ=m -+# CONFIG_IOMMU_SUPPORT is not set -+CONFIG_EXT4_FS=y -+CONFIG_EXT4_FS_POSIX_ACL=y -+CONFIG_EXT4_FS_SECURITY=y -+CONFIG_REISERFS_FS=m -+CONFIG_REISERFS_FS_XATTR=y -+CONFIG_REISERFS_FS_POSIX_ACL=y -+CONFIG_REISERFS_FS_SECURITY=y -+CONFIG_JFS_FS=m -+CONFIG_JFS_POSIX_ACL=y -+CONFIG_JFS_SECURITY=y -+CONFIG_JFS_STATISTICS=y -+CONFIG_XFS_FS=m -+CONFIG_XFS_QUOTA=y -+CONFIG_XFS_POSIX_ACL=y -+CONFIG_XFS_RT=y -+CONFIG_GFS2_FS=m -+CONFIG_OCFS2_FS=m -+CONFIG_BTRFS_FS=m -+CONFIG_BTRFS_FS_POSIX_ACL=y -+CONFIG_NILFS2_FS=m -+CONFIG_FANOTIFY=y -+CONFIG_AUTOFS4_FS=y -+CONFIG_FUSE_FS=m -+CONFIG_CUSE=m -+CONFIG_FSCACHE=y -+CONFIG_FSCACHE_STATS=y -+CONFIG_FSCACHE_HISTOGRAM=y -+CONFIG_CACHEFILES=y -+CONFIG_ISO9660_FS=m -+CONFIG_JOLIET=y -+CONFIG_ZISOFS=y -+CONFIG_UDF_FS=m -+CONFIG_MSDOS_FS=y -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_IOCHARSET="ascii" -+CONFIG_NTFS_FS=m -+CONFIG_TMPFS=y -+CONFIG_TMPFS_POSIX_ACL=y -+CONFIG_CONFIGFS_FS=y -+CONFIG_SQUASHFS=m -+CONFIG_SQUASHFS_XATTR=y -+CONFIG_SQUASHFS_LZO=y -+CONFIG_SQUASHFS_XZ=y -+CONFIG_NFS_FS=y -+CONFIG_NFS_V3=y -+CONFIG_NFS_V3_ACL=y -+CONFIG_NFS_V4=y -+CONFIG_ROOT_NFS=y -+CONFIG_NFS_FSCACHE=y -+CONFIG_CIFS=m -+CONFIG_CIFS_WEAK_PW_HASH=y -+CONFIG_CIFS_XATTR=y -+CONFIG_CIFS_POSIX=y -+CONFIG_9P_FS=m -+CONFIG_9P_FS_POSIX_ACL=y -+CONFIG_PARTITION_ADVANCED=y -+CONFIG_MAC_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=y -+CONFIG_NLS_CODEPAGE_737=m -+CONFIG_NLS_CODEPAGE_775=m -+CONFIG_NLS_CODEPAGE_850=m -+CONFIG_NLS_CODEPAGE_852=m -+CONFIG_NLS_CODEPAGE_855=m -+CONFIG_NLS_CODEPAGE_857=m -+CONFIG_NLS_CODEPAGE_860=m -+CONFIG_NLS_CODEPAGE_861=m -+CONFIG_NLS_CODEPAGE_862=m -+CONFIG_NLS_CODEPAGE_863=m -+CONFIG_NLS_CODEPAGE_864=m -+CONFIG_NLS_CODEPAGE_865=m -+CONFIG_NLS_CODEPAGE_866=m -+CONFIG_NLS_CODEPAGE_869=m -+CONFIG_NLS_CODEPAGE_936=m -+CONFIG_NLS_CODEPAGE_950=m -+CONFIG_NLS_CODEPAGE_932=m -+CONFIG_NLS_CODEPAGE_949=m -+CONFIG_NLS_CODEPAGE_874=m -+CONFIG_NLS_ISO8859_8=m -+CONFIG_NLS_CODEPAGE_1250=m -+CONFIG_NLS_CODEPAGE_1251=m -+CONFIG_NLS_ASCII=y -+CONFIG_NLS_ISO8859_1=m -+CONFIG_NLS_ISO8859_2=m -+CONFIG_NLS_ISO8859_3=m -+CONFIG_NLS_ISO8859_4=m -+CONFIG_NLS_ISO8859_5=m -+CONFIG_NLS_ISO8859_6=m -+CONFIG_NLS_ISO8859_7=m -+CONFIG_NLS_ISO8859_9=m -+CONFIG_NLS_ISO8859_13=m -+CONFIG_NLS_ISO8859_14=m -+CONFIG_NLS_ISO8859_15=m -+CONFIG_NLS_KOI8_R=m -+CONFIG_NLS_KOI8_U=m -+CONFIG_NLS_UTF8=m -+CONFIG_PRINTK_TIME=y -+CONFIG_DETECT_HUNG_TASK=y -+CONFIG_TIMER_STATS=y -+CONFIG_DEBUG_STACK_USAGE=y -+CONFIG_DEBUG_INFO=y -+CONFIG_DEBUG_MEMORY_INIT=y -+CONFIG_BOOT_PRINTK_DELAY=y -+CONFIG_LATENCYTOP=y -+CONFIG_SYSCTL_SYSCALL_CHECK=y -+CONFIG_IRQSOFF_TRACER=y -+CONFIG_SCHED_TRACER=y -+CONFIG_STACK_TRACER=y -+CONFIG_BLK_DEV_IO_TRACE=y -+CONFIG_FUNCTION_PROFILER=y -+CONFIG_KGDB=y -+CONFIG_KGDB_KDB=y -+CONFIG_KDB_KEYBOARD=y -+CONFIG_STRICT_DEVMEM=y -+CONFIG_CRYPTO_AUTHENC=m -+CONFIG_CRYPTO_SEQIV=m -+CONFIG_CRYPTO_CBC=y -+CONFIG_CRYPTO_HMAC=y -+CONFIG_CRYPTO_XCBC=m -+CONFIG_CRYPTO_MD5=y -+CONFIG_CRYPTO_SHA1=y -+CONFIG_CRYPTO_SHA256=m -+CONFIG_CRYPTO_SHA512=m -+CONFIG_CRYPTO_TGR192=m -+CONFIG_CRYPTO_WP512=m -+CONFIG_CRYPTO_CAST5=m -+CONFIG_CRYPTO_DES=y -+CONFIG_CRYPTO_DEFLATE=m -+# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_HW is not set -+CONFIG_CRC_ITU_T=y -+CONFIG_LIBCRC32C=y -diff --git a/arch/arm/configs/bcmrpi_emergency_defconfig b/arch/arm/configs/bcmrpi_emergency_defconfig -new file mode 100644 -index 0000000..367adef ---- /dev/null -+++ b/arch/arm/configs/bcmrpi_emergency_defconfig -@@ -0,0 +1,475 @@ -+CONFIG_EXPERIMENTAL=y -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_SYSVIPC=y -+CONFIG_POSIX_MQUEUE=y -+CONFIG_IKCONFIG=y -+CONFIG_IKCONFIG_PROC=y -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="../target_fs" -+# CONFIG_UID16 is not set -+# CONFIG_KALLSYMS is not set -+CONFIG_EMBEDDED=y -+# CONFIG_VM_EVENT_COUNTERS is not set -+# CONFIG_COMPAT_BRK is not set -+CONFIG_SLAB=y -+CONFIG_MODULES=y -+CONFIG_MODULE_UNLOAD=y -+CONFIG_MODVERSIONS=y -+CONFIG_MODULE_SRCVERSION_ALL=y -+# CONFIG_BLK_DEV_BSG is not set -+CONFIG_ARCH_BCM2708=y -+CONFIG_NO_HZ=y -+CONFIG_AEABI=y -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" -+CONFIG_CPU_IDLE=y -+CONFIG_VFP=y -+CONFIG_BINFMT_MISC=m -+CONFIG_NET=y -+CONFIG_PACKET=y -+CONFIG_UNIX=y -+CONFIG_XFRM_USER=y -+CONFIG_NET_KEY=m -+CONFIG_INET=y -+CONFIG_IP_MULTICAST=y -+CONFIG_IP_PNP=y -+CONFIG_IP_PNP_DHCP=y -+CONFIG_IP_PNP_RARP=y -+CONFIG_SYN_COOKIES=y -+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -+# CONFIG_INET_XFRM_MODE_TUNNEL is not set -+# CONFIG_INET_XFRM_MODE_BEET is not set -+# CONFIG_INET_LRO is not set -+# CONFIG_INET_DIAG is not set -+# CONFIG_IPV6 is not set -+CONFIG_NET_PKTGEN=m -+CONFIG_IRDA=m -+CONFIG_IRLAN=m -+CONFIG_IRCOMM=m -+CONFIG_IRDA_ULTRA=y -+CONFIG_IRDA_CACHE_LAST_LSAP=y -+CONFIG_IRDA_FAST_RR=y -+CONFIG_IRTTY_SIR=m -+CONFIG_KINGSUN_DONGLE=m -+CONFIG_KSDAZZLE_DONGLE=m -+CONFIG_KS959_DONGLE=m -+CONFIG_USB_IRDA=m -+CONFIG_SIGMATEL_FIR=m -+CONFIG_MCS_FIR=m -+CONFIG_BT=m -+CONFIG_BT_L2CAP=y -+CONFIG_BT_SCO=y -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+CONFIG_BT_HCIBTUSB=m -+CONFIG_BT_HCIBCM203X=m -+CONFIG_BT_HCIBPA10X=m -+CONFIG_BT_HCIBFUSB=m -+CONFIG_BT_HCIVHCI=m -+CONFIG_BT_MRVL=m -+CONFIG_BT_MRVL_SDIO=m -+CONFIG_BT_ATH3K=m -+CONFIG_CFG80211=m -+CONFIG_MAC80211=m -+CONFIG_MAC80211_RC_PID=y -+CONFIG_MAC80211_MESH=y -+CONFIG_WIMAX=m -+CONFIG_NET_9P=m -+CONFIG_NFC=m -+CONFIG_NFC_PN533=m -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_BLK_DEV_LOOP=y -+CONFIG_BLK_DEV_CRYPTOLOOP=m -+CONFIG_BLK_DEV_NBD=m -+CONFIG_BLK_DEV_RAM=y -+CONFIG_CDROM_PKTCDVD=m -+CONFIG_MISC_DEVICES=y -+CONFIG_SCSI=y -+# CONFIG_SCSI_PROC_FS is not set -+CONFIG_BLK_DEV_SD=m -+CONFIG_BLK_DEV_SR=m -+CONFIG_SCSI_MULTI_LUN=y -+# CONFIG_SCSI_LOWLEVEL is not set -+CONFIG_NETDEVICES=y -+CONFIG_TUN=m -+CONFIG_PHYLIB=m -+CONFIG_MDIO_BITBANG=m -+CONFIG_NET_ETHERNET=y -+# CONFIG_NETDEV_1000 is not set -+# CONFIG_NETDEV_10000 is not set -+CONFIG_LIBERTAS_THINFIRM=m -+CONFIG_LIBERTAS_THINFIRM_USB=m -+CONFIG_AT76C50X_USB=m -+CONFIG_USB_ZD1201=m -+CONFIG_USB_NET_RNDIS_WLAN=m -+CONFIG_RTL8187=m -+CONFIG_MAC80211_HWSIM=m -+CONFIG_ATH_COMMON=m -+CONFIG_ATH9K=m -+CONFIG_ATH9K_HTC=m -+CONFIG_CARL9170=m -+CONFIG_B43=m -+CONFIG_B43LEGACY=m -+CONFIG_HOSTAP=m -+CONFIG_IWM=m -+CONFIG_LIBERTAS=m -+CONFIG_LIBERTAS_USB=m -+CONFIG_LIBERTAS_SDIO=m -+CONFIG_P54_COMMON=m -+CONFIG_P54_USB=m -+CONFIG_RT2X00=m -+CONFIG_RT2500USB=m -+CONFIG_RT73USB=m -+CONFIG_RT2800USB=m -+CONFIG_RT2800USB_RT53XX=y -+CONFIG_RTL8192CU=m -+CONFIG_WL1251=m -+CONFIG_WL12XX_MENU=m -+CONFIG_ZD1211RW=m -+CONFIG_MWIFIEX=m -+CONFIG_MWIFIEX_SDIO=m -+CONFIG_WIMAX_I2400M_USB=m -+CONFIG_USB_CATC=m -+CONFIG_USB_KAWETH=m -+CONFIG_USB_PEGASUS=m -+CONFIG_USB_RTL8150=m -+CONFIG_USB_USBNET=y -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_DM9601=m -+CONFIG_USB_NET_SMSC75XX=m -+CONFIG_USB_NET_SMSC95XX=y -+CONFIG_USB_NET_GL620A=m -+CONFIG_USB_NET_NET1080=m -+CONFIG_USB_NET_PLUSB=m -+CONFIG_USB_NET_MCS7830=m -+CONFIG_USB_NET_CDC_SUBSET=m -+CONFIG_USB_ALI_M5632=y -+CONFIG_USB_AN2720=y -+CONFIG_USB_KC2190=y -+# CONFIG_USB_NET_ZAURUS is not set -+CONFIG_USB_NET_CX82310_ETH=m -+CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_INT51X1=m -+CONFIG_USB_IPHETH=m -+CONFIG_USB_SIERRA_NET=m -+CONFIG_USB_VL600=m -+CONFIG_PPP=m -+CONFIG_PPP_ASYNC=m -+CONFIG_PPP_SYNC_TTY=m -+CONFIG_PPP_DEFLATE=m -+CONFIG_PPP_BSDCOMP=m -+CONFIG_SLIP=m -+CONFIG_SLIP_COMPRESSED=y -+CONFIG_NETCONSOLE=m -+CONFIG_INPUT_POLLDEV=m -+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -+CONFIG_INPUT_JOYDEV=m -+CONFIG_INPUT_EVDEV=m -+# CONFIG_INPUT_KEYBOARD is not set -+# CONFIG_INPUT_MOUSE is not set -+CONFIG_INPUT_MISC=y -+CONFIG_INPUT_AD714X=m -+CONFIG_INPUT_ATI_REMOTE=m -+CONFIG_INPUT_ATI_REMOTE2=m -+CONFIG_INPUT_KEYSPAN_REMOTE=m -+CONFIG_INPUT_POWERMATE=m -+CONFIG_INPUT_YEALINK=m -+CONFIG_INPUT_CM109=m -+CONFIG_INPUT_UINPUT=m -+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m -+CONFIG_INPUT_ADXL34X=m -+CONFIG_INPUT_CMA3000=m -+CONFIG_SERIO=m -+CONFIG_SERIO_RAW=m -+CONFIG_GAMEPORT=m -+CONFIG_GAMEPORT_NS558=m -+CONFIG_GAMEPORT_L4=m -+CONFIG_VT_HW_CONSOLE_BINDING=y -+# CONFIG_LEGACY_PTYS is not set -+# CONFIG_DEVKMEM is not set -+CONFIG_SERIAL_AMBA_PL011=y -+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -+# CONFIG_HW_RANDOM is not set -+CONFIG_RAW_DRIVER=y -+CONFIG_GPIO_SYSFS=y -+# CONFIG_HWMON is not set -+CONFIG_WATCHDOG=y -+CONFIG_BCM2708_WDT=m -+# CONFIG_MFD_SUPPORT is not set -+CONFIG_FB=y -+CONFIG_FB_BCM2708=y -+CONFIG_FRAMEBUFFER_CONSOLE=y -+CONFIG_LOGO=y -+# CONFIG_LOGO_LINUX_MONO is not set -+# CONFIG_LOGO_LINUX_VGA16 is not set -+CONFIG_HID_PID=y -+CONFIG_USB_HIDDEV=y -+CONFIG_HID_A4TECH=m -+CONFIG_HID_ACRUX=m -+CONFIG_HID_APPLE=m -+CONFIG_HID_BELKIN=m -+CONFIG_HID_CHERRY=m -+CONFIG_HID_CHICONY=m -+CONFIG_HID_CYPRESS=m -+CONFIG_HID_DRAGONRISE=m -+CONFIG_HID_EMS_FF=m -+CONFIG_HID_ELECOM=m -+CONFIG_HID_EZKEY=m -+CONFIG_HID_HOLTEK=m -+CONFIG_HID_KEYTOUCH=m -+CONFIG_HID_KYE=m -+CONFIG_HID_UCLOGIC=m -+CONFIG_HID_WALTOP=m -+CONFIG_HID_GYRATION=m -+CONFIG_HID_TWINHAN=m -+CONFIG_HID_KENSINGTON=m -+CONFIG_HID_LCPOWER=m -+CONFIG_HID_LOGITECH=m -+CONFIG_HID_MAGICMOUSE=m -+CONFIG_HID_MICROSOFT=m -+CONFIG_HID_MONTEREY=m -+CONFIG_HID_MULTITOUCH=m -+CONFIG_HID_NTRIG=m -+CONFIG_HID_ORTEK=m -+CONFIG_HID_PANTHERLORD=m -+CONFIG_HID_PETALYNX=m -+CONFIG_HID_PICOLCD=m -+CONFIG_HID_QUANTA=m -+CONFIG_HID_ROCCAT=m -+CONFIG_HID_SAMSUNG=m -+CONFIG_HID_SONY=m -+CONFIG_HID_SPEEDLINK=m -+CONFIG_HID_SUNPLUS=m -+CONFIG_HID_GREENASIA=m -+CONFIG_HID_SMARTJOYPLUS=m -+CONFIG_HID_TOPSEED=m -+CONFIG_HID_THRUSTMASTER=m -+CONFIG_HID_WACOM=m -+CONFIG_HID_WIIMOTE=m -+CONFIG_HID_ZEROPLUS=m -+CONFIG_HID_ZYDACRON=m -+CONFIG_USB=y -+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -+CONFIG_USB_MON=m -+CONFIG_USB_DWCOTG=y -+CONFIG_USB_STORAGE=y -+CONFIG_USB_STORAGE_REALTEK=m -+CONFIG_USB_STORAGE_DATAFAB=m -+CONFIG_USB_STORAGE_FREECOM=m -+CONFIG_USB_STORAGE_ISD200=m -+CONFIG_USB_STORAGE_USBAT=m -+CONFIG_USB_STORAGE_SDDR09=m -+CONFIG_USB_STORAGE_SDDR55=m -+CONFIG_USB_STORAGE_JUMPSHOT=m -+CONFIG_USB_STORAGE_ALAUDA=m -+CONFIG_USB_STORAGE_ONETOUCH=m -+CONFIG_USB_STORAGE_KARMA=m -+CONFIG_USB_STORAGE_CYPRESS_ATACB=m -+CONFIG_USB_STORAGE_ENE_UB6250=m -+CONFIG_USB_UAS=m -+CONFIG_USB_LIBUSUAL=y -+CONFIG_USB_MDC800=m -+CONFIG_USB_MICROTEK=m -+CONFIG_USB_SERIAL=m -+CONFIG_USB_SERIAL_GENERIC=y -+CONFIG_USB_SERIAL_AIRCABLE=m -+CONFIG_USB_SERIAL_ARK3116=m -+CONFIG_USB_SERIAL_BELKIN=m -+CONFIG_USB_SERIAL_CH341=m -+CONFIG_USB_SERIAL_WHITEHEAT=m -+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -+CONFIG_USB_SERIAL_CP210X=m -+CONFIG_USB_SERIAL_CYPRESS_M8=m -+CONFIG_USB_SERIAL_EMPEG=m -+CONFIG_USB_SERIAL_FTDI_SIO=m -+CONFIG_USB_SERIAL_FUNSOFT=m -+CONFIG_USB_SERIAL_VISOR=m -+CONFIG_USB_SERIAL_IPAQ=m -+CONFIG_USB_SERIAL_IR=m -+CONFIG_USB_SERIAL_EDGEPORT=m -+CONFIG_USB_SERIAL_EDGEPORT_TI=m -+CONFIG_USB_SERIAL_GARMIN=m -+CONFIG_USB_SERIAL_IPW=m -+CONFIG_USB_SERIAL_IUU=m -+CONFIG_USB_SERIAL_KEYSPAN_PDA=m -+CONFIG_USB_SERIAL_KEYSPAN=m -+CONFIG_USB_SERIAL_KLSI=m -+CONFIG_USB_SERIAL_KOBIL_SCT=m -+CONFIG_USB_SERIAL_MCT_U232=m -+CONFIG_USB_SERIAL_MOS7720=m -+CONFIG_USB_SERIAL_MOS7840=m -+CONFIG_USB_SERIAL_MOTOROLA=m -+CONFIG_USB_SERIAL_NAVMAN=m -+CONFIG_USB_SERIAL_PL2303=m -+CONFIG_USB_SERIAL_OTI6858=m -+CONFIG_USB_SERIAL_QCAUX=m -+CONFIG_USB_SERIAL_QUALCOMM=m -+CONFIG_USB_SERIAL_SPCP8X5=m -+CONFIG_USB_SERIAL_HP4X=m -+CONFIG_USB_SERIAL_SAFE=m -+CONFIG_USB_SERIAL_SIEMENS_MPI=m -+CONFIG_USB_SERIAL_SIERRAWIRELESS=m -+CONFIG_USB_SERIAL_SYMBOL=m -+CONFIG_USB_SERIAL_TI=m -+CONFIG_USB_SERIAL_CYBERJACK=m -+CONFIG_USB_SERIAL_XIRCOM=m -+CONFIG_USB_SERIAL_OPTION=m -+CONFIG_USB_SERIAL_OMNINET=m -+CONFIG_USB_SERIAL_OPTICON=m -+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m -+CONFIG_USB_SERIAL_ZIO=m -+CONFIG_USB_SERIAL_SSU100=m -+CONFIG_USB_SERIAL_DEBUG=m -+CONFIG_USB_EMI62=m -+CONFIG_USB_EMI26=m -+CONFIG_USB_ADUTUX=m -+CONFIG_USB_SEVSEG=m -+CONFIG_USB_RIO500=m -+CONFIG_USB_LEGOTOWER=m -+CONFIG_USB_LCD=m -+CONFIG_USB_LED=m -+CONFIG_USB_CYPRESS_CY7C63=m -+CONFIG_USB_CYTHERM=m -+CONFIG_USB_IDMOUSE=m -+CONFIG_USB_FTDI_ELAN=m -+CONFIG_USB_APPLEDISPLAY=m -+CONFIG_USB_LD=m -+CONFIG_USB_TRANCEVIBRATOR=m -+CONFIG_USB_IOWARRIOR=m -+CONFIG_USB_TEST=m -+CONFIG_USB_ISIGHTFW=m -+CONFIG_USB_YUREX=m -+CONFIG_MMC=y -+CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_PLTFM=y -+CONFIG_MMC_SDHCI_BCM2708=y -+CONFIG_MMC_SDHCI_BCM2708_DMA=y -+CONFIG_LEDS_GPIO=y -+CONFIG_LEDS_TRIGGER_TIMER=m -+CONFIG_LEDS_TRIGGER_HEARTBEAT=m -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -+CONFIG_UIO=m -+CONFIG_UIO_PDRV=m -+CONFIG_UIO_PDRV_GENIRQ=m -+# CONFIG_IOMMU_SUPPORT is not set -+CONFIG_EXT4_FS=y -+CONFIG_EXT4_FS_POSIX_ACL=y -+CONFIG_EXT4_FS_SECURITY=y -+CONFIG_REISERFS_FS=m -+CONFIG_REISERFS_FS_XATTR=y -+CONFIG_REISERFS_FS_POSIX_ACL=y -+CONFIG_REISERFS_FS_SECURITY=y -+CONFIG_JFS_FS=m -+CONFIG_JFS_POSIX_ACL=y -+CONFIG_JFS_SECURITY=y -+CONFIG_XFS_FS=m -+CONFIG_XFS_QUOTA=y -+CONFIG_XFS_POSIX_ACL=y -+CONFIG_XFS_RT=y -+CONFIG_GFS2_FS=m -+CONFIG_OCFS2_FS=m -+CONFIG_BTRFS_FS=m -+CONFIG_BTRFS_FS_POSIX_ACL=y -+CONFIG_NILFS2_FS=m -+CONFIG_AUTOFS4_FS=y -+CONFIG_FUSE_FS=m -+CONFIG_CUSE=m -+CONFIG_FSCACHE=y -+CONFIG_CACHEFILES=y -+CONFIG_ISO9660_FS=m -+CONFIG_JOLIET=y -+CONFIG_ZISOFS=y -+CONFIG_UDF_FS=m -+CONFIG_MSDOS_FS=y -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_IOCHARSET="ascii" -+CONFIG_NTFS_FS=m -+CONFIG_TMPFS=y -+CONFIG_TMPFS_POSIX_ACL=y -+CONFIG_CONFIGFS_FS=y -+CONFIG_SQUASHFS=m -+CONFIG_SQUASHFS_XATTR=y -+CONFIG_SQUASHFS_LZO=y -+CONFIG_SQUASHFS_XZ=y -+CONFIG_NFS_FS=y -+CONFIG_NFS_V3=y -+CONFIG_NFS_V3_ACL=y -+CONFIG_NFS_V4=y -+CONFIG_ROOT_NFS=y -+CONFIG_NFS_FSCACHE=y -+CONFIG_CIFS=m -+CONFIG_CIFS_WEAK_PW_HASH=y -+CONFIG_CIFS_XATTR=y -+CONFIG_CIFS_POSIX=y -+CONFIG_9P_FS=m -+CONFIG_PARTITION_ADVANCED=y -+CONFIG_MAC_PARTITION=y -+CONFIG_EFI_PARTITION=y -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=y -+CONFIG_NLS_CODEPAGE_737=m -+CONFIG_NLS_CODEPAGE_775=m -+CONFIG_NLS_CODEPAGE_850=m -+CONFIG_NLS_CODEPAGE_852=m -+CONFIG_NLS_CODEPAGE_855=m -+CONFIG_NLS_CODEPAGE_857=m -+CONFIG_NLS_CODEPAGE_860=m -+CONFIG_NLS_CODEPAGE_861=m -+CONFIG_NLS_CODEPAGE_862=m -+CONFIG_NLS_CODEPAGE_863=m -+CONFIG_NLS_CODEPAGE_864=m -+CONFIG_NLS_CODEPAGE_865=m -+CONFIG_NLS_CODEPAGE_866=m -+CONFIG_NLS_CODEPAGE_869=m -+CONFIG_NLS_CODEPAGE_936=m -+CONFIG_NLS_CODEPAGE_950=m -+CONFIG_NLS_CODEPAGE_932=m -+CONFIG_NLS_CODEPAGE_949=m -+CONFIG_NLS_CODEPAGE_874=m -+CONFIG_NLS_ISO8859_8=m -+CONFIG_NLS_CODEPAGE_1250=m -+CONFIG_NLS_CODEPAGE_1251=m -+CONFIG_NLS_ASCII=y -+CONFIG_NLS_ISO8859_1=m -+CONFIG_NLS_ISO8859_2=m -+CONFIG_NLS_ISO8859_3=m -+CONFIG_NLS_ISO8859_4=m -+CONFIG_NLS_ISO8859_5=m -+CONFIG_NLS_ISO8859_6=m -+CONFIG_NLS_ISO8859_7=m -+CONFIG_NLS_ISO8859_9=m -+CONFIG_NLS_ISO8859_13=m -+CONFIG_NLS_ISO8859_14=m -+CONFIG_NLS_ISO8859_15=m -+CONFIG_NLS_KOI8_R=m -+CONFIG_NLS_KOI8_U=m -+CONFIG_NLS_UTF8=m -+# CONFIG_SCHED_DEBUG is not set -+# CONFIG_DEBUG_BUGVERBOSE is not set -+# CONFIG_FTRACE is not set -+# CONFIG_ARM_UNWIND is not set -+CONFIG_CRYPTO_AUTHENC=m -+CONFIG_CRYPTO_SEQIV=m -+CONFIG_CRYPTO_CBC=y -+CONFIG_CRYPTO_HMAC=y -+CONFIG_CRYPTO_XCBC=m -+CONFIG_CRYPTO_MD5=y -+CONFIG_CRYPTO_SHA1=y -+CONFIG_CRYPTO_SHA256=m -+CONFIG_CRYPTO_SHA512=m -+CONFIG_CRYPTO_TGR192=m -+CONFIG_CRYPTO_WP512=m -+CONFIG_CRYPTO_CAST5=m -+CONFIG_CRYPTO_DES=y -+CONFIG_CRYPTO_DEFLATE=m -+# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_HW is not set -+CONFIG_CRC_ITU_T=y -+CONFIG_LIBCRC32C=y --- -1.8.1.5 - - -From 53a9412a972d9803342e4f0719e698e6160aba52 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 17 Mar 2012 23:23:01 +0000 -Subject: [PATCH 011/169] Enable high resolution timers - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 1 + - arch/arm/configs/bcmrpi_defconfig | 1 + - arch/arm/mach-bcm2708/bcm2708.c | 49 +++++++++++++++++++++++-------- - 3 files changed, 38 insertions(+), 13 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index 2e9fd74..74f2dc9 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -17,6 +17,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y - # CONFIG_BLK_DEV_BSG is not set - CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y - CONFIG_AEABI=y - CONFIG_ZBOOT_ROM_TEXT=0x0 - CONFIG_ZBOOT_ROM_BSS=0x0 -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 785000b..339aabf 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -30,6 +30,7 @@ CONFIG_BLK_DEV_THROTTLING=y - CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y - CONFIG_AEABI=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index d9dc628..1db8261 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -155,25 +155,44 @@ void __init bcm2708_map_io(void) - iotable_init(bcm2708_io_desc, ARRAY_SIZE(bcm2708_io_desc)); - } - --unsigned long frc_clock_ticks32(void) -+// The STC is a free running counter that increments at the rate of 1MHz -+#define STC_FREQ_HZ 1000000 -+ -+static cycle_t stc_read_cycles(struct clocksource *cs) - { - /* STC: a free running counter that increments at the rate of 1MHz */ -- return readl(__io_address(ST_BASE + 0x04)); -+ return (cycle_t)readl(__io_address(ST_BASE+0x04)); - } - --unsigned long long frc_clock_ticks63(void) -+static struct clocksource clocksource_stc = { -+ .name = "stc", -+ .rating = 300, -+ .read = stc_read_cycles, -+ .mask = CLOCKSOURCE_MASK(32), -+ .flags = CLOCK_SOURCE_IS_CONTINUOUS, -+}; -+ -+unsigned long frc_clock_ticks32(void) - { -- unsigned long t = frc_clock_ticks32(); -- /* For cnt32_to_63 to work correctly we MUST call this routine -- * at least once every half-32-bit-wraparound period - that's once -- * every 35minutes or so - using it in sched_clock() should ensure this -- */ -- return cnt32_to_63(t); -+ return (unsigned long)stc_read_cycles(&clocksource_stc); -+} -+ -+static void __init bcm2708_clocksource_init(void) -+{ -+ // calculate .shift and .mult values and register clocksource -+ if (clocksource_register_hz(&clocksource_stc, STC_FREQ_HZ)) -+ { -+ printk(KERN_ERR "timer: failed to initialize clock " -+ "source %s\n", clocksource_stc.name); -+ } - } - - unsigned long long sched_clock(void) - { -- return 1000ull * frc_clock_ticks63(); -+ return clocksource_cyc2ns(clocksource_stc.read( -+ &clocksource_stc), -+ clocksource_stc.mult, -+ clocksource_stc.shift); - } - - /* -@@ -484,6 +503,7 @@ void __init bcm2708_init(void) - bcm_register_device(&bcm2708_emmc_device); - #endif - bcm2708_init_led(); -+ - #ifdef CONFIG_BCM2708_VCMEM - { - extern void vc_mem_connected_init(void); -@@ -521,13 +541,13 @@ static void timer_set_mode(enum clock_event_mode mode, - - } - --static int timer_set_next_event(unsigned long evt, -+static int timer_set_next_event(unsigned long cycles, - struct clock_event_device *unused) - { - unsigned long stc; - - stc = readl(__io_address(ST_BASE + 0x04)); -- writel(stc + TIMER_PERIOD, __io_address(ST_BASE + 0x18)); /* stc3 */ -+ writel(stc + cycles, __io_address(ST_BASE + 0x18)); /* stc3 */ - return 0; - } - -@@ -564,6 +584,9 @@ static irqreturn_t bcm2708_timer_interrupt(int irq, void *dev_id) - */ - static void __init bcm2708_timer_init(void) - { -+ /* init high res timer */ -+ bcm2708_clocksource_init(); -+ - /* - * Initialise to a known state (all timers off) - */ -@@ -574,7 +597,7 @@ static void __init bcm2708_timer_init(void) - setup_irq(IRQ_TIMER3, &bcm2708_timer_irq); - - timer0_clockevent.mult = -- div_sc(1000000, NSEC_PER_SEC, timer0_clockevent.shift); -+ div_sc(STC_FREQ_HZ, NSEC_PER_SEC, timer0_clockevent.shift); - timer0_clockevent.max_delta_ns = - clockevent_delta2ns(0xffffffff, &timer0_clockevent); - timer0_clockevent.min_delta_ns = --- -1.8.1.5 - - -From 16476a0ab0ee5d328052f5d5e0b1ce939b1492d9 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 17 Mar 2012 23:28:22 +0000 -Subject: [PATCH 012/169] Fix for mmc timeouts when erasing multiple blocks - ---- - arch/arm/mach-bcm2708/power.c | 10 +++-- - drivers/mmc/host/sdhci-bcm2708.c | 97 +++++++++++++++++++++++++++++++++++++--- - 2 files changed, 97 insertions(+), 10 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c -index 10aef47..a4139fc 100644 ---- a/arch/arm/mach-bcm2708/power.c -+++ b/arch/arm/mach-bcm2708/power.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -97,6 +98,7 @@ int bcm_power_request(BCM_POWER_HANDLE_T handle, uint32_t request) - global_request << 4); - - /* Wait for a response during power-up */ -+ mdelay(10); - if (global_request & ~g_state.global_request) { - rc = bcm_mailbox_read(MBOX_CHAN_POWER, - &actual); -@@ -111,14 +113,14 @@ int bcm_power_request(BCM_POWER_HANDLE_T handle, uint32_t request) - - if (rc == 0) { - if (actual != global_request) { -- printk(KERN_ERR -- "%s: prev global %x, new global %x, actual %x, request %x, others_request %x\n", -+ printk(KERN_INFO -+ "%s: Fail: prev global %x, new global %x, actual %x request %x, others_request %x\n", - __func__, - g_state.global_request, - global_request, actual, request, others_request); - /* A failure */ -- BUG_ON((others_request & actual) -- != others_request); -+ // BUG_ON((others_request & actual) -+ // != others_request); - request &= actual; - rc = -EIO; - } -diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index 2dd6bed..398a04e 100644 ---- a/drivers/mmc/host/sdhci-bcm2708.c -+++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -26,7 +26,9 @@ - #include - #include - #include -+#include - #include -+#include - - #include - #include -@@ -68,6 +70,9 @@ - - #define BCM2708_SDHCI_SLEEP_TIMEOUT 1000 /* msecs */ - -+/* Mhz clock that the EMMC core is running at. Should match the platform clockman settings */ -+#define BCM2708_EMMC_CLOCK_FREQ 80000000 -+ - #define POWER_OFF 0 - #define POWER_LAZY_OFF 1 - #define POWER_ON 2 -@@ -222,6 +227,10 @@ u8 sdhci_bcm2708_readb(struct sdhci_host *host, int reg) - - static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - { -+ u32 ier; -+ static bool timeout_disabled = false; -+ unsigned int ns_2clk = 0; -+ - /* The Arasan has a bugette whereby it may lose the content of - * successive writes to registers that are within two SD-card clock - * cycles of each other (a clock domain crossing problem). -@@ -234,7 +243,7 @@ static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - /* host->clock is the clock freq in Hz */ - static hptime_t last_write_hpt; - hptime_t now = hptime(); -- unsigned int ns_2clk = 2000000000/host->clock; -+ ns_2clk = 2000000000/host->clock; - - if (now == last_write_hpt || now == last_write_hpt+1) { - /* we can't guarantee any significant time has -@@ -250,6 +259,24 @@ static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - } - last_write_hpt = now; - } -+#if 1 -+ /* The Arasan is clocked for timeouts using the SD clock which is too fast -+ * for ERASE commands and causes issues. So we disable timeouts for ERASE */ -+ if (host->cmd != NULL && host->cmd->opcode == MMC_ERASE && reg == (SDHCI_COMMAND & ~3)) { -+ mod_timer(&host->timer, jiffies + 30 * HZ); -+ ier = readl(host->ioaddr + SDHCI_SIGNAL_ENABLE); -+ ier &= ~SDHCI_INT_DATA_TIMEOUT; -+ writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE); -+ timeout_disabled = true; -+ udelay((ns_2clk+1000-1)/1000); -+ } else if (timeout_disabled) { -+ ier = readl(host->ioaddr + SDHCI_SIGNAL_ENABLE); -+ ier |= SDHCI_INT_DATA_TIMEOUT; -+ writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE); -+ timeout_disabled = false; -+ udelay((ns_2clk+1000-1)/1000); -+ } -+#endif - writel(val, host->ioaddr + reg); - #else - void __iomem * regaddr = host->ioaddr + reg; -@@ -325,14 +352,68 @@ void sdhci_bcm2708_writeb(struct sdhci_host *host, u8 val, int reg) - - static unsigned int sdhci_bcm2708_get_max_clock(struct sdhci_host *host) - { -- return 100000000; // this value is in Hz (100MHz/4) -+ return 20000000; // this value is in Hz (20MHz) - } - - static unsigned int sdhci_bcm2708_get_timeout_clock(struct sdhci_host *host) - { -- return 100000; // this value is in kHz (100MHz/4) -+ if(host->clock) -+ return (host->clock / 1000); // this value is in kHz (100MHz) -+ else -+ return (sdhci_bcm2708_get_max_clock(host) / 1000); - } - -+static void sdhci_bcm2708_set_clock(struct sdhci_host *host, unsigned int clock) -+{ -+ int div = 0; -+ u16 clk = 0; -+ unsigned long timeout; -+ -+ if (clock == host->clock) -+ return; -+ -+ sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL); -+ -+ if (clock == 0) -+ goto out; -+ -+ if (BCM2708_EMMC_CLOCK_FREQ <= clock) -+ div = 1; -+ else { -+ for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) { -+ if ((BCM2708_EMMC_CLOCK_FREQ / div) <= clock) -+ break; -+ } -+ } -+ -+ DBG( "desired SD clock: %d, actual: %d\n", -+ clock, BCM2708_EMMC_CLOCK_FREQ / div); -+ -+ clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; -+ clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) -+ << SDHCI_DIVIDER_HI_SHIFT; -+ clk |= SDHCI_CLOCK_INT_EN; -+ -+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -+ -+ timeout = 20; -+ while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL)) -+ & SDHCI_CLOCK_INT_STABLE)) { -+ if (timeout == 0) { -+ printk(KERN_ERR "%s: Internal clock never " -+ "stabilised.\n", mmc_hostname(host->mmc)); -+ return; -+ } -+ timeout--; -+ mdelay(1); -+ } -+ -+ clk |= SDHCI_CLOCK_CARD_EN; -+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -+out: -+ host->clock = clock; -+ } -+ - /*****************************************************************************\ - * * - * DMA Operation * -@@ -821,7 +902,7 @@ static void sdhci_bcm2708_dma_complete_irq(struct sdhci_host *host, - continue; - - if (1000000-timeout > 4000) /*ave. is about 3250*/ -- printk(KERN_INFO "%s: note - long %s sync %luns - " -+ DBG("%s: note - long %s sync %luns - " - "%d its.\n", - mmc_hostname(host->mmc), - data->flags & MMC_DATA_READ? "read": "write", -@@ -1219,7 +1300,7 @@ static unsigned int sdhci_bcm2708_uhs_broken(struct sdhci_host *host) - #error The BCM2708 SDHCI driver needs CONFIG_MMC_SDHCI_IO_ACCESSORS to be set - #endif - //.enable_dma = NULL, -- //.set_clock = NULL, -+ .set_clock = sdhci_bcm2708_set_clock, - .get_max_clock = sdhci_bcm2708_get_max_clock, - //.get_min_clock = NULL, - .get_timeout_clock = sdhci_bcm2708_get_timeout_clock, -@@ -1282,7 +1363,9 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) - host->irq = platform_get_irq(pdev, 0); - - host->quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | -- SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK; -+ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | -+ SDHCI_QUIRK_BROKEN_TIMEOUT_VAL | -+ SDHCI_QUIRK_NONSTANDARD_CLOCK; - #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA - host->flags = SDHCI_USE_PLATDMA; - #endif -@@ -1349,6 +1432,8 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) - host_priv->cb_base, (unsigned)host_priv->cb_handle, - host_priv->dma_chan, host_priv->dma_chan_base, - host_priv->dma_irq); -+ -+ host->mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; - #endif - - ret = sdhci_add_host(host); --- -1.8.1.5 - - -From a8c0a9e4d89aa287fdd497896a093e93bb63ed28 Mon Sep 17 00:00:00 2001 -From: Dom Cobley -Date: Tue, 20 Mar 2012 15:04:40 +0000 -Subject: [PATCH 013/169] Fix problem with dma that could corrupt sdcard, - especially when L2 enabled - ---- - drivers/mmc/host/sdhci-bcm2708.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index 398a04e..d019bb2 100644 ---- a/drivers/mmc/host/sdhci-bcm2708.c -+++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -510,7 +510,8 @@ static void schci_bcm2708_cb_read(struct sdhci_bcm2708_priv *host, - cb->stride = 0; - - if (is_last) { -- cb->info |= BCM2708_DMA_INT_EN; -+ cb->info |= BCM2708_DMA_INT_EN | -+ BCM2708_DMA_WAIT_RESP; - cb->next = 0; - } else - cb->next = host->cb_handle + -@@ -541,7 +542,8 @@ static void schci_bcm2708_cb_write(struct sdhci_bcm2708_priv *host, - cb->stride = 0; - - if (is_last) { -- cb->info |= BCM2708_DMA_INT_EN; -+ cb->info |= BCM2708_DMA_INT_EN | -+ BCM2708_DMA_WAIT_RESP; - cb->next = 0; - } else - cb->next = host->cb_handle + --- -1.8.1.5 - - -From c01b171c799775adb410d89e58ee62d72b75ff54 Mon Sep 17 00:00:00 2001 +From e2b023487bff9ca672ebd8b75900417bc5b3e341 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 26 Mar 2012 22:15:50 +0100 -Subject: [PATCH 014/169] bcm2708: alsa sound driver +Subject: [PATCH 08/95] bcm2708: alsa sound driver Signed-off-by: popcornmix --- @@ -75917,10 +71071,10 @@ index 339aabf..df947e5 100644 CONFIG_USB_HIDDEV=y CONFIG_HID_A4TECH=m diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 1db8261..aedca70 100644 +index 544ed1e..18f6558 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -467,6 +467,16 @@ struct platform_device bcm2708_powerman_device = { +@@ -422,6 +422,16 @@ struct platform_device bcm2708_powerman_device = { .coherent_dma_mask = 0xffffffffUL}, }; @@ -75937,7 +71091,7 @@ index 1db8261..aedca70 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -503,6 +513,8 @@ void __init bcm2708_init(void) +@@ -469,6 +479,8 @@ void __init bcm2708_init(void) bcm_register_device(&bcm2708_emmc_device); #endif bcm2708_init_led(); @@ -75979,7 +71133,7 @@ index 8c0c851..181cb57 100644 + diff --git a/sound/arm/bcm2835-ctl.c b/sound/arm/bcm2835-ctl.c new file mode 100755 -index 0000000..5e77752 +index 0000000..c3e0f7a --- /dev/null +++ b/sound/arm/bcm2835-ctl.c @@ -0,0 +1,200 @@ @@ -76131,7 +71285,7 @@ index 0000000..5e77752 + +static DECLARE_TLV_DB_SCALE(snd_bcm2835_db_scale, CTRL_VOL_MIN, 1, 1); + -+static struct snd_kcontrol_new snd_bcm2835_ctl[] __devinitdata = { ++static struct snd_kcontrol_new snd_bcm2835_ctl[] = { + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "PCM Playback Volume", @@ -76168,7 +71322,7 @@ index 0000000..5e77752 + }, +}; + -+int __devinit snd_bcm2835_new_ctl(bcm2835_chip_t * chip) ++int snd_bcm2835_new_ctl(bcm2835_chip_t * chip) +{ + int err; + unsigned int idx; @@ -76185,7 +71339,7 @@ index 0000000..5e77752 +} diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c new file mode 100755 -index 0000000..8d182f0 +index 0000000..4206b7e --- /dev/null +++ b/sound/arm/bcm2835-pcm.c @@ -0,0 +1,409 @@ @@ -76567,7 +71721,7 @@ index 0000000..8d182f0 +}; + +/* create a pcm device */ -+int __devinit snd_bcm2835_new_pcm(bcm2835_chip_t * chip) ++int snd_bcm2835_new_pcm(bcm2835_chip_t * chip) +{ + struct snd_pcm *pcm; + int err; @@ -77450,7 +72604,7 @@ index 0000000..9ecb2d6 +MODULE_PARM_DESC(force_bulk, "Force use of vchiq bulk for audio"); diff --git a/sound/arm/bcm2835.c b/sound/arm/bcm2835.c new file mode 100755 -index 0000000..9546fe6 +index 0000000..e5ac894 --- /dev/null +++ b/sound/arm/bcm2835.c @@ -0,0 +1,413 @@ @@ -77509,7 +72663,7 @@ index 0000000..9546fe6 +/* chip-specific constructor + * (see "Management of Cards and Components") + */ -+static int __devinit snd_bcm2835_create(struct snd_card *card, ++static int snd_bcm2835_create(struct snd_card *card, + struct platform_device *pdev, + bcm2835_chip_t ** rchip) +{ @@ -77537,7 +72691,7 @@ index 0000000..9546fe6 + return 0; +} + -+static int __devinit snd_bcm2835_alsa_probe(struct platform_device *pdev) ++static int snd_bcm2835_alsa_probe(struct platform_device *pdev) +{ + static int dev; + bcm2835_chip_t *chip; @@ -77777,7 +72931,7 @@ index 0000000..9546fe6 + }, +}; + -+static int __devinit bcm2835_alsa_device_init(void) ++static int bcm2835_alsa_device_init(void) +{ + int err; + err = platform_driver_register(&bcm2835_alsa0_driver); @@ -77848,7 +73002,7 @@ index 0000000..9546fe6 + return err; +} + -+static void __devexit bcm2835_alsa_device_exit(void) ++static void bcm2835_alsa_device_exit(void) +{ + platform_driver_unregister(&bcm2835_alsa0_driver); + platform_driver_unregister(&bcm2835_alsa1_driver); @@ -78151,83 +73305,14 @@ index 0000000..af3e6eb + +#endif // _VC_AUDIO_DEFS_H_ -- -1.8.1.5 +1.8.1.6 -From c55ae3ef78f09161ffa45a736b63a05036a83121 Mon Sep 17 00:00:00 2001 -From: Gray Girling -Date: Mon, 16 Apr 2012 14:00:20 +0100 -Subject: [PATCH 015/169] Replace #if 1 sections by local configuration - #defines (tidy) - ---- - drivers/mmc/host/sdhci-bcm2708.c | 21 ++++++++++++++------- - 1 file changed, 14 insertions(+), 7 deletions(-) - -diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index d019bb2..4b23c8b 100644 ---- a/drivers/mmc/host/sdhci-bcm2708.c -+++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -59,6 +59,9 @@ - //#define LOG_REGISTERS - - #define USE_SCHED_TIME -+#define USE_SPACED_WRITES_2CLK 1 /* space consecutive register writes */ -+#define USE_SOFTWARE_TIMEOUTS 1 /* not hardware timeouts */ -+#define SOFTWARE_ERASE_TIMEOUT_SEC 30 - - #define SDHCI_BCM_DMA_CHAN 4 /* this default is normally overriden */ - #define SDHCI_BCM_DMA_WAITS 0 /* delays slowing DMA transfers: 0-31 */ -@@ -228,9 +231,11 @@ u8 sdhci_bcm2708_readb(struct sdhci_host *host, int reg) - static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - { - u32 ier; -+ -+#if USE_SPACED_WRITES_2CLK - static bool timeout_disabled = false; - unsigned int ns_2clk = 0; -- -+ - /* The Arasan has a bugette whereby it may lose the content of - * successive writes to registers that are within two SD-card clock - * cycles of each other (a clock domain crossing problem). -@@ -238,7 +243,6 @@ static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - * (Which is just as well - otherwise we'd have to nobble the DMA engine - * too) - */ --#if 1 - if (reg != SDHCI_BUFFER && host->clock != 0) { - /* host->clock is the clock freq in Hz */ - static hptime_t last_write_hpt; -@@ -259,11 +263,14 @@ static void sdhci_bcm2708_raw_writel(struct sdhci_host *host, u32 val, int reg) - } - last_write_hpt = now; - } --#if 1 -- /* The Arasan is clocked for timeouts using the SD clock which is too fast -- * for ERASE commands and causes issues. So we disable timeouts for ERASE */ -- if (host->cmd != NULL && host->cmd->opcode == MMC_ERASE && reg == (SDHCI_COMMAND & ~3)) { -- mod_timer(&host->timer, jiffies + 30 * HZ); -+#if USE_SOFTWARE_TIMEOUTS -+ /* The Arasan is clocked for timeouts using the SD clock which is too -+ * fast for ERASE commands and causes issues. So we disable timeouts -+ * for ERASE */ -+ if (host->cmd != NULL && host->cmd->opcode == MMC_ERASE && -+ reg == (SDHCI_COMMAND & ~3)) { -+ mod_timer(&host->timer, -+ jiffies + SOFTWARE_ERASE_TIMEOUT_SEC * HZ); - ier = readl(host->ioaddr + SDHCI_SIGNAL_ENABLE); - ier &= ~SDHCI_INT_DATA_TIMEOUT; - writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE); --- -1.8.1.5 - - -From 4215b6f201cc2212e880ed488163474f4cb0b568 Mon Sep 17 00:00:00 2001 +From b8ef5a6c27eca1b32bb541968068922336a5019c Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 27 Apr 2012 00:30:15 +0100 -Subject: [PATCH 016/169] Fix (hopefully) for DWC_MEMCPY kernel panics. Thanks - to Naren Sankar for finding this +Subject: [PATCH 09/95] Fix (hopefully) for DWC_MEMCPY kernel panics. Thanks to + Naren Sankar for finding this --- drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 4 ++++ @@ -78264,308 +73349,13 @@ index a5f8546..5261d2a 100644 dwc_otg_hcd_urb_set_pipeinfo(dwc_otg_urb, usb_pipedevice(urb->pipe), -- -1.8.1.5 +1.8.1.6 -From 801f7f7f31b3be791bcf66c2201d9d194428dd61 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 27 Apr 2012 00:31:37 +0100 -Subject: [PATCH 017/169] Build modules needed for USB booting into kernel - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 4 ++-- - arch/arm/configs/bcmrpi_defconfig | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index e519412..6732014 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -90,7 +90,7 @@ CONFIG_CDROM_PKTCDVD=m - CONFIG_MISC_DEVICES=y - CONFIG_SCSI=y - # CONFIG_SCSI_PROC_FS is not set --CONFIG_BLK_DEV_SD=m -+CONFIG_BLK_DEV_SD=y - CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set -@@ -292,7 +292,7 @@ CONFIG_USB_STORAGE_ONETOUCH=m - CONFIG_USB_STORAGE_KARMA=m - CONFIG_USB_STORAGE_CYPRESS_ATACB=m - CONFIG_USB_STORAGE_ENE_UB6250=m --CONFIG_USB_UAS=m -+CONFIG_USB_UAS=y - CONFIG_USB_LIBUSUAL=y - CONFIG_USB_MDC800=m - CONFIG_USB_MICROTEK=m -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index df947e5..fcbf8a5 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -106,7 +106,7 @@ CONFIG_CDROM_PKTCDVD=m - CONFIG_MISC_DEVICES=y - CONFIG_SCSI=y - # CONFIG_SCSI_PROC_FS is not set --CONFIG_BLK_DEV_SD=m -+CONFIG_BLK_DEV_SD=y - CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set -@@ -309,7 +309,7 @@ CONFIG_USB_STORAGE_ONETOUCH=m - CONFIG_USB_STORAGE_KARMA=m - CONFIG_USB_STORAGE_CYPRESS_ATACB=m - CONFIG_USB_STORAGE_ENE_UB6250=m --CONFIG_USB_UAS=m -+CONFIG_USB_UAS=y - CONFIG_USB_LIBUSUAL=y - CONFIG_USB_MDC800=m - CONFIG_USB_MICROTEK=m --- -1.8.1.5 - - -From 8240e8a542abf3e365de0f1fffcf1a1f15b3bb0c Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 27 Apr 2012 00:33:27 +0100 -Subject: [PATCH 018/169] Whitespace tidy. Thanks Roger - ---- - arch/arm/mach-bcm2708/bcm2708.c | 151 ++++++++++++++++++---------------------- - 1 file changed, 67 insertions(+), 84 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index aedca70..54476fc 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -85,69 +85,54 @@ void __init bcm2708_init_irq(void) - .virtual = IO_ADDRESS(ARMCTRL_BASE), - .pfn = __phys_to_pfn(ARMCTRL_BASE), - .length = SZ_4K, -- .type = MT_DEVICE}, { -- .virtual = IO_ADDRESS(UART0_BASE), -- .pfn = __phys_to_pfn(UART0_BASE), -- .length = SZ_4K, -- .type = MT_DEVICE}, { -- .virtual = -- IO_ADDRESS(UART1_BASE), -- .pfn = -- __phys_to_pfn(UART1_BASE), -- .length = SZ_4K, -- .type = MT_DEVICE}, { -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(UART0_BASE), -+ .pfn = __phys_to_pfn(UART0_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(UART1_BASE), -+ .pfn = __phys_to_pfn(UART1_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, - #ifdef CONFIG_MMC_BCM2708 /* broadcom legacy SD */ -- . -- virtual -- = -- IO_ADDRESS -- (MMCI0_BASE), -- .pfn = -- __phys_to_pfn -- (MMCI0_BASE), -- . -- length = -- SZ_4K, -- .type = -- MT_DEVICE}, - { -+ .virtual = IO_ADDRESS(MMCI0_BASE), -+ .pfn = __phys_to_pfn(MMCI0_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, - #endif -+ { - .virtual = IO_ADDRESS(DMA_BASE), - .pfn = __phys_to_pfn(DMA_BASE), - .length = SZ_4K, -- .type = MT_DEVICE}, { -- .virtual = IO_ADDRESS(MCORE_BASE), -- .pfn = __phys_to_pfn(MCORE_BASE), -- .length = SZ_4K, -- .type = MT_DEVICE}, { -- .virtual = -- IO_ADDRESS(ST_BASE), -- .pfn = -- __phys_to_pfn(ST_BASE), -- .length = SZ_4K, -- .type = MT_DEVICE}, { -- . -- virtual -- = -- IO_ADDRESS -- (USB_BASE), -- .pfn = -- __phys_to_pfn -- (USB_BASE), -- . -- length = -- SZ_128K, -- .type = -- MT_DEVICE}, -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(MCORE_BASE), -+ .pfn = __phys_to_pfn(MCORE_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(ST_BASE), -+ .pfn = __phys_to_pfn(ST_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(USB_BASE), -+ .pfn = __phys_to_pfn(USB_BASE), -+ .length = SZ_128K, -+ .type = MT_DEVICE}, - { - .virtual = IO_ADDRESS(PM_BASE), - .pfn = __phys_to_pfn(PM_BASE), - .length = SZ_4K, -- .type = MT_DEVICE}, { -- .virtual = IO_ADDRESS(GPIO_BASE), -- .pfn = __phys_to_pfn(GPIO_BASE), -- .length = SZ_4K, -- .type = MT_DEVICE} -+ .type = MT_DEVICE}, -+ { -+ .virtual = IO_ADDRESS(GPIO_BASE), -+ .pfn = __phys_to_pfn(GPIO_BASE), -+ .length = SZ_4K, -+ .type = MT_DEVICE} - }; - - void __init bcm2708_map_io(void) -@@ -161,15 +146,15 @@ void __init bcm2708_map_io(void) - static cycle_t stc_read_cycles(struct clocksource *cs) - { - /* STC: a free running counter that increments at the rate of 1MHz */ -- return (cycle_t)readl(__io_address(ST_BASE+0x04)); -+ return (cycle_t) readl(__io_address(ST_BASE + 0x04)); - } - - static struct clocksource clocksource_stc = { -- .name = "stc", -- .rating = 300, -- .read = stc_read_cycles, -- .mask = CLOCKSOURCE_MASK(32), -- .flags = CLOCK_SOURCE_IS_CONTINUOUS, -+ .name = "stc", -+ .rating = 300, -+ .read = stc_read_cycles, -+ .mask = CLOCKSOURCE_MASK(32), -+ .flags = CLOCK_SOURCE_IS_CONTINUOUS, - }; - - unsigned long frc_clock_ticks32(void) -@@ -180,19 +165,16 @@ unsigned long frc_clock_ticks32(void) - static void __init bcm2708_clocksource_init(void) - { - // calculate .shift and .mult values and register clocksource -- if (clocksource_register_hz(&clocksource_stc, STC_FREQ_HZ)) -- { -+ if (clocksource_register_hz(&clocksource_stc, STC_FREQ_HZ)) { - printk(KERN_ERR "timer: failed to initialize clock " -- "source %s\n", clocksource_stc.name); -+ "source %s\n", clocksource_stc.name); - } - } - - unsigned long long sched_clock(void) - { -- return clocksource_cyc2ns(clocksource_stc.read( -- &clocksource_stc), -- clocksource_stc.mult, -- clocksource_stc.shift); -+ return clocksource_cyc2ns(clocksource_stc.read(&clocksource_stc), -+ clocksource_stc.mult, clocksource_stc.shift); - } - - /* -@@ -269,11 +251,12 @@ unsigned long long sched_clock(void) - .start = MMCI0_BASE, - .end = MMCI0_BASE + SZ_4K - 1, - .flags = IORESOURCE_MEM, -- }, { -- .start = IRQ_SDIO, -- .end = IRQ_SDIO, -- .flags = IORESOURCE_IRQ, -- } -+ }, -+ { -+ .start = IRQ_SDIO, -+ .end = IRQ_SDIO, -+ .flags = IORESOURCE_IRQ, -+ } - }; - - static struct platform_device bcm2708_mci_device = { -@@ -398,11 +381,12 @@ unsigned long long sched_clock(void) - .start = ST_BASE, - .end = ST_BASE + SZ_4K - 1, - .flags = IORESOURCE_MEM, -- }, { -- .start = IRQ_TIMER3, -- .end = IRQ_TIMER3, -- .flags = IORESOURCE_IRQ, -- } -+ }, -+ { -+ .start = IRQ_TIMER3, -+ .end = IRQ_TIMER3, -+ .flags = IORESOURCE_IRQ, -+ } - - }; - -@@ -467,14 +451,13 @@ struct platform_device bcm2708_powerman_device = { - .coherent_dma_mask = 0xffffffffUL}, - }; - -- - static struct platform_device bcm2708_alsa_devices[] = { -- [0] = { -- .name = "bcm2835_AUD0", -- .id = 0, /* first audio device */ -- .resource = 0, -- .num_resources = 0, -- }, -+ [0] = { -+ .name = "bcm2835_AUD0", -+ .id = 0, /* first audio device */ -+ .resource = 0, -+ .num_resources = 0, -+ }, - }; - - int __init bcm_register_device(struct platform_device *pdev) -@@ -660,7 +643,7 @@ static inline void bcm2708_init_led(void) - - MACHINE_START(BCM2708, "BCM2708") - /* Maintainer: Broadcom Europe Ltd. */ --.map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = -+ .map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = - &bcm2708_timer,.init_machine = - bcm2708_init, MACHINE_END module_param(boardrev, uint, 0644); - module_param(serial, uint, 0644); --- -1.8.1.5 - - -From acfd0f8fdd4d39d0ee87485859aacb0594c9fd00 Mon Sep 17 00:00:00 2001 +From f500dc5269e80976df4073121ef1f0b5db499597 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 17:36:22 +0000 -Subject: [PATCH 019/169] added support for TT in the USB driver. Thanks Naren +Subject: [PATCH 10/95] added support for TT in the USB driver. Thanks Naren --- drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 3 +++ @@ -78586,257 +73376,13 @@ index 5261d2a..e7b90c8 100644 dwc_otg_hcd = dwc_otg_hcd_alloc_hcd(); if (!dwc_otg_hcd) { -- -1.8.1.5 +1.8.1.6 -From d0407214f43d0a32a9b77a21a7a3e599b4b74f14 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 2 May 2012 22:13:14 +0100 -Subject: [PATCH 020/169] Swap Red and Blue over in 32bpp framebuffer mode - ---- - drivers/video/bcm2708_fb.c | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index 5b27287..ff1fffc 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -113,7 +113,12 @@ static int bcm2708_fb_set_bitfields(struct fb_var_screeninfo *var) - * encoded in the pixel data. Calculate their position from - * the bitfield length defined above. - */ -- if (ret == 0 && var->bits_per_pixel >= 16) { -+ if (ret == 0 && var->bits_per_pixel >= 24) { -+ var->red.offset = 0; -+ var->green.offset = var->red.offset + var->red.length; -+ var->blue.offset = var->green.offset + var->green.length; -+ var->transp.offset = var->blue.offset + var->blue.length; -+ } else if (ret == 0 && var->bits_per_pixel >= 16) { - var->blue.offset = 0; - var->green.offset = var->blue.offset + var->blue.length; - var->red.offset = var->green.offset + var->green.length; -@@ -312,6 +317,7 @@ static void bcm2708_fb_imageblit(struct fb_info *info, - - static int fbwidth = 800; /* module parameter */ - static int fbheight = 480; /* module parameter */ -+static int fbdepth = 16; /* module parameter */ - - static int bcm2708_fb_register(struct bcm2708_fb *fb) - { -@@ -346,7 +352,7 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb) - fb->fb.var.yres = fbheight; - fb->fb.var.xres_virtual = fbwidth; - fb->fb.var.yres_virtual = fbheight; -- fb->fb.var.bits_per_pixel = 16; -+ fb->fb.var.bits_per_pixel = fbdepth; - fb->fb.var.vmode = FB_VMODE_NONINTERLACED; - fb->fb.var.activate = FB_ACTIVATE_NOW; - fb->fb.var.nonstd = 0; -@@ -369,8 +375,8 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb) - - fb_set_var(&fb->fb, &fb->fb.var); - -- pr_info("BCM2708FB: registering framebuffer (%d, %d)\n", fbwidth, -- fbheight); -+ pr_info("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, -+ fbheight, fbdepth); - - ret = register_framebuffer(&fb->fb); - pr_info("BCM2708FB: register framebuffer (%d)\n", ret); -@@ -453,9 +459,11 @@ static void __exit bcm2708_fb_exit(void) - - module_param(fbwidth, int, 0644); - module_param(fbheight, int, 0644); -+module_param(fbdepth, int, 0644); - - MODULE_DESCRIPTION("BCM2708 framebuffer driver"); - MODULE_LICENSE("GPL"); - - MODULE_PARM_DESC(fbwidth, "Width of ARM Framebuffer"); - MODULE_PARM_DESC(fbheight, "Height of ARM Framebuffer"); -+MODULE_PARM_DESC(fbdepth, "Bit depth of ARM Framebuffer"); --- -1.8.1.5 - - -From d85ff2cb9e8fd6435b80f04805118a809cb4338a Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 6 May 2012 16:58:07 +0100 -Subject: [PATCH 021/169] Update emergency config to match latest debug one - ---- - arch/arm/configs/bcmrpi_emergency_defconfig | 75 +++++++++++++++++++++++++---- - 1 file changed, 66 insertions(+), 9 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_emergency_defconfig b/arch/arm/configs/bcmrpi_emergency_defconfig -index 367adef..3b40c49 100644 ---- a/arch/arm/configs/bcmrpi_emergency_defconfig -+++ b/arch/arm/configs/bcmrpi_emergency_defconfig -@@ -2,27 +2,44 @@ CONFIG_EXPERIMENTAL=y - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y - CONFIG_POSIX_MQUEUE=y -+CONFIG_BSD_PROCESS_ACCT=y -+CONFIG_BSD_PROCESS_ACCT_V3=y -+CONFIG_FHANDLE=y -+CONFIG_AUDIT=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_BLK_DEV_INITRD=y - CONFIG_INITRAMFS_SOURCE="../target_fs" --# CONFIG_UID16 is not set --# CONFIG_KALLSYMS is not set -+CONFIG_CGROUP_FREEZER=y -+CONFIG_CGROUP_DEVICE=y -+CONFIG_CGROUP_CPUACCT=y -+CONFIG_RESOURCE_COUNTERS=y -+CONFIG_BLK_CGROUP=y -+CONFIG_NAMESPACES=y -+CONFIG_SCHED_AUTOGROUP=y - CONFIG_EMBEDDED=y --# CONFIG_VM_EVENT_COUNTERS is not set - # CONFIG_COMPAT_BRK is not set - CONFIG_SLAB=y -+CONFIG_PROFILING=y -+CONFIG_OPROFILE=m -+CONFIG_KPROBES=y - CONFIG_MODULES=y - CONFIG_MODULE_UNLOAD=y - CONFIG_MODVERSIONS=y - CONFIG_MODULE_SRCVERSION_ALL=y - # CONFIG_BLK_DEV_BSG is not set -+CONFIG_BLK_DEV_THROTTLING=y -+CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y - CONFIG_AEABI=y -+CONFIG_SECCOMP=y -+CONFIG_CC_STACKPROTECTOR=y - CONFIG_ZBOOT_ROM_TEXT=0x0 - CONFIG_ZBOOT_ROM_BSS=0x0 - CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" -+CONFIG_KEXEC=y - CONFIG_CPU_IDLE=y - CONFIG_VFP=y - CONFIG_BINFMT_MISC=m -@@ -91,10 +108,11 @@ CONFIG_CDROM_PKTCDVD=m - CONFIG_MISC_DEVICES=y - CONFIG_SCSI=y - # CONFIG_SCSI_PROC_FS is not set --CONFIG_BLK_DEV_SD=m -+CONFIG_BLK_DEV_SD=y - CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set -+CONFIG_MD=y - CONFIG_NETDEVICES=y - CONFIG_TUN=m - CONFIG_PHYLIB=m -@@ -209,6 +227,26 @@ CONFIG_FRAMEBUFFER_CONSOLE=y - CONFIG_LOGO=y - # CONFIG_LOGO_LINUX_MONO is not set - # CONFIG_LOGO_LINUX_VGA16 is not set -+CONFIG_SOUND=y -+CONFIG_SND=m -+CONFIG_SND_SEQUENCER=m -+CONFIG_SND_SEQ_DUMMY=m -+CONFIG_SND_MIXER_OSS=m -+CONFIG_SND_PCM_OSS=m -+CONFIG_SND_SEQUENCER_OSS=y -+CONFIG_SND_HRTIMER=m -+CONFIG_SND_DUMMY=m -+CONFIG_SND_ALOOP=m -+CONFIG_SND_VIRMIDI=m -+CONFIG_SND_MTPAV=m -+CONFIG_SND_SERIAL_U16550=m -+CONFIG_SND_MPU401=m -+CONFIG_SND_BCM2835=m -+CONFIG_SND_USB_AUDIO=m -+CONFIG_SND_USB_UA101=m -+CONFIG_SND_USB_CAIAQ=m -+CONFIG_SND_USB_6FIRE=m -+CONFIG_SOUND_PRIME=m - CONFIG_HID_PID=y - CONFIG_USB_HIDDEV=y - CONFIG_HID_A4TECH=m -@@ -273,7 +311,7 @@ CONFIG_USB_STORAGE_ONETOUCH=m - CONFIG_USB_STORAGE_KARMA=m - CONFIG_USB_STORAGE_CYPRESS_ATACB=m - CONFIG_USB_STORAGE_ENE_UB6250=m --CONFIG_USB_UAS=m -+CONFIG_USB_UAS=y - CONFIG_USB_LIBUSUAL=y - CONFIG_USB_MDC800=m - CONFIG_USB_MICROTEK=m -@@ -369,6 +407,7 @@ CONFIG_REISERFS_FS_SECURITY=y - CONFIG_JFS_FS=m - CONFIG_JFS_POSIX_ACL=y - CONFIG_JFS_SECURITY=y -+CONFIG_JFS_STATISTICS=y - CONFIG_XFS_FS=m - CONFIG_XFS_QUOTA=y - CONFIG_XFS_POSIX_ACL=y -@@ -378,10 +417,13 @@ CONFIG_OCFS2_FS=m - CONFIG_BTRFS_FS=m - CONFIG_BTRFS_FS_POSIX_ACL=y - CONFIG_NILFS2_FS=m -+CONFIG_FANOTIFY=y - CONFIG_AUTOFS4_FS=y - CONFIG_FUSE_FS=m - CONFIG_CUSE=m - CONFIG_FSCACHE=y -+CONFIG_FSCACHE_STATS=y -+CONFIG_FSCACHE_HISTOGRAM=y - CONFIG_CACHEFILES=y - CONFIG_ISO9660_FS=m - CONFIG_JOLIET=y -@@ -409,6 +451,7 @@ CONFIG_CIFS_WEAK_PW_HASH=y - CONFIG_CIFS_XATTR=y - CONFIG_CIFS_POSIX=y - CONFIG_9P_FS=m -+CONFIG_9P_FS_POSIX_ACL=y - CONFIG_PARTITION_ADVANCED=y - CONFIG_MAC_PARTITION=y - CONFIG_EFI_PARTITION=y -@@ -451,10 +494,24 @@ CONFIG_NLS_ISO8859_15=m - CONFIG_NLS_KOI8_R=m - CONFIG_NLS_KOI8_U=m - CONFIG_NLS_UTF8=m --# CONFIG_SCHED_DEBUG is not set --# CONFIG_DEBUG_BUGVERBOSE is not set --# CONFIG_FTRACE is not set --# CONFIG_ARM_UNWIND is not set -+CONFIG_PRINTK_TIME=y -+CONFIG_DETECT_HUNG_TASK=y -+CONFIG_TIMER_STATS=y -+CONFIG_DEBUG_STACK_USAGE=y -+CONFIG_DEBUG_INFO=y -+CONFIG_DEBUG_MEMORY_INIT=y -+CONFIG_BOOT_PRINTK_DELAY=y -+CONFIG_LATENCYTOP=y -+CONFIG_SYSCTL_SYSCALL_CHECK=y -+CONFIG_IRQSOFF_TRACER=y -+CONFIG_SCHED_TRACER=y -+CONFIG_STACK_TRACER=y -+CONFIG_BLK_DEV_IO_TRACE=y -+CONFIG_FUNCTION_PROFILER=y -+CONFIG_KGDB=y -+CONFIG_KGDB_KDB=y -+CONFIG_KDB_KEYBOARD=y -+CONFIG_STRICT_DEVMEM=y - CONFIG_CRYPTO_AUTHENC=m - CONFIG_CRYPTO_SEQIV=m - CONFIG_CRYPTO_CBC=y --- -1.8.1.5 - - -From 44d6f6236becc216c0be225e952772c55c1267ba Mon Sep 17 00:00:00 2001 +From 27c5263d74dc511e0d3da51f1ef560a6911155ef Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 8 May 2012 23:09:44 +0100 -Subject: [PATCH 022/169] Use dwc_alloc_atomic. Thanks bootc +Subject: [PATCH 11/95] Use dwc_alloc_atomic. Thanks bootc --- drivers/usb/host/dwc_otg/dwc_otg_hcd.h | 4 ++-- @@ -78865,13 +73411,13 @@ index 9459c4c..f6e7870 100644 /** Frees the memory for a QTD structure. QTD should already be removed from -- -1.8.1.5 +1.8.1.6 -From 8502010bd7108a18981bf48a2fe39a434cb99063 Mon Sep 17 00:00:00 2001 +From 3a5fa8d50770bf02c6238e36d45df663b12a6d71 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 8 May 2012 23:12:13 +0100 -Subject: [PATCH 023/169] possible fix for sdcard missing status. Thank naren +Subject: [PATCH 12/95] possible fix for sdcard missing status. Thank naren --- drivers/mmc/host/sdhci-bcm2708.c | 9 +++++++++ @@ -78905,54 +73451,13 @@ index 4b23c8b..cae6be9 100644 /*****************************************************************************\ -- -1.8.1.5 +1.8.1.6 -From 8844947ed3684f626a2b6237009405284e0f4233 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 8 May 2012 23:14:05 +0100 -Subject: [PATCH 024/169] Fix BUG() in bcm2708_fb_set_par doesn't work if the - console is currently locked. Thanks lp0 - ---- - drivers/video/bcm2708_fb.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index ff1fffc..797bee0 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -243,8 +244,13 @@ static int bcm2708_fb_set_par(struct fb_info *info) - iounmap(fb->fb.screen_base); - fb->fb.screen_base = - (void *)ioremap_wc(fb->fb.fix.smem_start, fb->fb.screen_size); -- if (!fb->fb.screen_base) -+ if (!fb->fb.screen_base) { -+ /* the console may currently be locked */ -+ console_trylock(); -+ console_unlock(); -+ - BUG(); /* what can we do here */ -+ } - } - pr_info - ("BCM2708FB: start = %p,%p width=%d, height=%d, bpp=%d, pitch=%d size=%d success=%d\n", --- -1.8.1.5 - - -From a1fc26c99dd7f2a15a4447d3bcf16c2d6df1037d Mon Sep 17 00:00:00 2001 +From f30daa0ddaa2d5a73d577a9c74accbad541fe4dd Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 15 May 2012 15:24:40 +0100 -Subject: [PATCH 025/169] Fix for DWC OTG HCD URB Dequeue has NULL URB panic. +Subject: [PATCH 13/95] Fix for DWC OTG HCD URB Dequeue has NULL URB panic. Thanks Naren --- @@ -78980,114 +73485,13 @@ index e7b90c8..2a3b689 100644 /* Higher layer software sets URB status. */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) -- -1.8.1.5 +1.8.1.6 -From 3edba5572bd9e7686d221e74b748f1e3109393c2 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 16 May 2012 14:15:12 +0100 -Subject: [PATCH 026/169] Fix for bug in mbox_read. Thanks lp0 - ---- - arch/arm/mach-bcm2708/power.c | 2 -- - arch/arm/mach-bcm2708/vcio.c | 3 +-- - drivers/video/bcm2708_fb.c | 4 +--- - 3 files changed, 2 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c -index a4139fc..0c08678 100644 ---- a/arch/arm/mach-bcm2708/power.c -+++ b/arch/arm/mach-bcm2708/power.c -@@ -97,8 +97,6 @@ int bcm_power_request(BCM_POWER_HANDLE_T handle, uint32_t request) - bcm_mailbox_write(MBOX_CHAN_POWER, - global_request << 4); - -- /* Wait for a response during power-up */ -- mdelay(10); - if (global_request & ~g_state.global_request) { - rc = bcm_mailbox_read(MBOX_CHAN_POWER, - &actual); -diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c -index b7d1e14..799a0ac 100644 ---- a/arch/arm/mach-bcm2708/vcio.c -+++ b/arch/arm/mach-bcm2708/vcio.c -@@ -119,8 +119,7 @@ static int mbox_read(struct vc_mailbox *mbox, unsigned chan, uint32_t *data28) - if (mbox->magic != MBOX_MAGIC) - rc = -EINVAL; - else { -- if (mbox->msg[chan] || -- (down_interruptible(&mbox->sema[chan]) == 0)) { -+ if (down_interruptible(&mbox->sema[chan]) == 0) { - *data28 = MBOX_DATA28(mbox->msg[chan]); - mbox->msg[chan] = 0; - rc = 0; -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index 797bee0..8d67e86 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -18,7 +18,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -221,8 +220,7 @@ static int bcm2708_fb_set_par(struct fb_info *info) - /* inform vc about new framebuffer */ - bcm_mailbox_write(MBOX_CHAN_FB, fb->dma); - -- /* workaround occasional failure to read results. TODO: replace fb driver with vchiq version */ -- msleep(10); -+ /* TODO: replace fb driver with vchiq version */ - /* wait for response */ - bcm_mailbox_read(MBOX_CHAN_FB, &val); - --- -1.8.1.5 - - -From 12c6ff2e54dc9fdb7e3e9e4fe56f7314981e2149 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 17 May 2012 14:40:44 +0100 -Subject: [PATCH 027/169] Change PHYS_OFFSET to PLAT_PHYS_OFFSET - ---- - arch/arm/mach-bcm2708/include/mach/memory.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/include/mach/memory.h b/arch/arm/mach-bcm2708/include/mach/memory.h -index b855d85..e76fb0a 100644 ---- a/arch/arm/mach-bcm2708/include/mach/memory.h -+++ b/arch/arm/mach-bcm2708/include/mach/memory.h -@@ -32,7 +32,7 @@ - /* - * Physical DRAM offset. - */ --#define PHYS_OFFSET UL(0x00000000) -+#define PLAT_PHYS_OFFSET UL(0x00000000) - #define ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ - - #ifdef CONFIG_BCM2708_NOL2CACHE -@@ -51,8 +51,8 @@ - #define BUS_OFFSET (ARMMEM_OFFSET + _REAL_BUS_OFFSET) - #define __virt_to_bus(x) ((x) + (BUS_OFFSET - PAGE_OFFSET)) - #define __bus_to_virt(x) ((x) - (BUS_OFFSET - PAGE_OFFSET)) --#define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PHYS_OFFSET)) --#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PHYS_OFFSET)) -+#define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PLAT_PHYS_OFFSET)) -+#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PLAT_PHYS_OFFSET)) - - /* - * Consistent DMA area set to 2M. Framebuffer now allocated on host --- -1.8.1.5 - - -From fec761ebd6c3acebb973f9214a9fe70d3e1a75ee Mon Sep 17 00:00:00 2001 +From a5a8f6129d7ab8c167625ec4458ee2171f5c47e0 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 17 May 2012 14:44:19 +0100 -Subject: [PATCH 028/169] sdcard patch improvements from naren +Subject: [PATCH 14/95] sdcard patch improvements from naren --- drivers/mmc/host/sdhci-bcm2708.c | 23 +++++++---------------- @@ -79143,713 +73547,13 @@ index cae6be9..7136998 100644 /***************************************************************************** \ -- -1.8.1.5 +1.8.1.6 -From 1537f55927e3b03c711fcec9ea3b9de8c267907f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 17 May 2012 14:45:40 +0100 -Subject: [PATCH 029/169] Invert sense of sdcard access trigger (OK LED), so it - is on when accessing - ---- - arch/arm/mach-bcm2708/bcm2708.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 54476fc..fa02a1a 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -614,7 +614,7 @@ struct sys_timer bcm2708_timer = { - .gpio = 16, - .name = "led0", - .default_trigger = "mmc0", -- .active_low = 0, -+ .active_low = 1, - }, - }; - --- -1.8.1.5 - - -From 23b8e6e9ae834330e1a9000734574f5cf3ce127f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 26 May 2012 16:40:51 +0100 -Subject: [PATCH 030/169] Added power off message to allow kexec to work. - Thanks lp0 - ---- - arch/arm/mach-bcm2708/power.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c -index 0c08678..d147bb6 100644 ---- a/arch/arm/mach-bcm2708/power.c -+++ b/arch/arm/mach-bcm2708/power.c -@@ -161,6 +161,7 @@ static int __init bcm_power_init(void) - int i; - - printk(KERN_INFO "bcm_power: Broadcom power driver\n"); -+ bcm_mailbox_write(MBOX_CHAN_POWER, 0); - - for (i = 0; i < BCM_POWER_MAXCLIENTS; i++) - g_state.client_request[i] = BCM_POWER_NOCLIENT; --- -1.8.1.5 - - -From c85bea94ac742847717ee8c731e5c4e3f0f4d92f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 29 May 2012 00:04:15 +0100 -Subject: [PATCH 031/169] Enable PREEMPT and SCHED_AUTOGROUP - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 4 ++++ - arch/arm/configs/bcmrpi_defconfig | 2 ++ - 2 files changed, 6 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index 6732014..a5a25bf 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -2,8 +2,10 @@ CONFIG_EXPERIMENTAL=y - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y - CONFIG_POSIX_MQUEUE=y -+CONFIG_TINY_RCU=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y -+CONFIG_SCHED_AUTOGROUP=y - # CONFIG_UID16 is not set - # CONFIG_KALLSYMS is not set - CONFIG_EMBEDDED=y -@@ -18,6 +20,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y - CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y - CONFIG_HIGH_RES_TIMERS=y -+CONFIG_PREEMPT=y - CONFIG_AEABI=y - CONFIG_ZBOOT_ROM_TEXT=0x0 - CONFIG_ZBOOT_ROM_BSS=0x0 -@@ -471,6 +474,7 @@ CONFIG_NLS_KOI8_R=m - CONFIG_NLS_KOI8_U=m - CONFIG_NLS_UTF8=m - # CONFIG_SCHED_DEBUG is not set -+# CONFIG_DEBUG_PREEMPT is not set - # CONFIG_DEBUG_BUGVERBOSE is not set - # CONFIG_FTRACE is not set - # CONFIG_ARM_UNWIND is not set -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index fcbf8a5..b29c717 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -6,6 +6,7 @@ CONFIG_BSD_PROCESS_ACCT=y - CONFIG_BSD_PROCESS_ACCT_V3=y - CONFIG_FHANDLE=y - CONFIG_AUDIT=y -+CONFIG_TINY_RCU=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_CGROUP_FREEZER=y -@@ -31,6 +32,7 @@ CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y - CONFIG_HIGH_RES_TIMERS=y -+CONFIG_PREEMPT=y - CONFIG_AEABI=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y --- -1.8.1.5 - - -From 23308e83096140d6c21339a2fdcd44e6b0cbfba3 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 30 May 2012 11:57:52 +0100 -Subject: [PATCH 032/169] Added support for USB webcams - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 52 +++++++++++++++++++++++ - arch/arm/configs/bcmrpi_defconfig | 69 +++++++++++++++++++++++++------ - 2 files changed, 108 insertions(+), 13 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index a5a25bf..f9bfb03 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -205,6 +205,58 @@ CONFIG_GPIO_SYSFS=y - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m - # CONFIG_MFD_SUPPORT is not set -+CONFIG_MEDIA_SUPPORT=m -+CONFIG_VIDEO_DEV=m -+CONFIG_USB_VIDEO_CLASS=m -+CONFIG_USB_M5602=m -+CONFIG_USB_STV06XX=m -+CONFIG_USB_GL860=m -+CONFIG_USB_GSPCA_BENQ=m -+CONFIG_USB_GSPCA_CONEX=m -+CONFIG_USB_GSPCA_CPIA1=m -+CONFIG_USB_GSPCA_ETOMS=m -+CONFIG_USB_GSPCA_FINEPIX=m -+CONFIG_USB_GSPCA_JEILINJ=m -+CONFIG_USB_GSPCA_KINECT=m -+CONFIG_USB_GSPCA_KONICA=m -+CONFIG_USB_GSPCA_MARS=m -+CONFIG_USB_GSPCA_MR97310A=m -+CONFIG_USB_GSPCA_NW80X=m -+CONFIG_USB_GSPCA_OV519=m -+CONFIG_USB_GSPCA_OV534=m -+CONFIG_USB_GSPCA_OV534_9=m -+CONFIG_USB_GSPCA_PAC207=m -+CONFIG_USB_GSPCA_PAC7302=m -+CONFIG_USB_GSPCA_PAC7311=m -+CONFIG_USB_GSPCA_SE401=m -+CONFIG_USB_GSPCA_SN9C2028=m -+CONFIG_USB_GSPCA_SN9C20X=m -+CONFIG_USB_GSPCA_SONIXB=m -+CONFIG_USB_GSPCA_SONIXJ=m -+CONFIG_USB_GSPCA_SPCA500=m -+CONFIG_USB_GSPCA_SPCA501=m -+CONFIG_USB_GSPCA_SPCA505=m -+CONFIG_USB_GSPCA_SPCA506=m -+CONFIG_USB_GSPCA_SPCA508=m -+CONFIG_USB_GSPCA_SPCA561=m -+CONFIG_USB_GSPCA_SPCA1528=m -+CONFIG_USB_GSPCA_SQ905=m -+CONFIG_USB_GSPCA_SQ905C=m -+CONFIG_USB_GSPCA_SQ930X=m -+CONFIG_USB_GSPCA_STK014=m -+CONFIG_USB_GSPCA_STV0680=m -+CONFIG_USB_GSPCA_SUNPLUS=m -+CONFIG_USB_GSPCA_T613=m -+CONFIG_USB_GSPCA_TV8532=m -+CONFIG_USB_GSPCA_VC032X=m -+CONFIG_USB_GSPCA_VICAM=m -+CONFIG_USB_GSPCA_XIRLINK_CIT=m -+CONFIG_USB_GSPCA_ZC3XX=m -+CONFIG_VIDEO_HDPVR=m -+CONFIG_USB_PWC=m -+CONFIG_USB_ZR364XX=m -+CONFIG_USB_STKWEBCAM=m -+CONFIG_USB_S2255=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index b29c717..c3ec376 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -29,19 +29,15 @@ CONFIG_MODULE_SRCVERSION_ALL=y - # CONFIG_BLK_DEV_BSG is not set - CONFIG_BLK_DEV_THROTTLING=y - CONFIG_CFQ_GROUP_IOSCHED=y --CONFIG_ARCH_BCM2708=y -+CONFIG_PCI=y - CONFIG_NO_HZ=y - CONFIG_HIGH_RES_TIMERS=y - CONFIG_PREEMPT=y --CONFIG_AEABI=y -+CONFIG_HIGHMEM=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y --CONFIG_ZBOOT_ROM_TEXT=0x0 --CONFIG_ZBOOT_ROM_BSS=0x0 --CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" - CONFIG_KEXEC=y - CONFIG_CPU_IDLE=y --CONFIG_VFP=y - CONFIG_BINFMT_MISC=m - CONFIG_NET=y - CONFIG_PACKET=y -@@ -212,17 +208,67 @@ CONFIG_GAMEPORT_L4=m - CONFIG_VT_HW_CONSOLE_BINDING=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_DEVKMEM is not set --CONFIG_SERIAL_AMBA_PL011=y --CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y -+CONFIG_GPIOLIB=y - CONFIG_GPIO_SYSFS=y -+CONFIG_POWER_SUPPLY=y - # CONFIG_HWMON is not set -+CONFIG_THERMAL=y - CONFIG_WATCHDOG=y --CONFIG_BCM2708_WDT=m - # CONFIG_MFD_SUPPORT is not set -+CONFIG_MEDIA_SUPPORT=m -+CONFIG_VIDEO_DEV=m -+CONFIG_USB_VIDEO_CLASS=m -+CONFIG_USB_M5602=m -+CONFIG_USB_STV06XX=m -+CONFIG_USB_GL860=m -+CONFIG_USB_GSPCA_BENQ=m -+CONFIG_USB_GSPCA_CONEX=m -+CONFIG_USB_GSPCA_CPIA1=m -+CONFIG_USB_GSPCA_ETOMS=m -+CONFIG_USB_GSPCA_FINEPIX=m -+CONFIG_USB_GSPCA_JEILINJ=m -+CONFIG_USB_GSPCA_KINECT=m -+CONFIG_USB_GSPCA_KONICA=m -+CONFIG_USB_GSPCA_MARS=m -+CONFIG_USB_GSPCA_MR97310A=m -+CONFIG_USB_GSPCA_NW80X=m -+CONFIG_USB_GSPCA_OV519=m -+CONFIG_USB_GSPCA_OV534=m -+CONFIG_USB_GSPCA_OV534_9=m -+CONFIG_USB_GSPCA_PAC207=m -+CONFIG_USB_GSPCA_PAC7302=m -+CONFIG_USB_GSPCA_PAC7311=m -+CONFIG_USB_GSPCA_SE401=m -+CONFIG_USB_GSPCA_SN9C2028=m -+CONFIG_USB_GSPCA_SN9C20X=m -+CONFIG_USB_GSPCA_SONIXB=m -+CONFIG_USB_GSPCA_SONIXJ=m -+CONFIG_USB_GSPCA_SPCA500=m -+CONFIG_USB_GSPCA_SPCA501=m -+CONFIG_USB_GSPCA_SPCA505=m -+CONFIG_USB_GSPCA_SPCA506=m -+CONFIG_USB_GSPCA_SPCA508=m -+CONFIG_USB_GSPCA_SPCA561=m -+CONFIG_USB_GSPCA_SPCA1528=m -+CONFIG_USB_GSPCA_SQ905=m -+CONFIG_USB_GSPCA_SQ905C=m -+CONFIG_USB_GSPCA_SQ930X=m -+CONFIG_USB_GSPCA_STK014=m -+CONFIG_USB_GSPCA_STV0680=m -+CONFIG_USB_GSPCA_SUNPLUS=m -+CONFIG_USB_GSPCA_T613=m -+CONFIG_USB_GSPCA_TV8532=m -+CONFIG_USB_GSPCA_VC032X=m -+CONFIG_USB_GSPCA_VICAM=m -+CONFIG_USB_GSPCA_XIRLINK_CIT=m -+CONFIG_USB_GSPCA_ZC3XX=m -+CONFIG_USB_PWC=m -+CONFIG_USB_ZR364XX=m -+CONFIG_USB_STKWEBCAM=m -+CONFIG_USB_S2255=m - CONFIG_FB=y --CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y - CONFIG_LOGO=y - # CONFIG_LOGO_LINUX_MONO is not set -@@ -241,7 +287,6 @@ CONFIG_SND_VIRMIDI=m - CONFIG_SND_MTPAV=m - CONFIG_SND_SERIAL_U16550=m - CONFIG_SND_MPU401=m --CONFIG_SND_BCM2835=m - CONFIG_SND_USB_AUDIO=m - CONFIG_SND_USB_UA101=m - CONFIG_SND_USB_CAIAQ=m -@@ -387,8 +432,6 @@ CONFIG_USB_YUREX=m - CONFIG_MMC=y - CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y --CONFIG_MMC_SDHCI_BCM2708=y --CONFIG_MMC_SDHCI_BCM2708_DMA=y - CONFIG_LEDS_GPIO=y - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m --- -1.8.1.5 - - -From e5d3b9e7e878bdfaa547d21622034b5d397e899e Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 30 May 2012 21:54:02 +0100 -Subject: [PATCH 033/169] Enable ipv6 due to popular demand - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 2 +- - arch/arm/configs/bcmrpi_defconfig | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index f9bfb03..8958358 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -44,7 +44,7 @@ CONFIG_SYN_COOKIES=y - # CONFIG_INET_XFRM_MODE_BEET is not set - # CONFIG_INET_LRO is not set - # CONFIG_INET_DIAG is not set --# CONFIG_IPV6 is not set -+CONFIG_IPV6_PRIVACY=y - CONFIG_NET_PKTGEN=m - CONFIG_IRDA=m - CONFIG_IRLAN=m -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index c3ec376..cebf89c 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -55,7 +55,7 @@ CONFIG_SYN_COOKIES=y - # CONFIG_INET_XFRM_MODE_BEET is not set - # CONFIG_INET_LRO is not set - # CONFIG_INET_DIAG is not set --# CONFIG_IPV6 is not set -+CONFIG_IPV6_PRIVACY=y - CONFIG_NET_PKTGEN=m - CONFIG_IRDA=m - CONFIG_IRLAN=m --- -1.8.1.5 - - -From a3bea8aba0e15feb1034cf77c6726c85f65e6df6 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 31 May 2012 13:01:16 +0100 -Subject: [PATCH 034/169] Fix regression in debug kernel config options - ---- - arch/arm/configs/bcmrpi_defconfig | 19 ++++++++++++++----- - 1 file changed, 14 insertions(+), 5 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index cebf89c..1470bdd 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -29,15 +29,19 @@ CONFIG_MODULE_SRCVERSION_ALL=y - # CONFIG_BLK_DEV_BSG is not set - CONFIG_BLK_DEV_THROTTLING=y - CONFIG_CFQ_GROUP_IOSCHED=y --CONFIG_PCI=y -+CONFIG_ARCH_BCM2708=y - CONFIG_NO_HZ=y - CONFIG_HIGH_RES_TIMERS=y - CONFIG_PREEMPT=y --CONFIG_HIGHMEM=y -+CONFIG_AEABI=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" - CONFIG_KEXEC=y - CONFIG_CPU_IDLE=y -+CONFIG_VFP=y - CONFIG_BINFMT_MISC=m - CONFIG_NET=y - CONFIG_PACKET=y -@@ -208,14 +212,14 @@ CONFIG_GAMEPORT_L4=m - CONFIG_VT_HW_CONSOLE_BINDING=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_DEVKMEM is not set -+CONFIG_SERIAL_AMBA_PL011=y -+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y --CONFIG_GPIOLIB=y - CONFIG_GPIO_SYSFS=y --CONFIG_POWER_SUPPLY=y - # CONFIG_HWMON is not set --CONFIG_THERMAL=y - CONFIG_WATCHDOG=y -+CONFIG_BCM2708_WDT=m - # CONFIG_MFD_SUPPORT is not set - CONFIG_MEDIA_SUPPORT=m - CONFIG_VIDEO_DEV=m -@@ -264,11 +268,13 @@ CONFIG_USB_GSPCA_VC032X=m - CONFIG_USB_GSPCA_VICAM=m - CONFIG_USB_GSPCA_XIRLINK_CIT=m - CONFIG_USB_GSPCA_ZC3XX=m -+CONFIG_VIDEO_HDPVR=m - CONFIG_USB_PWC=m - CONFIG_USB_ZR364XX=m - CONFIG_USB_STKWEBCAM=m - CONFIG_USB_S2255=m - CONFIG_FB=y -+CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y - CONFIG_LOGO=y - # CONFIG_LOGO_LINUX_MONO is not set -@@ -287,6 +293,7 @@ CONFIG_SND_VIRMIDI=m - CONFIG_SND_MTPAV=m - CONFIG_SND_SERIAL_U16550=m - CONFIG_SND_MPU401=m -+CONFIG_SND_BCM2835=m - CONFIG_SND_USB_AUDIO=m - CONFIG_SND_USB_UA101=m - CONFIG_SND_USB_CAIAQ=m -@@ -432,6 +439,8 @@ CONFIG_USB_YUREX=m - CONFIG_MMC=y - CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y -+CONFIG_MMC_SDHCI_BCM2708=y -+CONFIG_MMC_SDHCI_BCM2708_DMA=y - CONFIG_LEDS_GPIO=y - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m --- -1.8.1.5 - - -From 0df25fe680c34a9d8588f636c87dc334b04a110f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 10 Jun 2012 13:32:02 +0100 -Subject: [PATCH 035/169] Add iptables and devtmpfs_mount to non-cutdown - config. This will become default kernel - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 1 + - arch/arm/configs/bcmrpi_defconfig | 147 +++++++++++++++++++++++++++++- - 2 files changed, 144 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index 8958358..ec5bdc9 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -85,6 +85,7 @@ CONFIG_NET_9P=m - CONFIG_NFC=m - CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y -+CONFIG_DEVTMPFS_MOUNT=y - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_NBD=m -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 1470bdd..39ef11f 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -34,6 +34,7 @@ CONFIG_NO_HZ=y - CONFIG_HIGH_RES_TIMERS=y - CONFIG_PREEMPT=y - CONFIG_AEABI=y -+CONFIG_UACCESS_WITH_MEMCPY=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y - CONFIG_ZBOOT_ROM_TEXT=0x0 -@@ -50,19 +51,142 @@ CONFIG_XFRM_USER=y - CONFIG_NET_KEY=m - CONFIG_INET=y - CONFIG_IP_MULTICAST=y -+CONFIG_IP_ADVANCED_ROUTER=y -+CONFIG_IP_MULTIPLE_TABLES=y -+CONFIG_IP_ROUTE_MULTIPATH=y -+CONFIG_IP_ROUTE_VERBOSE=y - CONFIG_IP_PNP=y - CONFIG_IP_PNP_DHCP=y - CONFIG_IP_PNP_RARP=y -+CONFIG_NET_IPIP=m - CONFIG_SYN_COOKIES=y - # CONFIG_INET_XFRM_MODE_TRANSPORT is not set - # CONFIG_INET_XFRM_MODE_TUNNEL is not set - # CONFIG_INET_XFRM_MODE_BEET is not set --# CONFIG_INET_LRO is not set - # CONFIG_INET_DIAG is not set - CONFIG_IPV6_PRIVACY=y -+CONFIG_NETFILTER=y -+CONFIG_NF_CONNTRACK=m -+CONFIG_NF_CONNTRACK_ZONES=y -+CONFIG_NF_CONNTRACK_EVENTS=y -+CONFIG_NF_CONNTRACK_TIMESTAMP=y -+CONFIG_NF_CT_PROTO_DCCP=m -+CONFIG_NF_CT_PROTO_SCTP=m -+CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CONNTRACK_AMANDA=m -+CONFIG_NF_CONNTRACK_FTP=m -+CONFIG_NF_CONNTRACK_H323=m -+CONFIG_NF_CONNTRACK_IRC=m -+CONFIG_NF_CONNTRACK_NETBIOS_NS=m -+CONFIG_NF_CONNTRACK_SNMP=m -+CONFIG_NF_CONNTRACK_PPTP=m -+CONFIG_NF_CONNTRACK_SANE=m -+CONFIG_NF_CONNTRACK_SIP=m -+CONFIG_NF_CONNTRACK_TFTP=m -+CONFIG_NF_CT_NETLINK=m -+CONFIG_NETFILTER_TPROXY=m -+CONFIG_NETFILTER_XT_SET=m -+CONFIG_NETFILTER_XT_TARGET_AUDIT=m -+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m -+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -+CONFIG_NETFILTER_XT_TARGET_CT=m -+CONFIG_NETFILTER_XT_TARGET_DSCP=m -+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m -+CONFIG_NETFILTER_XT_TARGET_LED=m -+CONFIG_NETFILTER_XT_TARGET_MARK=m -+CONFIG_NETFILTER_XT_TARGET_NFLOG=m -+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -+CONFIG_NETFILTER_XT_TARGET_TEE=m -+CONFIG_NETFILTER_XT_TARGET_TPROXY=m -+CONFIG_NETFILTER_XT_TARGET_TRACE=m -+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m -+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m -+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m -+CONFIG_NETFILTER_XT_MATCH_COMMENT=m -+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m -+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -+CONFIG_NETFILTER_XT_MATCH_CPU=m -+CONFIG_NETFILTER_XT_MATCH_DCCP=m -+CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m -+CONFIG_NETFILTER_XT_MATCH_DSCP=m -+CONFIG_NETFILTER_XT_MATCH_ESP=m -+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m -+CONFIG_NETFILTER_XT_MATCH_HELPER=m -+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m -+CONFIG_NETFILTER_XT_MATCH_LENGTH=m -+CONFIG_NETFILTER_XT_MATCH_LIMIT=m -+CONFIG_NETFILTER_XT_MATCH_MAC=m -+CONFIG_NETFILTER_XT_MATCH_MARK=m -+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -+CONFIG_NETFILTER_XT_MATCH_OSF=m -+CONFIG_NETFILTER_XT_MATCH_OWNER=m -+CONFIG_NETFILTER_XT_MATCH_POLICY=m -+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -+CONFIG_NETFILTER_XT_MATCH_QUOTA=m -+CONFIG_NETFILTER_XT_MATCH_RATEEST=m -+CONFIG_NETFILTER_XT_MATCH_REALM=m -+CONFIG_NETFILTER_XT_MATCH_RECENT=m -+CONFIG_NETFILTER_XT_MATCH_SCTP=m -+CONFIG_NETFILTER_XT_MATCH_SOCKET=m -+CONFIG_NETFILTER_XT_MATCH_STATE=m -+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -+CONFIG_NETFILTER_XT_MATCH_STRING=m -+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -+CONFIG_NETFILTER_XT_MATCH_TIME=m -+CONFIG_NETFILTER_XT_MATCH_U32=m -+CONFIG_IP_SET=m -+CONFIG_IP_SET_BITMAP_IP=m -+CONFIG_IP_SET_BITMAP_IPMAC=m -+CONFIG_IP_SET_BITMAP_PORT=m -+CONFIG_IP_SET_HASH_IP=m -+CONFIG_IP_SET_HASH_IPPORT=m -+CONFIG_IP_SET_HASH_IPPORTIP=m -+CONFIG_IP_SET_HASH_IPPORTNET=m -+CONFIG_IP_SET_HASH_NET=m -+CONFIG_IP_SET_HASH_NETPORT=m -+CONFIG_IP_SET_HASH_NETIFACE=m -+CONFIG_IP_SET_LIST_SET=m -+CONFIG_NF_CONNTRACK_IPV4=m -+CONFIG_IP_NF_IPTABLES=m -+CONFIG_IP_NF_MATCH_AH=m -+CONFIG_IP_NF_MATCH_ECN=m -+CONFIG_IP_NF_MATCH_TTL=m -+CONFIG_IP_NF_FILTER=m -+CONFIG_IP_NF_TARGET_REJECT=m -+CONFIG_IP_NF_TARGET_LOG=m -+CONFIG_IP_NF_TARGET_ULOG=m -+CONFIG_IP_NF_MANGLE=m -+CONFIG_IP_NF_TARGET_ECN=m -+CONFIG_IP_NF_TARGET_TTL=m -+CONFIG_IP_NF_RAW=m -+CONFIG_IP_NF_ARPTABLES=m -+CONFIG_IP_NF_ARPFILTER=m -+CONFIG_IP_NF_ARP_MANGLE=m -+CONFIG_NF_CONNTRACK_IPV6=m -+CONFIG_IP6_NF_IPTABLES=m -+CONFIG_IP6_NF_MATCH_AH=m -+CONFIG_IP6_NF_MATCH_EUI64=m -+CONFIG_IP6_NF_MATCH_FRAG=m -+CONFIG_IP6_NF_MATCH_OPTS=m -+CONFIG_IP6_NF_MATCH_HL=m -+CONFIG_IP6_NF_MATCH_IPV6HEADER=m -+CONFIG_IP6_NF_MATCH_MH=m -+CONFIG_IP6_NF_MATCH_RT=m -+CONFIG_IP6_NF_TARGET_HL=m -+CONFIG_IP6_NF_TARGET_LOG=m -+CONFIG_IP6_NF_FILTER=m -+CONFIG_IP6_NF_TARGET_REJECT=m -+CONFIG_IP6_NF_MANGLE=m -+CONFIG_IP6_NF_RAW=m - CONFIG_NET_PKTGEN=m - CONFIG_IRDA=m - CONFIG_IRLAN=m -+CONFIG_IRNET=m - CONFIG_IRCOMM=m - CONFIG_IRDA_ULTRA=y - CONFIG_IRDA_CACHE_LAST_LSAP=y -@@ -99,7 +223,8 @@ CONFIG_WIMAX=m - CONFIG_NET_9P=m - CONFIG_NFC=m - CONFIG_NFC_PN533=m --CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_DEVTMPFS=y -+CONFIG_CONNECTOR=m - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_NBD=m -@@ -132,6 +257,7 @@ CONFIG_ATH9K=m - CONFIG_ATH9K_HTC=m - CONFIG_CARL9170=m - CONFIG_B43=m -+CONFIG_B43_PHY_N=y - CONFIG_B43LEGACY=m - CONFIG_HOSTAP=m - CONFIG_IWM=m -@@ -183,6 +309,7 @@ CONFIG_PPP_ASYNC=m - CONFIG_PPP_SYNC_TTY=m - CONFIG_PPP_DEFLATE=m - CONFIG_PPP_BSDCOMP=m -+CONFIG_PPPOE=m - CONFIG_SLIP=m - CONFIG_SLIP_COMPRESSED=y - CONFIG_NETCONSOLE=m -@@ -214,6 +341,7 @@ CONFIG_VT_HW_CONSOLE_BINDING=y - # CONFIG_DEVKMEM is not set - CONFIG_SERIAL_AMBA_PL011=y - CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -+CONFIG_TTY_PRINTK=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y - CONFIG_GPIO_SYSFS=y -@@ -273,6 +401,10 @@ CONFIG_USB_PWC=m - CONFIG_USB_ZR364XX=m - CONFIG_USB_STKWEBCAM=m - CONFIG_USB_S2255=m -+CONFIG_USB_DSBR=m -+CONFIG_RADIO_SI470X=y -+CONFIG_USB_SI470X=m -+CONFIG_USB_MR800=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -@@ -448,6 +580,11 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m - CONFIG_UIO=m - CONFIG_UIO_PDRV=m - CONFIG_UIO_PDRV_GENIRQ=m -+CONFIG_STAGING=y -+CONFIG_W35UND=m -+CONFIG_PRISM2_USB=m -+CONFIG_R8712U=m -+CONFIG_ZRAM=m - # CONFIG_IOMMU_SUPPORT is not set - CONFIG_EXT4_FS=y - CONFIG_EXT4_FS_POSIX_ACL=y -@@ -549,13 +686,14 @@ CONFIG_NLS_UTF8=m - CONFIG_PRINTK_TIME=y - CONFIG_DETECT_HUNG_TASK=y - CONFIG_TIMER_STATS=y --CONFIG_DEBUG_STACK_USAGE=y --CONFIG_DEBUG_INFO=y -+# CONFIG_DEBUG_PREEMPT is not set - CONFIG_DEBUG_MEMORY_INIT=y - CONFIG_BOOT_PRINTK_DELAY=y - CONFIG_LATENCYTOP=y - CONFIG_SYSCTL_SYSCALL_CHECK=y -+# CONFIG_EVENT_POWER_TRACING_DEPRECATED is not set - CONFIG_IRQSOFF_TRACER=y -+CONFIG_PREEMPT_TRACER=y - CONFIG_SCHED_TRACER=y - CONFIG_STACK_TRACER=y - CONFIG_BLK_DEV_IO_TRACE=y -@@ -582,3 +720,4 @@ CONFIG_CRYPTO_DEFLATE=m - # CONFIG_CRYPTO_HW is not set - CONFIG_CRC_ITU_T=y - CONFIG_LIBCRC32C=y -+ --- -1.8.1.5 - - -From ee802487e2cb75739dd7c127b9d98f32d85251a8 Mon Sep 17 00:00:00 2001 +From 6f202485e8e16c3c101d8b91d53941a0657f594d Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 4 Jun 2012 04:27:48 +0200 -Subject: [PATCH 036/169] sdhci-bcm2708: speed up DMA sync +Subject: [PATCH 15/95] sdhci-bcm2708: speed up DMA sync Experiments show that it doesn't really take that long to sync, so we can reduce the poll interval slightly. Might improve performance a bit. @@ -79871,13 +73575,13 @@ index 7136998..9aebdfb 100644 } if (timeout <= 0) -- -1.8.1.5 +1.8.1.6 -From f2c73495d2ba39496d999532abc5c05e8572345f Mon Sep 17 00:00:00 2001 +From 59cb62fdde3180c862640ca04e048d93f2684f41 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:52:04 +0200 -Subject: [PATCH 037/169] sdhci-bcm2708: remove custom clock handling +Subject: [PATCH 16/95] sdhci-bcm2708: remove custom clock handling The custom clock handling code is redundant and buggy. The MMC/SDHCI subsystem does a better job than it, so remove it for good. @@ -79972,13 +73676,13 @@ index 9aebdfb..c964911 100644 .enable = sdhci_bcm2708_enable, .disable = sdhci_bcm2708_disable, -- -1.8.1.5 +1.8.1.6 -From b15ebf41198be9b80c58db46af2bbe1793eda2a3 Mon Sep 17 00:00:00 2001 +From ebbaeed930adbbeb799435391350c1328c531718 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:53:59 +0200 -Subject: [PATCH 038/169] sdhci-bcm2708: add additional quirks +Subject: [PATCH 17/95] sdhci-bcm2708: add additional quirks Some additional quirks are needed for correct operation. There's no SDHCI capabilities register documented, and it always reads @@ -80005,13 +73709,13 @@ index c964911..16c918b 100644 host->flags = SDHCI_USE_PLATDMA; #endif -- -1.8.1.5 +1.8.1.6 -From 50b61d25b75c7c594fd3b9e35a6e75ba50231c0c Mon Sep 17 00:00:00 2001 +From d9e1f976f047f65a2ecbe5ca0cc18cb0a53db40d Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:57:13 +0200 -Subject: [PATCH 039/169] sdhci-bcm2708: add allow_highspeed parameter +Subject: [PATCH 18/95] sdhci-bcm2708: add allow_highspeed parameter Add a parameter to disable high-speed mode for the few cards that still might have problems. High-speed mode is enabled by default. @@ -80056,13 +73760,13 @@ index 16c918b..a8aae16 100644 +MODULE_PARM_DESC(allow_highspeed, "Allow high speed transfers modes"); + -- -1.8.1.5 +1.8.1.6 -From 2833b71b13cbd7d25c558f2cd29e3392ca373da3 Mon Sep 17 00:00:00 2001 +From 0669f11bbea66d22b713cc9f117bdd55fd64420e Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:58:40 +0200 -Subject: [PATCH 040/169] sdhci-bcm2708: assume 50 MHz eMMC clock +Subject: [PATCH 19/95] sdhci-bcm2708: assume 50 MHz eMMC clock 80 MHz clock isnt't suited well to be dividable to get SD clocks of 25 MHz (default mode) or 50 MHz (high speed mode). 50 MHz are perfect to @@ -80085,13 +73789,13 @@ index a8aae16..64b956b 100644 #define POWER_OFF 0 #define POWER_LAZY_OFF 1 -- -1.8.1.5 +1.8.1.6 -From ab545572ada02bba4f2e5559a92315367c0cfa9e Mon Sep 17 00:00:00 2001 +From 3b3c7f3af59e848e3fd77d4b04407fe4f239f0fd Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 16 Jun 2012 22:31:55 +0100 -Subject: [PATCH 041/169] Allow emmc clock to be specified as command line +Subject: [PATCH 20/95] Allow emmc clock to be specified as command line parameter --- @@ -80135,13 +73839,13 @@ index 64b956b..0241261 100644 + -- -1.8.1.5 +1.8.1.6 -From fae0c9dfe3ddf048e67c1749079b6b2536be782b Mon Sep 17 00:00:00 2001 +From ca89e3b94174cc1da6b6b2df4be628352a18d44f Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 16 Jun 2012 22:35:38 +0100 -Subject: [PATCH 042/169] sdhci-bcm2708: raise DMA sync timeout +Subject: [PATCH 21/95] sdhci-bcm2708: raise DMA sync timeout Commit d64b84c by accident reduced the maximum overall DMA sync timeout. The maximum overall timeout was reduced from 100ms to 30ms, @@ -80168,108 +73872,13 @@ index 0241261..13abbc9 100644 DBG("PDMA over - sync card\n"); if (data->flags & MMC_DATA_READ) -- -1.8.1.5 +1.8.1.6 -From 73459a7f3d468267121ee87564d3b26d92b01bfd Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 16 Jun 2012 23:49:52 +0100 -Subject: [PATCH 043/169] More config options for iptables, device mapper, - PPP_MPPE - ---- - arch/arm/configs/bcmrpi_defconfig | 38 ++++++++++++++++++++++++++++++++++++-- - 1 file changed, 36 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 39ef11f..7754da0 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -160,6 +160,10 @@ CONFIG_IP_NF_FILTER=m - CONFIG_IP_NF_TARGET_REJECT=m - CONFIG_IP_NF_TARGET_LOG=m - CONFIG_IP_NF_TARGET_ULOG=m -+CONFIG_NF_NAT=m -+CONFIG_IP_NF_TARGET_MASQUERADE=m -+CONFIG_IP_NF_TARGET_NETMAP=m -+CONFIG_IP_NF_TARGET_REDIRECT=m - CONFIG_IP_NF_MANGLE=m - CONFIG_IP_NF_TARGET_ECN=m - CONFIG_IP_NF_TARGET_TTL=m -@@ -183,6 +187,29 @@ CONFIG_IP6_NF_FILTER=m - CONFIG_IP6_NF_TARGET_REJECT=m - CONFIG_IP6_NF_MANGLE=m - CONFIG_IP6_NF_RAW=m -+CONFIG_BRIDGE_NF_EBTABLES=m -+CONFIG_BRIDGE_EBT_BROUTE=m -+CONFIG_BRIDGE_EBT_T_FILTER=m -+CONFIG_BRIDGE_EBT_T_NAT=m -+CONFIG_BRIDGE_EBT_802_3=m -+CONFIG_BRIDGE_EBT_AMONG=m -+CONFIG_BRIDGE_EBT_ARP=m -+CONFIG_BRIDGE_EBT_IP=m -+CONFIG_BRIDGE_EBT_IP6=m -+CONFIG_BRIDGE_EBT_LIMIT=m -+CONFIG_BRIDGE_EBT_MARK=m -+CONFIG_BRIDGE_EBT_PKTTYPE=m -+CONFIG_BRIDGE_EBT_STP=m -+CONFIG_BRIDGE_EBT_VLAN=m -+CONFIG_BRIDGE_EBT_ARPREPLY=m -+CONFIG_BRIDGE_EBT_DNAT=m -+CONFIG_BRIDGE_EBT_MARK_T=m -+CONFIG_BRIDGE_EBT_REDIRECT=m -+CONFIG_BRIDGE_EBT_SNAT=m -+CONFIG_BRIDGE_EBT_LOG=m -+CONFIG_BRIDGE_EBT_ULOG=m -+CONFIG_BRIDGE_EBT_NFLOG=m -+CONFIG_BRIDGE=m - CONFIG_NET_PKTGEN=m - CONFIG_IRDA=m - CONFIG_IRLAN=m -@@ -224,7 +251,6 @@ CONFIG_NET_9P=m - CONFIG_NFC=m - CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y --CONFIG_CONNECTOR=m - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_NBD=m -@@ -238,6 +264,14 @@ CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set - CONFIG_MD=y -+CONFIG_BLK_DEV_DM=m -+CONFIG_DM_CRYPT=m -+CONFIG_DM_SNAPSHOT=m -+CONFIG_DM_MIRROR=m -+CONFIG_DM_RAID=m -+CONFIG_DM_LOG_USERSPACE=m -+CONFIG_DM_ZERO=m -+CONFIG_DM_DELAY=m - CONFIG_NETDEVICES=y - CONFIG_TUN=m - CONFIG_PHYLIB=m -@@ -309,6 +343,7 @@ CONFIG_PPP_ASYNC=m - CONFIG_PPP_SYNC_TTY=m - CONFIG_PPP_DEFLATE=m - CONFIG_PPP_BSDCOMP=m -+CONFIG_PPP_MPPE=m - CONFIG_PPPOE=m - CONFIG_SLIP=m - CONFIG_SLIP_COMPRESSED=y -@@ -720,4 +755,3 @@ CONFIG_CRYPTO_DEFLATE=m - # CONFIG_CRYPTO_HW is not set - CONFIG_CRC_ITU_T=y - CONFIG_LIBCRC32C=y -- --- -1.8.1.5 - - -From a1ca315c56d702ed36111f7b847823049be8da1d Mon Sep 17 00:00:00 2001 +From f4c976470e366c01c2fd172cfeb4d495107002d0 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 17 Jun 2012 00:14:54 +0100 -Subject: [PATCH 044/169] Explicitly set usb host channels to 8, as in the spec +Subject: [PATCH 22/95] Explicitly set usb host channels to 8, as in the spec --- drivers/usb/host/dwc_otg/dwc_otg_core_if.h | 3 ++- @@ -80290,47 +73899,13 @@ index 4a78b03..25aae5e 100644 /** The number of endpoints in addition to EP0 available for device * mode operations. -- -1.8.1.5 +1.8.1.6 -From 858cd10ab148d25ff723bf716648a95bc89f137e Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 17 Jun 2012 15:52:33 +0100 -Subject: [PATCH 045/169] Add hfs/hfsplus modules - ---- - arch/arm/configs/bcmrpi_defconfig | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 7754da0..e964bbe 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -660,6 +660,8 @@ CONFIG_NTFS_FS=m - CONFIG_TMPFS=y - CONFIG_TMPFS_POSIX_ACL=y - CONFIG_CONFIGFS_FS=y -+CONFIG_HFS_FS=m -+CONFIG_HFSPLUS_FS=m - CONFIG_SQUASHFS=m - CONFIG_SQUASHFS_XATTR=y - CONFIG_SQUASHFS_LZO=y -@@ -717,7 +719,6 @@ CONFIG_NLS_ISO8859_14=m - CONFIG_NLS_ISO8859_15=m - CONFIG_NLS_KOI8_R=m - CONFIG_NLS_KOI8_U=m --CONFIG_NLS_UTF8=m - CONFIG_PRINTK_TIME=y - CONFIG_DETECT_HUNG_TASK=y - CONFIG_TIMER_STATS=y --- -1.8.1.5 - - -From e07608e86f4dd1693facfbae785248a29396aa77 Mon Sep 17 00:00:00 2001 +From 2ec0d2172a0b6cf2a459bc9d7c469ae2c6c6f1f9 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 22 Jun 2012 12:55:39 +0100 -Subject: [PATCH 046/169] Fix unintended line swap that cause cause memory leak +Subject: [PATCH 23/95] Fix unintended line swap that cause cause memory leak in USB driver --- @@ -80352,13 +73927,13 @@ index 2a3b689..970b065 100644 /* Higher layer software sets URB status. */ -- -1.8.1.5 +1.8.1.6 -From e909dd845bb8ad26a9d95c0bf5b7c8dbebbc8b49 Mon Sep 17 00:00:00 2001 +From a1146c3f5c1e2cf715d587400f8e71af795de43c Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 22 Jun 2012 12:57:42 +0100 -Subject: [PATCH 047/169] Use ndelay rather than udelay. Thanks lb +Subject: [PATCH 24/95] Use ndelay rather than udelay. Thanks lb --- drivers/mmc/host/sdhci-bcm2708.c | 8 ++++---- @@ -80402,68 +73977,13 @@ index 13abbc9..1d8751c 100644 #endif writel(val, host->ioaddr + reg); -- -1.8.1.5 +1.8.1.6 -From 5ef257429e06982ec36bd94df9d8efc3646900da Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 22 Jun 2012 18:48:00 +0100 -Subject: [PATCH 048/169] Add NFSD. Add some dvb options. Add - CONFIG_LOCALVERSION for cutdown - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 1 + - arch/arm/configs/bcmrpi_defconfig | 5 +++++ - 2 files changed, 6 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index ec5bdc9..bb8cafe 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -1,4 +1,5 @@ - CONFIG_EXPERIMENTAL=y -+CONFIG_LOCALVERSION="-cutdown" - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y - CONFIG_POSIX_MQUEUE=y -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index e964bbe..47f4065 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -386,6 +386,8 @@ CONFIG_BCM2708_WDT=m - # CONFIG_MFD_SUPPORT is not set - CONFIG_MEDIA_SUPPORT=m - CONFIG_VIDEO_DEV=m -+CONFIG_DVB_CORE=m -+CONFIG_MEDIA_ATTACH=y - CONFIG_USB_VIDEO_CLASS=m - CONFIG_USB_M5602=m - CONFIG_USB_STV06XX=m -@@ -440,6 +442,8 @@ CONFIG_USB_DSBR=m - CONFIG_RADIO_SI470X=y - CONFIG_USB_SI470X=m - CONFIG_USB_MR800=m -+CONFIG_SMS_SIANO_MDTV=m -+CONFIG_SMS_USB_DRV=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -@@ -672,6 +676,7 @@ CONFIG_NFS_V3_ACL=y - CONFIG_NFS_V4=y - CONFIG_ROOT_NFS=y - CONFIG_NFS_FSCACHE=y -+CONFIG_NFSD=m - CONFIG_CIFS=m - CONFIG_CIFS_WEAK_PW_HASH=y - CONFIG_CIFS_XATTR=y --- -1.8.1.5 - - -From e09327285e3b03880833a5266302423a8fd7cfd8 Mon Sep 17 00:00:00 2001 +From 86edb5235ecd9e3ba69e3a97a02b40e6376394c0 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Jun 2012 15:54:11 +0100 -Subject: [PATCH 049/169] Fixed issue with some keyboards giving too much data +Subject: [PATCH 25/95] Fixed issue with some keyboards giving too much data resulting in overrun of the input buffer and memory corruption causing an OOPS. We should be checking for the fact that we might get more data than we want. Thanks Naren. @@ -80557,713 +74077,13 @@ index 970b065..05fd421 100644 } -- -1.8.1.5 +1.8.1.6 -From 88d4cad83994c2cacb894e8ce781abcbeb3efbfb Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 30 Jun 2012 11:40:33 +0100 -Subject: [PATCH 050/169] Add 802.1q vlan module - ---- - arch/arm/configs/bcmrpi_defconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 47f4065..ba646b6 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -210,6 +210,8 @@ CONFIG_BRIDGE_EBT_LOG=m - CONFIG_BRIDGE_EBT_ULOG=m - CONFIG_BRIDGE_EBT_NFLOG=m - CONFIG_BRIDGE=m -+CONFIG_VLAN_8021Q=m -+CONFIG_VLAN_8021Q_GVRP=y - CONFIG_NET_PKTGEN=m - CONFIG_IRDA=m - CONFIG_IRLAN=m --- -1.8.1.5 - - -From 87629f9ae600a7f8ddbeff670fcdfaf05320b824 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 30 Jun 2012 11:47:45 +0100 -Subject: [PATCH 051/169] Add interrupt support to gpio driver. Thanks Mrkva - ---- - arch/arm/mach-bcm2708/bcm2708_gpio.c | 264 ++++++++++++++++-------------- - arch/arm/mach-bcm2708/include/mach/gpio.h | 17 +- - arch/arm/mach-bcm2708/include/mach/irqs.h | 8 +- - 3 files changed, 154 insertions(+), 135 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c -index 59df912..7f8a6db 100644 ---- a/arch/arm/mach-bcm2708/bcm2708_gpio.c -+++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -22,7 +23,7 @@ - - #define BCM_GPIO_DRIVER_NAME "bcm2708_gpio" - #define DRIVER_NAME BCM_GPIO_DRIVER_NAME --#define BCM_GPIO_USE_IRQ 0 -+#define BCM_GPIO_USE_IRQ 1 - - #define GPIOFSEL(x) (0x00+(x)*4) - #define GPIOSET(x) (0x1c+(x)*4) -@@ -38,40 +39,35 @@ - #define GPIOUD(x) (0x94+(x)*4) - #define GPIOUDCLK(x) (0x98+(x)*4) - --enum { GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, -- GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, -- GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, -- GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, }; -+enum { GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, -+ GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, -+ GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, -+ GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, -+}; - - /* Each of the two spinlocks protects a different set of hardware - * regiters and data structurs. This decouples the code of the IRQ from - * the GPIO code. This also makes the case of a GPIO routine call from - * the IRQ code simpler. - */ --static DEFINE_SPINLOCK(lock); /* GPIO registers */ --static DEFINE_SPINLOCK(irq_lock); /* IRQ registers */ -- -+static DEFINE_SPINLOCK(lock); /* GPIO registers */ - - struct bcm2708_gpio { -- /* We use a list of bcm2708_gpio structs for each trigger IRQ in the main -- * interrupts controller of the system. We need this to support systems -- * in which more that one bcm2708s are connected to the same IRQ. The ISR -- * interates through this list to find the source of the interrupt. -- */ -- struct list_head list; -- -- void __iomem *base; -- unsigned irq_base; -- struct gpio_chip gc; -+ struct list_head list; -+ void __iomem *base; -+ struct gpio_chip gc; -+ unsigned long rising; -+ unsigned long falling; - }; - --static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, int function) -+static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, -+ int function) - { - struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); - unsigned long flags; - unsigned gpiodir; -- unsigned gpio_bank = offset/10; -- unsigned gpio_field_offset = (offset - 10*gpio_bank) * 3; -+ unsigned gpio_bank = offset / 10; -+ unsigned gpio_field_offset = (offset - 10 * gpio_bank) * 3; - - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set_function %p (%d,%d)\n", gc, offset, function); - if (offset >= ARCH_NR_GPIOS) -@@ -81,7 +77,7 @@ static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, int funct - - gpiodir = readl(gpio->base + GPIOFSEL(gpio_bank)); - gpiodir &= ~(7 << gpio_field_offset); -- gpiodir |= function << gpio_field_offset; -+ gpiodir |= function << gpio_field_offset; - writel(gpiodir, gpio->base + GPIOFSEL(gpio_bank)); - spin_unlock_irqrestore(&lock, flags); - gpiodir = readl(gpio->base + GPIOFSEL(gpio_bank)); -@@ -89,157 +85,177 @@ static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, int funct - return 0; - } - -- - static int bcm2708_gpio_dir_in(struct gpio_chip *gc, unsigned offset) - { - return bcm2708_set_function(gc, offset, GPIO_FSEL_INPUT); - } - - static void bcm2708_gpio_set(struct gpio_chip *gc, unsigned offset, int value); --static int bcm2708_gpio_dir_out(struct gpio_chip *gc, unsigned offset, int value) -+static int bcm2708_gpio_dir_out(struct gpio_chip *gc, unsigned offset, -+ int value) - { - int ret; -- ret = bcm2708_set_function(gc, offset, GPIO_FSEL_OUTPUT); -- if (ret >= 0) -- bcm2708_gpio_set(gc, offset, value); -+ ret = bcm2708_set_function(gc, offset, GPIO_FSEL_OUTPUT); -+ if (ret >= 0) -+ bcm2708_gpio_set(gc, offset, value); - return ret; - } - - static int bcm2708_gpio_get(struct gpio_chip *gc, unsigned offset) - { - struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); -- unsigned gpio_bank = offset/32; -- unsigned gpio_field_offset = (offset - 32*gpio_bank); -- unsigned lev; -+ unsigned gpio_bank = offset / 32; -+ unsigned gpio_field_offset = (offset - 32 * gpio_bank); -+ unsigned lev; - - if (offset >= ARCH_NR_GPIOS) - return 0; -- lev = readl(gpio->base + GPIOLEV(gpio_bank)); -+ lev = readl(gpio->base + GPIOLEV(gpio_bank)); - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_get %p (%d)=%d\n", gc, offset, 0x1 & (lev>>gpio_field_offset)); -- return 0x1 & (lev>>gpio_field_offset); -+ return 0x1 & (lev >> gpio_field_offset); - } - - static void bcm2708_gpio_set(struct gpio_chip *gc, unsigned offset, int value) - { - struct bcm2708_gpio *gpio = container_of(gc, struct bcm2708_gpio, gc); -- unsigned gpio_bank = offset/32; -- unsigned gpio_field_offset = (offset - 32*gpio_bank); -+ unsigned gpio_bank = offset / 32; -+ unsigned gpio_field_offset = (offset - 32 * gpio_bank); - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set %p (%d=%d)\n", gc, offset, value); - if (offset >= ARCH_NR_GPIOS) - return; - if (value) -- writel(1<base + GPIOSET(gpio_bank)); -+ writel(1 << gpio_field_offset, gpio->base + GPIOSET(gpio_bank)); - else -- writel(1<base + GPIOCLR(gpio_bank)); -+ writel(1 << gpio_field_offset, gpio->base + GPIOCLR(gpio_bank)); - } - --/* -+/************************************************************************************************************************* - * bcm2708 GPIO IRQ - */ - - #if BCM_GPIO_USE_IRQ --static void bcm2708_irq_disable(unsigned irq) --{ -- struct bcm2708_gpio *chip = get_irq_chip_data(irq); -- //int offset = irq - gpio->irq_base; -- unsigned long flags; - -- spin_lock_irqsave(&chip->irq_lock, flags); -- // disable gpio interrupts here -- spin_unlock_irqrestore(&chip->irq_lock, flags); --} -+#define IRQ_TO_GPIO(x) irq_to_gpio(x) - --static void bcm2708_irq_enable(unsigned irq) -+static int bcm2708_gpio_to_irq(struct gpio_chip *chip, unsigned gpio) - { -- struct bcm2708_gpio *chip = get_irq_chip_data(irq); -- //int offset = irq - chip->irq_base; -- unsigned long flags; -- -- spin_lock_irqsave(&chip->irq_lock, flags); -- // enable gpio interrupts here -- spin_unlock_irqrestore(&chip->irq_lock, flags); -+ return gpio_to_irq(gpio); - } - --static int bcm2708_irq_type(unsigned irq, unsigned trigger) -+static int bcm2708_gpio_irq_set_type(struct irq_data *d, unsigned type) - { -- struct bcm2708_gpio *chip = get_irq_chip_data(irq); -- int offset = irq - chip->irq_base; -- unsigned long flags; -- unsigned gpio_bank = offset/32; -- unsigned gpio_field_offset = (offset - 32*gpio_bank); -- unsigned gpioren, gpiofen, gpiohen, gpiolen; -+ unsigned irq = d->irq; -+ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); - -- if (offset < 0 || offset >= ARCH_NR_GPIOS) -+ if (type & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) - return -EINVAL; - -- spin_lock_irqsave(&chip->irq_lock, flags); -+ if (type & IRQ_TYPE_EDGE_RISING) { -+ gpio->rising |= (1 << IRQ_TO_GPIO(irq)); -+ } else { -+ gpio->rising &= ~(1 << IRQ_TO_GPIO(irq)); -+ } - -- gpioren = readl(chip->base + GPIOREN(gpio_bank)); -- gpiofen = readl(chip->base + GPIOFEN(gpio_bank)); -- gpiohen = readl(chip->base + GPIOHEN(gpio_bank)); -- gpiolen = readl(chip->base + GPIOLEN(gpio_bank)); -+ if (type & IRQ_TYPE_EDGE_FALLING) { -+ gpio->falling |= (1 << IRQ_TO_GPIO(irq)); -+ } else { -+ gpio->falling &= ~(1 << IRQ_TO_GPIO(irq)); -+ } -+ return 0; -+} - -- if (trigger & (IRQ_TYPE_EDGE_RISING)) -- gpioren |= (1<irq; -+ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); -+ unsigned gn = IRQ_TO_GPIO(irq); -+ unsigned gb = gn / 32; -+ unsigned long rising = readl(gpio->base + GPIOREN(gb)); -+ unsigned long falling = readl(gpio->base + GPIOFEN(gb)); -+ -+ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb)); -+ writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb)); -+} - -- writel(gpioren, chip->base + GPIOREN(gpio_bank)); -- writel(gpiofen, chip->base + GPIOFEN(gpio_bank)); -- writel(gpiohen, chip->base + GPIOHEN(gpio_bank)); -- writel(gpiolen, chip->base + GPIOLEN(gpio_bank)); -+static void bcm2708_gpio_irq_unmask(struct irq_data *d) -+{ -+ unsigned irq = d->irq; -+ struct bcm2708_gpio *gpio = irq_get_chip_data(irq); -+ unsigned gn = IRQ_TO_GPIO(irq); -+ unsigned gb = gn / 32; -+ unsigned long rising = readl(gpio->base + GPIOREN(gb)); -+ unsigned long falling = readl(gpio->base + GPIOFEN(gb)); - -- spin_unlock_irqrestore(&chip->irq_lock, flags); -+ gn = gn % 32; - -- return 0; -+ writel(1 << gn, gpio->base + GPIOEDS(gb)); -+ -+ if (gpio->rising & (1 << gn)) { -+ writel(rising | (1 << gn), gpio->base + GPIOREN(gb)); -+ } else { -+ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb)); -+ } -+ -+ if (gpio->falling & (1 << gn)) { -+ writel(falling | (1 << gn), gpio->base + GPIOFEN(gb)); -+ } else { -+ writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb)); -+ } - } - - static struct irq_chip bcm2708_irqchip = { -- .name = "GPIO", -- .enable = bcm2708_irq_enable, -- .disable = bcm2708_irq_disable, -- .set_type = bcm2708_irq_type, -+ .name = "GPIO", -+ .irq_enable = bcm2708_gpio_irq_unmask, -+ .irq_disable = bcm2708_gpio_irq_mask, -+ .irq_unmask = bcm2708_gpio_irq_unmask, -+ .irq_mask = bcm2708_gpio_irq_mask, -+ .irq_set_type = bcm2708_gpio_irq_set_type, - }; - --static void bcm2708_irq_handler(unsigned irq, struct irq_desc *desc) -+static irqreturn_t bcm2708_gpio_interrupt(int irq, void *dev_id) - { -- struct list_head *chip_list = get_irq_data(irq); -- struct list_head *ptr; -- struct bcm2708_gpio *chip; -- unsigned gpio_bank; -- -- desc->chip->ack(irq); -- list_for_each(ptr, chip_list) { -- unsigned long pending; -- int offset; -- -- chip = list_entry(ptr, struct bcm2708_gpio, list); -- for (gpio_bank = 0; gpio_bank < ARCH_NR_GPIOS/32; gpio_bank++) { -- pending = readl(chip->base + GPIOEDS(gpio_bank)); -- writel(pending, chip->base + GPIOEDS(gpio_bank)); -- -- if (pending == 0) -- continue; -- -- for_each_set_bit(offset, &pending, ARCH_NR_GPIOS) -- generic_handle_irq(gpio_to_irq(offset+32*gpio_bank)); -+ unsigned long edsr; -+ unsigned bank; -+ int i; -+ unsigned gpio; -+ for (bank = 0; bank <= 1; bank++) { -+ edsr = readl(__io_address(GPIO_BASE) + GPIOEDS(bank)); -+ for_each_set_bit(i, &edsr, 32) { -+ gpio = i + bank * 32; -+ generic_handle_irq(gpio_to_irq(gpio)); - } -+ writel(0xffffffff, __io_address(GPIO_BASE) + GPIOEDS(bank)); - } -- desc->chip->unmask(irq); -+ return IRQ_HANDLED; - } --#endif /* #if BCM_GPIO_USE_IRQ */ -+ -+static struct irqaction bcm2708_gpio_irq = { -+ .name = "BCM2708 GPIO catchall handler", -+ .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, -+ .handler = bcm2708_gpio_interrupt, -+}; -+ -+static void bcm2708_gpio_irq_init(struct bcm2708_gpio *ucb) -+{ -+ unsigned irq; -+ -+ ucb->gc.to_irq = bcm2708_gpio_to_irq; -+ -+ for (irq = GPIO_IRQ_START; irq < (GPIO_IRQ_START + GPIO_IRQS); irq++) { -+ irq_set_chip_data(irq, ucb); -+ irq_set_chip(irq, &bcm2708_irqchip); -+ set_irq_flags(irq, IRQF_VALID); -+ } -+ setup_irq(IRQ_GPIO3, &bcm2708_gpio_irq); -+} -+ -+#else -+ -+static void bcm2708_gpio_irq_init(struct bcm2708_gpio *ucb) -+{ -+} -+ -+#endif /* #if BCM_GPIO_USE_IRQ ***************************************************************************************************************** */ - - static int bcm2708_gpio_probe(struct platform_device *dev) - { -@@ -247,7 +263,7 @@ static int bcm2708_gpio_probe(struct platform_device *dev) - struct resource *res; - int err = 0; - -- printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); -+ printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); - - ucb = kzalloc(sizeof(*ucb), GFP_KERNEL); - if (NULL == ucb) { -@@ -260,7 +276,7 @@ static int bcm2708_gpio_probe(struct platform_device *dev) - res = platform_get_resource(dev, IORESOURCE_MEM, 0); - - platform_set_drvdata(dev, ucb); -- ucb->base = __io_address(GPIO_BASE); -+ ucb->base = __io_address(GPIO_BASE); - - ucb->gc.label = "bcm2708_gpio"; - ucb->gc.base = 0; -@@ -273,6 +289,8 @@ static int bcm2708_gpio_probe(struct platform_device *dev) - ucb->gc.set = bcm2708_gpio_set; - ucb->gc.can_sleep = 0; - -+ bcm2708_gpio_irq_init(ucb); -+ - err = gpiochip_add(&ucb->gc); - if (err) - goto err; -@@ -298,11 +316,10 @@ static int bcm2708_gpio_remove(struct platform_device *dev) - } - - static struct platform_driver bcm2708_gpio_driver = { -- .probe = bcm2708_gpio_probe, -- .remove = bcm2708_gpio_remove, -- .driver = { -- .name = "bcm2708_gpio" -- }, -+ .probe = bcm2708_gpio_probe, -+ .remove = bcm2708_gpio_remove, -+ .driver = { -+ .name = "bcm2708_gpio"}, - }; - - static int __init bcm2708_gpio_init(void) -@@ -320,4 +337,3 @@ static void __exit bcm2708_gpio_exit(void) - - MODULE_DESCRIPTION("Broadcom BCM2708 GPIO driver"); - MODULE_LICENSE("GPL"); -- -diff --git a/arch/arm/mach-bcm2708/include/mach/gpio.h b/arch/arm/mach-bcm2708/include/mach/gpio.h -index 526004f..90a7ba2 100644 ---- a/arch/arm/mach-bcm2708/include/mach/gpio.h -+++ b/arch/arm/mach-bcm2708/include/mach/gpio.h -@@ -12,7 +12,8 @@ - #define ARCH_NR_GPIOS 54 // number of gpio lines - - #include -- -+#include -+#include - - #ifdef CONFIG_GPIOLIB - -@@ -31,18 +32,14 @@ static inline int gpio_cansleep(unsigned gpio) - return __gpio_cansleep(gpio); - } - --static inline int gpio_to_irq(unsigned gpio) --{ -- WARN_ON(1); -- return -ENOSYS; --} - --static inline int irq_to_gpio(unsigned int irq) --{ -- WARN_ON(1); -- return -EINVAL; -+static inline unsigned irq_to_gpio(unsigned irq) { -+ return (irq-GPIO_IRQ_START); - } - -+static inline unsigned gpio_to_irq(unsigned gpio) { -+ return GPIO_IRQ_START+gpio; -+} - #endif /* CONFIG_GPIOLIB */ - - #endif -diff --git a/arch/arm/mach-bcm2708/include/mach/irqs.h b/arch/arm/mach-bcm2708/include/mach/irqs.h -index f59d474..e8bb068 100644 ---- a/arch/arm/mach-bcm2708/include/mach/irqs.h -+++ b/arch/arm/mach-bcm2708/include/mach/irqs.h -@@ -185,6 +185,12 @@ - #define FIQ_PENDING1 INT_PENDING1 - #define FIQ_PENDING2 INT_PENDING2 - --#define NR_IRQS (64 + 21) -+#define HARD_IRQS (64 + 21) -+#define GPIO_IRQ_START HARD_IRQS -+ -+#define GPIO_IRQS 32*5 -+ -+#define NR_IRQS HARD_IRQS+GPIO_IRQS -+ - - #endif /* _BCM2708_IRQS_H_ */ --- -1.8.1.5 - - -From c349558b8f4cbd7606060c3b21d2d34eccb83967 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 30 Jun 2012 16:07:18 +0100 -Subject: [PATCH 052/169] Add a pm_power_off function that resets us, and - indicates to bootcode.bin not to reboot us. Should allow a lower power 'off' - state - ---- - arch/arm/mach-bcm2708/bcm2708.c | 14 ++++++++++++++ - arch/arm/mach-bcm2708/include/mach/platform.h | 16 +++++++++++++--- - 2 files changed, 27 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index fa02a1a..17c6dbd 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -53,6 +53,7 @@ - #include - #include - #include -+#include - - #include "bcm2708.h" - #include "armctrl.h" -@@ -472,10 +473,23 @@ int __init bcm_register_device(struct platform_device *pdev) - return ret; - } - -+/* We can't really power off, but if we do the normal reset scheme, and indicate to bootcode.bin not to reboot, then most of the chip will be powered off */ -+static void bcm2708_power_off(void) -+{ -+ /* we set the watchdog hard reset bit here to distinguish this reset from the normal (full) reset. bootcode.bin will not reboot after a hard reset */ -+ uint32_t pm_rsts = readl(IO_ADDRESS(PM_RSTS)); -+ pm_rsts = PM_PASSWORD | (pm_rsts & PM_RSTC_WRCFG_CLR) | PM_RSTS_HADWRH_SET; -+ writel(pm_rsts, IO_ADDRESS(PM_RSTS)); -+ /* continue with normal reset mechanism */ -+ arch_reset(0, ""); -+} -+ - void __init bcm2708_init(void) - { - int i; - -+ pm_power_off = bcm2708_power_off; -+ - for (i = 0; i < ARRAY_SIZE(lookups); i++) - clkdev_add(&lookups[i]); - -diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h -index 5cb1caa..5afa0a7 100644 ---- a/arch/arm/mach-bcm2708/include/mach/platform.h -+++ b/arch/arm/mach-bcm2708/include/mach/platform.h -@@ -191,6 +191,7 @@ - * Watchdog - */ - #define PM_RSTC (PM_BASE+0x1c) -+#define PM_RSTS (PM_BASE+0x20) - #define PM_WDOG (PM_BASE+0x24) - - #define PM_WDOG_RESET 0000000000 -@@ -199,9 +200,18 @@ - #define PM_RSTC_WRCFG_CLR 0xffffffcf - #define PM_RSTC_WRCFG_SET 0x00000030 - #define PM_RSTC_WRCFG_FULL_RESET 0x00000020 --#define PM_RSTC_RESET 0x00000102 -- -- -+#define PM_RSTC_RESET 0x00000102 -+ -+#define PM_RSTS_HADPOR_SET 0x00001000 -+#define PM_RSTS_HADSRH_SET 0x00000400 -+#define PM_RSTS_HADSRF_SET 0x00000200 -+#define PM_RSTS_HADSRQ_SET 0x00000100 -+#define PM_RSTS_HADWRH_SET 0x00000040 -+#define PM_RSTS_HADWRF_SET 0x00000020 -+#define PM_RSTS_HADWRQ_SET 0x00000010 -+#define PM_RSTS_HADDRH_SET 0x00000004 -+#define PM_RSTS_HADDRF_SET 0x00000002 -+#define PM_RSTS_HADDRQ_SET 0x00000001 - - - --- -1.8.1.5 - - -From 36fbc9888c083dbcd046e67a5ba0c0e6c61e068c Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 1 Jul 2012 12:09:52 +0100 -Subject: [PATCH 053/169] Store palette info where GPU can see it, so 8bpp - modes can work. Requires updated start.elf to work properly - ---- - drivers/video/bcm2708_fb.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index 8d67e86..ec01655 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -48,6 +48,7 @@ struct fbinfo_s { - u32 xoffset, yoffset; - u32 base; - u32 screen_size; -+ u16 cmap[256]; - }; - - struct bcm2708_fb { -@@ -266,18 +267,31 @@ static inline u32 convert_bitfield(int val, struct fb_bitfield *bf) - return (val >> (16 - bf->length) & mask) << bf->offset; - } - -+ - static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red, - unsigned int green, unsigned int blue, - unsigned int transp, struct fb_info *info) - { - struct bcm2708_fb *fb = to_bcm2708(info); - -+ /*pr_info("BCM2708FB: setcolreg %d:(%02x,%02x,%02x,%02x) %x\n", regno, red, green, blue, transp, fb->fb.fix.visual);*/ - if (regno < 16) - fb->cmap[regno] = convert_bitfield(transp, &fb->fb.var.transp) | - convert_bitfield(blue, &fb->fb.var.blue) | - convert_bitfield(green, &fb->fb.var.green) | - convert_bitfield(red, &fb->fb.var.red); - -+ if (regno < 256) { -+ /* blue [0:4], green [5:10], red [11:15] */ -+ fb->info->cmap[regno] = ((red >> (16-5)) & 0x1f) << 11 | -+ ((green >> (16-6)) & 0x3f) << 5 | -+ ((blue >> (16-5)) & 0x1f) << 0; -+ } -+ /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */ -+ /* So just call it for what looks like the last colour in a list for now. */ -+ if (regno == 15 || regno == 255) -+ bcm2708_fb_set_par(info); -+ - return regno > 255; - } - --- -1.8.1.5 - - -From 9d04a158d7536b550404edcbcaef33a3c72989f2 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 2 Jul 2012 20:34:38 +0100 -Subject: [PATCH 054/169] Avoid blanking console when not in palettised mode - ---- - drivers/video/bcm2708_fb.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index ec01655..2b23be6 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -275,23 +275,23 @@ static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red, - struct bcm2708_fb *fb = to_bcm2708(info); - - /*pr_info("BCM2708FB: setcolreg %d:(%02x,%02x,%02x,%02x) %x\n", regno, red, green, blue, transp, fb->fb.fix.visual);*/ -- if (regno < 16) -+ if (fb->fb.var.bits_per_pixel <= 8) { -+ if (regno < 256) { -+ /* blue [0:4], green [5:10], red [11:15] */ -+ fb->info->cmap[regno] = ((red >> (16-5)) & 0x1f) << 11 | -+ ((green >> (16-6)) & 0x3f) << 5 | -+ ((blue >> (16-5)) & 0x1f) << 0; -+ } -+ /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */ -+ /* So just call it for what looks like the last colour in a list for now. */ -+ if (regno == 15 || regno == 255) -+ bcm2708_fb_set_par(info); -+ } else if (regno < 16) { - fb->cmap[regno] = convert_bitfield(transp, &fb->fb.var.transp) | - convert_bitfield(blue, &fb->fb.var.blue) | - convert_bitfield(green, &fb->fb.var.green) | - convert_bitfield(red, &fb->fb.var.red); -- -- if (regno < 256) { -- /* blue [0:4], green [5:10], red [11:15] */ -- fb->info->cmap[regno] = ((red >> (16-5)) & 0x1f) << 11 | -- ((green >> (16-6)) & 0x3f) << 5 | -- ((blue >> (16-5)) & 0x1f) << 0; - } -- /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */ -- /* So just call it for what looks like the last colour in a list for now. */ -- if (regno == 15 || regno == 255) -- bcm2708_fb_set_par(info); -- - return regno > 255; - } - --- -1.8.1.5 - - -From 7e9d4a76432550f7db4da0c9205ace9bb57082b7 Mon Sep 17 00:00:00 2001 +From d64807509c4d97befc91c9b5066b7e1cb7b6e78d Mon Sep 17 00:00:00 2001 From: Bryan Kemp Date: Sat, 7 Jul 2012 16:24:07 -0500 -Subject: [PATCH 055/169] Updating dwc_otg driver to fix issue releasing pcm +Subject: [PATCH 26/95] Updating dwc_otg driver to fix issue releasing pcm stream see: https://github.com/raspberrypi/firmware/issues/51 --- @@ -81331,17 +74151,18 @@ index 05fd421..e9f4f31 100644 if (CHK_DEBUG_LEVEL(DBG_HCDV | DBG_HCD_URB)) { DWC_PRINTF("Called usb_hcd_giveback_urb()\n"); -- -1.8.1.5 +1.8.1.6 -From df72c5f41d8a6893891d175d997c2f37f76a3929 Mon Sep 17 00:00:00 2001 -From: Number 27 -Date: Sun, 8 Jul 2012 20:57:25 +0100 -Subject: [PATCH 056/169] Backport of Chris Boot's i2c and spi drivers. +From f6a7f1be06b9dcf9d6c66ab4601ff337cb74274f Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 8 May 2013 11:44:40 +0100 +Subject: [PATCH 27/95] Backport of Chris Boot's i2c and spi drivers. --- - arch/arm/configs/bcmrpi_cutdown_defconfig | 9 + - arch/arm/mach-bcm2708/bcm2708.c | 95 +++- + arch/arm/configs/bcmrpi_cutdown_defconfig | 10 + + arch/arm/configs/bcmrpi_defconfig | 5 + + arch/arm/mach-bcm2708/bcm2708.c | 100 ++++- arch/arm/mach-bcm2708/include/mach/platform.h | 3 + drivers/i2c/busses/Kconfig | 8 + drivers/i2c/busses/Makefile | 1 + @@ -81349,15 +74170,15 @@ Subject: [PATCH 056/169] Backport of Chris Boot's i2c and spi drivers. drivers/spi/Kconfig | 8 + drivers/spi/Makefile | 1 + drivers/spi/spi-bcm2708.c | 594 ++++++++++++++++++++++++++ - 9 files changed, 1113 insertions(+), 2 deletions(-) + 10 files changed, 1124 insertions(+), 2 deletions(-) create mode 100644 drivers/i2c/busses/i2c-bcm2708.c create mode 100644 drivers/spi/spi-bcm2708.c diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index bb8cafe..cc9e1df 100644 +index e519412..a61a915 100644 --- a/arch/arm/configs/bcmrpi_cutdown_defconfig +++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -550,3 +550,12 @@ CONFIG_CRYPTO_DEFLATE=m +@@ -492,3 +492,13 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_HW is not set CONFIG_CRC_ITU_T=y CONFIG_LIBCRC32C=y @@ -81370,9 +74191,25 @@ index bb8cafe..cc9e1df 100644 +CONFIG_SPI=y +CONFIG_SPI_MASTER=y +CONFIG_SPI_BCM2708=m -\ No newline at end of file ++ +diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig +index df947e5..6219df3 100644 +--- a/arch/arm/configs/bcmrpi_defconfig ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -214,6 +214,11 @@ CONFIG_SERIAL_AMBA_PL011=y + CONFIG_SERIAL_AMBA_PL011_CONSOLE=y + # CONFIG_HW_RANDOM is not set + CONFIG_RAW_DRIVER=y ++CONFIG_I2C=y ++CONFIG_I2C_CHARDEV=m ++CONFIG_I2C_BCM2708=m ++CONFIG_SPI=y ++CONFIG_SPI_BCM2708=m + CONFIG_GPIO_SYSFS=y + # CONFIG_HWMON is not set + CONFIG_WATCHDOG=y diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 17c6dbd..a466f44 100644 +index 18f6558..510be0b 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -31,6 +31,7 @@ @@ -81382,8 +74219,8 @@ index 17c6dbd..a466f44 100644 +#include #include - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) -@@ -195,7 +196,6 @@ unsigned long long sched_clock(void) + #include +@@ -196,7 +197,6 @@ static void __init bcm2708_clocksource_init(void) /* warning - the USB needs a clock > 34MHz */ @@ -81391,7 +74228,7 @@ index 17c6dbd..a466f44 100644 static struct clk sdhost_clk = { #ifdef CONFIG_ARCH_BCM2708_CHIPIT .rate = 4000000, /* 4MHz */ -@@ -203,7 +203,6 @@ unsigned long long sched_clock(void) +@@ -204,7 +204,6 @@ static void __init bcm2708_clocksource_init(void) .rate = 250000000, /* 250MHz */ #endif }; @@ -81399,10 +74236,10 @@ index 17c6dbd..a466f44 100644 static struct clk_lookup lookups[] = { { /* UART0 */ -@@ -219,6 +218,15 @@ unsigned long long sched_clock(void) - .dev_id = "bcm2708_mci.0", - .clk = &sdhost_clk, - #endif +@@ -214,6 +213,15 @@ static void __init bcm2708_clocksource_init(void) + { /* USB */ + .dev_id = "bcm2708_usb", + .clk = &osc_clk, + }, { /* SPI */ + .dev_id = "bcm2708_spi.0", + .clk = &sdhost_clk, @@ -81415,8 +74252,8 @@ index 17c6dbd..a466f44 100644 } }; -@@ -461,6 +469,80 @@ struct platform_device bcm2708_powerman_device = { - }, +@@ -432,6 +440,85 @@ struct platform_device bcm2708_powerman_device = { + }, }; +static struct resource bcm2708_spi_resources[] = { @@ -81431,6 +74268,7 @@ index 17c6dbd..a466f44 100644 + } +}; + ++ +static struct platform_device bcm2708_spi_device = { + .name = "bcm2708_spi", + .id = 0, @@ -81438,7 +74276,9 @@ index 17c6dbd..a466f44 100644 + .resource = bcm2708_spi_resources, +}; + ++#ifdef CONFIG_SPI +static struct spi_board_info bcm2708_spi_devices[] = { ++#ifdef CONFIG_SPI_SPIDEV + { + .modalias = "spidev", + .max_speed_hz = 500000, @@ -81452,7 +74292,9 @@ index 17c6dbd..a466f44 100644 + .chip_select = 1, + .mode = SPI_MODE_0, + } ++#endif +}; ++#endif + +static struct resource bcm2708_bsc0_resources[] = { + { @@ -81496,7 +74338,7 @@ index 17c6dbd..a466f44 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -513,6 +595,10 @@ void __init bcm2708_init(void) +@@ -482,6 +569,10 @@ void __init bcm2708_init(void) for (i = 0; i < ARRAY_SIZE(bcm2708_alsa_devices); i++) bcm_register_device(&bcm2708_alsa_devices[i]); @@ -81507,7 +74349,7 @@ index 17c6dbd..a466f44 100644 #ifdef CONFIG_BCM2708_VCMEM { extern void vc_mem_connected_init(void); -@@ -525,6 +611,11 @@ void __init bcm2708_init(void) +@@ -494,6 +585,11 @@ void __init bcm2708_init(void) } system_rev = boardrev; system_serial_low = serial; @@ -81518,9 +74360,9 @@ index 17c6dbd..a466f44 100644 +#endif } - #define TIMER_PERIOD 10000 /* HZ in microsecs */ + static void timer_set_mode(enum clock_event_mode mode, diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h -index 5afa0a7..3085af1 100644 +index 110ce07..4d3c15d 100644 --- a/arch/arm/mach-bcm2708/include/mach/platform.h +++ b/arch/arm/mach-bcm2708/include/mach/platform.h @@ -63,9 +63,12 @@ @@ -81537,12 +74379,12 @@ index 5afa0a7..3085af1 100644 #define MCORE_BASE (BCM2708_PERI_BASE + 0x0000) /* Fake frame buffer device (actually the multicore sync block*/ diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig -index bdca511..62930b7 100644 +index adfee98..f1b55eb 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig -@@ -319,6 +319,14 @@ config I2C_AU1550 - This driver can also be built as a module. If so, the module - will be called i2c-au1550. +@@ -343,6 +343,14 @@ config I2C_BCM2835 + This support is also available as a module. If so, the module + will be called i2c-bcm2835. +config I2C_BCM2708 + tristate "BCM2708 BSC" @@ -81556,20 +74398,20 @@ index bdca511..62930b7 100644 tristate "Blackfin TWI I2C support" depends on BLACKFIN diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile -index 6181f3f..be37179 100644 +index 8f4fc23..ef26c38 100644 --- a/drivers/i2c/busses/Makefile +++ b/drivers/i2c/busses/Makefile -@@ -30,6 +30,7 @@ obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o - # Embedded system I2C/SMBus host controller drivers +@@ -32,6 +32,7 @@ obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o obj-$(CONFIG_I2C_AT91) += i2c-at91.o obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o + obj-$(CONFIG_I2C_BCM2835) += i2c-bcm2835.o +obj-$(CONFIG_I2C_BCM2708) += i2c-bcm2708.o obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o obj-$(CONFIG_I2C_CBUS_GPIO) += i2c-cbus-gpio.o obj-$(CONFIG_I2C_CPM) += i2c-cpm.o diff --git a/drivers/i2c/busses/i2c-bcm2708.c b/drivers/i2c/busses/i2c-bcm2708.c new file mode 100644 -index 0000000..70e8d29 +index 0000000..7cae615 --- /dev/null +++ b/drivers/i2c/busses/i2c-bcm2708.c @@ -0,0 +1,396 @@ @@ -81824,7 +74666,7 @@ index 0000000..70e8d29 + .functionality = bcm2708_i2c_functionality, +}; + -+static int __devinit bcm2708_i2c_probe(struct platform_device *pdev) ++static int bcm2708_i2c_probe(struct platform_device *pdev) +{ + struct resource *regs; + int irq, err = -ENOMEM; @@ -81922,7 +74764,7 @@ index 0000000..70e8d29 + return err; +} + -+static int __devexit bcm2708_i2c_remove(struct platform_device *pdev) ++static int bcm2708_i2c_remove(struct platform_device *pdev) +{ + struct bcm2708_i2c *bi = platform_get_drvdata(pdev); + @@ -81944,7 +74786,7 @@ index 0000000..70e8d29 + .owner = THIS_MODULE, + }, + .probe = bcm2708_i2c_probe, -+ .remove = __devexit_p(bcm2708_i2c_remove), ++ .remove = bcm2708_i2c_remove, +}; + +// module_platform_driver(bcm2708_i2c_driver); @@ -81970,10 +74812,10 @@ index 0000000..70e8d29 +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig -index 2e188e1..67a13f0 100644 +index 2be0de9..4022b4e 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig -@@ -74,6 +74,14 @@ config SPI_ATMEL +@@ -75,6 +75,14 @@ config SPI_ATMEL This selects a driver for the Atmel SPI Controller, present on many AT32 (AVR32) and AT91 (ARM) chips. @@ -81989,7 +74831,7 @@ index 2e188e1..67a13f0 100644 tristate "SPI controller driver for ADI Blackfin5xx" depends on BLACKFIN diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile -index 64e970b..61d0ba2 100644 +index e53c309..0e6b719 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_SPI_ATH79) += spi-ath79.o @@ -82002,7 +74844,7 @@ index 64e970b..61d0ba2 100644 obj-$(CONFIG_SPI_BUTTERFLY) += spi-butterfly.o diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c new file mode 100644 -index 0000000..ef8fef0 +index 0000000..9f1580e --- /dev/null +++ b/drivers/spi/spi-bcm2708.c @@ -0,0 +1,594 @@ @@ -82446,7 +75288,7 @@ index 0000000..ef8fef0 + } +} + -+static int __devinit bcm2708_spi_probe(struct platform_device *pdev) ++static int bcm2708_spi_probe(struct platform_device *pdev) +{ + struct resource *regs; + int irq, err = -ENOMEM; @@ -82548,7 +75390,7 @@ index 0000000..ef8fef0 + return err; +} + -+static int __devexit bcm2708_spi_remove(struct platform_device *pdev) ++static int bcm2708_spi_remove(struct platform_device *pdev) +{ + struct spi_master *master = platform_get_drvdata(pdev); + struct bcm2708_spi *bs = spi_master_get_devdata(master); @@ -82577,7 +75419,7 @@ index 0000000..ef8fef0 + .owner = THIS_MODULE, + }, + .probe = bcm2708_spi_probe, -+ .remove = __devexit_p(bcm2708_spi_remove), ++ .remove = bcm2708_spi_remove, +}; + + @@ -82601,303 +75443,44 @@ index 0000000..ef8fef0 +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); -- -1.8.1.5 +1.8.1.6 -From 076a388df14eb7a926e3c47fb6e263b3cb7ed62e Mon Sep 17 00:00:00 2001 +From 2413e776a3cc5e0e090a758a4f618a7543ccc449 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Wed, 27 Mar 2013 20:27:48 +0000 -Subject: [PATCH 057/169] bcm2708_i2c: Remove dev_init +Date: Thu, 19 Jul 2012 16:00:28 +0100 +Subject: [PATCH 28/95] Add SPI_SPI_DEV module --- - drivers/i2c/busses/i2c-bcm2708.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) + arch/arm/configs/bcmrpi_defconfig | 1 + + 1 file changed, 1 insertion(+) -diff --git a/drivers/i2c/busses/i2c-bcm2708.c b/drivers/i2c/busses/i2c-bcm2708.c -index 70e8d29..7cae615 100644 ---- a/drivers/i2c/busses/i2c-bcm2708.c -+++ b/drivers/i2c/busses/i2c-bcm2708.c -@@ -249,7 +249,7 @@ static u32 bcm2708_i2c_functionality(struct i2c_adapter *adap) - .functionality = bcm2708_i2c_functionality, - }; - --static int __devinit bcm2708_i2c_probe(struct platform_device *pdev) -+static int bcm2708_i2c_probe(struct platform_device *pdev) - { - struct resource *regs; - int irq, err = -ENOMEM; -@@ -347,7 +347,7 @@ static int __devinit bcm2708_i2c_probe(struct platform_device *pdev) - return err; - } - --static int __devexit bcm2708_i2c_remove(struct platform_device *pdev) -+static int bcm2708_i2c_remove(struct platform_device *pdev) - { - struct bcm2708_i2c *bi = platform_get_drvdata(pdev); - -@@ -369,7 +369,7 @@ static int __devexit bcm2708_i2c_remove(struct platform_device *pdev) - .owner = THIS_MODULE, - }, - .probe = bcm2708_i2c_probe, -- .remove = __devexit_p(bcm2708_i2c_remove), -+ .remove = bcm2708_i2c_remove, - }; - - // module_platform_driver(bcm2708_i2c_driver); --- -1.8.1.5 - - -From 546cca7eeb726d7fc6cf0c7b60ce5ba3f2489109 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:29:54 +0000 -Subject: [PATCH 058/169] bcm2708_spi: Remove dev_init - ---- - drivers/spi/spi-bcm2708.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c -index ef8fef0..9f1580e 100644 ---- a/drivers/spi/spi-bcm2708.c -+++ b/drivers/spi/spi-bcm2708.c -@@ -438,7 +438,7 @@ static void bcm2708_spi_cleanup(struct spi_device *spi) - } - } - --static int __devinit bcm2708_spi_probe(struct platform_device *pdev) -+static int bcm2708_spi_probe(struct platform_device *pdev) - { - struct resource *regs; - int irq, err = -ENOMEM; -@@ -540,7 +540,7 @@ static int __devinit bcm2708_spi_probe(struct platform_device *pdev) - return err; - } - --static int __devexit bcm2708_spi_remove(struct platform_device *pdev) -+static int bcm2708_spi_remove(struct platform_device *pdev) - { - struct spi_master *master = platform_get_drvdata(pdev); - struct bcm2708_spi *bs = spi_master_get_devdata(master); -@@ -569,7 +569,7 @@ static int __devexit bcm2708_spi_remove(struct platform_device *pdev) - .owner = THIS_MODULE, - }, - .probe = bcm2708_spi_probe, -- .remove = __devexit_p(bcm2708_spi_remove), -+ .remove = bcm2708_spi_remove, - }; - - --- -1.8.1.5 - - -From 9cc86d4f246bdbe3548049de0c8f864ed0a876ed Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 9 Jul 2012 12:19:26 +0100 -Subject: [PATCH 059/169] Enable I2C and SPI modules in full config - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 9 --------- - arch/arm/configs/bcmrpi_defconfig | 5 +++++ - 2 files changed, 5 insertions(+), 9 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index cc9e1df..bb8cafe 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -550,12 +550,3 @@ CONFIG_CRYPTO_DEFLATE=m - # CONFIG_CRYPTO_HW is not set - CONFIG_CRC_ITU_T=y - CONFIG_LIBCRC32C=y --CONFIG_I2C=y --CONFIG_I2C_BOARDINFO=y --CONFIG_I2C_COMPAT=y --CONFIG_I2C_CHARDEV=m --CONFIG_I2C_HELPER_AUTO=y --CONFIG_I2C_BCM2708=m --CONFIG_SPI=y --CONFIG_SPI_MASTER=y --CONFIG_SPI_BCM2708=m -\ No newline at end of file diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index ba646b6..0820055 100644 +index 6219df3..31f5afaa 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -381,6 +381,11 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - CONFIG_TTY_PRINTK=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y -+CONFIG_I2C=y -+CONFIG_I2C_CHARDEV=m -+CONFIG_I2C_BCM2708=m -+CONFIG_SPI=y -+CONFIG_SPI_BCM2708=m +@@ -219,6 +219,7 @@ CONFIG_I2C_CHARDEV=m + CONFIG_I2C_BCM2708=m + CONFIG_SPI=y + CONFIG_SPI_BCM2708=m ++CONFIG_SPI_SPIDEV=m CONFIG_GPIO_SYSFS=y # CONFIG_HWMON is not set CONFIG_WATCHDOG=y -- -1.8.1.5 +1.8.1.6 -From 14cfc08f5631de8b25ed44f452534906bf3f0d68 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 10 Jul 2012 00:14:48 +0100 -Subject: [PATCH 060/169] Possible fix for failure to boot with compressed - kernels - ---- - arch/arm/mach-bcm2708/bcm2708.c | 2 +- - arch/arm/mach-bcm2708/include/mach/platform.h | 2 +- - arch/arm/mach-bcm2708/include/mach/uncompress.h | 48 +++++++++++++++++++++---- - 3 files changed, 44 insertions(+), 8 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index a466f44..bf9f730 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -183,7 +183,7 @@ unsigned long long sched_clock(void) - * These are fixed clocks. - */ - static struct clk ref24_clk = { -- .rate = 3000000, /* The UART is clocked at 3MHz via APB_CLK */ -+ .rate = UART0_CLOCK, /* The UART is clocked at 3MHz via APB_CLK */ - }; - - static struct clk osc_clk = { -diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h -index 3085af1..5a797ac 100644 ---- a/arch/arm/mach-bcm2708/include/mach/platform.h -+++ b/arch/arm/mach-bcm2708/include/mach/platform.h -@@ -216,7 +216,7 @@ - #define PM_RSTS_HADDRF_SET 0x00000002 - #define PM_RSTS_HADDRQ_SET 0x00000001 - -- -+#define UART0_CLOCK 3000000 - - #endif - -diff --git a/arch/arm/mach-bcm2708/include/mach/uncompress.h b/arch/arm/mach-bcm2708/include/mach/uncompress.h -index 8ad4f5c..5c43412 100644 ---- a/arch/arm/mach-bcm2708/include/mach/uncompress.h -+++ b/arch/arm/mach-bcm2708/include/mach/uncompress.h -@@ -20,30 +20,66 @@ - */ - - #include -+#include - #include - --#define BCM2708_UART_DR __io_address(UART0_BASE + 0x00) --#define BCM2708_UART_FR __io_address(UART0_BASE + 0x18) -+#define UART_BAUD 115200 -+ -+#define BCM2708_UART_DR UART0_BASE + UART01x_DR -+#define BCM2708_UART_FR UART0_BASE + UART01x_FR -+#define BCM2708_UART_IBRD UART0_BASE + UART011_IBRD -+#define BCM2708_UART_FBRD UART0_BASE + UART011_FBRD -+#define BCM2708_UART_LCRH UART0_BASE + UART011_LCRH -+#define BCM2708_UART_CR UART0_BASE + UART011_CR - - /* - * This does not append a newline - */ - static inline void putc(int c) - { -- while (readl(BCM2708_UART_FR) & (1 << 5)) -+ while (__raw_readl(BCM2708_UART_FR) & UART01x_FR_TXFF) - barrier(); - -- writel(c, BCM2708_UART_DR); -+ __raw_writel(c, BCM2708_UART_DR); - } - - static inline void flush(void) - { -- while (readl(BCM2708_UART_FR) & (1 << 3)) -+ int fr; -+ -+ do { -+ fr = __raw_readl(BCM2708_UART_FR); - barrier(); -+ } while ((fr & (UART011_FR_TXFE | UART01x_FR_BUSY)) != UART011_FR_TXFE); -+} -+ -+static inline void arch_decomp_setup(void) -+{ -+ int temp, div, rem, frac; -+ -+ temp = 16 * UART_BAUD; -+ div = UART0_CLOCK / temp; -+ rem = UART0_CLOCK % temp; -+ temp = (8 * rem) / UART_BAUD; -+ frac = (temp >> 1) + (temp & 1); -+ -+ /* Make sure the UART is disabled before we start */ -+ __raw_writel(0, BCM2708_UART_CR); -+ -+ /* Set the baud rate */ -+ __raw_writel(div, BCM2708_UART_IBRD); -+ __raw_writel(frac, BCM2708_UART_FBRD); -+ -+ /* Set the UART to 8n1, FIFO enabled */ -+ __raw_writel(UART01x_LCRH_WLEN_8 | UART01x_LCRH_FEN, BCM2708_UART_LCRH); -+ -+ /* Enable the UART */ -+ __raw_writel(UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_RXE, -+ BCM2708_UART_CR); - } - - /* - * nothing to do - */ --#define arch_decomp_setup() - #define arch_decomp_wdog() -+ --- -1.8.1.5 - - -From bb8b31248b4a8b352335e839196b1ef637e4bcdc Mon Sep 17 00:00:00 2001 -From: chrisw2 -Date: Wed, 11 Jul 2012 00:19:00 +0100 -Subject: [PATCH 061/169] Change to add SCSI tape support as loadable modules - to kernel config after line 264 add these two lines: CONFIG_CHR_DEV_ST=m - CONFIG_CHR_DEV_OSST=m - ---- - arch/arm/configs/bcmrpi_defconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 0820055..211d4ff 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -262,6 +262,8 @@ CONFIG_MISC_DEVICES=y - CONFIG_SCSI=y - # CONFIG_SCSI_PROC_FS is not set - CONFIG_BLK_DEV_SD=y -+CONFIG_CHR_DEV_ST=m -+CONFIG_CHR_DEV_OSST=m - CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set --- -1.8.1.5 - - -From 7f28b3f89708d3f946ded1893f7580d2a9499a2b Mon Sep 17 00:00:00 2001 +From 97ae9d4ff362beb78e4e8beddd2172e89fd9cf3e Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 13 Jul 2012 18:34:18 +0100 -Subject: [PATCH 062/169] Fix for quitting X hang. Interrupted mailbox reads - are not something we can reliably recover from, so down_interruptable is not - a safe call. +Subject: [PATCH 29/95] Fix for quitting X hang. Interrupted mailbox reads are + not something we can reliably recover from, so down_interruptable is not a + safe call. --- arch/arm/mach-bcm2708/vcio.c | 12 ++++-------- - drivers/video/bcm2708_fb.c | 2 +- - 2 files changed, 5 insertions(+), 9 deletions(-) + 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c index 799a0ac..3874051 100644 @@ -82922,34 +75505,14 @@ index 799a0ac..3874051 100644 } return rc; } -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index 2b23be6..f2c55a6 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -221,7 +222,6 @@ static int bcm2708_fb_set_par(struct fb_info *info) - /* inform vc about new framebuffer */ - bcm_mailbox_write(MBOX_CHAN_FB, fb->dma); - -- /* TODO: replace fb driver with vchiq version */ - /* wait for response */ - bcm_mailbox_read(MBOX_CHAN_FB, &val); - -- -1.8.1.5 +1.8.1.6 -From 36f1a6744c11bd634a3e9cb200154e6df01d797c Mon Sep 17 00:00:00 2001 +From 3fb82a6a148cc1c7ba4333ea6efd02b7f218049d Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 17 Jul 2012 00:48:27 +0100 -Subject: [PATCH 063/169] Add sync_after_dma module parameter +Subject: [PATCH 30/95] Add sync_after_dma module parameter --- drivers/mmc/host/sdhci-bcm2708.c | 60 +++++++++++++++++++++------------------- @@ -83063,626 +75626,13 @@ index 1d8751c..1d50cc6 100644 -- -1.8.1.5 +1.8.1.6 -From c82ea826cd43d0f8a84a4f3bcbab26650e426358 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 19 Jul 2012 16:00:28 +0100 -Subject: [PATCH 064/169] Add SPI_SPI_DEV module - ---- - arch/arm/configs/bcmrpi_defconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 211d4ff..d472719 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -388,6 +388,7 @@ CONFIG_I2C_CHARDEV=m - CONFIG_I2C_BCM2708=m - CONFIG_SPI=y - CONFIG_SPI_BCM2708=m -+CONFIG_SPI_SPIDEV=m - CONFIG_GPIO_SYSFS=y - # CONFIG_HWMON is not set - CONFIG_WATCHDOG=y --- -1.8.1.5 - - -From ce15222baa3a8c0fbf861b415fb2918689ee3f12 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 24 Jul 2012 11:11:03 +0100 -Subject: [PATCH 065/169] Fix var.width/var.height. They actually mean display - size. See #65 - ---- - drivers/video/bcm2708_fb.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index f2c55a6..5ca8aca 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -374,8 +374,8 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb) - fb->fb.var.vmode = FB_VMODE_NONINTERLACED; - fb->fb.var.activate = FB_ACTIVATE_NOW; - fb->fb.var.nonstd = 0; -- fb->fb.var.height = fbwidth; -- fb->fb.var.width = fbheight; -+ fb->fb.var.height = -1; /* height of picture in mm */ -+ fb->fb.var.width = -1; /* width of picture in mm */ - fb->fb.var.accel_flags = 0; - - fb->fb.monspecs.hfmin = 0; --- -1.8.1.5 - - -From f67844403b6a8d3a0b3f84d0b3fb51f6b57b8524 Mon Sep 17 00:00:00 2001 -From: Ian Tessier -Date: Wed, 25 Jul 2012 12:22:35 -0400 -Subject: [PATCH 066/169] The TIMER_PERIOD should be calculated using the timer - interrupt frequency. - ---- - arch/arm/mach-bcm2708/bcm2708.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index bf9f730..eff6874 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -618,7 +618,7 @@ void __init bcm2708_init(void) - #endif - } - --#define TIMER_PERIOD 10000 /* HZ in microsecs */ -+#define TIMER_PERIOD DIV_ROUND_CLOSEST(STC_FREQ_HZ, HZ) - - static void timer_set_mode(enum clock_event_mode mode, - struct clock_event_device *clk) --- -1.8.1.5 - - -From f083008c73913d90eb49139137187120c8750217 Mon Sep 17 00:00:00 2001 -From: Alex Bradbury -Date: Wed, 25 Jul 2012 21:39:52 +0100 -Subject: [PATCH 067/169] update bcmrpi_defconfig with various user requests - ---- - arch/arm/configs/bcmrpi_defconfig | 120 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 120 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index d472719..95ef180 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -212,7 +212,62 @@ CONFIG_BRIDGE_EBT_NFLOG=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m - CONFIG_VLAN_8021Q_GVRP=y -+CONFIG_NET_SCHED=y -+CONFIG_NET_SCH_CBQ=m -+CONFIG_NET_SCH_HTB=m -+CONFIG_NET_SCH_HFSC=m -+CONFIG_NET_SCH_PRIO=m -+CONFIG_NET_SCH_MULTIQ=m -+CONFIG_NET_SCH_RED=m -+CONFIG_NET_SCH_SFB=m -+CONFIG_NET_SCH_SFQ=m -+CONFIG_NET_SCH_TEQL=m -+CONFIG_NET_SCH_TBF=m -+CONFIG_NET_SCH_GRED=m -+CONFIG_NET_SCH_DSMARK=m -+CONFIG_NET_SCH_NETEM=m -+CONFIG_NET_SCH_DRR=m -+CONFIG_NET_SCH_MQPRIO=m -+CONFIG_NET_SCH_CHOKE=m -+CONFIG_NET_SCH_QFQ=m -+CONFIG_NET_CLS_BASIC=m -+CONFIG_NET_CLS_TCINDEX=m -+CONFIG_NET_CLS_ROUTE4=m -+CONFIG_NET_CLS_FW=m -+CONFIG_NET_CLS_U32=m -+CONFIG_CLS_U32_MARK=y -+CONFIG_NET_CLS_RSVP=m -+CONFIG_NET_CLS_RSVP6=m -+CONFIG_NET_CLS_FLOW=m -+CONFIG_NET_CLS_CGROUP=m -+CONFIG_NET_EMATCH=y -+CONFIG_NET_EMATCH_CMP=m -+CONFIG_NET_EMATCH_NBYTE=m -+CONFIG_NET_EMATCH_U32=m -+CONFIG_NET_EMATCH_META=m -+CONFIG_NET_EMATCH_TEXT=m -+CONFIG_NET_CLS_ACT=y -+CONFIG_NET_ACT_POLICE=m -+CONFIG_NET_ACT_GACT=m -+CONFIG_GACT_PROB=y -+CONFIG_NET_ACT_MIRRED=m -+CONFIG_NET_ACT_IPT=m -+CONFIG_NET_ACT_NAT=m -+CONFIG_NET_ACT_PEDIT=m -+CONFIG_NET_ACT_SIMP=m -+CONFIG_NET_ACT_SKBEDIT=m -+CONFIG_NET_ACT_CSUM=m - CONFIG_NET_PKTGEN=m -+CONFIG_HAMRADIO=y -+CONFIG_AX25=m -+CONFIG_NETROM=m -+CONFIG_ROSE=m -+CONFIG_MKISS=m -+CONFIG_6PACK=m -+CONFIG_BPQETHER=m -+CONFIG_BAYCOM_SER_FDX=m -+CONFIG_BAYCOM_SER_HDX=m -+CONFIG_YAM=m - CONFIG_IRDA=m - CONFIG_IRLAN=m - CONFIG_IRNET=m -@@ -277,6 +332,8 @@ CONFIG_DM_LOG_USERSPACE=m - CONFIG_DM_ZERO=m - CONFIG_DM_DELAY=m - CONFIG_NETDEVICES=y -+CONFIG_BONDING=m -+CONFIG_MACVLAN=m - CONFIG_TUN=m - CONFIG_PHYLIB=m - CONFIG_MDIO_BITBANG=m -@@ -343,6 +400,8 @@ CONFIG_USB_IPHETH=m - CONFIG_USB_SIERRA_NET=m - CONFIG_USB_VL600=m - CONFIG_PPP=m -+CONFIG_PPP_MULTILINK=y -+CONFIG_PPP_FILTER=y - CONFIG_PPP_ASYNC=m - CONFIG_PPP_SYNC_TTY=m - CONFIG_PPP_DEFLATE=m -@@ -351,6 +410,7 @@ CONFIG_PPP_MPPE=m - CONFIG_PPPOE=m - CONFIG_SLIP=m - CONFIG_SLIP_COMPRESSED=y -+CONFIG_SLIP_SMART=y - CONFIG_NETCONSOLE=m - CONFIG_INPUT_POLLDEV=m - # CONFIG_INPUT_MOUSEDEV_PSAUX is not set -@@ -390,6 +450,20 @@ CONFIG_SPI=y - CONFIG_SPI_BCM2708=m - CONFIG_SPI_SPIDEV=m - CONFIG_GPIO_SYSFS=y -+CONFIG_W1=m -+CONFIG_W1_MASTER_DS2490=m -+CONFIG_W1_MASTER_DS2482=m -+CONFIG_W1_MASTER_DS1WM=m -+CONFIG_W1_MASTER_GPIO=m -+CONFIG_W1_SLAVE_THERM=m -+CONFIG_W1_SLAVE_SMEM=m -+CONFIG_W1_SLAVE_DS2408=m -+CONFIG_W1_SLAVE_DS2423=m -+CONFIG_W1_SLAVE_DS2431=m -+CONFIG_W1_SLAVE_DS2433=m -+CONFIG_W1_SLAVE_DS2760=m -+CONFIG_W1_SLAVE_DS2780=m -+CONFIG_W1_SLAVE_BQ27000=m - # CONFIG_HWMON is not set - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m -@@ -443,7 +517,18 @@ CONFIG_USB_GSPCA_VC032X=m - CONFIG_USB_GSPCA_VICAM=m - CONFIG_USB_GSPCA_XIRLINK_CIT=m - CONFIG_USB_GSPCA_ZC3XX=m -+CONFIG_VIDEO_PVRUSB2=m - CONFIG_VIDEO_HDPVR=m -+CONFIG_VIDEO_EM28XX=m -+CONFIG_VIDEO_EM28XX_ALSA=m -+CONFIG_VIDEO_EM28XX_DVB=m -+CONFIG_VIDEO_TLG2300=m -+CONFIG_VIDEO_CX231XX=m -+CONFIG_VIDEO_CX231XX_ALSA=m -+CONFIG_VIDEO_CX231XX_DVB=m -+CONFIG_VIDEO_USBVISION=m -+CONFIG_USB_ET61X251=m -+CONFIG_USB_SN9C102=m - CONFIG_USB_PWC=m - CONFIG_USB_ZR364XX=m - CONFIG_USB_STKWEBCAM=m -@@ -452,8 +537,41 @@ CONFIG_USB_DSBR=m - CONFIG_RADIO_SI470X=y - CONFIG_USB_SI470X=m - CONFIG_USB_MR800=m -+CONFIG_DVB_USB=m -+CONFIG_DVB_USB_A800=m -+CONFIG_DVB_USB_DIBUSB_MB=m -+CONFIG_DVB_USB_DIBUSB_MC=m -+CONFIG_DVB_USB_DIB0700=m -+CONFIG_DVB_USB_UMT_010=m -+CONFIG_DVB_USB_CXUSB=m -+CONFIG_DVB_USB_M920X=m -+CONFIG_DVB_USB_GL861=m -+CONFIG_DVB_USB_AU6610=m -+CONFIG_DVB_USB_DIGITV=m -+CONFIG_DVB_USB_VP7045=m -+CONFIG_DVB_USB_VP702X=m -+CONFIG_DVB_USB_GP8PSK=m -+CONFIG_DVB_USB_NOVA_T_USB2=m -+CONFIG_DVB_USB_TTUSB2=m -+CONFIG_DVB_USB_DTT200U=m -+CONFIG_DVB_USB_OPERA1=m -+CONFIG_DVB_USB_AF9005=m -+CONFIG_DVB_USB_AF9005_REMOTE=m -+CONFIG_DVB_USB_DW2102=m -+CONFIG_DVB_USB_CINERGY_T2=m -+CONFIG_DVB_USB_ANYSEE=m -+CONFIG_DVB_USB_DTV5100=m -+CONFIG_DVB_USB_AF9015=m -+CONFIG_DVB_USB_CE6230=m -+CONFIG_DVB_USB_FRIIO=m -+CONFIG_DVB_USB_EC168=m -+CONFIG_DVB_USB_AZ6027=m -+CONFIG_DVB_USB_LME2510=m -+CONFIG_DVB_USB_TECHNISAT_USB2=m - CONFIG_SMS_SIANO_MDTV=m - CONFIG_SMS_USB_DRV=m -+CONFIG_DVB_B2C2_FLEXCOP=m -+CONFIG_DVB_B2C2_FLEXCOP_USB=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -@@ -633,6 +751,7 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m -+CONFIG_R8712_AP=y - CONFIG_ZRAM=m - # CONFIG_IOMMU_SUPPORT is not set - CONFIG_EXT4_FS=y -@@ -674,6 +793,7 @@ CONFIG_NTFS_FS=m - CONFIG_TMPFS=y - CONFIG_TMPFS_POSIX_ACL=y - CONFIG_CONFIGFS_FS=y -+CONFIG_ECRYPT_FS=m - CONFIG_HFS_FS=m - CONFIG_HFSPLUS_FS=m - CONFIG_SQUASHFS=m --- -1.8.1.5 - - -From 2f3035b6c555161340ec179de5475080df6334d1 Mon Sep 17 00:00:00 2001 -From: Chris Boot -Date: Mon, 7 May 2012 11:21:15 +0100 -Subject: [PATCH 068/169] mach-bcm2708: fix mach/debug-macro.S so that early - printk works - -Not sure what the original code was trying to do as it was completely -wrong on many levels. This patch fixes the macro to return the correct -physical and virtual addresses of the PL011 UART on the RPi. - -Note that you need to boot the compressed kernel (zImage) so that the -UART is configured at boot, or your kernel will hang when it tries to -access the UART. - -Signed-off-by: Chris Boot ---- - arch/arm/mach-bcm2708/include/mach/debug-macro.S | 12 +++++------- - 1 file changed, 5 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/include/mach/debug-macro.S b/arch/arm/mach-bcm2708/include/mach/debug-macro.S -index 8abbf32..88229d8 100644 ---- a/arch/arm/mach-bcm2708/include/mach/debug-macro.S -+++ b/arch/arm/mach-bcm2708/include/mach/debug-macro.S -@@ -12,13 +12,11 @@ - * - */ - -- .macro addruart, rx, tmp -- mrc p15, 0, \rx, c1, c0 -- tst \rx, #1 @ MMU enabled? -- moveq \rx, #0x08000000 -- movne \rx, #0xf8000000 @ virtual base -- orr \rx, \rx, #0x00200000 -- orr \rx, \rx, #0x00001000 -+#include -+ -+ .macro addruart, rp, rv -+ ldr \rp, =UART0_BASE -+ ldr \rv, =IO_ADDRESS(UART0_BASE) - .endm - - #include --- -1.8.1.5 - - -From 217dce3d6a933a9038b11402c7ed4366cd6b7429 Mon Sep 17 00:00:00 2001 -From: Chris Boot -Date: Tue, 8 May 2012 14:51:16 +0100 -Subject: [PATCH 069/169] bcm2708: update for 3.2 kernel - -Signed-off-by: Chris Boot - -Conflicts: - - arch/arm/Kconfig.debug - arch/arm/mach-bcm2708/include/mach/memory.h ---- - arch/arm/Kconfig | 2 ++ - arch/arm/Kconfig.debug | 8 ++++++++ - arch/arm/mach-bcm2708/bcm2708.c | 23 ++++++++++++++++------- - arch/arm/mach-bcm2708/include/mach/debug-macro.S | 2 +- - arch/arm/mach-bcm2708/include/mach/memory.h | 6 +++--- - 5 files changed, 30 insertions(+), 11 deletions(-) - -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 0b8ca00..46737d0 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -954,6 +954,8 @@ config ARCH_BCM2708 - select CPU_V6 - select ARM_AMBA - select HAVE_CLK -+ select HAVE_SCHED_CLOCK -+ select NEED_MACH_MEMORY_H - select CLKDEV_LOOKUP - select GENERIC_CLOCKEVENTS - select ARM_ERRATA_411920 -diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug -index 661030d..b388520 100644 ---- a/arch/arm/Kconfig.debug -+++ b/arch/arm/Kconfig.debug -@@ -448,6 +448,14 @@ choice - For more details about semihosting, please see - chapter 8 of DUI0203I_rvct_developer_guide.pdf from ARM Ltd. - -+ config DEBUG_BCM2708_UART0 -+ bool "Broadcom BCM2708 UART0 (PL011)" -+ depends on MACH_BCM2708 -+ help -+ Say Y here if you want the debug print routines to direct -+ their output to UART 0. The port must have been initialised -+ by the boot-loader before use. -+ - endchoice - - config DEBUG_IMX6Q_UART_PORT -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index eff6874..71d6d3c 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -23,7 +23,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include -@@ -34,16 +34,13 @@ - #include - - #include --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - #include --#else --#include --#endif - #include - #include - #include - #include - #include -+#include - - #include - #include -@@ -72,6 +69,8 @@ - */ - #define DMA_MASK_BITS_COMMON 32 - -+static DEFINE_CLOCK_DATA(cd); -+ - /* command line parameters */ - static unsigned boardrev, serial; - -@@ -175,8 +174,15 @@ static void __init bcm2708_clocksource_init(void) - - unsigned long long sched_clock(void) - { -- return clocksource_cyc2ns(clocksource_stc.read(&clocksource_stc), -- clocksource_stc.mult, clocksource_stc.shift); -+ u32 cyc = clocksource_stc.read(&clocksource_stc); -+ return cyc_to_fixed_sched_clock(&cd, cyc, clocksource_stc.mask, -+ clocksource_stc.mult, clocksource_stc.shift); -+} -+ -+static void notrace bcm2708_update_sched_clock(void) -+{ -+ u32 cyc = clocksource_stc.read(&clocksource_stc); -+ update_sched_clock(&cd, cyc, clocksource_stc.mask); - } - - /* -@@ -696,6 +702,9 @@ static void __init bcm2708_timer_init(void) - */ - setup_irq(IRQ_TIMER3, &bcm2708_timer_irq); - -+ init_fixed_sched_clock(&cd, bcm2708_update_sched_clock, 32, -+ STC_FREQ_HZ, clocksource_stc.mult, clocksource_stc.shift); -+ - timer0_clockevent.mult = - div_sc(STC_FREQ_HZ, NSEC_PER_SEC, timer0_clockevent.shift); - timer0_clockevent.max_delta_ns = -diff --git a/arch/arm/mach-bcm2708/include/mach/debug-macro.S b/arch/arm/mach-bcm2708/include/mach/debug-macro.S -index 88229d8..2d0dc1c 100644 ---- a/arch/arm/mach-bcm2708/include/mach/debug-macro.S -+++ b/arch/arm/mach-bcm2708/include/mach/debug-macro.S -@@ -14,7 +14,7 @@ - - #include - -- .macro addruart, rp, rv -+ .macro addruart, rp, rv, tmp - ldr \rp, =UART0_BASE - ldr \rv, =IO_ADDRESS(UART0_BASE) - .endm -diff --git a/arch/arm/mach-bcm2708/include/mach/memory.h b/arch/arm/mach-bcm2708/include/mach/memory.h -index e76fb0a..5d47513 100644 ---- a/arch/arm/mach-bcm2708/include/mach/memory.h -+++ b/arch/arm/mach-bcm2708/include/mach/memory.h -@@ -32,8 +32,8 @@ - /* - * Physical DRAM offset. - */ --#define PLAT_PHYS_OFFSET UL(0x00000000) --#define ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ -+#define PLAT_PHYS_OFFSET UL(0x00000000) -+#define VC_ARMMEM_OFFSET UL(0x00000000) /* offset in VC of ARM memory */ - - #ifdef CONFIG_BCM2708_NOL2CACHE - #define _REAL_BUS_OFFSET UL(0xC0000000) /* don't use L1 or L2 caches */ -@@ -48,7 +48,7 @@ - * WARNING: this only works because the ARM is given memory at a fixed location - * (ARMMEM_OFFSET) - */ --#define BUS_OFFSET (ARMMEM_OFFSET + _REAL_BUS_OFFSET) -+#define BUS_OFFSET (VC_ARMMEM_OFFSET + _REAL_BUS_OFFSET) - #define __virt_to_bus(x) ((x) + (BUS_OFFSET - PAGE_OFFSET)) - #define __bus_to_virt(x) ((x) - (BUS_OFFSET - PAGE_OFFSET)) - #define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PLAT_PHYS_OFFSET)) --- -1.8.1.5 - - -From 54d8ac2ef1f9ad8048d74e73ea2874b05dd3fabf Mon Sep 17 00:00:00 2001 -From: Chris Boot -Date: Sun, 15 Jul 2012 16:52:11 +0100 -Subject: [PATCH 070/169] bcm2708: use a constant SC_MULT / SC_SHIFT - -The calculated values somehow don't agree with the sched_clock code and -we end up with warnings like: - -sched_clock: wrong multiply/shift: 2097152000>>21 vs calculated 4194304000>>22 -sched_clock: fix multiply/shift to avoid scheduler hiccups - -So use the constant values much like arch/arm/mach-tegra/timer.c does. - -Signed-off-by: Chris Boot ---- - arch/arm/mach-bcm2708/bcm2708.c | 14 ++++++++++---- - 1 file changed, 10 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 71d6d3c..0efa4d9 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -141,9 +141,16 @@ void __init bcm2708_map_io(void) - iotable_init(bcm2708_io_desc, ARRAY_SIZE(bcm2708_io_desc)); - } - --// The STC is a free running counter that increments at the rate of 1MHz -+/* The STC is a free running counter that increments at the rate of 1MHz */ - #define STC_FREQ_HZ 1000000 - -+/* -+ * Constants generated by clocks_calc_mult_shift(m, s, 1MHz, NSEC_PER_SEC, 60). -+ * This gives a resolution of about 1us and a wrap period of about 1h11min. -+ */ -+#define SC_MULT 4194304000u -+#define SC_SHIFT 22 -+ - static cycle_t stc_read_cycles(struct clocksource *cs) - { - /* STC: a free running counter that increments at the rate of 1MHz */ -@@ -165,7 +172,6 @@ unsigned long frc_clock_ticks32(void) - - static void __init bcm2708_clocksource_init(void) - { -- // calculate .shift and .mult values and register clocksource - if (clocksource_register_hz(&clocksource_stc, STC_FREQ_HZ)) { - printk(KERN_ERR "timer: failed to initialize clock " - "source %s\n", clocksource_stc.name); -@@ -176,7 +182,7 @@ unsigned long long sched_clock(void) - { - u32 cyc = clocksource_stc.read(&clocksource_stc); - return cyc_to_fixed_sched_clock(&cd, cyc, clocksource_stc.mask, -- clocksource_stc.mult, clocksource_stc.shift); -+ SC_MULT, SC_SHIFT); - } - - static void notrace bcm2708_update_sched_clock(void) -@@ -703,7 +709,7 @@ static void __init bcm2708_timer_init(void) - setup_irq(IRQ_TIMER3, &bcm2708_timer_irq); - - init_fixed_sched_clock(&cd, bcm2708_update_sched_clock, 32, -- STC_FREQ_HZ, clocksource_stc.mult, clocksource_stc.shift); -+ STC_FREQ_HZ, SC_MULT, SC_SHIFT); - - timer0_clockevent.mult = - div_sc(STC_FREQ_HZ, NSEC_PER_SEC, timer0_clockevent.shift); --- -1.8.1.5 - - -From 9df5f0011028053f07172f85afff7d0b902d138c Mon Sep 17 00:00:00 2001 -From: Dom Cobley -Date: Tue, 31 Jul 2012 16:42:03 +0100 -Subject: [PATCH 071/169] Sync with bootc's file - ---- - arch/arm/mach-bcm2708/power.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c -index d147bb6..256bf1a 100644 ---- a/arch/arm/mach-bcm2708/power.c -+++ b/arch/arm/mach-bcm2708/power.c -@@ -14,7 +14,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -97,6 +96,7 @@ int bcm_power_request(BCM_POWER_HANDLE_T handle, uint32_t request) - bcm_mailbox_write(MBOX_CHAN_POWER, - global_request << 4); - -+ /* Wait for a response during power-up */ - if (global_request & ~g_state.global_request) { - rc = bcm_mailbox_read(MBOX_CHAN_POWER, - &actual); -@@ -111,14 +111,14 @@ int bcm_power_request(BCM_POWER_HANDLE_T handle, uint32_t request) - - if (rc == 0) { - if (actual != global_request) { -- printk(KERN_INFO -- "%s: Fail: prev global %x, new global %x, actual %x request %x, others_request %x\n", -+ printk(KERN_ERR -+ "%s: prev global %x, new global %x, actual %x, request %x, others_request %x\n", - __func__, - g_state.global_request, - global_request, actual, request, others_request); - /* A failure */ -- // BUG_ON((others_request & actual) -- // != others_request); -+ BUG_ON((others_request & actual) -+ != others_request); - request &= actual; - rc = -EIO; - } --- -1.8.1.5 - - -From 4f5d63e777a26a1cc55f8d4b8b72b4ba09f221ad Mon Sep 17 00:00:00 2001 +From 715e9dc9c5f12fc5fccccdb785c80354722e2477 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Thu, 21 Jun 2012 00:57:59 +0200 -Subject: [PATCH 072/169] sdhci-bcm2708: use extension FIFO to buffer DMA +Subject: [PATCH 31/95] sdhci-bcm2708: use extension FIFO to buffer DMA transfers The additional FIFO might speed up transfers in some cases. @@ -83730,14 +75680,14 @@ index 1d50cc6..882ae42 100644 mmc_hostname(host->mmc), (unsigned long long)iomem->start, host_priv->dma_chan, host_priv->dma_irq); -- -1.8.1.5 +1.8.1.6 -From c580cfa91c4c0563b60918b78bde838e70909a12 Mon Sep 17 00:00:00 2001 -From: Grigori Goronzy -Date: Tue, 31 Jul 2012 23:18:12 +0200 -Subject: [PATCH 073/169] sdhci-bcm2708: use multiblock-type transfers for - single blocks +From 0c5d137e83057b37e17412567ef2d0fd21fb8b1c Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 1 May 2013 20:04:12 +0100 +Subject: [PATCH 32/95] sdhci-bcm2708: use multiblock-type transfers for single + blocks There are issues with both single block reads (missed completion) and writes (data loss in some cases!). Just don't do single block @@ -83750,10 +75700,10 @@ adds a quirk for this and uses it. 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c -index 21056b9..33a284e 100644 +index 5bab73b..8df187c 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c -@@ -1214,7 +1214,7 @@ static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq, +@@ -1295,7 +1295,7 @@ static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq, brq->data.blocks = 1; } @@ -83777,25 +75727,25 @@ index 882ae42..ad44fbe 100644 ret = sdhci_add_host(host); diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h -index 61a10c1..bf36993 100644 +index d6f20cc..860bff9 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h -@@ -258,6 +258,7 @@ struct mmc_host { - #define MMC_CAP2_HC_ERASE_SZ (1 << 9) /* High-capacity erase size */ - #define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10) /* Card-detect signal active high */ - #define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11) /* Write-protect signal active high */ +@@ -280,6 +280,7 @@ struct mmc_host { + #define MMC_CAP2_PACKED_WR (1 << 13) /* Allow packed write */ + #define MMC_CAP2_PACKED_CMD (MMC_CAP2_PACKED_RD | \ + MMC_CAP2_PACKED_WR) +#define MMC_CAP2_FORCE_MULTIBLOCK (1 << 12) /* Always use multiblock transfers */ mmc_pm_flag_t pm_caps; /* supported pm features */ -- -1.8.1.5 +1.8.1.6 -From 71ecb01dca9b071c2434c5439e720b718cb6a21b Mon Sep 17 00:00:00 2001 +From d53faa0d797c999d91ad2ef5df057baae948f87d Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 Aug 2012 19:02:14 +0100 -Subject: [PATCH 074/169] Add module parameter for missing_status quirk. +Subject: [PATCH 33/95] Add module parameter for missing_status quirk. sdhci-bcm2708.missing_status=0 may improve interrupt latency --- @@ -83848,23 +75798,28 @@ index ad44fbe..1ac1e64 100644 -- -1.8.1.5 +1.8.1.6 -From 4cdf63a269526d23fc624b06bf3b2774423dad28 Mon Sep 17 00:00:00 2001 +From 919d96f78e7bd8a62d63fee97a8701dafdc93f64 Mon Sep 17 00:00:00 2001 From: ddv2005 Date: Sun, 5 Aug 2012 10:42:12 -0400 -Subject: [PATCH 075/169] Fix spinlock recursion in sdhci-bcm2708.c +Subject: [PATCH 34/95] Fix spinlock recursion in sdhci-bcm2708.c --- - drivers/mmc/host/sdhci-bcm2708.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) + drivers/mmc/host/sdhci-bcm2708.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index 1ac1e64..349d7ab 100644 +index 1ac1e64..e2eab34 100644 --- a/drivers/mmc/host/sdhci-bcm2708.c +++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -656,7 +656,7 @@ static void schci_bcm2708_dma_go(struct sdhci_host *host) +@@ -652,11 +652,11 @@ static void schci_bcm2708_dma_go(struct sdhci_host *host) + sdhci_bcm2708_platdma_reset(struct sdhci_host *host, struct mmc_data *data) + { + struct sdhci_bcm2708_priv *host_priv = SDHCI_HOST_PRIV(host); +- unsigned long flags; ++// unsigned long flags; BUG_ON(NULL == host); @@ -83882,7 +75837,12 @@ index 1ac1e64..349d7ab 100644 } -@@ -753,7 +753,7 @@ static void sdhci_bcm2708_dma_complete_irq(struct sdhci_host *host, +@@ -749,11 +749,11 @@ static void sdhci_bcm2708_dma_complete_irq(struct sdhci_host *host, + int sg_len; + int sg_ix; + int sg_todo; +- unsigned long flags; ++// unsigned long flags; BUG_ON(NULL == host); @@ -83910,38 +75870,13 @@ index 1ac1e64..349d7ab 100644 static irqreturn_t sdhci_bcm2708_dma_irq(int irq, void *dev_id) -- -1.8.1.5 +1.8.1.6 -From e8207bcb70c33b4c7de68db936c7d87190d6cd04 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 13 Aug 2012 20:16:58 +0100 -Subject: [PATCH 076/169] Enable CONFIG_CRYPTO_XTS - ---- - arch/arm/configs/bcmrpi_defconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 95ef180..7fd437d 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -876,6 +876,7 @@ CONFIG_STRICT_DEVMEM=y - CONFIG_CRYPTO_AUTHENC=m - CONFIG_CRYPTO_SEQIV=m - CONFIG_CRYPTO_CBC=y -+CONFIG_CRYPTO_XTS=m - CONFIG_CRYPTO_HMAC=y - CONFIG_CRYPTO_XCBC=m - CONFIG_CRYPTO_MD5=y --- -1.8.1.5 - - -From 606a90c2531af2910f363a1cda4fe0e0a3a2a728 Mon Sep 17 00:00:00 2001 +From 8e771d01ea375a187fd510f836a4cb83abd74f3d Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 13:34:40 +0000 -Subject: [PATCH 077/169] Update Synopsys USB OTG driver to v2.94a and disable +Subject: [PATCH 35/95] Update Synopsys USB OTG driver to v2.94a and disable CRYPTOLIB --- @@ -116463,7 +108398,7 @@ index f89e878..4a6520f 100644 -#endif /* DWC_HOST_ONLY */ +#endif /* DWC_HOST_ONLY */ diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -index aae78a7..f37e854 100644 +index 6ce0d97..59a1f33 100644 --- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c +++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c @@ -1,8 +1,8 @@ @@ -118624,13 +110559,13 @@ index e8220ad..8dc648b 100644 + #endif -- -1.8.1.5 +1.8.1.6 -From b48ef9a2c68fdbf3a69620216277f6cee9eb79c7 Mon Sep 17 00:00:00 2001 +From bd620a2625e4d0cdf924c8100d14095d59b367ad Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 19 Aug 2012 11:58:01 +0100 -Subject: [PATCH 078/169] Merged in microframe scheduler, currently disabled. +Subject: [PATCH 36/95] Merged in microframe scheduler, currently disabled. Enable with dwc_otg.microframe_schedule=1 --- @@ -119360,355 +111295,13 @@ index 903a902..08c1669 100644 &qh->qh_list_entry); } else { -- -1.8.1.5 +1.8.1.6 -From d3f2c7fd893ea30e015926d689c84e4376261786 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 19 Aug 2012 20:56:11 +0100 -Subject: [PATCH 079/169] Fix for broken GPIO with 3.2 kernel - ---- - arch/arm/mach-bcm2708/bcm2708_gpio.c | 8 ++++---- - arch/arm/mach-bcm2708/include/mach/gpio.h | 5 ++++- - 2 files changed, 8 insertions(+), 5 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c -index 7f8a6db..6c81d9d 100644 ---- a/arch/arm/mach-bcm2708/bcm2708_gpio.c -+++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c -@@ -70,7 +70,7 @@ static int bcm2708_set_function(struct gpio_chip *gc, unsigned offset, - unsigned gpio_field_offset = (offset - 10 * gpio_bank) * 3; - - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set_function %p (%d,%d)\n", gc, offset, function); -- if (offset >= ARCH_NR_GPIOS) -+ if (offset >= BCM_NR_GPIOS) - return -EINVAL; - - spin_lock_irqsave(&lock, flags); -@@ -108,7 +108,7 @@ static int bcm2708_gpio_get(struct gpio_chip *gc, unsigned offset) - unsigned gpio_field_offset = (offset - 32 * gpio_bank); - unsigned lev; - -- if (offset >= ARCH_NR_GPIOS) -+ if (offset >= BCM_NR_GPIOS) - return 0; - lev = readl(gpio->base + GPIOLEV(gpio_bank)); - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_get %p (%d)=%d\n", gc, offset, 0x1 & (lev>>gpio_field_offset)); -@@ -121,7 +121,7 @@ static void bcm2708_gpio_set(struct gpio_chip *gc, unsigned offset, int value) - unsigned gpio_bank = offset / 32; - unsigned gpio_field_offset = (offset - 32 * gpio_bank); - //printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_set %p (%d=%d)\n", gc, offset, value); -- if (offset >= ARCH_NR_GPIOS) -+ if (offset >= BCM_NR_GPIOS) - return; - if (value) - writel(1 << gpio_field_offset, gpio->base + GPIOSET(gpio_bank)); -@@ -280,7 +280,7 @@ static int bcm2708_gpio_probe(struct platform_device *dev) - - ucb->gc.label = "bcm2708_gpio"; - ucb->gc.base = 0; -- ucb->gc.ngpio = ARCH_NR_GPIOS; -+ ucb->gc.ngpio = BCM_NR_GPIOS; - ucb->gc.owner = THIS_MODULE; - - ucb->gc.direction_input = bcm2708_gpio_dir_in; -diff --git a/arch/arm/mach-bcm2708/include/mach/gpio.h b/arch/arm/mach-bcm2708/include/mach/gpio.h -index 90a7ba2..0b82f26 100644 ---- a/arch/arm/mach-bcm2708/include/mach/gpio.h -+++ b/arch/arm/mach-bcm2708/include/mach/gpio.h -@@ -9,7 +9,7 @@ - #ifndef __ASM_ARCH_GPIO_H - #define __ASM_ARCH_GPIO_H - --#define ARCH_NR_GPIOS 54 // number of gpio lines -+#define BCM_NR_GPIOS 54 // number of gpio lines - - #include - #include -@@ -40,6 +40,9 @@ static inline unsigned irq_to_gpio(unsigned irq) { - static inline unsigned gpio_to_irq(unsigned gpio) { - return GPIO_IRQ_START+gpio; - } -+#define gpio_to_irq gpio_to_irq -+ - #endif /* CONFIG_GPIOLIB */ - - #endif -+ --- -1.8.1.5 - - -From 4d201e395ecebab2b050e964b69ba5fffdb40698 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 21 Aug 2012 13:10:02 +0100 -Subject: [PATCH 080/169] Regenerate defconfigs for updated kernel verision, - try 2 - ---- - arch/arm/configs/bcmrpi_cutdown_defconfig | 74 +++++++++++++-------------- - arch/arm/configs/bcmrpi_defconfig | 85 ++++++++++++++----------------- - 2 files changed, 73 insertions(+), 86 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig -index bb8cafe..3b8bd74 100644 ---- a/arch/arm/configs/bcmrpi_cutdown_defconfig -+++ b/arch/arm/configs/bcmrpi_cutdown_defconfig -@@ -3,7 +3,6 @@ CONFIG_LOCALVERSION="-cutdown" - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y - CONFIG_POSIX_MQUEUE=y --CONFIG_TINY_RCU=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_SCHED_AUTOGROUP=y -@@ -100,12 +99,43 @@ CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set - CONFIG_NETDEVICES=y -+CONFIG_NETCONSOLE=m - CONFIG_TUN=m - CONFIG_PHYLIB=m - CONFIG_MDIO_BITBANG=m --CONFIG_NET_ETHERNET=y --# CONFIG_NETDEV_1000 is not set --# CONFIG_NETDEV_10000 is not set -+CONFIG_PPP=m -+CONFIG_PPP_BSDCOMP=m -+CONFIG_PPP_DEFLATE=m -+CONFIG_PPP_ASYNC=m -+CONFIG_PPP_SYNC_TTY=m -+CONFIG_SLIP=m -+CONFIG_SLIP_COMPRESSED=y -+CONFIG_USB_CATC=m -+CONFIG_USB_KAWETH=m -+CONFIG_USB_PEGASUS=m -+CONFIG_USB_RTL8150=m -+CONFIG_USB_USBNET=y -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_DM9601=m -+CONFIG_USB_NET_SMSC75XX=m -+CONFIG_USB_NET_SMSC95XX=y -+CONFIG_USB_NET_GL620A=m -+CONFIG_USB_NET_NET1080=m -+CONFIG_USB_NET_PLUSB=m -+CONFIG_USB_NET_MCS7830=m -+CONFIG_USB_NET_CDC_SUBSET=m -+CONFIG_USB_ALI_M5632=y -+CONFIG_USB_AN2720=y -+CONFIG_USB_KC2190=y -+# CONFIG_USB_NET_ZAURUS is not set -+CONFIG_USB_NET_CX82310_ETH=m -+CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_INT51X1=m -+CONFIG_USB_IPHETH=m -+CONFIG_USB_SIERRA_NET=m -+CONFIG_USB_VL600=m - CONFIG_LIBERTAS_THINFIRM=m - CONFIG_LIBERTAS_THINFIRM_USB=m - CONFIG_AT76C50X_USB=m -@@ -138,40 +168,6 @@ CONFIG_ZD1211RW=m - CONFIG_MWIFIEX=m - CONFIG_MWIFIEX_SDIO=m - CONFIG_WIMAX_I2400M_USB=m --CONFIG_USB_CATC=m --CONFIG_USB_KAWETH=m --CONFIG_USB_PEGASUS=m --CONFIG_USB_RTL8150=m --CONFIG_USB_USBNET=y --CONFIG_USB_NET_AX8817X=m --CONFIG_USB_NET_CDCETHER=m --CONFIG_USB_NET_CDC_EEM=m --CONFIG_USB_NET_DM9601=m --CONFIG_USB_NET_SMSC75XX=m --CONFIG_USB_NET_SMSC95XX=y --CONFIG_USB_NET_GL620A=m --CONFIG_USB_NET_NET1080=m --CONFIG_USB_NET_PLUSB=m --CONFIG_USB_NET_MCS7830=m --CONFIG_USB_NET_CDC_SUBSET=m --CONFIG_USB_ALI_M5632=y --CONFIG_USB_AN2720=y --CONFIG_USB_KC2190=y --# CONFIG_USB_NET_ZAURUS is not set --CONFIG_USB_NET_CX82310_ETH=m --CONFIG_USB_NET_KALMIA=m --CONFIG_USB_NET_INT51X1=m --CONFIG_USB_IPHETH=m --CONFIG_USB_SIERRA_NET=m --CONFIG_USB_VL600=m --CONFIG_PPP=m --CONFIG_PPP_ASYNC=m --CONFIG_PPP_SYNC_TTY=m --CONFIG_PPP_DEFLATE=m --CONFIG_PPP_BSDCOMP=m --CONFIG_SLIP=m --CONFIG_SLIP_COMPRESSED=y --CONFIG_NETCONSOLE=m - CONFIG_INPUT_POLLDEV=m - # CONFIG_INPUT_MOUSEDEV_PSAUX is not set - CONFIG_INPUT_JOYDEV=m -@@ -180,7 +176,6 @@ CONFIG_INPUT_EVDEV=m - # CONFIG_INPUT_MOUSE is not set - CONFIG_INPUT_MISC=y - CONFIG_INPUT_AD714X=m --CONFIG_INPUT_ATI_REMOTE=m - CONFIG_INPUT_ATI_REMOTE2=m - CONFIG_INPUT_KEYSPAN_REMOTE=m - CONFIG_INPUT_POWERMATE=m -@@ -206,7 +201,6 @@ CONFIG_GPIO_SYSFS=y - # CONFIG_HWMON is not set - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m --# CONFIG_MFD_SUPPORT is not set - CONFIG_MEDIA_SUPPORT=m - CONFIG_VIDEO_DEV=m - CONFIG_USB_VIDEO_CLASS=m -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 7fd437d..13c8bbd 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -6,7 +6,6 @@ CONFIG_BSD_PROCESS_ACCT=y - CONFIG_BSD_PROCESS_ACCT_V3=y - CONFIG_FHANDLE=y - CONFIG_AUDIT=y --CONFIG_TINY_RCU=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_CGROUP_FREEZER=y -@@ -334,12 +333,48 @@ CONFIG_DM_DELAY=m - CONFIG_NETDEVICES=y - CONFIG_BONDING=m - CONFIG_MACVLAN=m -+CONFIG_NETCONSOLE=m - CONFIG_TUN=m - CONFIG_PHYLIB=m - CONFIG_MDIO_BITBANG=m --CONFIG_NET_ETHERNET=y --# CONFIG_NETDEV_1000 is not set --# CONFIG_NETDEV_10000 is not set -+CONFIG_PPP=m -+CONFIG_PPP_BSDCOMP=m -+CONFIG_PPP_DEFLATE=m -+CONFIG_PPP_FILTER=y -+CONFIG_PPP_MPPE=m -+CONFIG_PPP_MULTILINK=y -+CONFIG_PPPOE=m -+CONFIG_PPP_ASYNC=m -+CONFIG_PPP_SYNC_TTY=m -+CONFIG_SLIP=m -+CONFIG_SLIP_COMPRESSED=y -+CONFIG_SLIP_SMART=y -+CONFIG_USB_CATC=m -+CONFIG_USB_KAWETH=m -+CONFIG_USB_PEGASUS=m -+CONFIG_USB_RTL8150=m -+CONFIG_USB_USBNET=y -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_DM9601=m -+CONFIG_USB_NET_SMSC75XX=m -+CONFIG_USB_NET_SMSC95XX=y -+CONFIG_USB_NET_GL620A=m -+CONFIG_USB_NET_NET1080=m -+CONFIG_USB_NET_PLUSB=m -+CONFIG_USB_NET_MCS7830=m -+CONFIG_USB_NET_CDC_SUBSET=m -+CONFIG_USB_ALI_M5632=y -+CONFIG_USB_AN2720=y -+CONFIG_USB_KC2190=y -+# CONFIG_USB_NET_ZAURUS is not set -+CONFIG_USB_NET_CX82310_ETH=m -+CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_INT51X1=m -+CONFIG_USB_IPHETH=m -+CONFIG_USB_SIERRA_NET=m -+CONFIG_USB_VL600=m - CONFIG_LIBERTAS_THINFIRM=m - CONFIG_LIBERTAS_THINFIRM_USB=m - CONFIG_AT76C50X_USB=m -@@ -373,45 +408,6 @@ CONFIG_ZD1211RW=m - CONFIG_MWIFIEX=m - CONFIG_MWIFIEX_SDIO=m - CONFIG_WIMAX_I2400M_USB=m --CONFIG_USB_CATC=m --CONFIG_USB_KAWETH=m --CONFIG_USB_PEGASUS=m --CONFIG_USB_RTL8150=m --CONFIG_USB_USBNET=y --CONFIG_USB_NET_AX8817X=m --CONFIG_USB_NET_CDCETHER=m --CONFIG_USB_NET_CDC_EEM=m --CONFIG_USB_NET_DM9601=m --CONFIG_USB_NET_SMSC75XX=m --CONFIG_USB_NET_SMSC95XX=y --CONFIG_USB_NET_GL620A=m --CONFIG_USB_NET_NET1080=m --CONFIG_USB_NET_PLUSB=m --CONFIG_USB_NET_MCS7830=m --CONFIG_USB_NET_CDC_SUBSET=m --CONFIG_USB_ALI_M5632=y --CONFIG_USB_AN2720=y --CONFIG_USB_KC2190=y --# CONFIG_USB_NET_ZAURUS is not set --CONFIG_USB_NET_CX82310_ETH=m --CONFIG_USB_NET_KALMIA=m --CONFIG_USB_NET_INT51X1=m --CONFIG_USB_IPHETH=m --CONFIG_USB_SIERRA_NET=m --CONFIG_USB_VL600=m --CONFIG_PPP=m --CONFIG_PPP_MULTILINK=y --CONFIG_PPP_FILTER=y --CONFIG_PPP_ASYNC=m --CONFIG_PPP_SYNC_TTY=m --CONFIG_PPP_DEFLATE=m --CONFIG_PPP_BSDCOMP=m --CONFIG_PPP_MPPE=m --CONFIG_PPPOE=m --CONFIG_SLIP=m --CONFIG_SLIP_COMPRESSED=y --CONFIG_SLIP_SMART=y --CONFIG_NETCONSOLE=m - CONFIG_INPUT_POLLDEV=m - # CONFIG_INPUT_MOUSEDEV_PSAUX is not set - CONFIG_INPUT_JOYDEV=m -@@ -420,7 +416,6 @@ CONFIG_INPUT_EVDEV=m - # CONFIG_INPUT_MOUSE is not set - CONFIG_INPUT_MISC=y - CONFIG_INPUT_AD714X=m --CONFIG_INPUT_ATI_REMOTE=m - CONFIG_INPUT_ATI_REMOTE2=m - CONFIG_INPUT_KEYSPAN_REMOTE=m - CONFIG_INPUT_POWERMATE=m -@@ -467,7 +462,6 @@ CONFIG_W1_SLAVE_BQ27000=m - # CONFIG_HWMON is not set - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m --# CONFIG_MFD_SUPPORT is not set - CONFIG_MEDIA_SUPPORT=m - CONFIG_VIDEO_DEV=m - CONFIG_DVB_CORE=m -@@ -751,7 +745,6 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m --CONFIG_R8712_AP=y - CONFIG_ZRAM=m - # CONFIG_IOMMU_SUPPORT is not set - CONFIG_EXT4_FS=y --- -1.8.1.5 - - -From 116726745a578e384c4cd5e9394df2f1bfcb1ad6 Mon Sep 17 00:00:00 2001 +From b0b228f4abd55993e03e6a1b56431bdc57f93c93 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 21 Aug 2012 18:49:44 +0100 -Subject: [PATCH 081/169] Read memory size for vc_mem through mailbox property +Subject: [PATCH 37/95] Read memory size for vc_mem through mailbox property channel --- @@ -119876,14 +111469,14 @@ index 67c10ee..775c213 100644 /**************************************************************************** -- -1.8.1.5 +1.8.1.6 -From 15c7d2f2d3f07dc5b24f57e4adf17b7122828713 Mon Sep 17 00:00:00 2001 +From 4a3b8b15bf9c309dc66b63faec89aef2dd55f48b Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 22 Aug 2012 12:43:36 +0100 -Subject: [PATCH 082/169] Update to dwc_otg 3.00. Seems to be a very minor - update (mostly adding support for a newer version of hardware) +Subject: [PATCH 38/95] Update to dwc_otg 3.00. Seems to be a very minor update + (mostly adding support for a newer version of hardware) --- drivers/usb/host/dwc_otg/doc/doxygen.cfg | 2 +- @@ -122250,7 +113843,7 @@ index 4a6520f..27061d3 100644 } else DWC_PRINTF("INTERRUPT Handler not implemented for %s\n", diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -index f37e854..9289fc0 100644 +index 59a1f33..903e670 100644 --- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c +++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c @@ -1,8 +1,8 @@ @@ -122331,35 +113924,21 @@ index 8dc648b..0572642 100644 unsigned prt_clk_sel:2; unsigned port_power:1; -- -1.8.1.5 +1.8.1.6 -From 5afa7dfd9508d991a3340157e375e28690b450d1 Mon Sep 17 00:00:00 2001 -From: Frank Buss -Date: Thu, 23 Aug 2012 02:42:34 +0200 -Subject: [PATCH 083/169] enabling the realtime clock 1-wire chip DS1307 and +From caaf0b3cf7f2dc22ea6d5bcc775e05406a1e63dc Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 8 May 2013 11:46:50 +0100 +Subject: [PATCH 39/95] enabling the realtime clock 1-wire chip DS1307 and 1-wire on GPIO4 (as a module) --- - arch/arm/configs/bcmrpi_defconfig | 2 ++ - arch/arm/mach-bcm2708/bcm2708.c | 20 ++++++++++++++++++++ - 2 files changed, 22 insertions(+) + arch/arm/mach-bcm2708/bcm2708.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 13c8bbd..20cb4ce 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -738,6 +738,8 @@ CONFIG_LEDS_GPIO=y - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m - CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -+CONFIG_RTC_CLASS=y -+CONFIG_RTC_DRV_DS1307=m - CONFIG_UIO=m - CONFIG_UIO_PDRV=m - CONFIG_UIO_PDRV_GENIRQ=m diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 0efa4d9..c9ef82a 100644 +index 510be0b..d61e747 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -32,6 +32,7 @@ @@ -122370,19 +113949,19 @@ index 0efa4d9..c9ef82a 100644 #include #include -@@ -69,6 +70,9 @@ +@@ -71,6 +72,9 @@ */ #define DMA_MASK_BITS_COMMON 32 +// use GPIO 4 for the one-wire GPIO pin, if enabled +#define W1_GPIO 4 + - static DEFINE_CLOCK_DATA(cd); - /* command line parameters */ -@@ -291,6 +295,19 @@ static void notrace bcm2708_update_sched_clock(void) + static unsigned boardrev, serial; + +@@ -249,6 +253,19 @@ static void __init bcm2708_clocksource_init(void) + .num_resources = ARRAY_SIZE(bcm2708_dmaman_resources), }; - #endif /* CONFIG_MMC_BCM2708 */ +#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE) +static struct w1_gpio_platform_data w1_gpio_pdata = { @@ -122400,7 +113979,7 @@ index 0efa4d9..c9ef82a 100644 static u64 fb_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); static struct platform_device bcm2708_fb_device = { -@@ -592,6 +609,9 @@ void __init bcm2708_init(void) +@@ -556,6 +573,9 @@ void __init bcm2708_init(void) #ifdef CONFIG_BCM2708_GPIO bcm_register_device(&bcm2708_gpio_device); #endif @@ -122408,65 +113987,16 @@ index 0efa4d9..c9ef82a 100644 + platform_device_register(&w1_device); +#endif bcm_register_device(&bcm2708_systemtimer_device); - #ifdef CONFIG_MMC_BCM2708 - bcm_register_device(&bcm2708_mci_device); + bcm_register_device(&bcm2708_fb_device); + bcm_register_device(&bcm2708_usb_device); -- -1.8.1.5 +1.8.1.6 -From 172086e6c4a22ad950b260b2d1ded5878cefb559 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 24 Aug 2012 23:21:20 +0100 -Subject: [PATCH 084/169] Switch of tracing options in kernel. Costs 20% in - iperf speed, and 10% in xbmc framerate - ---- - arch/arm/configs/bcmrpi_defconfig | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 20cb4ce..b740a7a 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -15,6 +15,7 @@ CONFIG_RESOURCE_COUNTERS=y - CONFIG_BLK_CGROUP=y - CONFIG_NAMESPACES=y - CONFIG_SCHED_AUTOGROUP=y -+CONFIG_RELAY=y - CONFIG_EMBEDDED=y - # CONFIG_COMPAT_BRK is not set - CONFIG_SLAB=y -@@ -850,6 +851,7 @@ CONFIG_NLS_ISO8859_15=m - CONFIG_NLS_KOI8_R=m - CONFIG_NLS_KOI8_U=m - CONFIG_PRINTK_TIME=y -+CONFIG_DEBUG_FS=y - CONFIG_DETECT_HUNG_TASK=y - CONFIG_TIMER_STATS=y - # CONFIG_DEBUG_PREEMPT is not set -@@ -857,13 +859,7 @@ CONFIG_DEBUG_MEMORY_INIT=y - CONFIG_BOOT_PRINTK_DELAY=y - CONFIG_LATENCYTOP=y - CONFIG_SYSCTL_SYSCALL_CHECK=y --# CONFIG_EVENT_POWER_TRACING_DEPRECATED is not set --CONFIG_IRQSOFF_TRACER=y --CONFIG_PREEMPT_TRACER=y --CONFIG_SCHED_TRACER=y --CONFIG_STACK_TRACER=y --CONFIG_BLK_DEV_IO_TRACE=y --CONFIG_FUNCTION_PROFILER=y -+# CONFIG_KPROBE_EVENT is not set - CONFIG_KGDB=y - CONFIG_KGDB_KDB=y - CONFIG_KDB_KEYBOARD=y --- -1.8.1.5 - - -From 4d82173043938f831b31e9f1552cc4a33cad71c7 Mon Sep 17 00:00:00 2001 +From d66cb6a6d2487d01bdfd744531af3da8181c8006 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 24 Aug 2012 23:25:13 +0100 -Subject: [PATCH 085/169] Turn on microframe_schedule by default. Can still be +Subject: [PATCH 40/95] Turn on microframe_schedule by default. Can still be disabled on command line --- @@ -122487,24 +114017,24 @@ index 8ddc9ae..e7f99e1 100644 static const char dwc_driver_name[] = "dwc_otg"; -- -1.8.1.5 +1.8.1.6 -From 41d6dacda80bab581aa4f86b13e42eb4959c9979 Mon Sep 17 00:00:00 2001 +From 9a1ed9ad7559a9fff4fdba6ad19b3aa78995dc82 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 26 Mar 2013 19:04:05 +0000 -Subject: [PATCH 086/169] Add low-latency mode to sdcard driver. Enable with +Date: Wed, 1 May 2013 20:53:06 +0100 +Subject: [PATCH 41/95] Add low-latency mode to sdcard driver. Enable with sdhci-bcm2708.enable_llm=1. Thanks ddv2005. --- drivers/mmc/host/sdhci-bcm2708.c | 17 +++-- - drivers/mmc/host/sdhci.c | 149 ++++++++++++++++++++++++++++++--------- + drivers/mmc/host/sdhci.c | 155 +++++++++++++++++++++++++++++---------- drivers/mmc/host/sdhci.h | 6 ++ include/linux/mmc/sdhci.h | 1 + - 4 files changed, 132 insertions(+), 41 deletions(-) + 4 files changed, 135 insertions(+), 44 deletions(-) diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index 349d7ab..d0af30a 100644 +index e2eab34..d0acde7 100644 --- a/drivers/mmc/host/sdhci-bcm2708.c +++ b/drivers/mmc/host/sdhci-bcm2708.c @@ -140,6 +140,7 @@ static inline unsigned long int since_ns(hptime_t t) @@ -122584,10 +114114,10 @@ index 349d7ab..d0af30a 100644 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index 728ef5a..791d6dd 100644 +index 79f9efd..8da17c0 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c -@@ -123,6 +123,79 @@ static void sdhci_dumpregs(struct sdhci_host *host) +@@ -124,6 +124,79 @@ static void sdhci_dumpregs(struct sdhci_host *host) * Low level functions * * * \*****************************************************************************/ @@ -122667,7 +114197,7 @@ index 728ef5a..791d6dd 100644 static void sdhci_clear_set_irqs(struct sdhci_host *host, u32 clear, u32 set) { -@@ -207,7 +280,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask) +@@ -208,7 +281,9 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask) return; } timeout--; @@ -122677,7 +114207,7 @@ index 728ef5a..791d6dd 100644 } if (host->ops->platform_reset_exit) -@@ -288,7 +363,7 @@ static void sdhci_led_control(struct led_classdev *led, +@@ -289,7 +364,7 @@ static void sdhci_led_control(struct led_classdev *led, struct sdhci_host *host = container_of(led, struct sdhci_host, led); unsigned long flags; @@ -122686,7 +114216,7 @@ index 728ef5a..791d6dd 100644 if (host->runtime_suspended) goto out; -@@ -298,7 +373,7 @@ static void sdhci_led_control(struct led_classdev *led, +@@ -299,7 +374,7 @@ static void sdhci_led_control(struct led_classdev *led, else sdhci_activate_led(host); out: @@ -122695,7 +114225,7 @@ index 728ef5a..791d6dd 100644 } #endif -@@ -1006,7 +1081,9 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) +@@ -1007,7 +1082,9 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) return; } timeout--; @@ -122705,7 +114235,7 @@ index 728ef5a..791d6dd 100644 } DBG("send cmd %d - wait 0x%X irq 0x%x\n", cmd->opcode, mask, sdhci_readl(host, SDHCI_INT_STATUS)); -@@ -1193,7 +1270,9 @@ static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock) +@@ -1234,7 +1311,9 @@ static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock) return; } timeout--; @@ -122715,7 +114245,7 @@ index 728ef5a..791d6dd 100644 } clk |= SDHCI_CLOCK_CARD_EN; -@@ -1309,7 +1388,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) +@@ -1359,7 +1438,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) sdhci_runtime_pm_get(host); @@ -122724,7 +114254,7 @@ index 728ef5a..791d6dd 100644 WARN_ON(host->mrq != NULL); -@@ -1364,9 +1443,9 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) +@@ -1417,9 +1496,9 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) mmc->card->type == MMC_TYPE_MMC ? MMC_SEND_TUNING_BLOCK_HS200 : MMC_SEND_TUNING_BLOCK; @@ -122736,7 +114266,7 @@ index 728ef5a..791d6dd 100644 /* Restore original mmc_request structure */ host->mrq = mrq; -@@ -1380,7 +1459,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) +@@ -1433,7 +1512,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) } mmiowb(); @@ -122745,7 +114275,7 @@ index 728ef5a..791d6dd 100644 } static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) -@@ -1390,7 +1469,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +@@ -1443,10 +1522,10 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) u8 ctrl; int rc; @@ -122753,8 +114283,24 @@ index 728ef5a..791d6dd 100644 + sdhci_spin_lock_irqsave(host, &flags); if (host->flags & SDHCI_DEVICE_DEAD) { - spin_unlock_irqrestore(&host->lock, flags); -@@ -1548,7 +1627,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +- spin_unlock_irqrestore(&host->lock, flags); ++ sdhci_spin_unlock_irqrestore(host, flags); + if (host->vmmc && ios->power_mode == MMC_POWER_OFF) + mmc_regulator_set_ocr(host->mmc, host->vmmc, 0); + return; +@@ -1473,9 +1552,9 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) + vdd_bit = sdhci_set_power(host, ios->vdd); + + if (host->vmmc && vdd_bit != -1) { +- spin_unlock_irqrestore(&host->lock, flags); ++ sdhci_spin_unlock_irqrestore(host, flags); + mmc_regulator_set_ocr(host->mmc, host->vmmc, vdd_bit); +- spin_lock_irqsave(&host->lock, flags); ++ sdhci_spin_lock_irqsave(host, &flags); + } + + if (host->ops->platform_send_init_74_clocks) +@@ -1614,7 +1693,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); mmiowb(); @@ -122763,7 +114309,7 @@ index 728ef5a..791d6dd 100644 if (ios->power_mode == MMC_POWER_OFF) { do -@@ -1571,7 +1650,7 @@ static int sdhci_check_ro(struct sdhci_host *host) +@@ -1637,7 +1716,7 @@ static int sdhci_check_ro(struct sdhci_host *host) unsigned long flags; int is_readonly; @@ -122772,7 +114318,7 @@ index 728ef5a..791d6dd 100644 if (host->flags & SDHCI_DEVICE_DEAD) is_readonly = 0; -@@ -1581,7 +1660,7 @@ static int sdhci_check_ro(struct sdhci_host *host) +@@ -1647,7 +1726,7 @@ static int sdhci_check_ro(struct sdhci_host *host) is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_WRITE_PROTECT); @@ -122781,7 +114327,7 @@ index 728ef5a..791d6dd 100644 /* This quirk needs to be replaced by a callback-function later */ return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ? -@@ -1654,9 +1733,9 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) +@@ -1720,9 +1799,9 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) struct sdhci_host *host = mmc_priv(mmc); unsigned long flags; @@ -122792,26 +114338,8 @@ index 728ef5a..791d6dd 100644 + sdhci_spin_unlock_irqrestore(host, flags); } - static int sdhci_do_3_3v_signal_voltage_switch(struct sdhci_host *host, -@@ -2015,7 +2094,7 @@ static void sdhci_do_enable_preset_value(struct sdhci_host *host, bool enable) - if (host->version < SDHCI_SPEC_300) - return; - -- spin_lock_irqsave(&host->lock, flags); -+ sdhci_spin_lock_irqsave(host, &flags); - - ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); - -@@ -2033,7 +2112,7 @@ static void sdhci_do_enable_preset_value(struct sdhci_host *host, bool enable) - host->flags &= ~SDHCI_PV_ENABLED; - } - -- spin_unlock_irqrestore(&host->lock, flags); -+ sdhci_spin_unlock_irqrestore(host, flags); - } - - static void sdhci_enable_preset_value(struct mmc_host *mmc, bool enable) -@@ -2050,7 +2129,7 @@ static void sdhci_card_event(struct mmc_host *mmc) + static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, +@@ -2066,7 +2145,7 @@ static void sdhci_card_event(struct mmc_host *mmc) struct sdhci_host *host = mmc_priv(mmc); unsigned long flags; @@ -122820,7 +114348,7 @@ index 728ef5a..791d6dd 100644 /* Check host->mrq first in case we are runtime suspended */ if (host->mrq && -@@ -2067,7 +2146,7 @@ static void sdhci_card_event(struct mmc_host *mmc) +@@ -2083,7 +2162,7 @@ static void sdhci_card_event(struct mmc_host *mmc) tasklet_schedule(&host->finish_tasklet); } @@ -122829,7 +114357,7 @@ index 728ef5a..791d6dd 100644 } static const struct mmc_host_ops sdhci_ops = { -@@ -2105,14 +2184,14 @@ static void sdhci_tasklet_finish(unsigned long param) +@@ -2121,14 +2200,14 @@ static void sdhci_tasklet_finish(unsigned long param) host = (struct sdhci_host*)param; @@ -122846,7 +114374,7 @@ index 728ef5a..791d6dd 100644 return; } -@@ -2155,7 +2234,7 @@ static void sdhci_tasklet_finish(unsigned long param) +@@ -2166,7 +2245,7 @@ static void sdhci_tasklet_finish(unsigned long param) #endif mmiowb(); @@ -122855,7 +114383,7 @@ index 728ef5a..791d6dd 100644 mmc_request_done(host->mmc, mrq); sdhci_runtime_pm_put(host); -@@ -2168,7 +2247,7 @@ static void sdhci_timeout_timer(unsigned long data) +@@ -2179,7 +2258,7 @@ static void sdhci_timeout_timer(unsigned long data) host = (struct sdhci_host*)data; @@ -122864,7 +114392,7 @@ index 728ef5a..791d6dd 100644 if (host->mrq) { pr_err("%s: Timeout waiting for hardware " -@@ -2189,7 +2268,7 @@ static void sdhci_timeout_timer(unsigned long data) +@@ -2200,7 +2279,7 @@ static void sdhci_timeout_timer(unsigned long data) } mmiowb(); @@ -122873,7 +114401,7 @@ index 728ef5a..791d6dd 100644 } static void sdhci_tuning_timer(unsigned long data) -@@ -2199,11 +2278,11 @@ static void sdhci_tuning_timer(unsigned long data) +@@ -2210,11 +2289,11 @@ static void sdhci_tuning_timer(unsigned long data) host = (struct sdhci_host *)data; @@ -122887,7 +114415,7 @@ index 728ef5a..791d6dd 100644 } /*****************************************************************************\ -@@ -2427,10 +2506,10 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) +@@ -2438,10 +2517,10 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) u32 intmask, unexpected = 0; int cardint = 0, max_loops = 16; @@ -122900,7 +114428,7 @@ index 728ef5a..791d6dd 100644 pr_warning("%s: got irq while runtime suspended\n", mmc_hostname(host->mmc)); return IRQ_HANDLED; -@@ -2534,7 +2613,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) +@@ -2545,7 +2624,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) if (intmask && --max_loops) goto again; out: @@ -122909,7 +114437,7 @@ index 728ef5a..791d6dd 100644 if (unexpected) { pr_err("%s: Unexpected interrupt 0x%08x.\n", -@@ -2677,15 +2756,15 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host) +@@ -2713,15 +2792,15 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host) host->flags &= ~SDHCI_NEEDS_RETUNING; } @@ -122929,7 +114457,18 @@ index 728ef5a..791d6dd 100644 return ret; } -@@ -2716,7 +2795,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host) +@@ -2747,16 +2826,16 @@ int sdhci_runtime_resume_host(struct sdhci_host *host) + sdhci_do_start_signal_voltage_switch(host, &host->mmc->ios); + if ((host_flags & SDHCI_PV_ENABLED) && + !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) { +- spin_lock_irqsave(&host->lock, flags); ++ sdhci_spin_lock_irqsave(host, &flags); + sdhci_enable_preset_value(host, true); +- spin_unlock_irqrestore(&host->lock, flags); ++ sdhci_spin_unlock_irqrestore(host, flags); + } + + /* Set the re-tuning expiration flag */ if (host->flags & SDHCI_USING_RETUNING_TIMER) host->flags |= SDHCI_NEEDS_RETUNING; @@ -122938,7 +114477,7 @@ index 728ef5a..791d6dd 100644 host->runtime_suspended = false; -@@ -2727,7 +2806,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host) +@@ -2767,7 +2846,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host) /* Enable Card Detection */ sdhci_enable_card_detection(host); @@ -122947,7 +114486,7 @@ index 728ef5a..791d6dd 100644 return ret; } -@@ -3210,7 +3289,7 @@ int sdhci_add_host(struct sdhci_host *host) +@@ -3254,7 +3333,7 @@ int sdhci_add_host(struct sdhci_host *host) host->tuning_timer.function = sdhci_tuning_timer; } @@ -122956,7 +114495,7 @@ index 728ef5a..791d6dd 100644 mmc_hostname(mmc), host); if (ret) { pr_err("%s: Failed to request IRQ %d: %d\n", -@@ -3273,7 +3352,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) +@@ -3318,7 +3397,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) unsigned long flags; if (dead) { @@ -122965,7 +114504,7 @@ index 728ef5a..791d6dd 100644 host->flags |= SDHCI_DEVICE_DEAD; -@@ -3285,7 +3364,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) +@@ -3330,7 +3409,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) tasklet_schedule(&host->finish_tasklet); } @@ -122975,10 +114514,10 @@ index 728ef5a..791d6dd 100644 sdhci_disable_card_detection(host); diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h -index 9ab319b..50b3a7f 100644 +index 45592d2..9932ae8 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h -@@ -434,4 +434,10 @@ static inline void *sdhci_priv(struct sdhci_host *host) +@@ -446,4 +446,10 @@ static inline void *sdhci_priv(struct sdhci_host *host) extern int sdhci_runtime_resume_host(struct sdhci_host *host); #endif @@ -122990,11 +114529,11 @@ index 9ab319b..50b3a7f 100644 + #endif /* __SDHCI_HW_H */ diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h -index d4014c9..25a6f5a 100644 +index f3a39c1..58bfab0 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h -@@ -96,6 +96,7 @@ struct sdhci_host { - #define SDHCI_QUIRK2_NO_1_8_V (1<<2) +@@ -97,6 +97,7 @@ struct sdhci_host { + #define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3) int irq; /* Device IRQ */ + int second_irq; /* Additional IRQ to disable/enable in low-latency mode */ @@ -123002,41 +114541,13 @@ index d4014c9..25a6f5a 100644 const struct sdhci_ops *ops; /* Low level hw interface */ -- -1.8.1.5 +1.8.1.6 -From 2c45b1022c245ee2324a90b5c55abcc284b8a13a Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 29 Aug 2012 21:46:25 +0100 -Subject: [PATCH 087/169] Add config options to allow iotop to run - ---- - arch/arm/configs/bcmrpi_defconfig | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index b740a7a..7963f70 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -5,6 +5,10 @@ CONFIG_POSIX_MQUEUE=y - CONFIG_BSD_PROCESS_ACCT=y - CONFIG_BSD_PROCESS_ACCT_V3=y - CONFIG_FHANDLE=y -+CONFIG_TASKSTATS=y -+CONFIG_TASK_DELAY_ACCT=y -+CONFIG_TASK_XACCT=y -+CONFIG_TASK_IO_ACCOUNTING=y - CONFIG_AUDIT=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y --- -1.8.1.5 - - -From d4d00892d326d4e8635cffc0459c96c86eb83d64 Mon Sep 17 00:00:00 2001 +From a03921149702b50c7504a67cc69c75b312689f97 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 31 Aug 2012 12:53:51 +0100 -Subject: [PATCH 088/169] Enable low latency mode by default in sdcard driver. +Subject: [PATCH 42/95] Enable low latency mode by default in sdcard driver. Can be disabled with sdhci-bcm2708.enable_llm=0 --- @@ -123044,7 +114555,7 @@ Subject: [PATCH 088/169] Enable low latency mode by default in sdcard driver. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index d0af30a..db84f11 100644 +index d0acde7..2703103 100644 --- a/drivers/mmc/host/sdhci-bcm2708.c +++ b/drivers/mmc/host/sdhci-bcm2708.c @@ -140,7 +140,7 @@ static inline unsigned long int since_ns(hptime_t t) @@ -123057,13 +114568,13 @@ index d0af30a..db84f11 100644 #if 0 static void hptime_test(void) -- -1.8.1.5 +1.8.1.6 -From e8fc85ad7388aa46631e26b53eb8689a3400c604 Mon Sep 17 00:00:00 2001 +From d9951935d16acffeb8442751e5b910305404cca6 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Mon, 8 Apr 2013 21:09:04 +0100 -Subject: [PATCH 089/169] Add FIQ patch to dwc_otg driver. Enable with +Date: Wed, 8 May 2013 12:02:03 +0100 +Subject: [PATCH 43/95] Add FIQ patch to dwc_otg driver. Enable with dwc_otg.fiq_fix_enable=1. Should give about 10% more ARM performance. Thanks to Gordon and Costas @@ -123071,8 +114582,8 @@ Subject: [PATCH 089/169] Add FIQ patch to dwc_otg driver. Enable with arch/arm/Kconfig | 1 + arch/arm/include/asm/fiq.h | 1 + arch/arm/kernel/fiq.c | 1 + - arch/arm/kernel/fiqasm.S | 4 + - arch/arm/mach-bcm2708/armctrl.c | 31 +++-- + arch/arm/kernel/fiqasm.S | 7 ++ + arch/arm/mach-bcm2708/armctrl.c | 19 ++- arch/arm/mach-bcm2708/bcm2708.c | 29 ++++- arch/arm/mach-bcm2708/include/mach/irqs.h | 159 +++++++++++++------------- arch/arm/mach-bcm2708/include/mach/platform.h | 2 + @@ -123089,15 +114600,15 @@ Subject: [PATCH 089/169] Add FIQ patch to dwc_otg driver. Enable with drivers/usb/host/dwc_otg/dwc_otg_mphi_fix.c | 113 ++++++++++++++++++ drivers/usb/host/dwc_otg/dwc_otg_mphi_fix.h | 36 ++++++ drivers/usb/host/dwc_otg/dwc_otg_os_dep.h | 3 + - 21 files changed, 551 insertions(+), 113 deletions(-) + 21 files changed, 545 insertions(+), 110 deletions(-) create mode 100755 drivers/usb/host/dwc_otg/dwc_otg_mphi_fix.c create mode 100755 drivers/usb/host/dwc_otg/dwc_otg_mphi_fix.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 46737d0..88d5ee2 100644 +index 81540e7..bfff9c1 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -961,6 +961,7 @@ config ARCH_BCM2708 +@@ -373,6 +373,7 @@ config ARCH_BCM2708 select ARM_ERRATA_411920 select MACH_BCM2708 select VC4 @@ -123130,10 +114641,20 @@ index 2adda11..3e71f30 100644 EXPORT_SYMBOL(release_fiq); EXPORT_SYMBOL(enable_fiq); diff --git a/arch/arm/kernel/fiqasm.S b/arch/arm/kernel/fiqasm.S -index 207f9d6..5233d54 100644 +index 207f9d6..93eddfe 100644 --- a/arch/arm/kernel/fiqasm.S +++ b/arch/arm/kernel/fiqasm.S -@@ -47,3 +47,7 @@ ENTRY(__get_fiq_regs) +@@ -25,6 +25,9 @@ + ENTRY(__set_fiq_regs) + mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE + mrs r1, cpsr ++@@@@@@@@@@@@@@@ hack: enable the fiq here to keep usb driver happy ++ and r1, #~PSR_F_BIT ++@@@@@@@@@@@@@@@ endhack: (need to find better place for this to happen) + msr cpsr_c, r2 @ select FIQ mode + mov r0, r0 @ avoid hazard prior to ARMv4 + ldmia r0!, {r8 - r12} +@@ -47,3 +50,7 @@ ENTRY(__get_fiq_regs) mov r0, r0 @ avoid hazard prior to ARMv4 mov pc, lr ENDPROC(__get_fiq_regs) @@ -123142,72 +114663,53 @@ index 207f9d6..5233d54 100644 + mov pc, r8 +ENDPROC(__FIQ_Branch) diff --git a/arch/arm/mach-bcm2708/armctrl.c b/arch/arm/mach-bcm2708/armctrl.c -index 6b97124..cdaa761 100644 +index da18725..274aa30 100644 --- a/arch/arm/mach-bcm2708/armctrl.c +++ b/arch/arm/mach-bcm2708/armctrl.c -@@ -59,12 +59,20 @@ static void armctrl_mask_irq(unsigned int irq) - IO_ADDRESS(ARM_IRQ_DIBL3), +@@ -52,8 +52,12 @@ static void armctrl_mask_irq(struct irq_data *d) 0 }; -+ -+ if(d->irq >= FIQ_START) -+ { -+ writel(0, __io(IO_ADDRESS(ARM_IRQ_FAST))); -+ } -+ else -+ { - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + - unsigned int data = (unsigned int)irq_get_chip_data(d->irq); +- writel(1 << (data & 0x1f), __io_address(disables[(data >> 5) & 0x3])); ++ if (d->irq >= FIQ_START) { ++ writel(0, __io_address(ARM_IRQ_FAST)); ++ } else { + unsigned int data = (unsigned int)irq_get_chip_data(d->irq); - #else -- unsigned int data = (unsigned int)get_irq_chip_data(irq); -+ unsigned int data = (unsigned int)get_irq_chip_data(irq); - #endif -- writel(1 << (data & 0x1f), __io(disables[(data >> 5) & 0x3])); -+ writel(1 << (data & 0x1f), __io(disables[(data >> 5) & 0x3])); ++ writel(1 << (data & 0x1f), __io_address(disables[(data >> 5) & 0x3])); + } } - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) -@@ -79,12 +87,21 @@ static void armctrl_unmask_irq(unsigned int irq) - IO_ADDRESS(ARM_IRQ_ENBL3), + static void armctrl_unmask_irq(struct irq_data *d) +@@ -65,8 +69,14 @@ static void armctrl_unmask_irq(struct irq_data *d) 0 }; -+ -+ if(d->irq >= FIQ_START) -+ { -+ unsigned int data = (unsigned int)irq_get_chip_data(d->irq) - FIQ_START; -+ writel(0x80 | data, __io(IO_ADDRESS(ARM_IRQ_FAST))); -+ } -+ else -+ { - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + - unsigned int data = (unsigned int)irq_get_chip_data(d->irq); -+ unsigned int data = (unsigned int)irq_get_chip_data(d->irq); - #else -- unsigned int data = (unsigned int)get_irq_chip_data(irq); -+ unsigned int data = (unsigned int)get_irq_chip_data(irq); - #endif -- writel(1 << (data & 0x1f), __io(enables[(data >> 5) & 0x3])); -+ writel(1 << (data & 0x1f), __io(enables[(data >> 5) & 0x3])); +- writel(1 << (data & 0x1f), __io_address(enables[(data >> 5) & 0x3])); ++ if (d->irq >= FIQ_START) { ++ unsigned int data = ++ (unsigned int)irq_get_chip_data(d->irq) - FIQ_START; ++ writel(0x80 | data, __io_address(ARM_IRQ_FAST)); ++ } else { ++ unsigned int data = (unsigned int)irq_get_chip_data(d->irq); ++ writel(1 << (data & 0x1f), __io_address(enables[(data >> 5) & 0x3])); + } } #if defined(CONFIG_PM) -@@ -379,7 +396,7 @@ int __init armctrl_init(void __iomem * base, unsigned int irq_start, +@@ -204,5 +214,6 @@ int __init armctrl_init(void __iomem * base, unsigned int irq_start, + } - for (irq = 0; irq < NR_IRQS; irq++) { - unsigned int data = irq; -- if (irq >= INTERRUPT_JPEG) -+ if (irq >= INTERRUPT_JPEG && irq <= INTERRUPT_ARASANSDIO) - data = remap_irqs[irq - INTERRUPT_JPEG]; - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) + armctrl_pm_register(base, irq_start, resume_sources); ++ init_FIQ(FIQ_START); + return 0; + } diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index c9ef82a..6f45ca1 100644 +index d61e747..f5f262c 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -349,12 +349,32 @@ static void notrace bcm2708_update_sched_clock(void) +@@ -307,12 +307,32 @@ static void __init bcm2708_clocksource_init(void) .flags = IORESOURCE_MEM, }, [1] = { @@ -123224,7 +114726,7 @@ index c9ef82a..6f45ca1 100644 }, }; -+bool fiq_fix_enable = false; ++bool fiq_fix_enable = true; + +static struct resource bcm2708_usb_resources_no_fiq_fix[] = { + [0] = { @@ -123242,9 +114744,9 @@ index c9ef82a..6f45ca1 100644 static u64 usb_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); static struct platform_device bcm2708_usb_device = { -@@ -617,6 +637,11 @@ void __init bcm2708_init(void) - bcm_register_device(&bcm2708_mci_device); +@@ -578,6 +598,11 @@ void __init bcm2708_init(void) #endif + bcm_register_device(&bcm2708_systemtimer_device); bcm_register_device(&bcm2708_fb_device); + if (!fiq_fix_enable) + { @@ -123432,7 +114934,7 @@ index e8bb068..9aaedf1 100644 #endif /* _BCM2708_IRQS_H_ */ diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h -index 5a797ac..9c5d334 100644 +index 4d3c15d..89e72d1 100644 --- a/arch/arm/mach-bcm2708/include/mach/platform.h +++ b/arch/arm/mach-bcm2708/include/mach/platform.h @@ -56,7 +56,9 @@ @@ -123886,7 +115388,7 @@ index 63c1b55..f1658fa 100644 - #endif /* DWC_DEVICE_ONLY */ diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -index 4a985a6..f91c4b1 100644 +index 4a985a6..9702f81 100644 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c @@ -1,3 +1,4 @@ @@ -123949,7 +115451,7 @@ index 4a985a6..f91c4b1 100644 + { + // Set up fiq + claim_fiq(&fh); -+ set_fiq_handler(__FIQ_Branch, 8); ++ set_fiq_handler(__FIQ_Branch, 4); + memset(®s,0,sizeof(regs)); + regs.ARM_r8 = (long)dwc_otg_hcd_handle_fiq; + regs.ARM_r9 = (long)0; @@ -124229,21 +115731,22 @@ index a7e9076..bb1c42d 100644 struct lm_device *lmdev; #elif defined(PCI_INTERFACE) -- -1.8.1.5 +1.8.1.6 -From 8e3cc4034619e093f99388da785f8efbb507de8c Mon Sep 17 00:00:00 2001 + +From 790f4ed6331cc3328eb7d7510458459160bad414 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Mon, 3 Sep 2012 23:44:52 +0100 -Subject: [PATCH 091/169] Add verious user config requests. +Date: Fri, 12 Apr 2013 23:58:47 +0100 +Subject: [PATCH 46/95] Add verious user config requests. CONFIG_DEVTMPFS_MOUNT, CONFIG_NFS_V4_1=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y, drbd and IPSEC modules --- - arch/arm/configs/bcmrpi_defconfig | 32 +++++++++++++++++++++++++------- - 1 file changed, 25 insertions(+), 7 deletions(-) + arch/arm/configs/bcmrpi_defconfig | 334 ++++++++++++++++++++++++++++++++++++-- + 1 file changed, 324 insertions(+), 10 deletions(-) diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 7963f70..5ed9c30 100644 +index 31f5afaa..ef43466 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -1,3 +1,4 @@ @@ -124251,14 +115754,16 @@ index 7963f70..5ed9c30 100644 CONFIG_EXPERIMENTAL=y # CONFIG_LOCALVERSION_AUTO is not set CONFIG_SYSVIPC=y -@@ -64,11 +65,19 @@ CONFIG_IP_PNP_DHCP=y +@@ -52,12 +53,212 @@ CONFIG_IP_PNP=y + CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_RARP=y - CONFIG_NET_IPIP=m CONFIG_SYN_COOKIES=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set +-# CONFIG_INET_LRO is not set -# CONFIG_INET_DIAG is not set +-# CONFIG_IPV6 is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m @@ -124267,26 +115772,212 @@ index 7963f70..5ed9c30 100644 +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=m +CONFIG_INET_DIAG=m - CONFIG_IPV6_PRIVACY=y ++CONFIG_IPV6_PRIVACY=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MULTIPLE_TABLES=y - CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_ZONES=y -@@ -130,6 +139,7 @@ CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m - CONFIG_NETFILTER_XT_MATCH_OSF=m - CONFIG_NETFILTER_XT_MATCH_OWNER=m - CONFIG_NETFILTER_XT_MATCH_POLICY=m ++CONFIG_NETFILTER=y ++CONFIG_NF_CONNTRACK=m ++CONFIG_NF_CONNTRACK_ZONES=y ++CONFIG_NF_CONNTRACK_EVENTS=y ++CONFIG_NF_CONNTRACK_TIMESTAMP=y ++CONFIG_NF_CT_PROTO_DCCP=m ++CONFIG_NF_CT_PROTO_SCTP=m ++CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CONNTRACK_AMANDA=m ++CONFIG_NF_CONNTRACK_FTP=m ++CONFIG_NF_CONNTRACK_H323=m ++CONFIG_NF_CONNTRACK_IRC=m ++CONFIG_NF_CONNTRACK_NETBIOS_NS=m ++CONFIG_NF_CONNTRACK_SNMP=m ++CONFIG_NF_CONNTRACK_PPTP=m ++CONFIG_NF_CONNTRACK_SANE=m ++CONFIG_NF_CONNTRACK_SIP=m ++CONFIG_NF_CONNTRACK_TFTP=m ++CONFIG_NF_CT_NETLINK=m ++CONFIG_NETFILTER_TPROXY=m ++CONFIG_NETFILTER_XT_SET=m ++CONFIG_NETFILTER_XT_TARGET_AUDIT=m ++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m ++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m ++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m ++CONFIG_NETFILTER_XT_TARGET_CT=m ++CONFIG_NETFILTER_XT_TARGET_DSCP=m ++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m ++CONFIG_NETFILTER_XT_TARGET_LED=m ++CONFIG_NETFILTER_XT_TARGET_MARK=m ++CONFIG_NETFILTER_XT_TARGET_NFLOG=m ++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m ++CONFIG_NETFILTER_XT_TARGET_NOTRACK=m ++CONFIG_NETFILTER_XT_TARGET_TEE=m ++CONFIG_NETFILTER_XT_TARGET_TPROXY=m ++CONFIG_NETFILTER_XT_TARGET_TRACE=m ++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m ++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m ++CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m ++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m ++CONFIG_NETFILTER_XT_MATCH_COMMENT=m ++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m ++CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m ++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m ++CONFIG_NETFILTER_XT_MATCH_CPU=m ++CONFIG_NETFILTER_XT_MATCH_DCCP=m ++CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m ++CONFIG_NETFILTER_XT_MATCH_DSCP=m ++CONFIG_NETFILTER_XT_MATCH_ESP=m ++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_HELPER=m ++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m ++CONFIG_NETFILTER_XT_MATCH_LENGTH=m ++CONFIG_NETFILTER_XT_MATCH_LIMIT=m ++CONFIG_NETFILTER_XT_MATCH_MAC=m ++CONFIG_NETFILTER_XT_MATCH_MARK=m ++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_OSF=m ++CONFIG_NETFILTER_XT_MATCH_OWNER=m ++CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m - CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m - CONFIG_NETFILTER_XT_MATCH_QUOTA=m - CONFIG_NETFILTER_XT_MATCH_RATEEST=m -@@ -312,8 +322,10 @@ CONFIG_NET_9P=m ++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m ++CONFIG_NETFILTER_XT_MATCH_QUOTA=m ++CONFIG_NETFILTER_XT_MATCH_RATEEST=m ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_RECENT=m ++CONFIG_NETFILTER_XT_MATCH_SCTP=m ++CONFIG_NETFILTER_XT_MATCH_SOCKET=m ++CONFIG_NETFILTER_XT_MATCH_STATE=m ++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m ++CONFIG_NETFILTER_XT_MATCH_STRING=m ++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m ++CONFIG_NETFILTER_XT_MATCH_TIME=m ++CONFIG_NETFILTER_XT_MATCH_U32=m ++CONFIG_IP_SET=m ++CONFIG_IP_SET_BITMAP_IP=m ++CONFIG_IP_SET_BITMAP_IPMAC=m ++CONFIG_IP_SET_BITMAP_PORT=m ++CONFIG_IP_SET_HASH_IP=m ++CONFIG_IP_SET_HASH_IPPORT=m ++CONFIG_IP_SET_HASH_IPPORTIP=m ++CONFIG_IP_SET_HASH_IPPORTNET=m ++CONFIG_IP_SET_HASH_NET=m ++CONFIG_IP_SET_HASH_NETPORT=m ++CONFIG_IP_SET_HASH_NETIFACE=m ++CONFIG_IP_SET_LIST_SET=m ++CONFIG_NF_CONNTRACK_IPV4=m ++CONFIG_IP_NF_IPTABLES=m ++CONFIG_IP_NF_MATCH_AH=m ++CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_TTL=m ++CONFIG_IP_NF_FILTER=m ++CONFIG_IP_NF_TARGET_REJECT=m ++CONFIG_IP_NF_TARGET_LOG=m ++CONFIG_IP_NF_TARGET_ULOG=m ++CONFIG_NF_NAT=m ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_TTL=m ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++CONFIG_NF_CONNTRACK_IPV6=m ++CONFIG_IP6_NF_IPTABLES=m ++CONFIG_IP6_NF_MATCH_AH=m ++CONFIG_IP6_NF_MATCH_EUI64=m ++CONFIG_IP6_NF_MATCH_FRAG=m ++CONFIG_IP6_NF_MATCH_OPTS=m ++CONFIG_IP6_NF_MATCH_HL=m ++CONFIG_IP6_NF_MATCH_IPV6HEADER=m ++CONFIG_IP6_NF_MATCH_MH=m ++CONFIG_IP6_NF_MATCH_RT=m ++CONFIG_IP6_NF_TARGET_HL=m ++CONFIG_IP6_NF_TARGET_LOG=m ++CONFIG_IP6_NF_FILTER=m ++CONFIG_IP6_NF_TARGET_REJECT=m ++CONFIG_IP6_NF_MANGLE=m ++CONFIG_IP6_NF_RAW=m ++CONFIG_BRIDGE_NF_EBTABLES=m ++CONFIG_BRIDGE_EBT_BROUTE=m ++CONFIG_BRIDGE_EBT_T_FILTER=m ++CONFIG_BRIDGE_EBT_T_NAT=m ++CONFIG_BRIDGE_EBT_802_3=m ++CONFIG_BRIDGE_EBT_AMONG=m ++CONFIG_BRIDGE_EBT_ARP=m ++CONFIG_BRIDGE_EBT_IP=m ++CONFIG_BRIDGE_EBT_IP6=m ++CONFIG_BRIDGE_EBT_LIMIT=m ++CONFIG_BRIDGE_EBT_MARK=m ++CONFIG_BRIDGE_EBT_PKTTYPE=m ++CONFIG_BRIDGE_EBT_STP=m ++CONFIG_BRIDGE_EBT_VLAN=m ++CONFIG_BRIDGE_EBT_ARPREPLY=m ++CONFIG_BRIDGE_EBT_DNAT=m ++CONFIG_BRIDGE_EBT_MARK_T=m ++CONFIG_BRIDGE_EBT_REDIRECT=m ++CONFIG_BRIDGE_EBT_SNAT=m ++CONFIG_BRIDGE_EBT_LOG=m ++CONFIG_BRIDGE_EBT_ULOG=m ++CONFIG_BRIDGE_EBT_NFLOG=m ++CONFIG_BRIDGE=m ++CONFIG_VLAN_8021Q=m ++CONFIG_VLAN_8021Q_GVRP=y ++CONFIG_NET_SCHED=y ++CONFIG_NET_SCH_CBQ=m ++CONFIG_NET_SCH_HTB=m ++CONFIG_NET_SCH_HFSC=m ++CONFIG_NET_SCH_PRIO=m ++CONFIG_NET_SCH_MULTIQ=m ++CONFIG_NET_SCH_RED=m ++CONFIG_NET_SCH_SFB=m ++CONFIG_NET_SCH_SFQ=m ++CONFIG_NET_SCH_TEQL=m ++CONFIG_NET_SCH_TBF=m ++CONFIG_NET_SCH_GRED=m ++CONFIG_NET_SCH_DSMARK=m ++CONFIG_NET_SCH_NETEM=m ++CONFIG_NET_SCH_DRR=m ++CONFIG_NET_SCH_MQPRIO=m ++CONFIG_NET_SCH_CHOKE=m ++CONFIG_NET_SCH_QFQ=m ++CONFIG_NET_CLS_BASIC=m ++CONFIG_NET_CLS_TCINDEX=m ++CONFIG_NET_CLS_ROUTE4=m ++CONFIG_NET_CLS_FW=m ++CONFIG_NET_CLS_U32=m ++CONFIG_CLS_U32_MARK=y ++CONFIG_NET_CLS_RSVP=m ++CONFIG_NET_CLS_RSVP6=m ++CONFIG_NET_CLS_FLOW=m ++CONFIG_NET_CLS_CGROUP=m ++CONFIG_NET_EMATCH=y ++CONFIG_NET_EMATCH_CMP=m ++CONFIG_NET_EMATCH_NBYTE=m ++CONFIG_NET_EMATCH_U32=m ++CONFIG_NET_EMATCH_META=m ++CONFIG_NET_EMATCH_TEXT=m ++CONFIG_NET_CLS_ACT=y ++CONFIG_NET_ACT_POLICE=m ++CONFIG_NET_ACT_GACT=m ++CONFIG_GACT_PROB=y ++CONFIG_NET_ACT_MIRRED=m ++CONFIG_NET_ACT_IPT=m ++CONFIG_NET_ACT_NAT=m ++CONFIG_NET_ACT_PEDIT=m ++CONFIG_NET_ACT_SIMP=m ++CONFIG_NET_ACT_SKBEDIT=m ++CONFIG_NET_ACT_CSUM=m + CONFIG_NET_PKTGEN=m + CONFIG_IRDA=m + CONFIG_IRLAN=m +@@ -98,8 +299,11 @@ CONFIG_NET_9P=m CONFIG_NFC=m CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=m @@ -124294,7 +115985,7 @@ index 7963f70..5ed9c30 100644 CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_RAM=y CONFIG_CDROM_PKTCDVD=m -@@ -406,12 +418,12 @@ CONFIG_RT2500USB=m +@@ -143,12 +347,12 @@ CONFIG_RT2500USB=m CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT53XX=y @@ -124306,39 +115997,145 @@ index 7963f70..5ed9c30 100644 CONFIG_MWIFIEX_SDIO=m +CONFIG_RTL8192CU=m CONFIG_WIMAX_I2400M_USB=m - CONFIG_INPUT_POLLDEV=m - # CONFIG_INPUT_MOUSEDEV_PSAUX is not set -@@ -470,6 +482,12 @@ CONFIG_BCM2708_WDT=m - CONFIG_MEDIA_SUPPORT=m - CONFIG_VIDEO_DEV=m - CONFIG_DVB_CORE=m + CONFIG_USB_CATC=m + CONFIG_USB_KAWETH=m +@@ -224,7 +428,116 @@ CONFIG_GPIO_SYSFS=y + # CONFIG_HWMON is not set + CONFIG_WATCHDOG=y + CONFIG_BCM2708_WDT=m +-# CONFIG_MFD_SUPPORT is not set ++CONFIG_MEDIA_SUPPORT=m ++CONFIG_VIDEO_DEV=m ++CONFIG_DVB_CORE=m +CONFIG_RC_ATI_REMOTE=m +CONFIG_IR_IMON=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_STREAMZAP=m +CONFIG_RC_LOOPBACK=m - CONFIG_MEDIA_ATTACH=y - CONFIG_USB_VIDEO_CLASS=m - CONFIG_USB_M5602=m -@@ -807,6 +825,8 @@ CONFIG_NFS_V4=y ++CONFIG_MEDIA_ATTACH=y ++CONFIG_USB_VIDEO_CLASS=m ++CONFIG_USB_M5602=m ++CONFIG_USB_STV06XX=m ++CONFIG_USB_GL860=m ++CONFIG_USB_GSPCA_BENQ=m ++CONFIG_USB_GSPCA_CONEX=m ++CONFIG_USB_GSPCA_CPIA1=m ++CONFIG_USB_GSPCA_ETOMS=m ++CONFIG_USB_GSPCA_FINEPIX=m ++CONFIG_USB_GSPCA_JEILINJ=m ++CONFIG_USB_GSPCA_KINECT=m ++CONFIG_USB_GSPCA_KONICA=m ++CONFIG_USB_GSPCA_MARS=m ++CONFIG_USB_GSPCA_MR97310A=m ++CONFIG_USB_GSPCA_NW80X=m ++CONFIG_USB_GSPCA_OV519=m ++CONFIG_USB_GSPCA_OV534=m ++CONFIG_USB_GSPCA_OV534_9=m ++CONFIG_USB_GSPCA_PAC207=m ++CONFIG_USB_GSPCA_PAC7302=m ++CONFIG_USB_GSPCA_PAC7311=m ++CONFIG_USB_GSPCA_SE401=m ++CONFIG_USB_GSPCA_SN9C2028=m ++CONFIG_USB_GSPCA_SN9C20X=m ++CONFIG_USB_GSPCA_SONIXB=m ++CONFIG_USB_GSPCA_SONIXJ=m ++CONFIG_USB_GSPCA_SPCA500=m ++CONFIG_USB_GSPCA_SPCA501=m ++CONFIG_USB_GSPCA_SPCA505=m ++CONFIG_USB_GSPCA_SPCA506=m ++CONFIG_USB_GSPCA_SPCA508=m ++CONFIG_USB_GSPCA_SPCA561=m ++CONFIG_USB_GSPCA_SPCA1528=m ++CONFIG_USB_GSPCA_SQ905=m ++CONFIG_USB_GSPCA_SQ905C=m ++CONFIG_USB_GSPCA_SQ930X=m ++CONFIG_USB_GSPCA_STK014=m ++CONFIG_USB_GSPCA_STV0680=m ++CONFIG_USB_GSPCA_SUNPLUS=m ++CONFIG_USB_GSPCA_T613=m ++CONFIG_USB_GSPCA_TV8532=m ++CONFIG_USB_GSPCA_VC032X=m ++CONFIG_USB_GSPCA_VICAM=m ++CONFIG_USB_GSPCA_XIRLINK_CIT=m ++CONFIG_USB_GSPCA_ZC3XX=m ++CONFIG_VIDEO_PVRUSB2=m ++CONFIG_VIDEO_HDPVR=m ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_EM28XX_DVB=m ++CONFIG_VIDEO_TLG2300=m ++CONFIG_VIDEO_CX231XX=m ++CONFIG_VIDEO_CX231XX_ALSA=m ++CONFIG_VIDEO_CX231XX_DVB=m ++CONFIG_VIDEO_USBVISION=m ++CONFIG_USB_ET61X251=m ++CONFIG_USB_SN9C102=m ++CONFIG_USB_PWC=m ++CONFIG_USB_ZR364XX=m ++CONFIG_USB_STKWEBCAM=m ++CONFIG_USB_S2255=m ++CONFIG_USB_DSBR=m ++CONFIG_RADIO_SI470X=y ++CONFIG_USB_SI470X=m ++CONFIG_USB_MR800=m ++CONFIG_DVB_USB=m ++CONFIG_DVB_USB_A800=m ++CONFIG_DVB_USB_DIBUSB_MB=m ++CONFIG_DVB_USB_DIBUSB_MC=m ++CONFIG_DVB_USB_DIB0700=m ++CONFIG_DVB_USB_UMT_010=m ++CONFIG_DVB_USB_CXUSB=m ++CONFIG_DVB_USB_M920X=m ++CONFIG_DVB_USB_GL861=m ++CONFIG_DVB_USB_AU6610=m ++CONFIG_DVB_USB_DIGITV=m ++CONFIG_DVB_USB_VP7045=m ++CONFIG_DVB_USB_VP702X=m ++CONFIG_DVB_USB_GP8PSK=m ++CONFIG_DVB_USB_NOVA_T_USB2=m ++CONFIG_DVB_USB_TTUSB2=m ++CONFIG_DVB_USB_DTT200U=m ++CONFIG_DVB_USB_OPERA1=m ++CONFIG_DVB_USB_AF9005=m ++CONFIG_DVB_USB_AF9005_REMOTE=m ++CONFIG_DVB_USB_DW2102=m ++CONFIG_DVB_USB_CINERGY_T2=m ++CONFIG_DVB_USB_ANYSEE=m ++CONFIG_DVB_USB_DTV5100=m ++CONFIG_DVB_USB_AF9015=m ++CONFIG_DVB_USB_CE6230=m ++CONFIG_DVB_USB_FRIIO=m ++CONFIG_DVB_USB_EC168=m ++CONFIG_DVB_USB_AZ6027=m ++CONFIG_DVB_USB_LME2510=m ++CONFIG_DVB_USB_TECHNISAT_USB2=m ++CONFIG_SMS_SIANO_MDTV=m ++CONFIG_SMS_USB_DRV=m ++CONFIG_DVB_B2C2_FLEXCOP=m ++CONFIG_DVB_B2C2_FLEXCOP_USB=m + CONFIG_FB=y + CONFIG_FB_BCM2708=y + CONFIG_FRAMEBUFFER_CONSOLE=y +@@ -450,6 +763,9 @@ CONFIG_NFS_V3_ACL=y + CONFIG_NFS_V4=y CONFIG_ROOT_NFS=y CONFIG_NFS_FSCACHE=y - CONFIG_NFSD=m ++CONFIG_NFSD=m +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y CONFIG_CIFS=m CONFIG_CIFS_WEAK_PW_HASH=y CONFIG_CIFS_XATTR=y -@@ -868,7 +888,6 @@ CONFIG_KGDB=y +@@ -516,7 +832,6 @@ CONFIG_KGDB=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y CONFIG_STRICT_DEVMEM=y -CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_SEQIV=m CONFIG_CRYPTO_CBC=y - CONFIG_CRYPTO_XTS=m -@@ -882,7 +901,6 @@ CONFIG_CRYPTO_TGR192=m + CONFIG_CRYPTO_HMAC=y +@@ -529,7 +844,6 @@ CONFIG_CRYPTO_TGR192=m CONFIG_CRYPTO_WP512=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_DES=y @@ -124347,14 +116144,14 @@ index 7963f70..5ed9c30 100644 # CONFIG_CRYPTO_HW is not set CONFIG_CRC_ITU_T=y -- -1.8.1.5 +1.8.1.6 -From 17cb37cd028e54fa2d0c7208e41ab3d065737468 Mon Sep 17 00:00:00 2001 +From 3f20000a1d7914490fb412d0c30601d1fafbb759 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 8 Sep 2012 14:49:16 +0100 -Subject: [PATCH 092/169] Don't believe KDIR is required when building as part - of kernel +Subject: [PATCH 47/95] Don't believe KDIR is required when building as part of + kernel --- drivers/usb/host/dwc_common_port/Makefile | 6 +++--- @@ -124378,14 +116175,14 @@ index 203c7ea..63e3485 100644 ifeq ($(ARCH),) $(error Must give "ARCH=" on command line or in environment. Also, if \ -- -1.8.1.5 +1.8.1.6 -From 276d1e7da2edf678950e3be08e4d8f3684a958bc Mon Sep 17 00:00:00 2001 +From 736f10345c26243dc1b29371135dd9f440f15972 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 8 Sep 2012 15:17:53 +0100 -Subject: [PATCH 093/169] Avoid dynamic memory allocation for channel lock in - USB driver. Thanks ddv2005. +Subject: [PATCH 48/95] Avoid dynamic memory allocation for channel lock in USB + driver. Thanks ddv2005. --- drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 6 +++--- @@ -124488,13 +116285,13 @@ index f1658fa..21e8f09 100644 /** -- -1.8.1.5 +1.8.1.6 -From 41daf8c47af8427b2a08ccb559cdc197fdcb4f37 Mon Sep 17 00:00:00 2001 +From 68ca431893f399302cd3869ee509628f92cc95f5 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Tue, 26 Mar 2013 19:16:10 +0000 -Subject: [PATCH 094/169] Add cpufreq driver +Date: Wed, 8 May 2013 12:04:44 +0100 +Subject: [PATCH 49/95] Add cpufreq driver --- arch/arm/Kconfig | 1 + @@ -124509,10 +116306,10 @@ Subject: [PATCH 094/169] Add cpufreq driver create mode 100755 drivers/cpufreq/bcm2835-cpufreq.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 88d5ee2..a919035 100644 +index bfff9c1..78851da 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -957,6 +957,7 @@ config ARCH_BCM2708 +@@ -369,6 +369,7 @@ config ARCH_BCM2708 select HAVE_SCHED_CLOCK select NEED_MACH_MEMORY_H select CLKDEV_LOOKUP @@ -124521,10 +116318,10 @@ index 88d5ee2..a919035 100644 select ARM_ERRATA_411920 select MACH_BCM2708 diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 5ed9c30..35c5042 100644 +index ef43466..5b0a171 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -46,6 +46,12 @@ CONFIG_ZBOOT_ROM_TEXT=0x0 +@@ -39,6 +39,12 @@ CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" CONFIG_KEXEC=y @@ -124745,13 +116542,13 @@ index 3874051..468fdef 100644 * Platform Device for Mailbox * -------------------------------------------------------------------- */ diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm -index a0b3661..3ccf4f7 100644 +index 030ddf6..48a1ba1 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm -@@ -83,3 +83,12 @@ config ARM_SPEAR_CPUFREQ - default y - help - This adds the CPUFreq driver support for SPEAr SOCs. +@@ -113,3 +113,12 @@ config ARM_HIGHBANK_CPUFREQ + based boards. + + If in doubt, say N. + +config ARM_BCM2835_CPUFREQ + bool "BCM2835 Driver" @@ -124762,13 +116559,13 @@ index a0b3661..3ccf4f7 100644 + If in doubt, say N. + diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile -index fadc4d4..586b4ad 100644 +index 863fd18..6c6eccb 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile -@@ -52,6 +52,7 @@ obj-$(CONFIG_ARM_EXYNOS4X12_CPUFREQ) += exynos4x12-cpufreq.o - obj-$(CONFIG_ARM_EXYNOS5250_CPUFREQ) += exynos5250-cpufreq.o - obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o +@@ -57,6 +57,7 @@ obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o obj-$(CONFIG_ARM_SPEAR_CPUFREQ) += spear-cpufreq.o + obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o + obj-$(CONFIG_ARM_IMX6Q_CPUFREQ) += imx6q-cpufreq.o +obj-$(CONFIG_ARM_BCM2835_CPUFREQ) += bcm2835-cpufreq.o ################################################################################## @@ -125019,13 +116816,13 @@ index 0000000..aa6fc66 +module_exit(bcm2835_cpufreq_module_exit); + -- -1.8.1.5 +1.8.1.6 -From bcd894454ad82ac76e259b2d9a63c945f2e73e09 Mon Sep 17 00:00:00 2001 +From c18c17004d6f1d7f72d8a12ec9494e883a43abf9 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 8 Apr 2013 21:12:48 +0100 -Subject: [PATCH 095/169] Add NAK holdoff scheme. Enabled by default, disable +Subject: [PATCH 50/95] Add NAK holdoff scheme. Enabled by default, disable with dwc_otg.nak_holdoff_enable=0. Thanks gsh --- @@ -125232,13 +117029,13 @@ index ac10323..e6b2a7b 100644 if (!DWC_CIRCLEQ_EMPTY(&qh->qtd_list)) { /* Add back to inactive non-periodic schedule. */ -- -1.8.1.5 +1.8.1.6 -From 6dfade7c883667448a39c21b03389024305e8f57 Mon Sep 17 00:00:00 2001 +From 04a378c1036eb1c92290b7268144c4f94e07d05c Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 19:24:24 +0000 -Subject: [PATCH 096/169] Added hwmon/thermal driver for reporting core +Subject: [PATCH 51/95] Added hwmon/thermal driver for reporting core temperature. Thanks Dorian --- @@ -125247,17 +117044,17 @@ Subject: [PATCH 096/169] Added hwmon/thermal driver for reporting core drivers/hwmon/Makefile | 1 + drivers/hwmon/bcm2835-hwmon.c | 211 ++++++++++++++++++++++++++++++++++++++ drivers/thermal/Kconfig | 7 ++ - drivers/thermal/Makefile | 3 + + drivers/thermal/Makefile | 1 + drivers/thermal/bcm2835-thermal.c | 195 +++++++++++++++++++++++++++++++++++ - 7 files changed, 437 insertions(+) + 7 files changed, 435 insertions(+) create mode 100644 drivers/hwmon/bcm2835-hwmon.c create mode 100644 drivers/thermal/bcm2835-thermal.c diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 6f45ca1..192fa5f 100644 +index f5f262c..2875cd2 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -592,6 +592,14 @@ struct platform_device bcm2708_powerman_device = { +@@ -556,6 +556,14 @@ struct platform_device bcm2708_powerman_device = { .resource = bcm2708_bsc1_resources, }; @@ -125272,7 +117069,7 @@ index 6f45ca1..192fa5f 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -656,6 +664,9 @@ void __init bcm2708_init(void) +@@ -618,6 +626,9 @@ void __init bcm2708_init(void) bcm_register_device(&bcm2708_bsc0_device); bcm_register_device(&bcm2708_bsc1_device); @@ -125283,10 +117080,10 @@ index 6f45ca1..192fa5f 100644 { extern void vc_mem_connected_init(void); diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index 32f238f..62f89b9 100644 +index 89ac1cb..845e902 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig -@@ -1440,6 +1440,15 @@ config SENSORS_MC13783_ADC +@@ -1462,6 +1462,15 @@ config SENSORS_MC13783_ADC help Support for the A/D converter on MC13783 and MC13892 PMIC. @@ -125303,10 +117100,10 @@ index 32f238f..62f89b9 100644 comment "ACPI drivers" diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile -index 5da2874..67df81c 100644 +index 8d6d97e..5bfd723 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile -@@ -132,6 +132,7 @@ obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o +@@ -134,6 +134,7 @@ obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o obj-$(CONFIG_SENSORS_W83L786NG) += w83l786ng.o obj-$(CONFIG_SENSORS_WM831X) += wm831x-hwmon.o obj-$(CONFIG_SENSORS_WM8350) += wm8350-hwmon.o @@ -125532,12 +117329,12 @@ index 0000000..4976387 + +module_platform_driver(bcm2835_hwmon_driver); diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig -index c2c77d1..1110943 100644 +index a764f16..768722f 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig -@@ -122,4 +122,11 @@ config DB8500_CPUFREQ_COOLING - bound cpufreq cooling device turns active to set CPU frequency low to - cool down the CPU. +@@ -165,4 +165,11 @@ config INTEL_POWERCLAMP + enforce idle time which results in more package C-state residency. The + user interface is exposed via generic thermal framework. +config THERMAL_BCM2835 + tristate "BCM2835 Thermal Driver" @@ -125548,16 +117345,15 @@ index c2c77d1..1110943 100644 endif + diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile -index d8da683..911c564 100644 +index d3a2b38..3e3e44a 100644 --- a/drivers/thermal/Makefile +++ b/drivers/thermal/Makefile -@@ -18,3 +18,6 @@ obj-$(CONFIG_RCAR_THERMAL) += rcar_thermal.o - obj-$(CONFIG_EXYNOS_THERMAL) += exynos_thermal.o +@@ -21,4 +21,5 @@ obj-$(CONFIG_DOVE_THERMAL) += dove_thermal.o obj-$(CONFIG_DB8500_THERMAL) += db8500_thermal.o obj-$(CONFIG_DB8500_CPUFREQ_COOLING) += db8500_cpufreq_cooling.o -+ + obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o +obj-$(CONFIG_THERMAL_BCM2835) += bcm2835-thermal.o -+ + diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c new file mode 100644 index 0000000..f1ecdb2 @@ -125760,27 +117556,27 @@ index 0000000..f1ecdb2 + +module_platform_driver(bcm2835_thermal_driver); -- -1.8.1.5 +1.8.1.6 -From 3aa2cb704085f19e2c756a1767b59d716f1ada32 Mon Sep 17 00:00:00 2001 +From 7268e463bed7aede375481f6ed48c70b315df6bc Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Fri, 14 Sep 2012 16:19:10 +0100 -Subject: [PATCH 097/169] Add config options for thermal sensor, L2TP, +Date: Fri, 12 Apr 2013 23:59:27 +0100 +Subject: [PATCH 52/95] Add config options for thermal sensor, L2TP, RT2800USB_UNKNOWN, and various I2C and SPI RTCs. Tidy of thermal driver. --- - arch/arm/configs/bcmrpi_defconfig | 31 +++++++++++++++++++++++++++++++ + arch/arm/configs/bcmrpi_defconfig | 33 +++++++++++++++++++++++++++++++++ drivers/hwmon/Kconfig | 1 + drivers/hwmon/bcm2835-hwmon.c | 22 +++++++++++++++------- drivers/thermal/bcm2835-thermal.c | 15 ++++++++++++++- - 4 files changed, 61 insertions(+), 8 deletions(-) + 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 35c5042..2f80e88 100644 +index 5b0a171..d11f688 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -229,6 +229,7 @@ CONFIG_BRIDGE_EBT_SNAT=m +@@ -217,6 +217,7 @@ CONFIG_BRIDGE_EBT_SNAT=m CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_ULOG=m CONFIG_BRIDGE_EBT_NFLOG=m @@ -125788,7 +117584,7 @@ index 35c5042..2f80e88 100644 CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y -@@ -424,6 +425,7 @@ CONFIG_RT2500USB=m +@@ -353,6 +354,7 @@ CONFIG_RT2500USB=m CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT53XX=y @@ -125796,19 +117592,21 @@ index 35c5042..2f80e88 100644 CONFIG_WL1251=m CONFIG_WL12XX_MENU=m CONFIG_ZD1211RW=m -@@ -483,6 +485,8 @@ CONFIG_W1_SLAVE_DS2760=m - CONFIG_W1_SLAVE_DS2780=m - CONFIG_W1_SLAVE_BQ27000=m +@@ -432,6 +434,8 @@ CONFIG_SPI_BCM2708=m + CONFIG_SPI_SPIDEV=m + CONFIG_GPIO_SYSFS=y # CONFIG_HWMON is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_BCM2835=y CONFIG_WATCHDOG=y CONFIG_BCM2708_WDT=m CONFIG_MEDIA_SUPPORT=m -@@ -769,6 +773,33 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m +@@ -716,6 +720,35 @@ CONFIG_LEDS_GPIO=y + CONFIG_LEDS_TRIGGER_TIMER=m + CONFIG_LEDS_TRIGGER_HEARTBEAT=m CONFIG_LEDS_TRIGGER_DEFAULT_ON=m - CONFIG_RTC_CLASS=y - CONFIG_RTC_DRV_DS1307=m ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS3232=m @@ -125840,10 +117638,10 @@ index 35c5042..2f80e88 100644 CONFIG_UIO_PDRV=m CONFIG_UIO_PDRV_GENIRQ=m diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index 62f89b9..9e9c4b3 100644 +index 845e902..8c5ad5a 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig -@@ -1441,6 +1441,7 @@ config SENSORS_MC13783_ADC +@@ -1463,6 +1463,7 @@ config SENSORS_MC13783_ADC Support for the A/D converter on MC13783 and MC13892 PMIC. config SENSORS_BCM2835 @@ -125929,23 +117727,23 @@ index f1ecdb2..3f9a733 100644 #include #include -- -1.8.1.5 +1.8.1.6 -From 6b7a815acae4708e7754070a1cf9639cd15a42df Mon Sep 17 00:00:00 2001 +From dbb27e6e511589e6d951a4fc6dd90ae4c87aaccf Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 28 Mar 2013 01:19:54 +0000 -Subject: [PATCH 098/169] 2708fb: Remove some unnecessary dmesg output. +Subject: [PATCH 53/95] 2708fb: Remove some unnecessary dmesg output. --- drivers/video/bcm2708_fb.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/drivers/video/bcm2708_fb.c b/drivers/video/bcm2708_fb.c -index 5ca8aca..efdee9d 100644 +index c82dd90..08d9238 100644 --- a/drivers/video/bcm2708_fb.c +++ b/drivers/video/bcm2708_fb.c -@@ -36,6 +36,12 @@ +@@ -35,6 +35,12 @@ #include #include @@ -125958,7 +117756,7 @@ index 5ca8aca..efdee9d 100644 /* This is limited to 16 characters when displayed by X startup */ static const char *bcm2708_name = "BCM2708 FB"; -@@ -135,17 +141,15 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var, +@@ -134,17 +140,15 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var, { /* info input, var output */ int yres; @@ -125979,7 +117777,7 @@ index 5ca8aca..efdee9d 100644 if (!var->bits_per_pixel) var->bits_per_pixel = 16; -@@ -211,7 +215,7 @@ static int bcm2708_fb_set_par(struct fb_info *info) +@@ -210,7 +214,7 @@ static int bcm2708_fb_set_par(struct fb_info *info) fbinfo->base = 0; /* filled in by VC */ fbinfo->pitch = 0; /* filled in by VC */ @@ -126059,13 +117857,13 @@ index 5ca8aca..efdee9d 100644 return ret; } -- -1.8.1.5 +1.8.1.6 -From 06e32e8c590a3912d419d1bd1df67b18fb5de450 Mon Sep 17 00:00:00 2001 +From fa830efc9affbb36f0ef96b97e337dc76c7b6a78 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 28 Mar 2013 01:20:34 +0000 -Subject: [PATCH 099/169] cpufreq: Remove some unnecessary dmesg output. +Subject: [PATCH 54/95] cpufreq: Remove some unnecessary dmesg output. --- drivers/cpufreq/bcm2835-cpufreq.c | 2 +- @@ -126085,24 +117883,24 @@ index aa6fc66..6ff1edb 100755 } -- -1.8.1.5 +1.8.1.6 -From acde8bfa888be8da053baf372d5dea8e0d64172c Mon Sep 17 00:00:00 2001 +From b69b507614b12eb36d6c9ab9c69bc83a7d3d0e00 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 17 Sep 2012 22:57:29 +0100 -Subject: [PATCH 100/169] Switch to powersave governor. We'll enable ondemand - in the distribution +Subject: [PATCH 55/95] Switch to powersave governor. We'll enable ondemand in + the distribution --- arch/arm/configs/bcmrpi_defconfig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 2f80e88..b4a3da1 100644 +index d11f688..c1afa47 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -48,9 +48,10 @@ CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,11520 +@@ -41,9 +41,10 @@ CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,11520 CONFIG_KEXEC=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=m @@ -126116,26 +117914,38 @@ index 2f80e88..b4a3da1 100644 CONFIG_CPU_IDLE=y CONFIG_VFP=y -- -1.8.1.5 +1.8.1.6 -From 31c91aa7243f5c695eedbab74fa5098efc947d3e Mon Sep 17 00:00:00 2001 +From 69c9c89722e48fec53c8e7260b77bdaf6d39b99f Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Thu, 20 Sep 2012 21:45:25 +0100 -Subject: [PATCH 101/169] Enable multiple ALSA channels +Date: Wed, 17 Apr 2013 12:16:36 +0100 +Subject: [PATCH 56/95] Enable multiple ALSA channels --- - arch/arm/mach-bcm2708/bcm2708.c | 42 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 42 insertions(+) + arch/arm/mach-bcm2708/bcm2708.c | 54 ++++++++++++++++++++++++++++++++++++----- + 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 192fa5f..f608687 100644 +index 2875cd2..27e9553 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -516,6 +516,48 @@ struct platform_device bcm2708_powerman_device = { - .resource = 0, - .num_resources = 0, - }, +@@ -469,12 +469,54 @@ struct platform_device bcm2708_powerman_device = { + + + static struct platform_device bcm2708_alsa_devices[] = { +- [0] = { +- .name = "bcm2835_AUD0", +- .id = 0, /* first audio device */ +- .resource = 0, +- .num_resources = 0, +- }, ++ [0] = { ++ .name = "bcm2835_AUD0", ++ .id = 0, /* first audio device */ ++ .resource = 0, ++ .num_resources = 0, ++ }, + [1] = { + .name = "bcm2835_AUD1", + .id = 1, /* second audio device */ @@ -126182,140 +117992,13 @@ index 192fa5f..f608687 100644 static struct resource bcm2708_spi_resources[] = { -- -1.8.1.5 +1.8.1.6 -From e26fdf56f960778ec5d561d51d3bf1de3d8062b9 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 24 Sep 2012 23:40:21 +0100 -Subject: [PATCH 102/169] Use system timer for udelay, so unaffected by cpufreq - ---- - arch/arm/mach-bcm2708/bcm2708.c | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index f608687..a199415 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -859,6 +859,36 @@ static inline void bcm2708_init_led(void) - } - #endif - -+ -+/* The assembly versions in delay.S don't account for core freq changing in cpufreq driver */ -+/* Use 1MHz system timer for busy waiting */ -+void __udelay(unsigned long usecs) -+{ -+ unsigned long start = readl(__io_address(ST_BASE + 0x04)); -+ unsigned long now; -+ do { -+ now = readl(__io_address(ST_BASE + 0x04)); -+ } while ((long)(now - start) <= usecs); -+} -+ -+ -+void __const_udelay(unsigned long scaled_usecs) -+{ -+ /* want /107374, this is about 3% bigger. We know usecs is less than 2000, so shouldn't overflow */ -+ const unsigned long usecs = scaled_usecs * 10 >> 20; -+ unsigned long start = readl(__io_address(ST_BASE + 0x04)); -+ unsigned long now; -+ do { -+ now = readl(__io_address(ST_BASE + 0x04)); -+ } while ((long)(now - start) <= usecs); -+} -+ -+void __delay(int loops) -+{ -+ while (--loops > 0) -+ nop(); -+} -+ - MACHINE_START(BCM2708, "BCM2708") - /* Maintainer: Broadcom Europe Ltd. */ - .map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = --- -1.8.1.5 - - -From 9f3e276e55c1d0565c6b9aa9413ac606f7328449 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 26 Sep 2012 13:46:03 +0100 -Subject: [PATCH 103/169] Move __delay function into assembly to get accurate - BogoMips - ---- - arch/arm/mach-bcm2708/Makefile | 2 +- - arch/arm/mach-bcm2708/bcm2708.c | 6 ------ - arch/arm/mach-bcm2708/delay.S | 20 ++++++++++++++++++++ - 3 files changed, 21 insertions(+), 7 deletions(-) - create mode 100644 arch/arm/mach-bcm2708/delay.S - -diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile -index 164ecb2..3ee8a4b 100644 ---- a/arch/arm/mach-bcm2708/Makefile -+++ b/arch/arm/mach-bcm2708/Makefile -@@ -2,7 +2,7 @@ - # Makefile for the linux kernel. - # - --obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o -+obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o delay.o - obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o - obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index a199415..b67d05f 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -883,12 +883,6 @@ void __const_udelay(unsigned long scaled_usecs) - } while ((long)(now - start) <= usecs); - } - --void __delay(int loops) --{ -- while (--loops > 0) -- nop(); --} -- - MACHINE_START(BCM2708, "BCM2708") - /* Maintainer: Broadcom Europe Ltd. */ - .map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = -diff --git a/arch/arm/mach-bcm2708/delay.S b/arch/arm/mach-bcm2708/delay.S -new file mode 100644 -index 0000000..4256d29 ---- /dev/null -+++ b/arch/arm/mach-bcm2708/delay.S -@@ -0,0 +1,20 @@ -+/* -+ * linux/arch/arm/lib/delay.S -+ * -+ * Copyright (C) 1995, 1996 Russell King -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+#include -+#include -+#include -+ -+ .text -+@ Delay routine -+ENTRY(__delay) -+ subs r0, r0, #1 -+ bhi __delay -+ mov pc, lr -+ENDPROC(__delay) --- -1.8.1.5 - - -From d5f1c20363c14eb179a4040ead260c77f89c58df Mon Sep 17 00:00:00 2001 +From 3f3eccd9a846adf02d10ad69465943a65739bb3b Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Oct 2012 20:08:19 +0100 -Subject: [PATCH 104/169] set i2c speed via module-parameter or menuconfig. +Subject: [PATCH 57/95] set i2c speed via module-parameter or menuconfig. Thanks FrankBoesing --- @@ -126324,10 +118007,10 @@ Subject: [PATCH 104/169] set i2c speed via module-parameter or menuconfig. 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig -index 62930b7..d83cb7f 100644 +index f1b55eb..f57cd6b 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig -@@ -327,6 +327,17 @@ config I2C_BCM2708 +@@ -351,6 +351,17 @@ config I2C_BCM2708 support for the BCM2708. BSC is a Broadcom proprietary bus compatible with I2C/TWI/SMBus. @@ -126387,13 +118070,13 @@ index 7cae615..3391889 100644 return 0; -- -1.8.1.5 +1.8.1.6 -From 8866225334f3c10d7eae04b571fc699f92e3b6bd Mon Sep 17 00:00:00 2001 +From 1f7f1d615177aaba6bae39baf3e0c074307c7c71 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Oct 2012 21:31:48 +0100 -Subject: [PATCH 105/169] Allow the number of cycles delay between sdcard +Subject: [PATCH 58/95] Allow the number of cycles delay between sdcard peripheral writes to be specified on command line with sdhci-bcm2708.cycle_delay @@ -126402,7 +118085,7 @@ Subject: [PATCH 105/169] Allow the number of cycles delay between sdcard 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index db84f11..e56070a 100644 +index 2703103..80e4228 100644 --- a/drivers/mmc/host/sdhci-bcm2708.c +++ b/drivers/mmc/host/sdhci-bcm2708.c @@ -82,6 +82,8 @@ @@ -126432,21 +118115,21 @@ index db84f11..e56070a 100644 MODULE_DESCRIPTION("Secure Digital Host Controller Interface platform driver"); MODULE_AUTHOR("Broadcom "); -- -1.8.1.5 +1.8.1.6 -From 3fb20db84020ab2ea4f8c011108e3701a7a56416 Mon Sep 17 00:00:00 2001 +From b220aacb415f9c27ba17cbf0bf1a9141f32f9b2a Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Fri, 5 Oct 2012 17:41:53 +0100 -Subject: [PATCH 106/169] Fix vc-mem by using module parameters +Date: Wed, 17 Apr 2013 14:37:25 +0100 +Subject: [PATCH 59/95] Fix vc-mem by using module parameters --- - arch/arm/mach-bcm2708/bcm2708.c | 22 +++++---- + arch/arm/mach-bcm2708/bcm2708.c | 12 ++--- arch/arm/mach-bcm2708/vc_mem.c | 99 +++++++++-------------------------------- - 2 files changed, 35 insertions(+), 86 deletions(-) + 2 files changed, 28 insertions(+), 83 deletions(-) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index b67d05f..c993049 100644 +index 27e9553..e010515 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -77,6 +77,7 @@ @@ -126457,7 +118140,7 @@ index b67d05f..c993049 100644 static void __init bcm2708_init_led(void); -@@ -669,8 +670,12 @@ void __init bcm2708_init(void) +@@ -633,8 +634,12 @@ void __init bcm2708_init(void) { int i; @@ -126470,7 +118153,7 @@ index b67d05f..c993049 100644 for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add(&lookups[i]); -@@ -709,12 +714,6 @@ void __init bcm2708_init(void) +@@ -671,12 +676,6 @@ void __init bcm2708_init(void) bcm_register_device(&bcm2835_hwmon_device); bcm_register_device(&bcm2835_thermal_device); @@ -126483,20 +118166,9 @@ index b67d05f..c993049 100644 for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { struct amba_device *d = amba_devs[i]; amba_device_register(d, &iomem_resource); -@@ -885,7 +884,12 @@ void __const_udelay(unsigned long scaled_usecs) +@@ -842,3 +841,4 @@ void __init bcm2708_init_early(void) - MACHINE_START(BCM2708, "BCM2708") - /* Maintainer: Broadcom Europe Ltd. */ -- .map_io = bcm2708_map_io,.init_irq = bcm2708_init_irq,.timer = -- &bcm2708_timer,.init_machine = -- bcm2708_init, MACHINE_END module_param(boardrev, uint, 0644); -+ .map_io = bcm2708_map_io, -+ .init_irq = bcm2708_init_irq, -+ .timer =&bcm2708_timer, -+ .init_machine =bcm2708_init, -+MACHINE_END -+ -+module_param(boardrev, uint, 0644); + module_param(boardrev, uint, 0644); module_param(serial, uint, 0644); +module_param(uart_clock, uint, 0644); diff --git a/arch/arm/mach-bcm2708/vc_mem.c b/arch/arm/mach-bcm2708/vc_mem.c @@ -126681,13 +118353,13 @@ index ae1810c..5c56b31 100644 +module_param(mem_base, uint, 0644); + -- -1.8.1.5 +1.8.1.6 -From 4793646aa1268a3d9c86d97f31d032ddd0cba69c Mon Sep 17 00:00:00 2001 +From 13f54027174a3fb2798bbddaaea57f95e072ae84 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 5 Oct 2012 22:44:47 +0100 -Subject: [PATCH 107/169] Support dummy vc-mem ioctl used by vcdbg +Subject: [PATCH 60/95] Support dummy vc-mem ioctl used by vcdbg --- arch/arm/mach-bcm2708/include/mach/vc_mem.h | 1 + @@ -126732,22 +118404,255 @@ index 5c56b31..f12cb49 100644 { return -ENOTTY; -- -1.8.1.5 +1.8.1.6 -From 655b376569c6b926e59b74b66116d4c104876ee8 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 23:16:13 +0000 -Subject: [PATCH 108/169] mmc:Fix up issues with rebase +From 67bb97a7ddc0c18b18738c8d8cba6954f3668c85 Mon Sep 17 00:00:00 2001 +From: dero +Date: Mon, 19 Nov 2012 12:46:06 +0100 +Subject: [PATCH 61/95] Lazy CRC quirk: Implemented retrying mechanisms for SD + SSR and SCR, disabled missing_status and spurious CRC ACMD51 quirks by + default (should be fixed by the retrying-mechanishm) --- - drivers/mmc/host/sdhci-bcm2708.c | 131 +---------------- - drivers/mmc/host/sdhci.c | 303 ++++++++++++++++----------------------- - drivers/mmc/host/sdhci.h | 5 - - 3 files changed, 122 insertions(+), 317 deletions(-) + drivers/mmc/core/sd.c | 115 +++++++++++++++++++++++++++++++++------ + drivers/mmc/host/sdhci-bcm2708.c | 11 +++- + 2 files changed, 108 insertions(+), 18 deletions(-) + +diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c +index 9e645e1..1ee6cf3 100644 +--- a/drivers/mmc/core/sd.c ++++ b/drivers/mmc/core/sd.c +@@ -13,6 +13,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -58,6 +60,15 @@ + __res & __mask; \ + }) + ++// timeout for tries ++static const unsigned long retry_timeout_ms= 10*1000; ++ ++// try at least 10 times, even if timeout is reached ++static const int retry_min_tries= 10; ++ ++// delay between tries ++static const unsigned long retry_delay_ms= 10; ++ + /* + * Given the decoded CSD structure, decode the raw CID to our CID structure. + */ +@@ -210,12 +221,62 @@ static int mmc_decode_scr(struct mmc_card *card) + } + + /* +- * Fetch and process SD Status register. ++ * Fetch and process SD Configuration Register. ++ */ ++static int mmc_read_scr(struct mmc_card *card) ++{ ++ unsigned long timeout_at; ++ int err, tries; ++ ++ timeout_at= jiffies + msecs_to_jiffies( retry_timeout_ms ); ++ tries= 0; ++ ++ while( tries < retry_min_tries || time_before( jiffies, timeout_at ) ) ++ { ++ unsigned long delay_at; ++ tries++; ++ ++ err = mmc_app_send_scr(card, card->raw_scr); ++ if( !err ) ++ break; // sucess!!! ++ ++ touch_nmi_watchdog(); // we are still alive! ++ ++ // delay ++ delay_at= jiffies + msecs_to_jiffies( retry_delay_ms ); ++ while( time_before( jiffies, delay_at ) ) ++ { ++ mdelay( 1 ); ++ touch_nmi_watchdog(); // we are still alive! ++ } ++ } ++ ++ if( err) ++ { ++ pr_err("%s: failed to read SD Configuration register (SCR) after %d tries during %lu ms, error %d\n", mmc_hostname(card->host), tries, retry_timeout_ms, err ); ++ return err; ++ } ++ ++ if( tries > 1 ) ++ { ++ pr_info("%s: could read SD Configuration register (SCR) at the %dth attempt\n", mmc_hostname(card->host), tries ); ++ } ++ ++ err = mmc_decode_scr(card); ++ if (err) ++ return err; ++ ++ return err; ++} ++ ++/* ++ * Fetch and process SD Status Register. + */ + static int mmc_read_ssr(struct mmc_card *card) + { ++ unsigned long timeout_at; + unsigned int au, es, et, eo; +- int err, i; ++ int err, i, tries; + u32 *ssr; + + if (!(card->csd.cmdclass & CCC_APP_SPEC)) { +@@ -227,15 +288,41 @@ static int mmc_read_ssr(struct mmc_card *card) + ssr = kmalloc(64, GFP_KERNEL); + if (!ssr) + return -ENOMEM; +- +- err = mmc_app_sd_status(card, ssr); +- if (err) { +- pr_warning("%s: problem reading SD Status " +- "register.\n", mmc_hostname(card->host)); +- err = 0; ++ ++ timeout_at= jiffies + msecs_to_jiffies( retry_timeout_ms ); ++ tries= 0; ++ ++ while( tries < retry_min_tries || time_before( jiffies, timeout_at ) ) ++ { ++ unsigned long delay_at; ++ tries++; ++ ++ err= mmc_app_sd_status(card, ssr); ++ if( !err ) ++ break; // sucess!!! ++ ++ touch_nmi_watchdog(); // we are still alive! ++ ++ // delay ++ delay_at= jiffies + msecs_to_jiffies( retry_delay_ms ); ++ while( time_before( jiffies, delay_at ) ) ++ { ++ mdelay( 1 ); ++ touch_nmi_watchdog(); // we are still alive! ++ } ++ } ++ ++ if( err) ++ { ++ pr_err("%s: failed to read SD Status register (SSR) after %d tries during %lu ms, error %d\n", mmc_hostname(card->host), tries, retry_timeout_ms, err ); + goto out; + } + ++ if( tries > 1 ) ++ { ++ pr_info("%s: could read SD Status register (SSR) at the %dth attempt\n", mmc_hostname(card->host), tries ); ++ } ++ + for (i = 0; i < 16; i++) + ssr[i] = be32_to_cpu(ssr[i]); + +@@ -808,15 +895,11 @@ int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card, + + if (!reinit) { + /* +- * Fetch SCR from card. ++ * Fetch and decode SD Configuration register. + */ +- err = mmc_app_send_scr(card, card->raw_scr); +- if (err) +- return err; +- +- err = mmc_decode_scr(card); +- if (err) +- return err; ++ err = mmc_read_scr(card); ++ if( err ) ++ return err; + + /* + * Fetch and process SD Status register. +diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c +index 80e4228..4d6c616 100644 +--- a/drivers/mmc/host/sdhci-bcm2708.c ++++ b/drivers/mmc/host/sdhci-bcm2708.c +@@ -142,6 +142,7 @@ static inline unsigned long int since_ns(hptime_t t) + static int emmc_clock_freq = BCM2708_EMMC_CLOCK_FREQ; + static bool sync_after_dma = 1; + static bool missing_status = 1; ++static bool spurious_crc_acmd51 = 0; + bool enable_llm = 1; + + #if 0 +@@ -1220,7 +1221,7 @@ static unsigned int sdhci_bcm2708_quirk_extra_ints(struct sdhci_host *host) + return 1; + } + +-static unsigned int sdhci_bcm2708_quirk_spurious_crc(struct sdhci_host *host) ++static unsigned int sdhci_bcm2708_quirk_spurious_crc_acmd51(struct sdhci_host *host) + { + return 1; + } +@@ -1270,7 +1271,6 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) + .pdma_reset = sdhci_bcm2708_platdma_reset, + #endif + .extra_ints = sdhci_bcm2708_quirk_extra_ints, +- .spurious_crc_acmd51 = sdhci_bcm2708_quirk_spurious_crc, + .voltage_broken = sdhci_bcm2708_quirk_voltage_broken, + .uhs_broken = sdhci_bcm2708_uhs_broken, + }; +@@ -1315,6 +1315,11 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) + sdhci_bcm2708_ops.missing_status = sdhci_bcm2708_missing_status; + } + ++ if( spurious_crc_acmd51 ) { ++ sdhci_bcm2708_ops.spurious_crc_acmd51 = sdhci_bcm2708_quirk_spurious_crc_acmd51; ++ } ++ ++ + printk("sdhci: %s low-latency mode\n",enable_llm?"Enable":"Disable"); + + host->hw_name = "BCM2708_Arasan"; +@@ -1518,6 +1523,7 @@ static void __exit sdhci_drv_exit(void) + module_param(emmc_clock_freq, int, 0444); + module_param(sync_after_dma, bool, 0444); + module_param(missing_status, bool, 0444); ++module_param(spurious_crc_acmd51, bool, 0444); + module_param(enable_llm, bool, 0444); + module_param(cycle_delay, int, 0444); + +@@ -1530,6 +1536,7 @@ static void __exit sdhci_drv_exit(void) + MODULE_PARM_DESC(emmc_clock_freq, "Specify the speed of emmc clock"); + MODULE_PARM_DESC(sync_after_dma, "Block in driver until dma complete"); + MODULE_PARM_DESC(missing_status, "Use the missing status quirk"); ++MODULE_PARM_DESC(spurious_crc_acmd51, "Use the spurious crc quirk for reading SCR (ACMD51)"); + MODULE_PARM_DESC(enable_llm, "Enable low-latency mode"); + + +-- +1.8.1.6 + + +From fdcef746471a1baddb8a5e09f7778491de6d9bb1 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 12 Apr 2013 22:41:19 +0100 +Subject: [PATCH 62/95] mmc:sdhci-bcm2708.c:Fix up issues with rebase + +--- + drivers/mmc/host/sdhci-bcm2708.c | 137 ++------------------------------------- + 1 file changed, 4 insertions(+), 133 deletions(-) diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index e56070a..cd7d35d 100644 +index 4d6c616..3556ed3 100644 --- a/drivers/mmc/host/sdhci-bcm2708.c +++ b/drivers/mmc/host/sdhci-bcm2708.c @@ -33,7 +33,6 @@ @@ -126769,7 +118674,7 @@ index e56070a..cd7d35d 100644 #define REG_EXRDFIFO_EN 0x80 #define REG_EXRDFIFO_CFG 0x84 -@@ -386,10 +381,6 @@ struct sdhci_bcm2708_priv { +@@ -387,10 +382,6 @@ struct sdhci_bcm2708_priv { /* tracking scatter gather progress */ unsigned sg_ix; /* scatter gather list index */ unsigned sg_done; /* bytes in current sg_ix done */ @@ -126780,7 +118685,7 @@ index e56070a..cd7d35d 100644 #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA unsigned char dma_wanted; /* DMA transfer requested */ unsigned char dma_waits; /* wait states in DMAs */ -@@ -1043,7 +1034,6 @@ static ssize_t attr_status_show(struct device *_dev, +@@ -1044,7 +1035,6 @@ static ssize_t attr_status_show(struct device *_dev, if (host) { struct sdhci_bcm2708_priv *host_priv = SDHCI_HOST_PRIV(host); @@ -126788,7 +118693,7 @@ index e56070a..cd7d35d 100644 return sprintf(buf, "present: yes\n" "power: %s\n" -@@ -1053,10 +1043,7 @@ static ssize_t attr_status_show(struct device *_dev, +@@ -1054,10 +1044,7 @@ static ssize_t attr_status_show(struct device *_dev, #else "dma: unconfigured\n", #endif @@ -126800,7 +118705,7 @@ index e56070a..cd7d35d 100644 host->clock #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA , (host->flags & SDHCI_USE_PLATDMA)? "on": "off" -@@ -1105,110 +1092,6 @@ static int sdhci_bcm2708_resume(struct platform_device *dev) +@@ -1106,110 +1093,6 @@ static int sdhci_bcm2708_resume(struct platform_device *dev) #endif @@ -126911,7 +118816,7 @@ index e56070a..cd7d35d 100644 /*****************************************************************************\ * * * Device quirk functions. Implemented as local ops because the flags * -@@ -1259,10 +1142,6 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) +@@ -1260,10 +1143,6 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) #endif .get_max_clock = sdhci_bcm2708_get_max_clock, @@ -126922,7 +118827,16 @@ index e56070a..cd7d35d 100644 #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA // Platform DMA operations .pdma_able = sdhci_bcm2708_platdma_dmaable, -@@ -1350,11 +1229,6 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) +@@ -1281,7 +1160,7 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) + * * + \*****************************************************************************/ + +-static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) ++static int sdhci_bcm2708_probe(struct platform_device *pdev) + { + struct sdhci_host *host; + struct resource *iomem; +@@ -1355,11 +1234,6 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) host_priv = SDHCI_HOST_PRIV(host); @@ -126934,7 +118848,7 @@ index e56070a..cd7d35d 100644 #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA host_priv->dma_wanted = 0; #ifdef CHECK_DMA_USE -@@ -1436,8 +1310,6 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) +@@ -1441,8 +1315,6 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) host_priv->cb_handle); err_alloc_cb: #endif @@ -126943,7 +118857,16 @@ index e56070a..cd7d35d 100644 iounmap(host->ioaddr); err_remap: release_mem_region(iomem->start, resource_size(iomem)); -@@ -1470,7 +1342,6 @@ static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) +@@ -1453,7 +1325,7 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) + return ret; + } + +-static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) ++static int sdhci_bcm2708_remove(struct platform_device *pdev) + { + struct sdhci_host *host = platform_get_drvdata(pdev); + struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); +@@ -1475,7 +1347,6 @@ static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) dma_free_writecombine(&pdev->dev, SZ_4K, host_priv->cb_base, host_priv->cb_handle); #endif @@ -126951,19 +118874,43 @@ index e56070a..cd7d35d 100644 sdhci_remove_host(host, dead); iounmap(host->ioaddr); release_mem_region(iomem->start, resource_size(iomem)); +@@ -1491,7 +1362,7 @@ static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) + .owner = THIS_MODULE, + }, + .probe = sdhci_bcm2708_probe, +- .remove = __devexit_p(sdhci_bcm2708_remove), ++ .remove = sdhci_bcm2708_remove, + + #ifdef CONFIG_PM + .suspend = sdhci_bcm2708_suspend, +-- +1.8.1.6 + + +From c430bc8ffc9625615504183a8cfdd9408bbcab7a Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 12 Apr 2013 22:41:31 +0100 +Subject: [PATCH 63/95] mmc:sdhci.c:Fix up issues with rebase + +--- + drivers/mmc/host/sdhci.c | 103 ++++++++++++++++------------------------------- + 1 file changed, 35 insertions(+), 68 deletions(-) + diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index 791d6dd..9b7a727 100644 +index 8da17c0..c9dcd22 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c -@@ -28,7 +28,6 @@ +@@ -28,8 +28,8 @@ #include #include #include -#include #include ++#include #include "sdhci.h" -@@ -128,6 +127,7 @@ static void sdhci_dumpregs(struct sdhci_host *host) + +@@ -129,6 +129,7 @@ static void sdhci_dumpregs(struct sdhci_host *host) void sdhci_spin_lock(struct sdhci_host *host) { spin_lock(&host->lock); @@ -126971,7 +118918,7 @@ index 791d6dd..9b7a727 100644 if(enable_llm) { disable_irq_nosync(host->irq); -@@ -135,22 +135,26 @@ void sdhci_spin_lock(struct sdhci_host *host) +@@ -136,22 +137,26 @@ void sdhci_spin_lock(struct sdhci_host *host) disable_irq_nosync(host->second_irq); local_irq_enable(); } @@ -126999,7 +118946,7 @@ index 791d6dd..9b7a727 100644 if(enable_llm) { while(sdhci_locked) -@@ -164,37 +168,44 @@ void sdhci_spin_lock_irqsave(struct sdhci_host *host,unsigned long *flags) +@@ -165,37 +170,44 @@ void sdhci_spin_lock_irqsave(struct sdhci_host *host,unsigned long *flags) local_irq_enable(); } else @@ -127045,7 +118992,7 @@ index 791d6dd..9b7a727 100644 } static void sdhci_clear_set_irqs(struct sdhci_host *host, u32 clear, u32 set) -@@ -280,9 +291,7 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask) +@@ -281,9 +293,7 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask) return; } timeout--; @@ -127055,401 +119002,199 @@ index 791d6dd..9b7a727 100644 } if (host->ops->platform_reset_exit) -@@ -1416,13 +1425,6 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) - present = sdhci_readl(host, SDHCI_PRESENT_STATE) & - SDHCI_CARD_PRESENT; - -- /* If we're using a cd-gpio, testing the presence bit might fail. */ -- if (!present) { -- int ret = mmc_gpio_get_cd(host->mmc); -- if (ret > 0) -- present = true; -- } -- - if (!present || host->flags & SDHCI_DEVICE_DEAD) { - host->mrq->cmd->error = -ENOMEDIUM; - tasklet_schedule(&host->finish_tasklet); -@@ -1738,65 +1740,57 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) - sdhci_spin_unlock_irqrestore(host, flags); - } - --static int sdhci_do_3_3v_signal_voltage_switch(struct sdhci_host *host, -- u16 ctrl) -+static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, -+ struct mmc_ios *ios) - { -- int ret; -- -- /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ -- ctrl &= ~SDHCI_CTRL_VDD_180; -- sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); -- -- if (host->vqmmc) { -- ret = regulator_set_voltage(host->vqmmc, 2700000, 3600000); -- if (ret) { -- pr_warning("%s: Switching to 3.3V signalling voltage " -- " failed\n", mmc_hostname(host->mmc)); -- return -EIO; -- } -- } -- /* Wait for 5ms */ -- usleep_range(5000, 5500); -+ u8 pwr; -+ u16 clk, ctrl; -+ u32 present_state; - -- /* 3.3V regulator output should be stable within 5 ms */ -- ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -- if (!(ctrl & SDHCI_CTRL_VDD_180)) -+ /* -+ * Signal Voltage Switching is only applicable for Host Controllers -+ * v3.00 and above. -+ */ -+ if (host->version < SDHCI_SPEC_300) - return 0; - -- pr_warning("%s: 3.3V regulator output did not became stable\n", -- mmc_hostname(host->mmc)); -- -- return -EIO; --} -- --static int sdhci_do_1_8v_signal_voltage_switch(struct sdhci_host *host, -- u16 ctrl) --{ -- u8 pwr; -- u16 clk; -- u32 present_state; -- int ret; -+ /* -+ * We first check whether the request is to set signalling voltage -+ * to 3.3V. If so, we change the voltage to 3.3V and return quickly. -+ */ -+ ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -+ if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) { -+ /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ -+ ctrl &= ~SDHCI_CTRL_VDD_180; -+ sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - -- /* Stop SDCLK */ -- clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); -- clk &= ~SDHCI_CLOCK_CARD_EN; -- sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -+ /* Wait for 5ms */ -+ usleep_range(5000, 5500); - -- /* Check whether DAT[3:0] is 0000 */ -- present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); -- if (!((present_state & SDHCI_DATA_LVL_MASK) >> -- SDHCI_DATA_LVL_SHIFT)) { -- /* -- * Enable 1.8V Signal Enable in the Host Control2 -- * register -- */ -- if (host->vqmmc) -- ret = regulator_set_voltage(host->vqmmc, -- 1700000, 1950000); -- else -- ret = 0; -+ /* 3.3V regulator output should be stable within 5 ms */ -+ ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -+ if (!(ctrl & SDHCI_CTRL_VDD_180)) -+ return 0; -+ else { -+ pr_info(DRIVER_NAME ": Switching to 3.3V " -+ "signalling voltage failed\n"); -+ return -EIO; -+ } -+ } else if (!(ctrl & SDHCI_CTRL_VDD_180) && -+ (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180)) { -+ /* Stop SDCLK */ -+ clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); -+ clk &= ~SDHCI_CLOCK_CARD_EN; -+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); - -- if (!ret) { -+ /* Check whether DAT[3:0] is 0000 */ -+ present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); -+ if (!((present_state & SDHCI_DATA_LVL_MASK) >> -+ SDHCI_DATA_LVL_SHIFT)) { -+ /* -+ * Enable 1.8V Signal Enable in the Host Control2 -+ * register -+ */ - ctrl |= SDHCI_CTRL_VDD_180; - sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - -@@ -1805,7 +1799,7 @@ static int sdhci_do_1_8v_signal_voltage_switch(struct sdhci_host *host, - - ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); - if (ctrl & SDHCI_CTRL_VDD_180) { -- /* Provide SDCLK again and wait for 1ms */ -+ /* Provide SDCLK again and wait for 1ms*/ - clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); - clk |= SDHCI_CLOCK_CARD_EN; - sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -@@ -1822,55 +1816,29 @@ static int sdhci_do_1_8v_signal_voltage_switch(struct sdhci_host *host, - return 0; - } +@@ -925,11 +935,11 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) + ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); + ctrl &= ~SDHCI_CTRL_DMA_MASK; + if (! (host->flags & SDHCI_USE_PLATDMA)) { +- if ((host->flags & SDHCI_REQ_USE_DMA) && +- (host->flags & SDHCI_USE_ADMA)) +- ctrl |= SDHCI_CTRL_ADMA32; +- else +- ctrl |= SDHCI_CTRL_SDMA; ++ if ((host->flags & SDHCI_REQ_USE_DMA) && ++ (host->flags & SDHCI_USE_ADMA)) ++ ctrl |= SDHCI_CTRL_ADMA32; ++ else ++ ctrl |= SDHCI_CTRL_SDMA; } -- } -- -- /* -- * If we are here, that means the switch to 1.8V signaling -- * failed. We power cycle the card, and retry initialization -- * sequence by setting S18R to 0. -- */ -- pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); -- pwr &= ~SDHCI_POWER_ON; -- sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -- if (host->vmmc) -- regulator_disable(host->vmmc); -- -- /* Wait for 1ms as per the spec */ -- usleep_range(1000, 1500); -- pwr |= SDHCI_POWER_ON; -- sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -- if (host->vmmc) -- regulator_enable(host->vmmc); + sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); + } +@@ -1392,35 +1402,6 @@ static int sdhci_set_power(struct sdhci_host *host, unsigned short power) + return power; + } -- pr_warning("%s: Switching to 1.8V signalling voltage failed, " -- "retrying with S18R set to 0\n", mmc_hostname(host->mmc)); -- -- return -EAGAIN; +-/* Power on or off the circuitary supporting the register set */ +-static int sdhci_set_plat_power(struct sdhci_host *host, int power_mode) +-{ +- if (host->ops->set_plat_power) +- return host->ops->set_plat_power(host, power_mode); +- else +- return 0; -} - --static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, -- struct mmc_ios *ios) +-/* Click forwards one step towards fully on */ +-static int sdhci_enable(struct mmc_host *mmc) -{ -- u16 ctrl; -+ /* -+ * If we are here, that means the switch to 1.8V signaling -+ * failed. We power cycle the card, and retry initialization -+ * sequence by setting S18R to 0. -+ */ -+ pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); -+ pwr &= ~SDHCI_POWER_ON; -+ sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -+ if (host->vmmc) -+ regulator_disable(host->vmmc); - -- /* -- * Signal Voltage Switching is only applicable for Host Controllers -- * v3.00 and above. -- */ -- if (host->version < SDHCI_SPEC_300) -- return 0; -+ /* Wait for 1ms as per the spec */ -+ usleep_range(1000, 1500); -+ pwr |= SDHCI_POWER_ON; -+ sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -+ if (host->vmmc) -+ regulator_enable(host->vmmc); - -- /* -- * We first check whether the request is to set signalling voltage -- * to 3.3V. If so, we change the voltage to 3.3V and return quickly. -- */ -- ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -- if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) -- return sdhci_do_3_3v_signal_voltage_switch(host, ctrl); -- else if (!(ctrl & SDHCI_CTRL_VDD_180) && -- (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180)) -- return sdhci_do_1_8v_signal_voltage_switch(host, ctrl); -- else -+ pr_info(DRIVER_NAME ": Switching to 1.8V signalling " -+ "voltage failed, retrying with S18R set to 0\n"); -+ return -EAGAIN; -+ } else - /* No signal voltage switch required */ - return 0; - } -@@ -2124,11 +2092,32 @@ static void sdhci_enable_preset_value(struct mmc_host *mmc, bool enable) - sdhci_runtime_pm_put(host); - } - --static void sdhci_card_event(struct mmc_host *mmc) -+static const struct mmc_host_ops sdhci_ops = { -+ .request = sdhci_request, -+ .set_ios = sdhci_set_ios, -+ .get_ro = sdhci_get_ro, -+ .hw_reset = sdhci_hw_reset, -+ .enable_sdio_irq = sdhci_enable_sdio_irq, -+ .start_signal_voltage_switch = sdhci_start_signal_voltage_switch, -+ .execute_tuning = sdhci_execute_tuning, -+ .enable_preset_value = sdhci_enable_preset_value, -+ .enable = sdhci_enable, -+ .disable = sdhci_disable, -+}; -+ -+/*****************************************************************************\ -+ * * -+ * Tasklets * -+ * * -+\*****************************************************************************/ -+ -+static void sdhci_tasklet_card(unsigned long param) - { -- struct sdhci_host *host = mmc_priv(mmc); -+ struct sdhci_host *host; +- struct sdhci_host *host; +- +- host = mmc_priv(mmc); +- +- return host->ops->enable? host->ops->enable(host): 0; +-} +- +-/* Click backwards one step towards fully off */ +-static int sdhci_disable(struct mmc_host *mmc, int lazy) +-{ +- struct sdhci_host *host; +- +- host = mmc_priv(mmc); +- +- return host->ops->disable? host->ops->disable(host, lazy): 0; +-} +- + /*****************************************************************************\ + * * + * MMC callbacks * +@@ -1520,7 +1501,6 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) unsigned long flags; + int vdd_bit = -1; + u8 ctrl; +- int rc; -+ host = (struct sdhci_host*)param; -+ sdhci_spin_lock_irqsave(host, &flags); - /* Check host->mrq first in case we are runtime suspended */ -@@ -2147,31 +2136,6 @@ static void sdhci_card_event(struct mmc_host *mmc) - } +@@ -1601,8 +1581,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) + (ios->timing == MMC_TIMING_UHS_SDR50) || + (ios->timing == MMC_TIMING_UHS_SDR104) || + (ios->timing == MMC_TIMING_UHS_DDR50) || +- (ios->timing == MMC_TIMING_UHS_SDR25) || +- (ios->timing == MMC_TIMING_UHS_SDR12)) ++ (ios->timing == MMC_TIMING_UHS_SDR25)) + ctrl |= SDHCI_CTRL_HISPD; + ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2); +@@ -1694,12 +1673,6 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) + + mmiowb(); sdhci_spin_unlock_irqrestore(host, flags); --} - --static const struct mmc_host_ops sdhci_ops = { -- .request = sdhci_request, -- .set_ios = sdhci_set_ios, -- .get_ro = sdhci_get_ro, -- .hw_reset = sdhci_hw_reset, -- .enable_sdio_irq = sdhci_enable_sdio_irq, -- .start_signal_voltage_switch = sdhci_start_signal_voltage_switch, -- .execute_tuning = sdhci_execute_tuning, -- .enable_preset_value = sdhci_enable_preset_value, -- .card_event = sdhci_card_event, --}; -- --/*****************************************************************************\ -- * * -- * Tasklets * -- * * --\*****************************************************************************/ -- --static void sdhci_tasklet_card(unsigned long param) --{ -- struct sdhci_host *host = (struct sdhci_host*)param; -- -- sdhci_card_event(host->mmc); - - mmc_detect_change(host->mmc, msecs_to_jiffies(200)); - } -@@ -2450,8 +2414,6 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) - pr_err("%s: ADMA error\n", mmc_hostname(host->mmc)); - sdhci_show_adma_error(host); - host->data->error = -EIO; -- if (host->ops->adma_workaround) -- host->ops->adma_workaround(host, intmask); - } - - if (host->data->error) { -@@ -3038,9 +3000,6 @@ int sdhci_add_host(struct sdhci_host *host) - if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA)) - mmc->caps |= MMC_CAP_4_BIT_DATA; - -- if (host->quirks2 & SDHCI_QUIRK2_HOST_NO_CMD23) -- mmc->caps &= ~MMC_CAP_CMD23; -- - if (caps[0] & SDHCI_CAN_DO_HISPD) - mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; - -@@ -3048,27 +3007,6 @@ int sdhci_add_host(struct sdhci_host *host) - !(host->mmc->caps & MMC_CAP_NONREMOVABLE)) - mmc->caps |= MMC_CAP_NEEDS_POLL; - -- /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */ -- host->vqmmc = regulator_get(mmc_dev(mmc), "vqmmc"); -- if (IS_ERR_OR_NULL(host->vqmmc)) { -- if (PTR_ERR(host->vqmmc) < 0) { -- pr_info("%s: no vqmmc regulator found\n", -- mmc_hostname(mmc)); -- host->vqmmc = NULL; -- } -- } else { -- regulator_enable(host->vqmmc); -- if (!regulator_is_supported_voltage(host->vqmmc, 1700000, -- 1950000)) -- caps[1] &= ~(SDHCI_SUPPORT_SDR104 | -- SDHCI_SUPPORT_SDR50 | -- SDHCI_SUPPORT_DDR50); +- if (ios->power_mode == MMC_POWER_OFF) { +- do +- rc = sdhci_set_plat_power(host, ios->power_mode); +- while (rc == -EINTR); - } -- -- if (host->quirks2 & SDHCI_QUIRK2_NO_1_8_V) -- caps[1] &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | -- SDHCI_SUPPORT_DDR50); -- - /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */ - if (caps[1] & (SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | - SDHCI_SUPPORT_DDR50)) -@@ -3099,6 +3037,15 @@ int sdhci_add_host(struct sdhci_host *host) - if (caps[1] & SDHCI_DRIVER_TYPE_D) - mmc->caps |= MMC_CAP_DRIVER_TYPE_D; + } -+ /* -+ * If Power Off Notify capability is enabled by the host, -+ * set notify to short power off notify timeout value. -+ */ -+ if (mmc->caps2 & MMC_CAP2_POWEROFF_NOTIFY) -+ mmc->power_notify_type = MMC_HOST_PW_NOTIFY_SHORT; -+ else -+ mmc->power_notify_type = MMC_HOST_PW_NOTIFY_NONE; + static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) +@@ -2262,7 +2235,7 @@ static void sdhci_timeout_timer(unsigned long data) + + if (host->mrq) { + pr_err("%s: Timeout waiting for hardware " +- "interrupt - cmd%d.\n", mmc_hostname(host->mmc), host->last_cmdop); ++ "interrupt - cmd%d.\n", mmc_hostname(host->mmc), host->last_cmdop); + sdhci_dumpregs(host); + + if (host->data) { +@@ -2308,10 +2281,10 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask) + + if (!host->cmd) { + if (!(host->ops->extra_ints)) { +- pr_err("%s: Got command interrupt 0x%08x even " +- "though no command operation was in progress.\n", +- mmc_hostname(host->mmc), (unsigned)intmask); +- sdhci_dumpregs(host); ++ pr_err("%s: Got command interrupt 0x%08x even " ++ "though no command operation was in progress.\n", ++ mmc_hostname(host->mmc), (unsigned)intmask); ++ sdhci_dumpregs(host); + } else + DBG("cmd irq 0x%08x cmd complete\n", (unsigned)intmask); + return; +@@ -2424,12 +2397,12 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) + return; + } + } +- + - /* Initial value for re-tuning timer count */ - host->tuning_count = (caps[1] & SDHCI_RETUNING_TIMER_COUNT_MASK) >> - SDHCI_RETUNING_TIMER_COUNT_SHIFT; -@@ -3117,24 +3064,23 @@ int sdhci_add_host(struct sdhci_host *host) - ocr_avail = 0; + if (!(host->ops->extra_ints)) { +- pr_err("%s: Got data interrupt 0x%08x even " +- "though no data operation was in progress.\n", +- mmc_hostname(host->mmc), (unsigned)intmask); +- sdhci_dumpregs(host); ++ pr_err("%s: Got data interrupt 0x%08x even " ++ "though no data operation was in progress.\n", ++ mmc_hostname(host->mmc), (unsigned)intmask); ++ sdhci_dumpregs(host); + } else + DBG("data irq 0x%08x but no data\n", (unsigned)intmask); - host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); -- if (IS_ERR_OR_NULL(host->vmmc)) { -- if (PTR_ERR(host->vmmc) < 0) { -- pr_info("%s: no vmmc regulator found\n", -- mmc_hostname(mmc)); -- host->vmmc = NULL; -- } -+ if (IS_ERR(host->vmmc)) { -+ pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc)); -+ host->vmmc = NULL; - } - - #ifdef CONFIG_REGULATOR - if (host->vmmc) { -- ret = regulator_is_supported_voltage(host->vmmc, 2700000, -- 3600000); -+ ret = regulator_is_supported_voltage(host->vmmc, 3300000, -+ 3300000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_330))) - caps[0] &= ~SDHCI_CAN_VDD_330; -+ ret = regulator_is_supported_voltage(host->vmmc, 3000000, -+ 3000000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_300))) - caps[0] &= ~SDHCI_CAN_VDD_300; -- ret = regulator_is_supported_voltage(host->vmmc, 1700000, -- 1950000); -+ ret = regulator_is_supported_voltage(host->vmmc, 1800000, -+ 1800000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_180))) - caps[0] &= ~SDHCI_CAN_VDD_180; - } -@@ -3385,15 +3331,8 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) - tasklet_kill(&host->card_tasklet); - tasklet_kill(&host->finish_tasklet); +@@ -2445,7 +2418,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) + DBG("ignoring spurious data_end_bit error\n"); + intmask = SDHCI_INT_DATA_AVAIL|SDHCI_INT_DATA_END; + } else +- host->data->error = -EILSEQ; ++ host->data->error = -EILSEQ; + } else if ((intmask & SDHCI_INT_DATA_CRC) && + SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND)) + != MMC_BUS_TEST_R) { +@@ -2455,7 +2428,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) + DBG("ignoring spurious data_crc_bit error\n"); + intmask = SDHCI_INT_DATA_AVAIL|SDHCI_INT_DATA_END; + } else { +- host->data->error = -EILSEQ; ++ host->data->error = -EILSEQ; + } + } else if (intmask & SDHCI_INT_ADMA_ERROR) { + pr_err("%s: ADMA error\n", mmc_hostname(host->mmc)); +@@ -2718,12 +2691,6 @@ int sdhci_resume_host(struct sdhci_host *host) + { + int ret; - if (host->vmmc) { -- regulator_disable(host->vmmc); -+ if (host->vmmc) - regulator_put(host->vmmc); +- int ret = regulator_enable(host->vmmc); +- if (ret) +- return ret; - } - -- if (host->vqmmc) { -- regulator_disable(host->vqmmc); -- regulator_put(host->vqmmc); -- } + if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA | + SDHCI_USE_PLATDMA)) { + if (host->ops->enable_dma) +@@ -3061,7 +3028,7 @@ int sdhci_add_host(struct sdhci_host *host) + /* Auto-CMD23 stuff only works in ADMA or PIO. */ + if ((host->version >= SDHCI_SPEC_300) && + ((host->flags & SDHCI_USE_ADMA) || +- !(host->flags & SDHCI_USE_SDMA) )) { ++ !(host->flags & SDHCI_USE_SDMA))) { + host->flags |= SDHCI_AUTO_CMD23; + DBG("%s: Auto-CMD23 available\n", mmc_hostname(mmc)); + } else { +@@ -3235,7 +3202,7 @@ int sdhci_add_host(struct sdhci_host *host) - kfree(host->adma_desc); - kfree(host->align_buffer); + if(host->ops->voltage_broken) { + ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34; +- // Cannot support UHS modes is we are stuck at 3.3V; ++ // Cannot support UHS modes if we are stuck at 3.3V; + mmc->caps &= ~(MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_DDR50); + } + +-- +1.8.1.6 + + +From a4e8cd4b90e40e8266765681ed908a6610d80342 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 12 Apr 2013 22:41:37 +0100 +Subject: [PATCH 64/95] mmc:sdhci.h:Fix up issues with rebase + +--- + drivers/mmc/host/sdhci.h | 5 ----- + 1 file changed, 5 deletions(-) + diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h -index 50b3a7f..818d30d 100644 +index 9932ae8..cc393af 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h -@@ -278,11 +278,6 @@ struct sdhci_ops { +@@ -290,11 +290,6 @@ struct sdhci_ops { void (*platform_reset_exit)(struct sdhci_host *host, u8 mask); int (*set_uhs_signaling)(struct sdhci_host *host, unsigned int uhs); @@ -127462,680 +119207,20 @@ index 50b3a7f..818d30d 100644 struct mmc_data *data); void (*pdma_avail)(struct sdhci_host *host, -- -1.8.1.5 +1.8.1.6 -From b45988c955bce3ffe8db66d76ce29e89053948b0 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 23:16:27 +0000 -Subject: [PATCH 109/169] dwc_otg:Fix up issues with rebase - ---- - drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -index 9289fc0..903e670 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -@@ -1164,7 +1164,7 @@ static struct gadget_wrapper *alloc_wrapper(dwc_bus_dev_t *_dev) - d->gadget.dev.parent = &_dev->dev; - d->gadget.dev.release = dwc_otg_pcd_gadget_release; - d->gadget.ops = &dwc_otg_pcd_ops; -- d->gadget.is_dualspeed = dwc_otg_pcd_is_dualspeed(otg_dev->pcd); -+ d->gadget.max_speed = dwc_otg_pcd_is_dualspeed(otg_dev->pcd) ? USB_SPEED_HIGH:USB_SPEED_FULL; - d->gadget.is_otg = dwc_otg_pcd_is_otg(otg_dev->pcd); - - d->driver = 0; -@@ -1296,7 +1296,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, - DWC_DEBUGPL(DBG_PCD, "registering gadget driver '%s'\n", - driver->driver.name); - -- if (!driver || driver->speed == USB_SPEED_UNKNOWN || -+ if (!driver || driver->max_speed == USB_SPEED_UNKNOWN || - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) - !driver->bind || - #else --- -1.8.1.5 - - -From e6a2186a5a214b7353047ee583bd66f42b911db5 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 23:16:51 +0000 -Subject: [PATCH 110/169] bcm2708:Fix up issues with rebase - ---- - arch/arm/tools/mach-types | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types -index 831e1fd..bcd2fdb 100644 ---- a/arch/arm/tools/mach-types -+++ b/arch/arm/tools/mach-types -@@ -517,6 +517,7 @@ torbreck MACH_TORBRECK TORBRECK 3090 - prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103 - paz00 MACH_PAZ00 PAZ00 3128 - acmenetusfoxg20 MACH_ACMENETUSFOXG20 ACMENETUSFOXG20 3129 -+bcm2708 MACH_BCM2708 BCM2708 3138 - ag5evm MACH_AG5EVM AG5EVM 3189 - tsunagi MACH_TSUNAGI TSUNAGI 3197 - ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206 --- -1.8.1.5 - - -From e7e4c5c7e359c257bdf3bb415721effb29773f8d Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 23:17:28 +0000 -Subject: [PATCH 111/169] lib:Fix up issues with rebase - ---- - arch/arm/lib/Makefile | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile -index 0ade0ac..af72969 100644 ---- a/arch/arm/lib/Makefile -+++ b/arch/arm/lib/Makefile -@@ -6,9 +6,8 @@ - - lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \ - csumpartialcopy.o csumpartialcopyuser.o clearbit.o \ -- delay.o findbit.o memchr.o memcpy.o \ -+ delay.o delay-loop.o findbit.o memchr.o memcpy.o \ - memmove.o memset.o memzero.o setbit.o \ -- strncpy_from_user.o strnlen_user.o \ - strchr.o strrchr.o \ - testchangebit.o testclearbit.o testsetbit.o \ - ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \ --- -1.8.1.5 - - -From 7431c19777a716034d3e6f532ced74b678da8885 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 23:17:57 +0000 -Subject: [PATCH 112/169] platform:Fix up issues with rebase - ---- - arch/arm/mach-bcm2708/Kconfig | 2 + - arch/arm/mach-bcm2708/armctrl.c | 191 +--------------------------- - arch/arm/mach-bcm2708/bcm2708.c | 94 ++++++++------ - arch/arm/mach-bcm2708/delay.S | 6 +- - arch/arm/mach-bcm2708/include/mach/memory.h | 7 - - 5 files changed, 64 insertions(+), 236 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig -index 5593167..63bb76c 100644 ---- a/arch/arm/mach-bcm2708/Kconfig -+++ b/arch/arm/mach-bcm2708/Kconfig -@@ -3,6 +3,8 @@ menu "Broadcom BCM2708 Implementations" - - config MACH_BCM2708 - bool "Broadcom BCM2708 Development Platform" -+ select NEED_MACH_MEMORY_H -+ select NEED_MACH_IO_H - select CPU_V6 - help - Include support for the Broadcom(R) BCM2708 platform. -diff --git a/arch/arm/mach-bcm2708/armctrl.c b/arch/arm/mach-bcm2708/armctrl.c -index cdaa761..f22fbba 100644 ---- a/arch/arm/mach-bcm2708/armctrl.c -+++ b/arch/arm/mach-bcm2708/armctrl.c -@@ -21,11 +21,7 @@ - #include - #include - #include --#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,39) - #include --#else --#include --#endif - #include - - #include -@@ -47,11 +43,7 @@ - INTERRUPT_VC_ARASANSDIO - }; - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - static void armctrl_mask_irq(struct irq_data *d) --#else --static void armctrl_mask_irq(unsigned int irq) --#endif - { - static const unsigned int disables[4] = { - IO_ADDRESS(ARM_IRQ_DIBL1), -@@ -66,20 +58,12 @@ static void armctrl_mask_irq(unsigned int irq) - } - else - { --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - unsigned int data = (unsigned int)irq_get_chip_data(d->irq); --#else -- unsigned int data = (unsigned int)get_irq_chip_data(irq); --#endif - writel(1 << (data & 0x1f), __io(disables[(data >> 5) & 0x3])); - } - } - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - static void armctrl_unmask_irq(struct irq_data *d) --#else --static void armctrl_unmask_irq(unsigned int irq) --#endif - { - static const unsigned int enables[4] = { - IO_ADDRESS(ARM_IRQ_ENBL1), -@@ -95,11 +79,7 @@ static void armctrl_unmask_irq(unsigned int irq) - } - else - { --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - unsigned int data = (unsigned int)irq_get_chip_data(d->irq); --#else -- unsigned int data = (unsigned int)get_irq_chip_data(irq); --#endif - writel(1 << (data & 0x1f), __io(enables[(data >> 5) & 0x3])); - } - } -@@ -120,12 +100,7 @@ static void armctrl_unmask_irq(unsigned int irq) - * @soft_int: Save for VIC_INT_SOFT. - * @protect: Save for VIC_PROTECT. - */ --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) --struct armctrl_device { -- struct sys_device sysdev; --#else - struct armctrl_info { --#endif - void __iomem *base; - int irq; - u32 resume_sources; -@@ -134,75 +109,8 @@ struct armctrl_device { - u32 int_enable; - u32 soft_int; - u32 protect; --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) --}; --#else - } armctrl; --#endif -- --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -- --static struct armctrl_device armctrl_devices[1]; -- --static inline struct armctrl_device *to_vic(struct sys_device *sys) --{ -- return container_of(sys, struct armctrl_device, sysdev); --} -- --static int armctrl_id; -- --static int armctrl_class_resume(struct sys_device *dev) --{ --#if 0 // FIXME -- struct armctrl_device *armctrl = to_vic(dev); -- void __iomem *base = armctrl->base; -- -- printk(KERN_DEBUG "%s: resuming armctrl at %p\n", __func__, base); - -- writel(armctrl->int_select, base + VIC_INT_SELECT); -- writel(armctrl->protect, base + VIC_PROTECT); -- -- /* set the enabled ints and then clear the non-enabled */ -- writel(armctrl->int_enable, base + VIC_INT_ENABLE); -- writel(~armctrl->int_enable, base + VIC_INT_ENABLE_CLEAR); -- -- /* and the same for the soft-int register */ -- -- writel(armctrl->soft_int, base + VIC_INT_SOFT); -- writel(~armctrl->soft_int, base + VIC_INT_SOFT_CLEAR); --#endif -- return 0; --} -- --static int armctrl_class_suspend(struct sys_device *dev, pm_message_t state) --{ --#if 0 // FIXME -- struct armctrl_device *armctrl = to_vic(dev); -- void __iomem *base = armctrl->base; -- -- printk(KERN_DEBUG "%s: suspending armctrl at %p\n", __func__, base); -- -- armctrl->int_select = readl(base + VIC_INT_SELECT); -- armctrl->int_enable = readl(base + VIC_INT_ENABLE); -- armctrl->soft_int = readl(base + VIC_INT_SOFT); -- armctrl->protect = readl(base + VIC_PROTECT); -- -- /* set the interrupts (if any) that are used for -- * resuming the system */ -- -- writel(armctrl->resume_irqs, base + VIC_INT_ENABLE); -- writel(~armctrl->resume_irqs, base + VIC_INT_ENABLE_CLEAR); --#endif -- return 0; --} -- --struct sysdev_class armctrl_class = { -- .name = "armctrl", -- .suspend = armctrl_class_suspend, -- .resume = armctrl_class_resume, --}; -- --#endif // < 2.6.39 - - static int armctrl_suspend(void) - { -@@ -229,98 +137,16 @@ static void armctrl_resume(void) - static void __init armctrl_pm_register(void __iomem * base, unsigned int irq, - u32 resume_sources) - { --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -- struct armctrl_device *v; -- -- if (armctrl_id >= ARRAY_SIZE(armctrl_devices)) -- printk(KERN_ERR -- "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", -- __func__); -- else { -- v = &armctrl_devices[armctrl_id]; -- v->base = base; -- v->resume_sources = resume_sources; -- v->irq = irq; -- armctrl_id++; -- } --#else - armctrl.base = base; - armctrl.resume_sources = resume_sources; - armctrl.irq = irq; --#endif - } - --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -- --/** -- * armctrl_pm_init - initicall to register VIC pm -- * -- * This is called via late_initcall() to register -- * the resources for the VICs due to the early -- * nature of the VIC's registration. --*/ --static int __init armctrl_pm_init(void) --{ -- struct armctrl_device *dev = armctrl_devices; -- int err; -- int id; -- -- if (armctrl_id == 0) -- return 0; -- -- err = sysdev_class_register(&armctrl_class); -- if (err) { -- printk(KERN_ERR "%s: cannot register class\n", __func__); -- return err; -- } -- -- for (id = 0; id < armctrl_id; id++, dev++) { -- dev->sysdev.id = id; -- dev->sysdev.cls = &armctrl_class; -- -- err = sysdev_register(&dev->sysdev); -- if (err) { -- printk(KERN_ERR "%s: failed to register device\n", -- __func__); -- return err; -- } -- } -- -- return 0; --} -- --late_initcall(armctrl_pm_init); -- --#endif // VERSION check -- --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - static int armctrl_set_wake(struct irq_data *d, unsigned int on) --#else --static int armctrl_set_wake(unsigned int irq, unsigned int on) --#endif - { --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -- struct armctrl_device *armctrl = &armctrl_devices[0]; --#endif --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - unsigned int off = d->irq & 31; --#else -- unsigned int off = irq & 31; --#endif - u32 bit = 1 << off; - --#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,39) -- if (!armctrl) -- return -EINVAL; -- -- if (!(bit & armctrl->resume_sources)) -- return -EINVAL; -- -- if (on) -- armctrl->resume_irqs |= bit; -- else -- armctrl->resume_irqs &= ~bit; --#else - if (!(bit & armctrl.resume_sources)) - return -EINVAL; - -@@ -328,7 +154,6 @@ static int armctrl_set_wake(unsigned int irq, unsigned int on) - armctrl.resume_irqs |= bit; - else - armctrl.resume_irqs &= ~bit; --#endif - - return 0; - } -@@ -343,7 +168,6 @@ static inline void armctrl_pm_register(void __iomem *base, unsigned int irq, - #define armctrl_set_wake NULL - #endif /* CONFIG_PM */ - --#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,39) - - static struct syscore_ops armctrl_syscore_ops = { - .suspend = armctrl_suspend, -@@ -365,21 +189,13 @@ static int __init armctrl_syscore_init(void) - - late_initcall(armctrl_syscore_init); - --#endif - - static struct irq_chip armctrl_chip = { - .name = "ARMCTRL", --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - .irq_ack = armctrl_mask_irq, - .irq_mask = armctrl_mask_irq, - .irq_unmask = armctrl_unmask_irq, - .irq_set_wake = armctrl_set_wake, --#else -- .ack = armctrl_mask_irq, -- .mask = armctrl_mask_irq, -- .unmask = armctrl_unmask_irq, -- .set_wake = armctrl_set_wake, --#endif - }; - - /** -@@ -399,18 +215,13 @@ int __init armctrl_init(void __iomem * base, unsigned int irq_start, - if (irq >= INTERRUPT_JPEG && irq <= INTERRUPT_ARASANSDIO) - data = remap_irqs[irq - INTERRUPT_JPEG]; - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) - irq_set_chip(irq, &armctrl_chip); - irq_set_chip_data(irq, (void *)data); - irq_set_handler(irq, handle_level_irq); --#else -- set_irq_chip(irq, &armctrl_chip); -- set_irq_chip_data(irq, (void *)data); -- set_irq_handler(irq, handle_level_irq); --#endif - set_irq_flags(irq, IRQF_VALID | IRQF_PROBE | IRQF_DISABLED); - } - - armctrl_pm_register(base, irq_start, resume_sources); -+ init_FIQ(FIQ_START); - return 0; - } -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index c993049..7160d7d 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -54,6 +54,8 @@ - #include - #include - -+#include -+ - #include "bcm2708.h" - #include "armctrl.h" - #include "clock.h" -@@ -73,8 +75,6 @@ - // use GPIO 4 for the one-wire GPIO pin, if enabled - #define W1_GPIO 4 - --static DEFINE_CLOCK_DATA(cd); -- - /* command line parameters */ - static unsigned boardrev, serial; - static unsigned uart_clock; -@@ -149,30 +149,43 @@ void __init bcm2708_map_io(void) - /* The STC is a free running counter that increments at the rate of 1MHz */ - #define STC_FREQ_HZ 1000000 - --/* -- * Constants generated by clocks_calc_mult_shift(m, s, 1MHz, NSEC_PER_SEC, 60). -- * This gives a resolution of about 1us and a wrap period of about 1h11min. -- */ --#define SC_MULT 4194304000u --#define SC_SHIFT 22 -- --static cycle_t stc_read_cycles(struct clocksource *cs) -+static inline uint32_t timer_read(void) - { - /* STC: a free running counter that increments at the rate of 1MHz */ -- return (cycle_t) readl(__io_address(ST_BASE + 0x04)); -+ return readl(__io_address(ST_BASE + 0x04)); -+} -+ -+int read_current_timer(unsigned long *timer_val) -+{ -+ *timer_val = timer_read(); -+ return 0; -+} -+ -+#ifdef CONFIG_ARM_ARCH_TIMER -+EXPORT_SYMBOL(read_current_timer); -+#endif -+ -+static u32 notrace bcm2708_read_sched_clock(void) -+{ -+ return timer_read(); -+} -+ -+static cycle_t clksrc_read(struct clocksource *cs) -+{ -+ return timer_read(); - } - - static struct clocksource clocksource_stc = { - .name = "stc", - .rating = 300, -- .read = stc_read_cycles, -+ .read = clksrc_read, - .mask = CLOCKSOURCE_MASK(32), - .flags = CLOCK_SOURCE_IS_CONTINUOUS, - }; - - unsigned long frc_clock_ticks32(void) - { -- return (unsigned long)stc_read_cycles(&clocksource_stc); -+ return timer_read(); - } - - static void __init bcm2708_clocksource_init(void) -@@ -183,18 +196,6 @@ static void __init bcm2708_clocksource_init(void) - } - } - --unsigned long long sched_clock(void) --{ -- u32 cyc = clocksource_stc.read(&clocksource_stc); -- return cyc_to_fixed_sched_clock(&cd, cyc, clocksource_stc.mask, -- SC_MULT, SC_SHIFT); --} -- --static void notrace bcm2708_update_sched_clock(void) --{ -- u32 cyc = clocksource_stc.read(&clocksource_stc); -- update_sched_clock(&cd, cyc, clocksource_stc.mask); --} - - /* - * These are fixed clocks. -@@ -247,7 +248,7 @@ static void notrace bcm2708_update_sched_clock(void) - } - }; - --#define UART0_IRQ { IRQ_UART, NO_IRQ } -+#define UART0_IRQ { IRQ_UART, 0 /*NO_IRQ*/ } - #define UART0_DMA { 15, 14 } - - AMBA_DEVICE(uart0, "dev:f1", UART0, NULL); -@@ -580,6 +581,7 @@ struct platform_device bcm2708_powerman_device = { - .resource = bcm2708_spi_resources, - }; - -+#ifdef CONFIG_SPI - static struct spi_board_info bcm2708_spi_devices[] = { - { - .modalias = "spidev", -@@ -595,6 +597,7 @@ struct platform_device bcm2708_powerman_device = { - .mode = SPI_MODE_0, - } - }; -+#endif - - static struct resource bcm2708_bsc0_resources[] = { - { -@@ -700,6 +703,7 @@ void __init bcm2708_init(void) - bcm_register_device(&bcm2708_usb_device); - bcm_register_device(&bcm2708_uart1_device); - bcm_register_device(&bcm2708_powerman_device); -+ - #ifdef CONFIG_MMC_SDHCI_BCM2708 - bcm_register_device(&bcm2708_emmc_device); - #endif -@@ -805,8 +809,7 @@ static void __init bcm2708_timer_init(void) - */ - setup_irq(IRQ_TIMER3, &bcm2708_timer_irq); - -- init_fixed_sched_clock(&cd, bcm2708_update_sched_clock, 32, -- STC_FREQ_HZ, SC_MULT, SC_SHIFT); -+ setup_sched_clock(bcm2708_read_sched_clock, 32, STC_FREQ_HZ); - - timer0_clockevent.mult = - div_sc(STC_FREQ_HZ, NSEC_PER_SEC, timer0_clockevent.shift); -@@ -858,36 +861,55 @@ static inline void bcm2708_init_led(void) - } - #endif - -- - /* The assembly versions in delay.S don't account for core freq changing in cpufreq driver */ - /* Use 1MHz system timer for busy waiting */ --void __udelay(unsigned long usecs) -+void bcm2708_udelay(unsigned long usecs) - { -- unsigned long start = readl(__io_address(ST_BASE + 0x04)); -+ unsigned long start = timer_read(); - unsigned long now; - do { -- now = readl(__io_address(ST_BASE + 0x04)); -+ now = timer_read(); - } while ((long)(now - start) <= usecs); - } - - --void __const_udelay(unsigned long scaled_usecs) -+void bcm2708_const_udelay(unsigned long scaled_usecs) - { - /* want /107374, this is about 3% bigger. We know usecs is less than 2000, so shouldn't overflow */ - const unsigned long usecs = scaled_usecs * 10 >> 20; -- unsigned long start = readl(__io_address(ST_BASE + 0x04)); -+ unsigned long start = timer_read(); - unsigned long now; - do { -- now = readl(__io_address(ST_BASE + 0x04)); -+ now = timer_read(); - } while ((long)(now - start) <= usecs); - } - -+extern void bcm2708_delay(unsigned long cycles); -+ -+struct arm_delay_ops arm_delay_ops = { -+ .delay = bcm2708_delay, -+ .const_udelay = bcm2708_const_udelay, -+ .udelay = bcm2708_udelay, -+}; -+ -+ -+void __init bcm2708_init_early(void) -+{ -+ /* -+ * Some devices allocate their coherent buffers from atomic -+ * context. Increase size of atomic coherent pool to make sure such -+ * the allocations won't fail. -+ */ -+ init_dma_coherent_pool_size(SZ_2M); -+} -+ - MACHINE_START(BCM2708, "BCM2708") - /* Maintainer: Broadcom Europe Ltd. */ - .map_io = bcm2708_map_io, - .init_irq = bcm2708_init_irq, - .timer =&bcm2708_timer, -- .init_machine =bcm2708_init, -+ .init_machine = bcm2708_init, -+ .init_early = bcm2708_init_early, - MACHINE_END - - module_param(boardrev, uint, 0644); -diff --git a/arch/arm/mach-bcm2708/delay.S b/arch/arm/mach-bcm2708/delay.S -index 4256d29..91754d6 100644 ---- a/arch/arm/mach-bcm2708/delay.S -+++ b/arch/arm/mach-bcm2708/delay.S -@@ -13,8 +13,8 @@ - - .text - @ Delay routine --ENTRY(__delay) -+ENTRY(bcm2708_delay) - subs r0, r0, #1 -- bhi __delay -+ bhi bcm2708_delay - mov pc, lr --ENDPROC(__delay) -+ENDPROC(bcm2708_delay) -diff --git a/arch/arm/mach-bcm2708/include/mach/memory.h b/arch/arm/mach-bcm2708/include/mach/memory.h -index 5d47513..521540d 100644 ---- a/arch/arm/mach-bcm2708/include/mach/memory.h -+++ b/arch/arm/mach-bcm2708/include/mach/memory.h -@@ -54,11 +54,4 @@ - #define __pfn_to_bus(x) (__pfn_to_phys(x) + (BUS_OFFSET - PLAT_PHYS_OFFSET)) - #define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - PLAT_PHYS_OFFSET)) - --/* -- * Consistent DMA area set to 2M. Framebuffer now allocated on host -- */ -- -- --#define CONSISTENT_DMA_SIZE 0x00200000 -- - #endif --- -1.8.1.5 - - -From 21042a90bbf2ddf863dbaab2ae1c289e693077ce Mon Sep 17 00:00:00 2001 +From aa4b2f9b06e60345c694712a4f376851cd880d6e Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 28 Mar 2013 00:10:32 +0000 -Subject: [PATCH 113/169] bcm2708: Add vc_cma driver to enable use of CMA +Subject: [PATCH 65/95] bcm2708: Add vc_cma driver to enable use of CMA --- arch/arm/mach-bcm2708/bcm2708.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 7160d7d..f1a904b 100644 +index e010515..9d38d40 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -60,6 +60,11 @@ @@ -128150,7 +119235,7 @@ index 7160d7d..f1a904b 100644 /* Effectively we have an IOMMU (ARM<->VideoCore map) that is set up to * give us IO access only to 64Mbytes of physical memory (26 bits). We could * represent this window by setting our dmamasks to 26 bits but, in fact -@@ -673,6 +678,9 @@ void __init bcm2708_init(void) +@@ -634,6 +639,9 @@ void __init bcm2708_init(void) { int i; @@ -128160,7 +119245,7 @@ index 7160d7d..f1a904b 100644 printk("bcm2708.uart_clock = %d\n", uart_clock); pm_power_off = bcm2708_power_off; -@@ -900,7 +908,16 @@ void __init bcm2708_init_early(void) +@@ -827,7 +835,16 @@ void __init bcm2708_init_early(void) * context. Increase size of atomic coherent pool to make sure such * the allocations won't fail. */ @@ -128177,8 +119262,8 @@ index 7160d7d..f1a904b 100644 } MACHINE_START(BCM2708, "BCM2708") -@@ -910,6 +927,7 @@ void __init bcm2708_init_early(void) - .timer =&bcm2708_timer, +@@ -837,6 +854,7 @@ void __init bcm2708_init_early(void) + .init_time = bcm2708_timer_init, .init_machine = bcm2708_init, .init_early = bcm2708_init_early, + .reserve = board_reserve, @@ -128186,13 +119271,13 @@ index 7160d7d..f1a904b 100644 module_param(boardrev, uint, 0644); -- -1.8.1.5 +1.8.1.6 -From 1720767219510711aa094f8094ce61d130e3688c Mon Sep 17 00:00:00 2001 +From 7709e8d5b95d65d2fdbb3cfe59f6de073a3c8c37 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 24 Oct 2012 22:00:43 +0100 -Subject: [PATCH 114/169] Fix reboot with new restart method of machine driver +Subject: [PATCH 66/95] Fix reboot with new restart method of machine driver --- arch/arm/mach-bcm2708/bcm2708.c | 18 +++++++++++++++++- @@ -128200,10 +119285,10 @@ Subject: [PATCH 114/169] Fix reboot with new restart method of machine driver 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index f1a904b..ac33f93 100644 +index 9d38d40..9f456e9 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -663,6 +663,21 @@ int __init bcm_register_device(struct platform_device *pdev) +@@ -624,6 +624,21 @@ int __init bcm_register_device(struct platform_device *pdev) return ret; } @@ -128213,28 +119298,28 @@ index f1a904b..ac33f93 100644 + uint32_t timeout = 10; + + /* Setup watchdog for reset */ -+ pm_rstc = readl(IO_ADDRESS(PM_RSTC)); ++ pm_rstc = readl(__io_address(PM_RSTC)); + + pm_wdog = PM_PASSWORD | (timeout & PM_WDOG_TIME_SET); // watchdog timer = timer clock / 16; need password (31:16) + value (11:0) + pm_rstc = PM_PASSWORD | (pm_rstc & PM_RSTC_WRCFG_CLR) | PM_RSTC_WRCFG_FULL_RESET; + -+ writel(pm_wdog, IO_ADDRESS(PM_WDOG)); -+ writel(pm_rstc, IO_ADDRESS(PM_RSTC)); ++ writel(pm_wdog, __io_address(PM_WDOG)); ++ writel(pm_rstc, __io_address(PM_RSTC)); +} + /* We can't really power off, but if we do the normal reset scheme, and indicate to bootcode.bin not to reboot, then most of the chip will be powered off */ static void bcm2708_power_off(void) { -@@ -671,7 +686,7 @@ static void bcm2708_power_off(void) +@@ -632,7 +647,7 @@ static void bcm2708_power_off(void) pm_rsts = PM_PASSWORD | (pm_rsts & PM_RSTC_WRCFG_CLR) | PM_RSTS_HADWRH_SET; - writel(pm_rsts, IO_ADDRESS(PM_RSTS)); + writel(pm_rsts, __io_address(PM_RSTS)); /* continue with normal reset mechanism */ - arch_reset(0, ""); + bcm2708_restart(0, ""); } void __init bcm2708_init(void) -@@ -928,6 +943,7 @@ static void __init board_reserve(void) +@@ -855,6 +870,7 @@ static void __init board_reserve(void) .init_machine = bcm2708_init, .init_early = bcm2708_init_early, .reserve = board_reserve, @@ -128267,13 +119352,13 @@ index bc9d458..2d0b821 100644 - #endif -- -1.8.1.5 +1.8.1.6 -From b9f0dc8d2c2335a75136e0b47b3029ddbf886435 Mon Sep 17 00:00:00 2001 +From a7db2e2fd4b67f16a00c039f3cf7e2e5bdcef561 Mon Sep 17 00:00:00 2001 From: Gordon Hollingworth Date: Sun, 4 Nov 2012 15:55:01 +0000 -Subject: [PATCH 115/169] Make sure we wait for the reset to finish +Subject: [PATCH 67/95] Make sure we wait for the reset to finish --- drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 2 ++ @@ -128293,55 +119378,25 @@ index 3e762e2..e8c91e7 100644 mphi_int_count = 0; } -- -1.8.1.5 +1.8.1.6 -From 9c1183025dccc554ad3c7cd5343ffb57d82d07b2 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 4 Nov 2012 17:02:59 +0000 -Subject: [PATCH 116/169] Add missing pctv452e DVB module - ---- - arch/arm/configs/bcmrpi_defconfig | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index b4a3da1..539470e 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -585,6 +585,7 @@ CONFIG_DVB_USB_DTT200U=m - CONFIG_DVB_USB_OPERA1=m - CONFIG_DVB_USB_AF9005=m - CONFIG_DVB_USB_AF9005_REMOTE=m -+CONFIG_DVB_USB_PCTV452E=m - CONFIG_DVB_USB_DW2102=m - CONFIG_DVB_USB_CINERGY_T2=m - CONFIG_DVB_USB_ANYSEE=m -@@ -596,6 +597,8 @@ CONFIG_DVB_USB_EC168=m - CONFIG_DVB_USB_AZ6027=m - CONFIG_DVB_USB_LME2510=m - CONFIG_DVB_USB_TECHNISAT_USB2=m -+CONFIG_DVB_USB_IT913X=m -+CONFIG_DVB_USB_MXL111SF=m - CONFIG_SMS_SIANO_MDTV=m - CONFIG_SMS_USB_DRV=m - CONFIG_DVB_B2C2_FLEXCOP=m --- -1.8.1.5 - - -From a52756d7f93270d66fcf2eb1cb82c45b77900d8e Mon Sep 17 00:00:00 2001 +From 3132dd7b0bfcd1944784b2605d5e24e25a07b54f Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 19 Nov 2012 18:27:05 +0000 -Subject: [PATCH 117/169] Add Simon Hall's dma helper module, useful in future +Subject: [PATCH 68/95] Add Simon Hall's dma helper module, useful in future for X acceleration --- - arch/arm/mach-bcm2708/Kconfig | 7 + - arch/arm/mach-bcm2708/Makefile | 1 + - arch/arm/mach-bcm2708/dmaer.c | 755 +++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 763 insertions(+) + arch/arm/mach-bcm2708/Kconfig | 7 + + arch/arm/mach-bcm2708/Makefile | 3 + + arch/arm/mach-bcm2708/dmaer.c | 887 ++++++++++++++++++++++++ + arch/arm/mach-bcm2708/include/mach/vc_support.h | 69 ++ + arch/arm/mach-bcm2708/vc_support.c | 319 +++++++++ + 5 files changed, 1285 insertions(+) create mode 100755 arch/arm/mach-bcm2708/dmaer.c + create mode 100755 arch/arm/mach-bcm2708/include/mach/vc_support.h + create mode 100755 arch/arm/mach-bcm2708/vc_support.c diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig index 63bb76c..2a24db6 100644 @@ -128360,21 +119415,22 @@ index 63bb76c..2a24db6 100644 + endmenu diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile -index 3ee8a4b..af4a6ee 100644 +index 164ecb2..0da162c 100644 --- a/arch/arm/mach-bcm2708/Makefile +++ b/arch/arm/mach-bcm2708/Makefile -@@ -5,4 +5,5 @@ - obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o delay.o +@@ -6,3 +6,6 @@ obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o -+obj-$(CONFIG_BCM2708_DMAER) += dmaer.o ++obj-$(CONFIG_BCM2708_DMAER) += dmaer_master.o ++dmaer_master-objs := dmaer.o vc_support.o ++ diff --git a/arch/arm/mach-bcm2708/dmaer.c b/arch/arm/mach-bcm2708/dmaer.c new file mode 100755 -index 0000000..1b53ff2 +index 0000000..d1bc0fa --- /dev/null +++ b/arch/arm/mach-bcm2708/dmaer.c -@@ -0,0 +1,755 @@ +@@ -0,0 +1,887 @@ +#include +#include +#include @@ -128388,6 +119444,7 @@ index 0000000..1b53ff2 +#include +#include +#include ++#include + +#include +#include @@ -128395,10 +119452,30 @@ index 0000000..1b53ff2 +#include + +#include ++#include + -+MODULE_LICENSE("Dual BSD/GPL"); ++#ifdef ECLIPSE_IGNORE + -+//#define inline ++#define __user ++#define __init ++#define __exit ++#define __iomem ++#define KERN_DEBUG ++#define KERN_ERR ++#define KERN_WARNING ++#define KERN_INFO ++#define _IOWR(a, b, c) b ++#define _IOW(a, b, c) b ++#define _IO(a, b) b ++ ++#endif ++ ++//#define inline ++ ++#define PRINTK(args...) printk(args) ++//#define PRINTK_VERBOSE(args...) printk(args) ++//#define PRINTK(args...) ++#define PRINTK_VERBOSE(args...) + +/***** TYPES ****/ +#define PAGES_PER_LIST 500 @@ -128416,6 +119493,7 @@ index 0000000..1b53ff2 + struct PageList *m_pPageTail; + unsigned int m_refCount; +}; ++ +struct DmaControlBlock +{ + unsigned int m_transferInfo; @@ -128455,6 +119533,15 @@ index 0000000..1b53ff2 +//set the address range through which the user address is assumed to already by a physical address +#define DMA_SET_MIN_PHYS _IOW(DMA_MAGIC, 7, unsigned long) +#define DMA_SET_MAX_PHYS _IOW(DMA_MAGIC, 8, unsigned long) ++#define DMA_SET_PHYS_OFFSET _IOW(DMA_MAGIC, 9, unsigned long) ++ ++//used to define the size for the CMA-based allocation *in pages*, can only be done once once the file is opened ++#define DMA_CMA_SET_SIZE _IOW(DMA_MAGIC, 10, unsigned long) ++ ++//used to get the version of the module, to test for a capability ++#define DMA_GET_VERSION _IO(DMA_MAGIC, 99) ++ ++#define VERSION_NUMBER 1 + +#define VIRT_TO_BUS_CACHE_SIZE 8 + @@ -128466,19 +119553,24 @@ index 0000000..1b53ff2 +static int Mmap(struct file *pFile, struct vm_area_struct *pVma); + +/***** VMA OPS ****/ -+static void VmaOpen(struct vm_area_struct *pVma); -+static void VmaClose(struct vm_area_struct *pVma); -+static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf); ++static void VmaOpen4k(struct vm_area_struct *pVma); ++static void VmaClose4k(struct vm_area_struct *pVma); ++static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf); ++ ++/**** DMA PROTOTYPES */ ++static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *pUserCB, int *pError); ++static int DmaKick(struct DmaControlBlock __user *pUserCB); ++static void DmaWaitAll(void); + +/**** GENERIC ****/ +static int __init dmaer_init(void); +static void __exit dmaer_exit(void); + +/*** OPS ***/ -+static struct vm_operations_struct g_vmOps = { -+ .open = VmaOpen, -+ .close = VmaClose, -+ .fault = VmaFault, ++static struct vm_operations_struct g_vmOps4k = { ++ .open = VmaOpen4k, ++ .close = VmaClose4k, ++ .fault = VmaFault4k, +}; + +static struct file_operations g_fOps = { @@ -128494,13 +119586,23 @@ index 0000000..1b53ff2 + +/***** GLOBALS ******/ +static dev_t g_majorMinor; -+static atomic_t g_oneLock = ATOMIC_INIT(1); ++ ++//tracking usage of the two files ++static atomic_t g_oneLock4k = ATOMIC_INIT(1); ++ ++//device operations +static struct cdev g_cDev; +static int g_trackedPages = 0; ++ ++//dma control +static unsigned int *g_pDmaChanBase; +static int g_dmaIrq; +static int g_dmaChan; + ++//cma allocation ++static int g_cmaHandle; ++ ++//user virtual to bus address translation acceleration +static unsigned long g_virtAddr[VIRT_TO_BUS_CACHE_SIZE]; +static unsigned long g_busAddr[VIRT_TO_BUS_CACHE_SIZE]; +static unsigned long g_cbVirtAddr; @@ -128509,8 +119611,9 @@ index 0000000..1b53ff2 +static int g_cacheHit, g_cacheMiss; + +//off by default -+static void __user *g_pMinPhys = (void __user *)-1; -+static void __user *g_pMaxPhys = (void __user *)0; ++static void __user *g_pMinPhys; ++static void __user *g_pMaxPhys; ++static unsigned long g_physOffset; + +/****** CACHE OPERATIONS ********/ +static inline void FlushAddrCache(void) @@ -128542,6 +119645,9 @@ index 0000000..1b53ff2 + if (mapped <= 0) //error + return 0; + ++ PRINTK_VERBOSE(KERN_DEBUG "user virtual %p arm phys %p bus %p\n", ++ pUser, page_address(pPage), (void __iomem *)__virt_to_bus(page_address(pPage))); ++ + //get the arm physical address + phys = page_address(pPage) + offset_in_page(pUser); + page_cache_release(pPage); @@ -128588,8 +119694,8 @@ index 0000000..1b53ff2 + + if (pUser >= g_pMinPhys && pUser < g_pMaxPhys) + { -+// printk(KERN_DEBUG "user->phys passthrough on %p\n", pUser); -+ return (void __iomem *)__virt_to_bus(pUser); ++ PRINTK_VERBOSE(KERN_DEBUG "user->phys passthrough on %p\n", pUser); ++ return (void __iomem *)((unsigned long)pUser + g_physOffset); + } + + //check the cache for our entry @@ -128623,25 +119729,57 @@ index 0000000..1b53ff2 +/***** FILE OPERATIONS ****/ +static int Open(struct inode *pInode, struct file *pFile) +{ -+ printk(KERN_DEBUG "file opening\n"); ++ PRINTK(KERN_DEBUG "file opening: %d/%d\n", imajor(pInode), iminor(pInode)); + -+ //only one at a time -+ if (!atomic_dec_and_test(&g_oneLock)) ++ //check which device we are ++ if (iminor(pInode) == 0) //4k + { -+ atomic_inc(&g_oneLock); -+ return -EBUSY; ++ //only one at a time ++ if (!atomic_dec_and_test(&g_oneLock4k)) ++ { ++ atomic_inc(&g_oneLock4k); ++ return -EBUSY; ++ } + } ++ else ++ return -EINVAL; + ++ //todo there will be trouble if two different processes open the files ++ ++ //reset after any file is opened ++ g_pMinPhys = (void __user *)-1; ++ g_pMaxPhys = (void __user *)0; ++ g_physOffset = 0; ++ g_cmaHandle = 0; ++ + return 0; +} + +static int Release(struct inode *pInode, struct file *pFile) +{ -+ printk(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages); ++ PRINTK(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages); + if (g_trackedPages) -+ printk(KERN_ERR "we\'re leaking memory!\n"); ++ PRINTK(KERN_ERR "we\'re leaking memory!\n"); + -+ atomic_inc(&g_oneLock); ++ //wait for any dmas to finish ++ DmaWaitAll(); ++ ++ //free this memory on the application closing the file or it crashing (implicitly closing the file) ++ if (g_cmaHandle) ++ { ++ PRINTK(KERN_DEBUG "unlocking vc memory\n"); ++ if (UnlockVcMemory(g_cmaHandle)) ++ PRINTK(KERN_ERR "uh-oh, unable to unlock vc memory!\n"); ++ PRINTK(KERN_DEBUG "releasing vc memory\n"); ++ if (ReleaseVcMemory(g_cmaHandle)) ++ PRINTK(KERN_ERR "uh-oh, unable to release vc memory!\n"); ++ } ++ ++ if (iminor(pInode) == 0) ++ atomic_inc(&g_oneLock4k); ++ else ++ return -EINVAL; ++ + return 0; +} + @@ -128651,18 +119789,17 @@ index 0000000..1b53ff2 + struct DmaControlBlock __user *pUNext; + void __iomem *pSourceBus, __iomem *pDestBus; + -+ + //get the control block into kernel memory so we can work on it + if (copy_from_user(&kernCB, pUserCB, sizeof(struct DmaControlBlock)) != 0) + { -+ printk(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB); ++ PRINTK(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB); + *pError = 1; + return 0; + } + + if (kernCB.m_pSourceAddr == 0 || kernCB.m_pDestAddr == 0) + { -+ printk(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n", ++ PRINTK(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n", + kernCB.m_pSourceAddr, kernCB.m_pDestAddr, pUserCB); + *pError = 1; + return 0; @@ -128673,7 +119810,9 @@ index 0000000..1b53ff2 + + if (!pSourceBus || !pDestBus) + { -+ printk(KERN_ERR "virtual to bus translation failure for source/dest\n"); ++ PRINTK(KERN_ERR "virtual to bus translation failure for source/dest %p/%p->%p/%p\n", ++ kernCB.m_pSourceAddr, kernCB.m_pDestAddr, ++ pSourceBus, pDestBus); + *pError = 1; + return 0; + } @@ -128681,6 +119820,8 @@ index 0000000..1b53ff2 + //update the user structure with the new bus addresses + kernCB.m_pSourceAddr = pSourceBus; + kernCB.m_pDestAddr = pDestBus; ++ ++ PRINTK_VERBOSE(KERN_DEBUG "final source %p dest %p\n", kernCB.m_pSourceAddr, kernCB.m_pDestAddr); + + //sort out the bus address for the next block + pUNext = kernCB.m_pNext; @@ -128692,7 +119833,7 @@ index 0000000..1b53ff2 + + if (!pNextBus) + { -+ printk(KERN_ERR "virtual to bus translation failure for m_pNext\n"); ++ PRINTK(KERN_ERR "virtual to bus translation failure for m_pNext\n"); + *pError = 1; + return 0; + } @@ -128704,7 +119845,7 @@ index 0000000..1b53ff2 + //write it back to user space + if (copy_to_user(pUserCB, &kernCB, sizeof(struct DmaControlBlock)) != 0) + { -+ printk(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB); ++ PRINTK(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB); + *pError = 1; + return 0; + } @@ -128722,7 +119863,7 @@ index 0000000..1b53ff2 + pBusCB = UserVirtualToBusViaCbCache(pUserCB); + if (!pBusCB) + { -+ printk(KERN_ERR "virtual to bus translation failure for cb\n"); ++ PRINTK(KERN_ERR "virtual to bus translation failure for cb\n"); + return 1; + } + @@ -128738,9 +119879,9 @@ index 0000000..1b53ff2 + int counter = 0; + volatile int inner_count; + volatile unsigned int cs; -+ //unsigned long time_before, time_after; ++ unsigned long time_before, time_after; + -+ //time_before = jiffies; ++ time_before = jiffies; + //bcm_dma_wait_idle(g_pDmaChanBase); + dsb(); + @@ -128757,19 +119898,19 @@ index 0000000..1b53ff2 + //cpu_do_idle(); + if (counter >= 1000000) + { -+ printk(KERN_WARNING "DMA failed to finish in a timely fashion\n"); ++ PRINTK(KERN_WARNING "DMA failed to finish in a timely fashion\n"); + break; + } + } -+ //time_after = jiffies; -+ //printk(KERN_DEBUG "done, counter %d, cs %08x", counter, cs); -+ //printk(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ); ++ time_after = jiffies; ++ PRINTK_VERBOSE(KERN_DEBUG "done, counter %d, cs %08x", counter, cs); ++ PRINTK_VERBOSE(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ); +} + +static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) +{ + int error = 0; -+ //printk(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg); ++ PRINTK_VERBOSE(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg); + + switch (cmd) + { @@ -128779,29 +119920,30 @@ index 0000000..1b53ff2 + { + struct DmaControlBlock __user *pUCB = (struct DmaControlBlock *)arg; + int steps = 0; -+ //unsigned long start_time = jiffies; ++ unsigned long start_time = jiffies; ++ (void)start_time; + + //flush our address cache + FlushAddrCache(); + -+// printk(KERN_DEBUG "dma prepare\n"); -+ ++ PRINTK_VERBOSE(KERN_DEBUG "dma prepare\n"); ++ + //do virtual to bus translation for each entry + do + { + pUCB = DmaPrepare(pUCB, &error); + } while (error == 0 && ++steps && pUCB); -+ //printk(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time); ++ PRINTK_VERBOSE(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time); + + //carry straight on if we want to kick too + if (cmd == DMA_PREPARE || error) + { -+// printk(KERN_DEBUG "falling out\n"); -+ break; ++ PRINTK_VERBOSE(KERN_DEBUG "falling out\n"); ++ return error ? -EINVAL : 0; + } -+ }; ++ } + case DMA_KICK: -+// printk(KERN_DEBUG "dma begin\n"); ++ PRINTK_VERBOSE(KERN_DEBUG "dma begin\n"); + + if (cmd == DMA_KICK) + FlushAddrCache(); @@ -128811,10 +119953,10 @@ index 0000000..1b53ff2 + if (cmd != DMA_PREPARE_KICK_WAIT) + break; +/* case DMA_WAIT_ONE: -+ //printk(KERN_DEBUG "dma wait one\n"); ++ //PRINTK(KERN_DEBUG "dma wait one\n"); + break;*/ + case DMA_WAIT_ALL: -+ //printk(KERN_DEBUG "dma wait all\n"); ++ //PRINTK(KERN_DEBUG "dma wait all\n"); + DmaWaitAll(); + break; + case DMA_MAX_BURST: @@ -128824,14 +119966,54 @@ index 0000000..1b53ff2 + return 5; + case DMA_SET_MIN_PHYS: + g_pMinPhys = (void __user *)arg; -+ printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); ++ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); + break; + case DMA_SET_MAX_PHYS: + g_pMaxPhys = (void __user *)arg; -+ printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); ++ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); + break; ++ case DMA_SET_PHYS_OFFSET: ++ g_physOffset = arg; ++ PRINTK(KERN_DEBUG "user/phys bypass offset set to %ld\n", g_physOffset); ++ break; ++ case DMA_CMA_SET_SIZE: ++ { ++ unsigned int pBusAddr; ++ ++ if (g_cmaHandle) ++ { ++ PRINTK(KERN_ERR "memory has already been allocated (handle %d)\n", g_cmaHandle); ++ return -EINVAL; ++ } ++ ++ PRINTK(KERN_INFO "allocating %ld bytes of VC memory\n", arg * 4096); ++ ++ //get the memory ++ if (AllocateVcMemory(&g_cmaHandle, arg * 4096, 4096, MEM_FLAG_L1_NONALLOCATING | MEM_FLAG_NO_INIT | MEM_FLAG_HINT_PERMALOCK)) ++ { ++ PRINTK(KERN_ERR "failed to allocate %ld bytes of VC memory\n", arg * 4096); ++ g_cmaHandle = 0; ++ return -EINVAL; ++ } ++ ++ //get an address for it ++ PRINTK(KERN_INFO "trying to map VC memory\n"); ++ ++ if (LockVcMemory(&pBusAddr, g_cmaHandle)) ++ { ++ PRINTK(KERN_ERR "failed to map CMA handle %d, releasing memory\n", g_cmaHandle); ++ ReleaseVcMemory(g_cmaHandle); ++ g_cmaHandle = 0; ++ } ++ ++ PRINTK(KERN_INFO "bus address for CMA memory is %x\n", pBusAddr); ++ return pBusAddr; ++ } ++ case DMA_GET_VERSION: ++ PRINTK(KERN_DEBUG "returning version number, %d\n", VERSION_NUMBER); ++ return VERSION_NUMBER; + default: -+ printk(KERN_DEBUG "unknown ioctl: %d\n", cmd); ++ PRINTK(KERN_DEBUG "unknown ioctl: %d\n", cmd); + return -EINVAL; + } + @@ -128840,12 +120022,6 @@ index 0000000..1b53ff2 + +static ssize_t Read(struct file *pFile, char __user *pUser, size_t count, loff_t *offp) +{ -+ /*printk(KERN_DEBUG "file read pFile %p pUser %p count %ld offp %p\n", -+ pFile, pUser, count, offp); -+ printk(KERN_DEBUG "phys pFile %lx pUser %lx offp %lx\n", -+ __pa(pFile), __pa(pUser), __pa(offp)); -+ printk(KERN_DEBUG "bus pFile %lx pUser %lx offp %lx\n", -+ virt_to_bus(pFile), virt_to_bus(pUser), virt_to_bus(offp));*/ + return -EIO; +} + @@ -128854,20 +120030,20 @@ index 0000000..1b53ff2 + struct PageList *pPages; + struct VmaPageList *pVmaList; + -+// printk(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n", -+// pVma, pVma->vm_end - pVma->vm_start, -+// current->comm, current->pid); -+// printk(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages); -+ ++ PRINTK_VERBOSE(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n", ++ pVma, pVma->vm_end - pVma->vm_start, ++ current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages); ++ + //make a new page list + pPages = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL); + if (!pPages) + { -+ printk(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n", ++ PRINTK(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n", + current->comm, current->pid); + return -ENOMEM; + } -+ ++ + //clear the page list + pPages->m_used = 0; + pPages->m_pNext = 0; @@ -128877,67 +120053,72 @@ index 0000000..1b53ff2 + { + struct VmaPageList *pList; + -+// printk(KERN_DEBUG "new vma list, making new one (%s %d)\n", -+// current->comm, current->pid); -+ ++ PRINTK_VERBOSE(KERN_DEBUG "new vma list, making new one (%s %d)\n", ++ current->comm, current->pid); ++ + //make a new vma list + pList = (struct VmaPageList *)kmalloc(sizeof(struct VmaPageList), GFP_KERNEL); + if (!pList) + { -+ printk(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n", ++ PRINTK(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n", + current->comm, current->pid); + kfree(pPages); + return -ENOMEM; + } -+ ++ + //clear this list + pVma->vm_private_data = (void *)pList; + pList->m_refCount = 0; + } -+ ++ + pVmaList = (struct VmaPageList *)pVma->vm_private_data; -+ ++ + //add it to the vma list + pVmaList->m_pPageHead = pPages; + pVmaList->m_pPageTail = pPages; -+ -+ pVma->vm_ops = &g_vmOps; -+ pVma->vm_flags |= VM_RESERVED; -+ -+ VmaOpen(pVma); -+ ++ ++ pVma->vm_ops = &g_vmOps4k; ++ pVma->vm_flags |= VM_IO; ++ ++ VmaOpen4k(pVma); ++ + return 0; +} + +/****** VMA OPERATIONS ******/ + -+static void VmaOpen(struct vm_area_struct *pVma) ++static void VmaOpen4k(struct vm_area_struct *pVma) +{ + struct VmaPageList *pVmaList; + -+// printk(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages); -+// printk(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n", -+// pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12, -+// g_trackedPages); ++ PRINTK_VERBOSE(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages); ++ PRINTK_VERBOSE(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n", ++ pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12, ++ g_trackedPages); + + pVmaList = (struct VmaPageList *)pVma->vm_private_data; + + if (pVmaList) + { + pVmaList->m_refCount++; -+// printk(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount); ++ PRINTK_VERBOSE(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount); ++ } ++ else ++ { ++ PRINTK_VERBOSE(KERN_DEBUG "err, open but no vma page list\n"); + } -+// else -+// printk(KERN_DEBUG "err, open but no vma page list\n"); +} + -+static void VmaClose(struct vm_area_struct *pVma) ++static void VmaClose4k(struct vm_area_struct *pVma) +{ + struct VmaPageList *pVmaList; + int freed = 0; + -+// printk(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid); + ++ //wait for any dmas to finish ++ DmaWaitAll(); ++ + //find our vma in the list + pVmaList = (struct VmaPageList *)pVma->vm_private_data; + @@ -128950,14 +120131,14 @@ index 0000000..1b53ff2 + + if (pVmaList->m_refCount == 0) + { -+// printk(KERN_DEBUG "found vma, freeing pages (%s %d)\n", -+// current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "found vma, freeing pages (%s %d)\n", ++ current->comm, current->pid); + + pPages = pVmaList->m_pPageHead; + + if (!pPages) + { -+ printk(KERN_ERR "no page list (%s %d)!\n", ++ PRINTK(KERN_ERR "no page list (%s %d)!\n", + current->comm, current->pid); + return; + } @@ -128967,22 +120148,22 @@ index 0000000..1b53ff2 + struct PageList *next; + int count; + -+// printk(KERN_DEBUG "page list (%s %d)\n", -+// current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "page list (%s %d)\n", ++ current->comm, current->pid); + + next = pPages->m_pNext; + for (count = 0; count < pPages->m_used; count++) + { -+// printk(KERN_DEBUG "freeing page %p (%s %d)\n", -+// pPages->m_pPages[count], -+// current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "freeing page %p (%s %d)\n", ++ pPages->m_pPages[count], ++ current->comm, current->pid); + __free_pages(pPages->m_pPages[count], 0); + g_trackedPages--; + freed++; + } + -+// printk(KERN_DEBUG "freeing page list (%s %d)\n", -+// current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "freeing page list (%s %d)\n", ++ current->comm, current->pid); + kfree(pPages); + pPages = next; + } @@ -128991,33 +120172,38 @@ index 0000000..1b53ff2 + kfree(pVmaList); + pVma->vm_private_data = 0; + } -+// else -+// printk(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount); ++ else ++ { ++ PRINTK_VERBOSE(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount); ++ } + } + else + { -+// printk(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid); -+// printk(KERN_ERR "CLOSE ERR\n"); ++ PRINTK_VERBOSE(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_ERR "CLOSE ERR\n"); + } + -+// printk(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)", -+// pVma, current->pid, freed, g_trackedPages); ++ PRINTK_VERBOSE(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)", ++ pVma, current->pid, freed, g_trackedPages); + -+// printk(KERN_DEBUG "%d pages open\n", g_trackedPages); ++ PRINTK_VERBOSE(KERN_DEBUG "%d pages open\n", g_trackedPages); +} + -+static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf) ++static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf) +{ -+// printk(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff, -+// current->comm, current->pid); -+ //printk(KERN_DEBUG "FAULT\n"); ++ PRINTK_VERBOSE(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff, ++ current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "FAULT\n"); + pVmf->page = alloc_page(GFP_KERNEL); -+ /*if (pVmf->page) -+ printk(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page));*/ + ++ if (pVmf->page) ++ { ++ PRINTK_VERBOSE(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page)); ++ } ++ + if (!pVmf->page) + { -+ printk(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid); ++ PRINTK(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid); + return VM_FAULT_OOM; + } + else @@ -129032,11 +120218,11 @@ index 0000000..1b53ff2 + + if (pVmaList) + { -+// printk(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid); + + if (pVmaList->m_pPageTail->m_used == PAGES_PER_LIST) + { -+// printk(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid); + //making a new page list + pVmaList->m_pPageTail->m_pNext = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL); + if (!pVmaList->m_pPageTail->m_pNext) @@ -129048,13 +120234,13 @@ index 0000000..1b53ff2 + pVmaList->m_pPageTail->m_pNext = 0; + } + -+// printk(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid); ++ PRINTK_VERBOSE(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid); + + pVmaList->m_pPageTail->m_pPages[pVmaList->m_pPageTail->m_used] = pVmf->page; + pVmaList->m_pPageTail->m_used++; + } + else -+ printk(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid); ++ PRINTK(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid); + + return 0; + } @@ -129066,32 +120252,33 @@ index 0000000..1b53ff2 + int result = alloc_chrdev_region(&g_majorMinor, 0, 1, "dmaer"); + if (result < 0) + { -+ printk(KERN_ERR "unable to get major device number\n"); ++ PRINTK(KERN_ERR "unable to get major device number\n"); + return result; + } + else -+ printk(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor)); ++ PRINTK(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor)); + -+ printk(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n", ++ PRINTK(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n", + sizeof(struct VmaPageList), sizeof(struct PageList), PAGE_SIZE); -+ -+ ++ + //get a dma channel to work with + result = bcm_dma_chan_alloc(BCM_DMA_FEATURE_FAST, (void **)&g_pDmaChanBase, &g_dmaIrq); ++ ++ //uncomment to force to channel 0 + //result = 0; + //g_pDmaChanBase = 0xce808000; + + if (result < 0) + { -+ printk(KERN_ERR "failed to allocate dma channel\n"); ++ PRINTK(KERN_ERR "failed to allocate dma channel\n"); + cdev_del(&g_cDev); + unregister_chrdev_region(g_majorMinor, 1); + } + + //reset the channel -+ printk(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase); ++ PRINTK(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase); + *g_pDmaChanBase = 1 << 31; -+ printk(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase); ++ PRINTK(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase); + + g_dmaChan = result; + @@ -129107,7 +120294,7 @@ index 0000000..1b53ff2 + result = cdev_add(&g_cDev, g_majorMinor, 1); + if (result < 0) + { -+ printk(KERN_ERR "failed to add character device\n"); ++ PRINTK(KERN_ERR "failed to add character device\n"); + unregister_chrdev_region(g_majorMinor, 1); + bcm_dma_chan_free(g_dmaChan); + return result; @@ -129118,7 +120305,7 @@ index 0000000..1b53ff2 + +static void __exit dmaer_exit(void) +{ -+ printk(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss); ++ PRINTK(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss); + //unregister the device + cdev_del(&g_cDev); + unregister_chrdev_region(g_majorMinor, 1); @@ -129126,322 +120313,419 @@ index 0000000..1b53ff2 + bcm_dma_chan_free(g_dmaChan); +} + ++MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Simon Hall"); +module_init(dmaer_init); +module_exit(dmaer_exit); + +diff --git a/arch/arm/mach-bcm2708/include/mach/vc_support.h b/arch/arm/mach-bcm2708/include/mach/vc_support.h +new file mode 100755 +index 0000000..70e809f +--- /dev/null ++++ b/arch/arm/mach-bcm2708/include/mach/vc_support.h +@@ -0,0 +1,69 @@ ++#ifndef _VC_SUPPORT_H_ ++#define _VC_SUPPORT_H_ ++ ++/* ++ * vc_support.h ++ * ++ * Created on: 25 Nov 2012 ++ * Author: Simon ++ */ ++ ++enum { ++/* ++ If a MEM_HANDLE_T is discardable, the memory manager may resize it to size ++ 0 at any time when it is not locked or retained. ++ */ ++ MEM_FLAG_DISCARDABLE = 1 << 0, ++ ++ /* ++ If a MEM_HANDLE_T is allocating (or normal), its block of memory will be ++ accessed in an allocating fashion through the cache. ++ */ ++ MEM_FLAG_NORMAL = 0 << 2, ++ MEM_FLAG_ALLOCATING = MEM_FLAG_NORMAL, ++ ++ /* ++ If a MEM_HANDLE_T is direct, its block of memory will be accessed ++ directly, bypassing the cache. ++ */ ++ MEM_FLAG_DIRECT = 1 << 2, ++ ++ /* ++ If a MEM_HANDLE_T is coherent, its block of memory will be accessed in a ++ non-allocating fashion through the cache. ++ */ ++ MEM_FLAG_COHERENT = 2 << 2, ++ ++ /* ++ If a MEM_HANDLE_T is L1-nonallocating, its block of memory will be accessed by ++ the VPU in a fashion which is allocating in L2, but only coherent in L1. ++ */ ++ MEM_FLAG_L1_NONALLOCATING = (MEM_FLAG_DIRECT | MEM_FLAG_COHERENT), ++ ++ /* ++ If a MEM_HANDLE_T is zero'd, its contents are set to 0 rather than ++ MEM_HANDLE_INVALID on allocation and resize up. ++ */ ++ MEM_FLAG_ZERO = 1 << 4, ++ ++ /* ++ If a MEM_HANDLE_T is uninitialised, it will not be reset to a defined value ++ (either zero, or all 1's) on allocation. ++ */ ++ MEM_FLAG_NO_INIT = 1 << 5, ++ ++ /* ++ Hints. ++ */ ++ MEM_FLAG_HINT_PERMALOCK = 1 << 6, /* Likely to be locked for long periods of time. */ ++}; ++ ++unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags); ++unsigned int ReleaseVcMemory(unsigned int handle); ++unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle); ++unsigned int UnlockVcMemory(unsigned int handle); ++ ++unsigned int ExecuteVcCode(unsigned int code, ++ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5); ++ ++#endif +diff --git a/arch/arm/mach-bcm2708/vc_support.c b/arch/arm/mach-bcm2708/vc_support.c +new file mode 100755 +index 0000000..5cb1335 +--- /dev/null ++++ b/arch/arm/mach-bcm2708/vc_support.c +@@ -0,0 +1,319 @@ ++/* ++ * vc_support.c ++ * ++ * Created on: 25 Nov 2012 ++ * Author: Simon ++ */ ++ ++#include ++#include ++ ++#ifdef ECLIPSE_IGNORE ++ ++#define __user ++#define __init ++#define __exit ++#define __iomem ++#define KERN_DEBUG ++#define KERN_ERR ++#define KERN_WARNING ++#define KERN_INFO ++#define _IOWR(a, b, c) b ++#define _IOW(a, b, c) b ++#define _IO(a, b) b ++ ++#endif ++ ++/****** VC MAILBOX FUNCTIONALITY ******/ ++unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags) ++{ ++ struct vc_msg ++ { ++ unsigned int m_msgSize; ++ unsigned int m_response; ++ ++ struct vc_tag ++ { ++ unsigned int m_tagId; ++ unsigned int m_sendBufferSize; ++ union { ++ unsigned int m_sendDataSize; ++ unsigned int m_recvDataSize; ++ }; ++ ++ struct args ++ { ++ union { ++ unsigned int m_size; ++ unsigned int m_handle; ++ }; ++ unsigned int m_alignment; ++ unsigned int m_flags; ++ } m_args; ++ } m_tag; ++ ++ unsigned int m_endTag; ++ } msg; ++ int s; ++ ++ msg.m_msgSize = sizeof(msg); ++ msg.m_response = 0; ++ msg.m_endTag = 0; ++ ++ //fill in the tag for the allocation command ++ msg.m_tag.m_tagId = 0x3000c; ++ msg.m_tag.m_sendBufferSize = 12; ++ msg.m_tag.m_sendDataSize = 12; ++ ++ //fill in our args ++ msg.m_tag.m_args.m_size = size; ++ msg.m_tag.m_args.m_alignment = alignment; ++ msg.m_tag.m_args.m_flags = flags; ++ ++ //run the command ++ s = bcm_mailbox_property(&msg, sizeof(msg)); ++ ++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) ++ { ++ *pHandle = msg.m_tag.m_args.m_handle; ++ return 0; ++ } ++ else ++ { ++ printk(KERN_ERR "failed to allocate vc memory: s=%d response=%08x recv data size=%08x\n", ++ s, msg.m_response, msg.m_tag.m_recvDataSize); ++ return 1; ++ } ++} ++ ++unsigned int ReleaseVcMemory(unsigned int handle) ++{ ++ struct vc_msg ++ { ++ unsigned int m_msgSize; ++ unsigned int m_response; ++ ++ struct vc_tag ++ { ++ unsigned int m_tagId; ++ unsigned int m_sendBufferSize; ++ union { ++ unsigned int m_sendDataSize; ++ unsigned int m_recvDataSize; ++ }; ++ ++ struct args ++ { ++ union { ++ unsigned int m_handle; ++ unsigned int m_error; ++ }; ++ } m_args; ++ } m_tag; ++ ++ unsigned int m_endTag; ++ } msg; ++ int s; ++ ++ msg.m_msgSize = sizeof(msg); ++ msg.m_response = 0; ++ msg.m_endTag = 0; ++ ++ //fill in the tag for the release command ++ msg.m_tag.m_tagId = 0x3000f; ++ msg.m_tag.m_sendBufferSize = 4; ++ msg.m_tag.m_sendDataSize = 4; ++ ++ //pass across the handle ++ msg.m_tag.m_args.m_handle = handle; ++ ++ s = bcm_mailbox_property(&msg, sizeof(msg)); ++ ++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0) ++ return 0; ++ else ++ { ++ printk(KERN_ERR "failed to release vc memory: s=%d response=%08x recv data size=%08x error=%08x\n", ++ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error); ++ return 1; ++ } ++} ++ ++unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle) ++{ ++ struct vc_msg ++ { ++ unsigned int m_msgSize; ++ unsigned int m_response; ++ ++ struct vc_tag ++ { ++ unsigned int m_tagId; ++ unsigned int m_sendBufferSize; ++ union { ++ unsigned int m_sendDataSize; ++ unsigned int m_recvDataSize; ++ }; ++ ++ struct args ++ { ++ union { ++ unsigned int m_handle; ++ unsigned int m_busAddress; ++ }; ++ } m_args; ++ } m_tag; ++ ++ unsigned int m_endTag; ++ } msg; ++ int s; ++ ++ msg.m_msgSize = sizeof(msg); ++ msg.m_response = 0; ++ msg.m_endTag = 0; ++ ++ //fill in the tag for the lock command ++ msg.m_tag.m_tagId = 0x3000d; ++ msg.m_tag.m_sendBufferSize = 4; ++ msg.m_tag.m_sendDataSize = 4; ++ ++ //pass across the handle ++ msg.m_tag.m_args.m_handle = handle; ++ ++ s = bcm_mailbox_property(&msg, sizeof(msg)); ++ ++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) ++ { ++ //pick out the bus address ++ *pBusAddress = msg.m_tag.m_args.m_busAddress; ++ return 0; ++ } ++ else ++ { ++ printk(KERN_ERR "failed to lock vc memory: s=%d response=%08x recv data size=%08x\n", ++ s, msg.m_response, msg.m_tag.m_recvDataSize); ++ return 1; ++ } ++} ++ ++unsigned int UnlockVcMemory(unsigned int handle) ++{ ++ struct vc_msg ++ { ++ unsigned int m_msgSize; ++ unsigned int m_response; ++ ++ struct vc_tag ++ { ++ unsigned int m_tagId; ++ unsigned int m_sendBufferSize; ++ union { ++ unsigned int m_sendDataSize; ++ unsigned int m_recvDataSize; ++ }; ++ ++ struct args ++ { ++ union { ++ unsigned int m_handle; ++ unsigned int m_error; ++ }; ++ } m_args; ++ } m_tag; ++ ++ unsigned int m_endTag; ++ } msg; ++ int s; ++ ++ msg.m_msgSize = sizeof(msg); ++ msg.m_response = 0; ++ msg.m_endTag = 0; ++ ++ //fill in the tag for the unlock command ++ msg.m_tag.m_tagId = 0x3000e; ++ msg.m_tag.m_sendBufferSize = 4; ++ msg.m_tag.m_sendDataSize = 4; ++ ++ //pass across the handle ++ msg.m_tag.m_args.m_handle = handle; ++ ++ s = bcm_mailbox_property(&msg, sizeof(msg)); ++ ++ //check the error code too ++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0) ++ return 0; ++ else ++ { ++ printk(KERN_ERR "failed to unlock vc memory: s=%d response=%08x recv data size=%08x error%08x\n", ++ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error); ++ return 1; ++ } ++} ++ ++unsigned int ExecuteVcCode(unsigned int code, ++ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5) ++{ ++ struct vc_msg ++ { ++ unsigned int m_msgSize; ++ unsigned int m_response; ++ ++ struct vc_tag ++ { ++ unsigned int m_tagId; ++ unsigned int m_sendBufferSize; ++ union { ++ unsigned int m_sendDataSize; ++ unsigned int m_recvDataSize; ++ }; ++ ++ struct args ++ { ++ union { ++ unsigned int m_pCode; ++ unsigned int m_return; ++ }; ++ unsigned int m_r0; ++ unsigned int m_r1; ++ unsigned int m_r2; ++ unsigned int m_r3; ++ unsigned int m_r4; ++ unsigned int m_r5; ++ } m_args; ++ } m_tag; ++ ++ unsigned int m_endTag; ++ } msg; ++ int s; ++ ++ msg.m_msgSize = sizeof(msg); ++ msg.m_response = 0; ++ msg.m_endTag = 0; ++ ++ //fill in the tag for the unlock command ++ msg.m_tag.m_tagId = 0x30010; ++ msg.m_tag.m_sendBufferSize = 28; ++ msg.m_tag.m_sendDataSize = 28; ++ ++ //pass across the handle ++ msg.m_tag.m_args.m_pCode = code; ++ msg.m_tag.m_args.m_r0 = r0; ++ msg.m_tag.m_args.m_r1 = r1; ++ msg.m_tag.m_args.m_r2 = r2; ++ msg.m_tag.m_args.m_r3 = r3; ++ msg.m_tag.m_args.m_r4 = r4; ++ msg.m_tag.m_args.m_r5 = r5; ++ ++ s = bcm_mailbox_property(&msg, sizeof(msg)); ++ ++ //check the error code too ++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) ++ return msg.m_tag.m_args.m_return; ++ else ++ { ++ printk(KERN_ERR "failed to execute: s=%d response=%08x recv data size=%08x\n", ++ s, msg.m_response, msg.m_tag.m_recvDataSize); ++ return 1; ++ } ++} ++ -- -1.8.1.5 +1.8.1.6 -From 062d8150f94d7ee06e317614ddbb4420bb678efa Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 19 Nov 2012 18:27:36 +0000 -Subject: [PATCH 118/169] Add missing options from more recent 3.2.27 kernel - config - ---- - arch/arm/configs/bcmrpi_defconfig | 145 ++++---------------------------------- - 1 file changed, 12 insertions(+), 133 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 539470e..2069eb0 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -11,6 +11,8 @@ CONFIG_TASK_DELAY_ACCT=y - CONFIG_TASK_XACCT=y - CONFIG_TASK_IO_ACCOUNTING=y - CONFIG_AUDIT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_CGROUP_FREEZER=y -@@ -33,10 +35,11 @@ CONFIG_MODVERSIONS=y - CONFIG_MODULE_SRCVERSION_ALL=y - # CONFIG_BLK_DEV_BSG is not set - CONFIG_BLK_DEV_THROTTLING=y -+CONFIG_PARTITION_ADVANCED=y -+CONFIG_MAC_PARTITION=y -+CONFIG_EFI_PARTITION=y - CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y --CONFIG_NO_HZ=y --CONFIG_HIGH_RES_TIMERS=y - CONFIG_PREEMPT=y - CONFIG_AEABI=y - CONFIG_UACCESS_WITH_MEMCPY=y -@@ -179,7 +182,6 @@ CONFIG_IP_NF_MATCH_ECN=m - CONFIG_IP_NF_MATCH_TTL=m - CONFIG_IP_NF_FILTER=m - CONFIG_IP_NF_TARGET_REJECT=m --CONFIG_IP_NF_TARGET_LOG=m - CONFIG_IP_NF_TARGET_ULOG=m - CONFIG_NF_NAT=m - CONFIG_IP_NF_TARGET_MASQUERADE=m -@@ -203,7 +205,6 @@ CONFIG_IP6_NF_MATCH_IPV6HEADER=m - CONFIG_IP6_NF_MATCH_MH=m - CONFIG_IP6_NF_MATCH_RT=m - CONFIG_IP6_NF_TARGET_HL=m --CONFIG_IP6_NF_TARGET_LOG=m - CONFIG_IP6_NF_FILTER=m - CONFIG_IP6_NF_TARGET_REJECT=m - CONFIG_IP6_NF_MANGLE=m -@@ -305,8 +306,6 @@ CONFIG_USB_IRDA=m - CONFIG_SIGMATEL_FIR=m - CONFIG_MCS_FIR=m - CONFIG_BT=m --CONFIG_BT_L2CAP=y --CONFIG_BT_SCO=y - CONFIG_BT_RFCOMM=m - CONFIG_BT_RFCOMM_TTY=y - CONFIG_BT_BNEP=m -@@ -331,13 +330,14 @@ CONFIG_NFC=m - CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y - CONFIG_DEVTMPFS_MOUNT=y -+CONFIG_CMA=y -+CONFIG_CMA_DEBUG=y - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_DRBD=m - CONFIG_BLK_DEV_NBD=m - CONFIG_BLK_DEV_RAM=y - CONFIG_CDROM_PKTCDVD=m --CONFIG_MISC_DEVICES=y - CONFIG_SCSI=y - # CONFIG_SCSI_PROC_FS is not set - CONFIG_BLK_DEV_SD=y -@@ -360,7 +360,6 @@ CONFIG_BONDING=m - CONFIG_MACVLAN=m - CONFIG_NETCONSOLE=m - CONFIG_TUN=m --CONFIG_PHYLIB=m - CONFIG_MDIO_BITBANG=m - CONFIG_PPP=m - CONFIG_PPP_BSDCOMP=m -@@ -415,7 +414,6 @@ CONFIG_B43=m - CONFIG_B43_PHY_N=y - CONFIG_B43LEGACY=m - CONFIG_HOSTAP=m --CONFIG_IWM=m - CONFIG_LIBERTAS=m - CONFIG_LIBERTAS_USB=m - CONFIG_LIBERTAS_SDIO=m -@@ -427,8 +425,6 @@ CONFIG_RT73USB=m - CONFIG_RT2800USB=m - CONFIG_RT2800USB_RT53XX=y - CONFIG_RT2800USB_UNKNOWN=y --CONFIG_WL1251=m --CONFIG_WL12XX_MENU=m - CONFIG_ZD1211RW=m - CONFIG_MWIFIEX=m - CONFIG_MWIFIEX_SDIO=m -@@ -464,6 +460,8 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - CONFIG_TTY_PRINTK=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y -+CONFIG_BRCM_CHAR_DRIVERS=y -+CONFIG_BCM_VC_CMA=y - CONFIG_I2C=y - CONFIG_I2C_CHARDEV=m - CONFIG_I2C_BCM2708=m -@@ -491,118 +489,6 @@ CONFIG_THERMAL_BCM2835=y - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m - CONFIG_MEDIA_SUPPORT=m --CONFIG_VIDEO_DEV=m --CONFIG_DVB_CORE=m --CONFIG_RC_ATI_REMOTE=m --CONFIG_IR_IMON=m --CONFIG_IR_MCEUSB=m --CONFIG_IR_REDRAT3=m --CONFIG_IR_STREAMZAP=m --CONFIG_RC_LOOPBACK=m --CONFIG_MEDIA_ATTACH=y --CONFIG_USB_VIDEO_CLASS=m --CONFIG_USB_M5602=m --CONFIG_USB_STV06XX=m --CONFIG_USB_GL860=m --CONFIG_USB_GSPCA_BENQ=m --CONFIG_USB_GSPCA_CONEX=m --CONFIG_USB_GSPCA_CPIA1=m --CONFIG_USB_GSPCA_ETOMS=m --CONFIG_USB_GSPCA_FINEPIX=m --CONFIG_USB_GSPCA_JEILINJ=m --CONFIG_USB_GSPCA_KINECT=m --CONFIG_USB_GSPCA_KONICA=m --CONFIG_USB_GSPCA_MARS=m --CONFIG_USB_GSPCA_MR97310A=m --CONFIG_USB_GSPCA_NW80X=m --CONFIG_USB_GSPCA_OV519=m --CONFIG_USB_GSPCA_OV534=m --CONFIG_USB_GSPCA_OV534_9=m --CONFIG_USB_GSPCA_PAC207=m --CONFIG_USB_GSPCA_PAC7302=m --CONFIG_USB_GSPCA_PAC7311=m --CONFIG_USB_GSPCA_SE401=m --CONFIG_USB_GSPCA_SN9C2028=m --CONFIG_USB_GSPCA_SN9C20X=m --CONFIG_USB_GSPCA_SONIXB=m --CONFIG_USB_GSPCA_SONIXJ=m --CONFIG_USB_GSPCA_SPCA500=m --CONFIG_USB_GSPCA_SPCA501=m --CONFIG_USB_GSPCA_SPCA505=m --CONFIG_USB_GSPCA_SPCA506=m --CONFIG_USB_GSPCA_SPCA508=m --CONFIG_USB_GSPCA_SPCA561=m --CONFIG_USB_GSPCA_SPCA1528=m --CONFIG_USB_GSPCA_SQ905=m --CONFIG_USB_GSPCA_SQ905C=m --CONFIG_USB_GSPCA_SQ930X=m --CONFIG_USB_GSPCA_STK014=m --CONFIG_USB_GSPCA_STV0680=m --CONFIG_USB_GSPCA_SUNPLUS=m --CONFIG_USB_GSPCA_T613=m --CONFIG_USB_GSPCA_TV8532=m --CONFIG_USB_GSPCA_VC032X=m --CONFIG_USB_GSPCA_VICAM=m --CONFIG_USB_GSPCA_XIRLINK_CIT=m --CONFIG_USB_GSPCA_ZC3XX=m --CONFIG_VIDEO_PVRUSB2=m --CONFIG_VIDEO_HDPVR=m --CONFIG_VIDEO_EM28XX=m --CONFIG_VIDEO_EM28XX_ALSA=m --CONFIG_VIDEO_EM28XX_DVB=m --CONFIG_VIDEO_TLG2300=m --CONFIG_VIDEO_CX231XX=m --CONFIG_VIDEO_CX231XX_ALSA=m --CONFIG_VIDEO_CX231XX_DVB=m --CONFIG_VIDEO_USBVISION=m --CONFIG_USB_ET61X251=m --CONFIG_USB_SN9C102=m --CONFIG_USB_PWC=m --CONFIG_USB_ZR364XX=m --CONFIG_USB_STKWEBCAM=m --CONFIG_USB_S2255=m --CONFIG_USB_DSBR=m --CONFIG_RADIO_SI470X=y --CONFIG_USB_SI470X=m --CONFIG_USB_MR800=m --CONFIG_DVB_USB=m --CONFIG_DVB_USB_A800=m --CONFIG_DVB_USB_DIBUSB_MB=m --CONFIG_DVB_USB_DIBUSB_MC=m --CONFIG_DVB_USB_DIB0700=m --CONFIG_DVB_USB_UMT_010=m --CONFIG_DVB_USB_CXUSB=m --CONFIG_DVB_USB_M920X=m --CONFIG_DVB_USB_GL861=m --CONFIG_DVB_USB_AU6610=m --CONFIG_DVB_USB_DIGITV=m --CONFIG_DVB_USB_VP7045=m --CONFIG_DVB_USB_VP702X=m --CONFIG_DVB_USB_GP8PSK=m --CONFIG_DVB_USB_NOVA_T_USB2=m --CONFIG_DVB_USB_TTUSB2=m --CONFIG_DVB_USB_DTT200U=m --CONFIG_DVB_USB_OPERA1=m --CONFIG_DVB_USB_AF9005=m --CONFIG_DVB_USB_AF9005_REMOTE=m --CONFIG_DVB_USB_PCTV452E=m --CONFIG_DVB_USB_DW2102=m --CONFIG_DVB_USB_CINERGY_T2=m --CONFIG_DVB_USB_ANYSEE=m --CONFIG_DVB_USB_DTV5100=m --CONFIG_DVB_USB_AF9015=m --CONFIG_DVB_USB_CE6230=m --CONFIG_DVB_USB_FRIIO=m --CONFIG_DVB_USB_EC168=m --CONFIG_DVB_USB_AZ6027=m --CONFIG_DVB_USB_LME2510=m --CONFIG_DVB_USB_TECHNISAT_USB2=m --CONFIG_DVB_USB_IT913X=m --CONFIG_DVB_USB_MXL111SF=m --CONFIG_SMS_SIANO_MDTV=m --CONFIG_SMS_USB_DRV=m --CONFIG_DVB_B2C2_FLEXCOP=m --CONFIG_DVB_B2C2_FLEXCOP_USB=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -@@ -629,8 +515,6 @@ CONFIG_SND_USB_UA101=m - CONFIG_SND_USB_CAIAQ=m - CONFIG_SND_USB_6FIRE=m - CONFIG_SOUND_PRIME=m --CONFIG_HID_PID=y --CONFIG_USB_HIDDEV=y - CONFIG_HID_A4TECH=m - CONFIG_HID_ACRUX=m - CONFIG_HID_APPLE=m -@@ -661,7 +545,6 @@ CONFIG_HID_ORTEK=m - CONFIG_HID_PANTHERLORD=m - CONFIG_HID_PETALYNX=m - CONFIG_HID_PICOLCD=m --CONFIG_HID_QUANTA=m - CONFIG_HID_ROCCAT=m - CONFIG_HID_SAMSUNG=m - CONFIG_HID_SONY=m -@@ -675,6 +558,8 @@ CONFIG_HID_WACOM=m - CONFIG_HID_WIIMOTE=m - CONFIG_HID_ZEROPLUS=m - CONFIG_HID_ZYDACRON=m -+CONFIG_HID_PID=y -+CONFIG_USB_HIDDEV=y - CONFIG_USB=y - CONFIG_USB_ANNOUNCE_NEW_DEVICES=y - CONFIG_USB_MON=m -@@ -771,7 +656,7 @@ CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y - CONFIG_MMC_SDHCI_BCM2708=y - CONFIG_MMC_SDHCI_BCM2708_DMA=y --CONFIG_LEDS_GPIO=y -+CONFIG_LEDS_GPIO=m - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m - CONFIG_LEDS_TRIGGER_DEFAULT_ON=m -@@ -811,7 +696,6 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m --CONFIG_ZRAM=m - # CONFIG_IOMMU_SUPPORT is not set - CONFIG_EXT4_FS=y - CONFIG_EXT4_FS_POSIX_ACL=y -@@ -860,7 +744,6 @@ CONFIG_SQUASHFS_XATTR=y - CONFIG_SQUASHFS_LZO=y - CONFIG_SQUASHFS_XZ=y - CONFIG_NFS_FS=y --CONFIG_NFS_V3=y - CONFIG_NFS_V3_ACL=y - CONFIG_NFS_V4=y - CONFIG_ROOT_NFS=y -@@ -874,9 +757,6 @@ CONFIG_CIFS_XATTR=y - CONFIG_CIFS_POSIX=y - CONFIG_9P_FS=m - CONFIG_9P_FS_POSIX_ACL=y --CONFIG_PARTITION_ADVANCED=y --CONFIG_MAC_PARTITION=y --CONFIG_EFI_PARTITION=y - CONFIG_NLS_DEFAULT="utf8" - CONFIG_NLS_CODEPAGE_437=y - CONFIG_NLS_CODEPAGE_737=m -@@ -923,7 +803,6 @@ CONFIG_TIMER_STATS=y - CONFIG_DEBUG_MEMORY_INIT=y - CONFIG_BOOT_PRINTK_DELAY=y - CONFIG_LATENCYTOP=y --CONFIG_SYSCTL_SYSCALL_CHECK=y - # CONFIG_KPROBE_EVENT is not set - CONFIG_KGDB=y - CONFIG_KGDB_KDB=y --- -1.8.1.5 - - -From 0a54d9af34cae6c5b506a7b88a39da43a24231b8 Mon Sep 17 00:00:00 2001 +From 16555ecdf4dc9f49b3d860d483833fdad349f8a2 Mon Sep 17 00:00:00 2001 From: Aron Szabo Date: Sat, 16 Jun 2012 12:15:55 +0200 -Subject: [PATCH 119/169] lirc: added support for RaspberryPi GPIO +Subject: [PATCH 69/95] lirc: added support for RaspberryPi GPIO --- drivers/staging/media/lirc/Kconfig | 6 + @@ -130173,368 +121457,2325 @@ index 0000000..96acab0 +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); -- -1.8.1.5 +1.8.1.6 -From 3b10db9ddd44235222f401b250697927e4dbd725 Mon Sep 17 00:00:00 2001 +From be52bbc167b78f6642b40002fc8908b3c76a6eb9 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Thu, 8 Nov 2012 00:00:18 +0000 -Subject: [PATCH 120/169] Enable building of lirc-rpi +Date: Sun, 25 Nov 2012 18:28:09 +0000 +Subject: [PATCH 70/95] Allow mailbox driver to be called from user code though + ioctl --- - arch/arm/configs/bcmrpi_defconfig | 1 + + arch/arm/mach-bcm2708/include/mach/vcio.h | 33 +++++++ + arch/arm/mach-bcm2708/vcio.c | 137 +++++++++++++++++++++++++++++- + 2 files changed, 168 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/mach-bcm2708/include/mach/vcio.h b/arch/arm/mach-bcm2708/include/mach/vcio.h +index 7dfd14e..b522ba9 100644 +--- a/arch/arm/mach-bcm2708/include/mach/vcio.h ++++ b/arch/arm/mach-bcm2708/include/mach/vcio.h +@@ -105,4 +105,37 @@ enum { + extern int /*rc*/ bcm_mailbox_write(unsigned chan, uint32_t data28); + extern int /*rc*/ bcm_mailbox_property(void *data, int size); + ++#include ++ ++/* ++ * The major device number. We can't rely on dynamic ++ * registration any more, because ioctls need to know ++ * it. ++ */ ++#define MAJOR_NUM 100 ++ ++/* ++ * Set the message of the device driver ++ */ ++#define IOCTL_MBOX_PROPERTY _IOWR(MAJOR_NUM, 0, char *) ++/* ++ * _IOWR means that we're creating an ioctl command ++ * number for passing information from a user process ++ * to the kernel module and from the kernel module to user process ++ * ++ * The first arguments, MAJOR_NUM, is the major device ++ * number we're using. ++ * ++ * The second argument is the number of the command ++ * (there could be several with different meanings). ++ * ++ * The third argument is the type we want to get from ++ * the process to the kernel. ++ */ ++ ++/* ++ * The name of the device file ++ */ ++#define DEVICE_FILE_NAME "char_dev" ++ + #endif +diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c +index 468fdef..09b78b5 100644 +--- a/arch/arm/mach-bcm2708/vcio.c ++++ b/arch/arm/mach-bcm2708/vcio.c +@@ -37,6 +37,9 @@ + #include + #include + ++#include ++ ++ + #define DRIVER_NAME BCM_VCIO_DRIVER_NAME + + /* ---------------------------------------------------------------------- +@@ -216,6 +219,33 @@ static void dev_mbox_register(const char *dev_name, struct device *dev) + mbox_dev = dev; + } + ++static int mbox_copy_from_user(void *dst, const void *src, int size) ++{ ++ if ( (uint32_t)src < TASK_SIZE) ++ { ++ return copy_from_user(dst, src, size); ++ } ++ else ++ { ++ memcpy( dst, src, size ); ++ return 0; ++ } ++} ++ ++static int mbox_copy_to_user(void *dst, const void *src, int size) ++{ ++ if ( (uint32_t)dst < TASK_SIZE) ++ { ++ return copy_to_user(dst, src, size); ++ } ++ else ++ { ++ memcpy( dst, src, size ); ++ return 0; ++ } ++} ++ ++ + extern int bcm_mailbox_property(void *data, int size) + { + uint32_t success; +@@ -227,7 +257,7 @@ extern int bcm_mailbox_property(void *data, int size) + mem_kern = dma_alloc_coherent(NULL, PAGE_ALIGN(size), &mem_bus, GFP_ATOMIC); + if (mem_kern) { + /* create the message */ +- memcpy(mem_kern, data, size); ++ mbox_copy_from_user(mem_kern, data, size); + + /* send the message */ + wmb(); +@@ -238,7 +268,7 @@ extern int bcm_mailbox_property(void *data, int size) + if (s == 0) { + /* copy the response */ + rmb(); +- memcpy(data, mem_kern, size); ++ mbox_copy_to_user(data, mem_kern, size); + } + dma_free_coherent(NULL, PAGE_ALIGN(size), mem_kern, mem_bus); + } else { +@@ -254,6 +284,93 @@ extern int bcm_mailbox_property(void *data, int size) + * Platform Device for Mailbox + * -------------------------------------------------------------------- */ + ++/* ++ * Is the device open right now? Used to prevent ++ * concurent access into the same device ++ */ ++static int Device_Open = 0; ++ ++/* ++ * This is called whenever a process attempts to open the device file ++ */ ++static int device_open(struct inode *inode, struct file *file) ++{ ++ /* ++ * We don't want to talk to two processes at the same time ++ */ ++ if (Device_Open) ++ return -EBUSY; ++ ++ Device_Open++; ++ /* ++ * Initialize the message ++ */ ++ try_module_get(THIS_MODULE); ++ return 0; ++} ++ ++static int device_release(struct inode *inode, struct file *file) ++{ ++ /* ++ * We're now ready for our next caller ++ */ ++ Device_Open--; ++ ++ module_put(THIS_MODULE); ++ return 0; ++} ++ ++/* ++ * This function is called whenever a process tries to do an ioctl on our ++ * device file. We get two extra parameters (additional to the inode and file ++ * structures, which all device functions get): the number of the ioctl called ++ * and the parameter given to the ioctl function. ++ * ++ * If the ioctl is write or read/write (meaning output is returned to the ++ * calling process), the ioctl call returns the output of this function. ++ * ++ */ ++static long device_ioctl(struct file *file, /* see include/linux/fs.h */ ++ unsigned int ioctl_num, /* number and param for ioctl */ ++ unsigned long ioctl_param) ++{ ++ unsigned size; ++ /* ++ * Switch according to the ioctl called ++ */ ++ switch (ioctl_num) { ++ case IOCTL_MBOX_PROPERTY: ++ /* ++ * Receive a pointer to a message (in user space) and set that ++ * to be the device's message. Get the parameter given to ++ * ioctl by the process. ++ */ ++ mbox_copy_from_user(&size, (void *)ioctl_param, sizeof size); ++ return bcm_mailbox_property((void *)ioctl_param, size); ++ break; ++ default: ++ printk(KERN_ERR DRIVER_NAME "unknown ioctl: %d\n", ioctl_num); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++/* Module Declarations */ ++ ++/* ++ * This structure will hold the functions to be called ++ * when a process does something to the device we ++ * created. Since a pointer to this structure is kept in ++ * the devices table, it can't be local to ++ * init_module. NULL is for unimplemented functios. ++ */ ++struct file_operations fops = { ++ .unlocked_ioctl = device_ioctl, ++ .open = device_open, ++ .release = device_release, /* a.k.a. close */ ++}; ++ + static int bcm_vcio_probe(struct platform_device *pdev) + { + int ret = 0; +@@ -286,6 +403,22 @@ static int bcm_vcio_probe(struct platform_device *pdev) + __io_address(ARM_0_MAIL0_RD)); + } + } ++ ++ if (ret == 0) { ++ /* ++ * Register the character device ++ */ ++ ret = register_chrdev(MAJOR_NUM, DEVICE_FILE_NAME, &fops); ++ ++ /* ++ * Negative values signify an error ++ */ ++ if (ret < 0) { ++ printk(KERN_ERR DRIVER_NAME ++ "Failed registering the character device %d\n", ret); ++ return ret; ++ } ++ } + return ret; + } + +-- +1.8.1.6 + + +From 21c737667da2695cb7adda165b00449c4d83bb40 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Tue, 11 Dec 2012 18:23:03 +0000 +Subject: [PATCH 71/95] Default to dwc_otp.lpm_enable=0 + +--- + drivers/usb/host/dwc_otg/dwc_otg_driver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.c b/drivers/usb/host/dwc_otg/dwc_otg_driver.c +index d353a9a..cea8fcb 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_driver.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c +@@ -228,7 +228,7 @@ struct dwc_otg_driver_module_params { + .rx_thr_length = -1, + .pti_enable = -1, + .mpi_enable = -1, +- .lpm_enable = -1, ++ .lpm_enable = 0, + .ic_usb_cap = -1, + .ahb_thr_ratio = -1, + .power_down = -1, +-- +1.8.1.6 + + +From f2abd325f8c72fa1921bdc93003370d0019cdf52 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Tue, 11 Dec 2012 19:04:27 +0000 +Subject: [PATCH 72/95] Increase default coherent pool so vchiq starts up + +--- + arch/arm/mach-bcm2708/bcm2708.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c +index 9f456e9..87fd348 100644 +--- a/arch/arm/mach-bcm2708/bcm2708.c ++++ b/arch/arm/mach-bcm2708/bcm2708.c +@@ -850,9 +850,7 @@ void __init bcm2708_init_early(void) + * context. Increase size of atomic coherent pool to make sure such + * the allocations won't fail. + */ +-#if !defined(CONFIG_BCM_VC_CMA) +- init_dma_coherent_pool_size(SZ_2M); +-#endif ++ init_dma_coherent_pool_size(SZ_4M); + } + + static void __init board_reserve(void) +-- +1.8.1.6 + + +From cd3e9b7bd25fc1e3f109fd853a6b2739aa20fd4c Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Mon, 7 Jan 2013 21:34:59 +0000 +Subject: [PATCH 73/95] Add mutex around bcm_mailbox_property function + +--- + arch/arm/mach-bcm2708/vcio.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c +index 09b78b5..599eb63 100644 +--- a/arch/arm/mach-bcm2708/vcio.c ++++ b/arch/arm/mach-bcm2708/vcio.c +@@ -245,7 +245,7 @@ static int mbox_copy_to_user(void *dst, const void *src, int size) + } + } + +- ++static DEFINE_MUTEX(mailbox_lock); + extern int bcm_mailbox_property(void *data, int size) + { + uint32_t success; +@@ -253,6 +253,7 @@ extern int bcm_mailbox_property(void *data, int size) + void *mem_kern; /* the memory address accessed from driver */ + int s = 0; + ++ mutex_lock(&mailbox_lock); + /* allocate some memory for the messages communicating with GPU */ + mem_kern = dma_alloc_coherent(NULL, PAGE_ALIGN(size), &mem_bus, GFP_ATOMIC); + if (mem_kern) { +@@ -276,6 +277,8 @@ extern int bcm_mailbox_property(void *data, int size) + } + if (s != 0) + printk(KERN_ERR DRIVER_NAME ": %s failed (%d)\n", __func__, s); ++ ++ mutex_unlock(&mailbox_lock); + return s; + } + EXPORT_SYMBOL_GPL(bcm_mailbox_property); +-- +1.8.1.6 + + +From dba2a1dcb5f53765afac6612b1bcb06c9849a399 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Wed, 9 Jan 2013 16:12:04 +0000 +Subject: [PATCH 74/95] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent + kernel memory corruption, escalating to OOPS under high USB load. + +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 2 -- + drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 1 + + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +index 2b7945a..d5c94f4 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -500,8 +500,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, + DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. " + "Error status %d\n", retval); + dwc_otg_hcd_qtd_free(qtd); +- } else { +- qtd->qh = *ep_handle; + } + intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); + if (!intr_mask.b.sofintr && retval == 0) { +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c +index e6b2a7b..b337e1b 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c +@@ -946,6 +946,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, + if (retval == 0) { + DWC_CIRCLEQ_INSERT_TAIL(&((*qh)->qtd_list), qtd, + qtd_list_entry); ++ qtd->qh = *qh; + } + DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); + +-- +1.8.1.6 + + +From 7e8a9d827cabf0db6a14bd5b4a276211e6fbd692 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Mon, 21 Jan 2013 23:03:53 +0000 +Subject: [PATCH 75/95] Return error value from bcm2708_setup_state. Thanks + notro + +--- + drivers/spi/spi-bcm2708.c | 1 + 1 file changed, 1 insertion(+) -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 2069eb0..12e6d92 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -40,6 +40,7 @@ CONFIG_MAC_PARTITION=y - CONFIG_EFI_PARTITION=y - CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y -+CONFIG_BCM2708_DMAER=m - CONFIG_PREEMPT=y - CONFIG_AEABI=y - CONFIG_UACCESS_WITH_MEMCPY=y +diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c +index 9f1580e..8513704 100644 +--- a/drivers/spi/spi-bcm2708.c ++++ b/drivers/spi/spi-bcm2708.c +@@ -378,6 +378,7 @@ static int bcm2708_spi_setup(struct spi_device *spi) + if (ret < 0) { + kfree(state); + spi->controller_state = NULL; ++ return ret; + } + + dev_dbg(&spi->dev, -- -1.8.1.5 +1.8.1.6 -From 04fb8f96a1ae0c069bc7ce705776042a625b55ff Mon Sep 17 00:00:00 2001 +From 2429e28f4db39405773b896e7925860218e44d26 Mon Sep 17 00:00:00 2001 +From: Kamal Mostafa +Date: Mon, 22 Oct 2012 15:52:44 -0700 +Subject: [PATCH 76/95] spi/spi-bcm2708: respect per-transfer SPI clock + speed_hz value + +The bcm2708 SPI driver's bcm2708_process_transfer() was ignoring the +per-transfer speed_hz value even when it was provided (it always just +used the spi device's max_speed_hz value). Now, per-transfer speed_hz +values are respected. + +Also added debug print to bcm2708_setup_state() to help keep an eye on +the configured SPI parameters. + +Signed-off-by: Kamal Mostafa +--- + drivers/spi/spi-bcm2708.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c +index 8513704..b74aa32 100644 +--- a/drivers/spi/spi-bcm2708.c ++++ b/drivers/spi/spi-bcm2708.c +@@ -259,6 +259,10 @@ static int bcm2708_setup_state(struct spi_master *master, + if (state) { + state->cs = cs; + state->cdiv = cdiv; ++ dev_dbg(dev, "setup: want %d Hz; " ++ "bus_hz=%lu / cdiv=%u == %lu Hz; " ++ "mode %u: cs 0x%08X\n", ++ hz, bus_hz, cdiv, bus_hz/cdiv, mode, cs); + } + + return 0; +@@ -277,7 +281,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs, + + if (xfer->bits_per_word || xfer->speed_hz) { + ret = bcm2708_setup_state(spi->master, &spi->dev, &state, +- spi->max_speed_hz, spi->chip_select, spi->mode, ++ xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz, ++ spi->chip_select, spi->mode, + spi->bits_per_word); + if (ret) + return ret; +-- +1.8.1.6 + + +From 7622149459557ba0bc886c9c24281948d8ebc2db Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Wed, 21 Nov 2012 13:23:02 +0000 -Subject: [PATCH 121/169] Update list of modules build with next kernel. Fixes - missing uvcvideo amongst others +Date: Tue, 26 Mar 2013 22:29:01 +0000 +Subject: [PATCH 77/95] Add hwrng (hardware random number generator) driver + +Conflicts: +--- + arch/arm/mach-bcm2708/include/mach/platform.h | 1 + + drivers/char/hw_random/Kconfig | 12 +++ + drivers/char/hw_random/Makefile | 2 + + drivers/char/hw_random/bcm2708-rng.c | 117 ++++++++++++++++++++++++++ + 4 files changed, 132 insertions(+) + create mode 100755 drivers/char/hw_random/bcm2708-rng.c + +diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h +index 89e72d1..992a630 100644 +--- a/arch/arm/mach-bcm2708/include/mach/platform.h ++++ b/arch/arm/mach-bcm2708/include/mach/platform.h +@@ -62,6 +62,7 @@ + #define DMA_BASE (BCM2708_PERI_BASE + 0x7000) /* DMA controller */ + #define ARM_BASE (BCM2708_PERI_BASE + 0xB000) /* BCM2708 ARM control block */ + #define PM_BASE (BCM2708_PERI_BASE + 0x100000) /* Power Management, Reset controller and Watchdog registers */ ++#define RNG_BASE (BCM2708_PERI_BASE + 0x104000) /* Hardware RNG */ + #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO */ + #define UART0_BASE (BCM2708_PERI_BASE + 0x201000) /* Uart 0 */ + #define MMCI0_BASE (BCM2708_PERI_BASE + 0x202000) /* MMC interface */ +diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig +index c5a0262..229f430 100644 +--- a/drivers/char/hw_random/Kconfig ++++ b/drivers/char/hw_random/Kconfig +@@ -302,3 +302,15 @@ config HW_RANDOM_TPM + module will be called tpm-rng. + + If unsure, say Y. ++ ++config HW_RANDOM_BCM2708 ++ tristate "BCM2708 generic true random number generator support" ++ depends on HW_RANDOM && ARCH_BCM2708 ++ ---help--- ++ This driver provides the kernel-side support for the BCM2708 hardware. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called bcm2708-rng. ++ ++ If unsure, say N. ++ +diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile +index 1fd7eec..1974a07 100644 +--- a/drivers/char/hw_random/Makefile ++++ b/drivers/char/hw_random/Makefile +@@ -26,3 +26,5 @@ obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o + obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o + obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o + obj-$(CONFIG_HW_RANDOM_TPM) += tpm-rng.o ++obj-$(CONFIG_HW_RANDOM_BCM2708) += bcm2708-rng.o ++ +diff --git a/drivers/char/hw_random/bcm2708-rng.c b/drivers/char/hw_random/bcm2708-rng.c +new file mode 100755 +index 0000000..1ffa7d7 +--- /dev/null ++++ b/drivers/char/hw_random/bcm2708-rng.c +@@ -0,0 +1,117 @@ ++/** ++ * Copyright (c) 2010-2012 Broadcom. All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions, and the following disclaimer, ++ * without modification. ++ * 2. Redistributions in binary form must reproduce the above copyright ++ * notice, this list of conditions and the following disclaimer in the ++ * documentation and/or other materials provided with the distribution. ++ * 3. The names of the above-listed copyright holders may not be used ++ * to endorse or promote products derived from this software without ++ * specific prior written permission. ++ * ++ * ALTERNATIVELY, this software may be distributed under the terms of the ++ * GNU General Public License ("GPL") version 2, as published by the Free ++ * Software Foundation. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR ++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#define RNG_CTRL (0x0) ++#define RNG_STATUS (0x4) ++#define RNG_DATA (0x8) ++#define RNG_FF_THRESHOLD (0xc) ++ ++/* enable rng */ ++#define RNG_RBGEN 0x1 ++/* double speed, less random mode */ ++#define RNG_RBG2X 0x2 ++ ++/* the initial numbers generated are "less random" so will be discarded */ ++#define RNG_WARMUP_COUNT 0x40000 ++ ++static int bcm2708_rng_data_read(struct hwrng *rng, u32 *buffer) ++{ ++ void __iomem *rng_base = (void __iomem *)rng->priv; ++ unsigned words; ++ /* wait for a random number to be in fifo */ ++ do { ++ words = __raw_readl(rng_base + RNG_STATUS)>>24; ++ } ++ while (words == 0); ++ /* read the random number */ ++ *buffer = __raw_readl(rng_base + RNG_DATA); ++ return 4; ++} ++ ++static struct hwrng bcm2708_rng_ops = { ++ .name = "bcm2708", ++ .data_read = bcm2708_rng_data_read, ++}; ++ ++static int __init bcm2708_rng_init(void) ++{ ++ void __iomem *rng_base; ++ int err; ++ ++ /* map peripheral */ ++ rng_base = ioremap(RNG_BASE, 0x10); ++ pr_info("bcm2708_rng_init=%p\n", rng_base); ++ if (!rng_base) { ++ pr_err("bcm2708_rng_init failed to ioremap\n"); ++ return -ENOMEM; ++ } ++ bcm2708_rng_ops.priv = (unsigned long)rng_base; ++ /* register driver */ ++ err = hwrng_register(&bcm2708_rng_ops); ++ if (err) { ++ pr_err("bcm2708_rng_init hwrng_register()=%d\n", err); ++ iounmap(rng_base); ++ } else { ++ /* set warm-up count & enable */ ++ __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS); ++ __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL); ++ } ++ return err; ++} ++ ++static void __exit bcm2708_rng_exit(void) ++{ ++ void __iomem *rng_base = (void __iomem *)bcm2708_rng_ops.priv; ++ pr_info("bcm2708_rng_exit\n"); ++ /* disable rng hardware */ ++ __raw_writel(0, rng_base + RNG_CTRL); ++ /* unregister driver */ ++ hwrng_unregister(&bcm2708_rng_ops); ++ iounmap(rng_base); ++} ++ ++module_init(bcm2708_rng_init); ++module_exit(bcm2708_rng_exit); ++ ++MODULE_DESCRIPTION("BCM2708 H/W Random Number Generator (RNG) driver"); ++MODULE_LICENSE("GPL and additional rights"); +-- +1.8.1.6 + + +From 8a9e31362a133355f8ec4e9ea30d7453bae8e6e0 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Thu, 7 Feb 2013 17:04:13 +0000 +Subject: [PATCH 78/95] Add missing newlines to log messages --- - arch/arm/configs/bcmrpi_defconfig | 228 +++++++++++++++++++++++++++++++++++++- - 1 file changed, 222 insertions(+), 6 deletions(-) + drivers/cpufreq/bcm2835-cpufreq.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) +diff --git a/drivers/cpufreq/bcm2835-cpufreq.c b/drivers/cpufreq/bcm2835-cpufreq.c +index 6ff1edb..5a19212 100755 +--- a/drivers/cpufreq/bcm2835-cpufreq.c ++++ b/drivers/cpufreq/bcm2835-cpufreq.c +@@ -91,7 +91,7 @@ static uint32_t bcm2835_cpufreq_set_clock(int cur_rate, int arm_rate) + if (s == 0 && (msg.request_code & 0x80000000)) + actual_rate = msg.tag.val/1000; + +- print_debug("Setting new frequency = %d -> %d (actual %d)", cur_rate, arm_rate, actual_rate); ++ print_debug("Setting new frequency = %d -> %d (actual %d)\n", cur_rate, arm_rate, actual_rate); + return actual_rate; + } + +@@ -117,7 +117,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag) + if (s == 0 && (msg.request_code & 0x80000000)) + arm_rate = msg.tag.val/1000; + +- print_debug("%s frequency = %d", ++ print_debug("%s frequency = %d\n", + tag == VCMSG_GET_CLOCK_RATE ? "Current": + tag == VCMSG_GET_MIN_CLOCK ? "Min": + tag == VCMSG_GET_MAX_CLOCK ? "Max": +@@ -133,7 +133,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag) + */ + static int __init bcm2835_cpufreq_module_init(void) + { +- print_debug("IN"); ++ print_debug("IN\n"); + return cpufreq_register_driver(&bcm2835_cpufreq_driver); + } + +@@ -144,7 +144,7 @@ static int __init bcm2835_cpufreq_module_init(void) + */ + static void __exit bcm2835_cpufreq_module_exit(void) + { +- print_debug("IN"); ++ print_debug("IN\n"); + cpufreq_unregister_driver(&bcm2835_cpufreq_driver); + return; + } +@@ -164,7 +164,7 @@ static int bcm2835_cpufreq_driver_init(struct cpufreq_policy *policy) + policy->max = policy->cpuinfo.max_freq = bcm2835_cpufreq_get_clock(VCMSG_GET_MAX_CLOCK); + policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); + +- print_info("min=%d max=%d cur=%d", policy->min, policy->max, policy->cur); ++ print_info("min=%d max=%d cur=%d\n", policy->min, policy->max, policy->cur); + return 0; + } + +@@ -178,7 +178,7 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned + { + unsigned int target = target_freq; + unsigned int cur = policy->cur; +- print_debug("%s: min=%d max=%d cur=%d target=%d",policy->governor->name,policy->min,policy->max,policy->cur,target_freq); ++ print_debug("%s: min=%d max=%d cur=%d target=%d\n",policy->governor->name,policy->min,policy->max,policy->cur,target_freq); + + /* if we are above min and using ondemand, then just use max */ + if (strcmp("ondemand", policy->governor->name)==0 && target > policy->min) +@@ -192,18 +192,18 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned + + if (!policy->cur) + { +- print_err("Error occurred setting a new frequency (%d)!", target); ++ print_err("Error occurred setting a new frequency (%d)!\n", target); + policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); + return -EINVAL; + } +- print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)", cur, policy->cur, policy->min, policy->max, target_freq, target); ++ print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)\n", cur, policy->cur, policy->min, policy->max, target_freq, target); + return 0; + } + + static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu) + { + unsigned int actual_rate = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); +- print_debug("%d", actual_rate); ++ print_debug("cpu=%d\n", actual_rate); + return actual_rate; + } + +@@ -215,7 +215,7 @@ static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu) + + static int bcm2835_cpufreq_driver_verify(struct cpufreq_policy *policy) + { +- print_info("switching to governor %s", policy->governor->name); ++ print_info("switching to governor %s\n", policy->governor->name); + return 0; + } + +-- +1.8.1.6 + + +From 8d3d6ccc8198707a3667fb3931a4ea91bc1ca87f Mon Sep 17 00:00:00 2001 +From: Technion +Date: Mon, 11 Feb 2013 22:08:53 +1100 +Subject: [PATCH 79/95] Changed wording on logging. Previously, we received + errors like this: mmc0: could read SD Status register (SSR) at the 3th + attempt A more sensible response is now returned. A typo also fixed in + comments. + +--- + drivers/mmc/core/sd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c +index 1ee6cf3..90228f9 100644 +--- a/drivers/mmc/core/sd.c ++++ b/drivers/mmc/core/sd.c +@@ -238,7 +238,7 @@ static int mmc_read_scr(struct mmc_card *card) + + err = mmc_app_send_scr(card, card->raw_scr); + if( !err ) +- break; // sucess!!! ++ break; // success!!! + + touch_nmi_watchdog(); // we are still alive! + +@@ -320,7 +320,7 @@ static int mmc_read_ssr(struct mmc_card *card) + + if( tries > 1 ) + { +- pr_info("%s: could read SD Status register (SSR) at the %dth attempt\n", mmc_hostname(card->host), tries ); ++ pr_info("%s: read SD Status register (SSR) after %d attempts\n", mmc_hostname(card->host), tries ); + } + + for (i = 0; i < 16; i++) +-- +1.8.1.6 + + +From e3f52010f19b564e4f22763cc10ef472c594b8bb Mon Sep 17 00:00:00 2001 +From: P33M +Date: Fri, 15 Feb 2013 22:36:47 +0000 +Subject: [PATCH 80/95] dwc_otg: Fix unsafe access of QTD during URB enqueue + +In dwc_otg_hcd_urb_enqueue during qtd creation, it was possible that the +transaction could complete almost immediately after the qtd was assigned +to a host channel during URB enqueue, which meant the qtd pointer was no +longer valid having been completed and removed. Usually, this resulted in +an OOPS during URB submission. By predetermining whether transactions +need to be queued or not, this unsafe pointer access is avoided. + +This bug was only evident on the Pi model A where a device was attached +that had no periodic endpoints (e.g. USB pendrive or some wlan devices). +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 23 ++++++++++++----------- + drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 2 +- + 2 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +index d5c94f4..e653d84 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -462,6 +462,8 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, + { + dwc_irqflags_t flags; + int retval = 0; ++ uint8_t needs_scheduling = 0; ++ dwc_otg_transaction_type_e tr_type; + dwc_otg_qtd_t *qtd; + gintmsk_data_t intr_mask = {.d32 = 0 }; + +@@ -493,22 +495,22 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, + return -DWC_E_NO_MEMORY; + } + #endif +- retval = +- dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc); ++ intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); ++ if(!intr_mask.b.sofintr) needs_scheduling = 1; ++ if((((dwc_otg_qh_t *)ep_handle)->ep_type == UE_BULK) && !(qtd->urb->flags & URB_GIVEBACK_ASAP)) ++ /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */ ++ needs_scheduling = 0; ++ ++ retval = dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc); + // creates a new queue in ep_handle if it doesn't exist already + if (retval < 0) { + DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. " + "Error status %d\n", retval); + dwc_otg_hcd_qtd_free(qtd); ++ return retval; + } +- intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); +- if (!intr_mask.b.sofintr && retval == 0) { +- dwc_otg_transaction_type_e tr_type; +- if ((qtd->qh->ep_type == UE_BULK) +- && !(qtd->urb->flags & URB_GIVEBACK_ASAP)) { +- /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */ +- return 0; +- } ++ ++ if(needs_scheduling) { + DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); + tr_type = dwc_otg_hcd_select_transactions(hcd); + if (tr_type != DWC_OTG_TRANSACTION_NONE) { +@@ -516,7 +518,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, + } + DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); + } +- + return retval; + } + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c +index b337e1b..b3e6e52 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c +@@ -937,7 +937,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, + if (*qh == NULL) { + *qh = dwc_otg_hcd_qh_create(hcd, urb, atomic_alloc); + if (*qh == NULL) { +- retval = -1; ++ retval = -DWC_E_NO_MEMORY; + goto done; + } + } +-- +1.8.1.6 + + +From 6421e90373006e1eba37590565dc0ba7dc9d5ff7 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Fri, 15 Feb 2013 22:38:40 +0000 +Subject: [PATCH 81/95] dwc_otg: Fix incorrect URB allocation error handling + +If the memory allocation for a dwc_otg_urb failed, the kernel would OOPS +because for some reason a member of the *unallocated* struct was set to +zero. Error handling changed to fail correctly. +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +index e653d84..fcec97f 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -3136,17 +3136,13 @@ dwc_otg_hcd_urb_t *dwc_otg_hcd_urb_alloc(dwc_otg_hcd_t * hcd, + else + dwc_otg_urb = DWC_ALLOC(size); + +- if (NULL != dwc_otg_urb) +- dwc_otg_urb->packet_count = iso_desc_count; ++ if (dwc_otg_urb) ++ dwc_otg_urb->packet_count = iso_desc_count; + else { +- dwc_otg_urb->packet_count = 0; +- if (size != 0) { +- DWC_ERROR("**** DWC OTG HCD URB alloc - " +- "%salloc of %db failed\n", +- atomic_alloc?"atomic ":"", size); +- } +- } +- ++ DWC_ERROR("**** DWC OTG HCD URB alloc - " ++ "%salloc of %db failed\n", ++ atomic_alloc?"atomic ":"", size); ++ } + return dwc_otg_urb; + } + +-- +1.8.1.6 + + +From b9b308e7fa83703d2be04c04c9a42392eef9effb Mon Sep 17 00:00:00 2001 +From: pjennings +Date: Wed, 20 Feb 2013 17:51:43 -0600 +Subject: [PATCH 82/95] Added inverted transmitter support + +--- + drivers/staging/media/lirc/lirc_rpi.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c +index 96acab0..5bb0dfe 100644 +--- a/drivers/staging/media/lirc/lirc_rpi.c ++++ b/drivers/staging/media/lirc/lirc_rpi.c +@@ -68,6 +68,8 @@ + static int sense = -1; + /* use softcarrier by default */ + static int softcarrier = 1; ++/* 0 = do not invert output, 1 = invert output */ ++static int invert = 0; + + struct gpio_chip *gpiochip; + struct irq_chip *irqchip; +@@ -135,10 +137,10 @@ static long send_pulse_softcarrier(unsigned long length) + actual = 0; target = 0; flag = 0; + while (actual < length) { + if (flag) { +- gpiochip->set(gpiochip, gpio_out_pin, 0); ++ gpiochip->set(gpiochip, gpio_out_pin, invert); + target += space_width; + } else { +- gpiochip->set(gpiochip, gpio_out_pin, 1); ++ gpiochip->set(gpiochip, gpio_out_pin, !invert); + target += pulse_width; + } + d = (target - actual - +@@ -162,7 +164,7 @@ static long send_pulse(unsigned long length) + if (softcarrier) { + return send_pulse_softcarrier(length); + } else { +- gpiochip->set(gpiochip, gpio_out_pin, 1); ++ gpiochip->set(gpiochip, gpio_out_pin, !invert); + safe_udelay(length); + return 0; + } +@@ -170,7 +172,7 @@ static long send_pulse(unsigned long length) + + static void send_space(long length) + { +- gpiochip->set(gpiochip, gpio_out_pin, 0); ++ gpiochip->set(gpiochip, gpio_out_pin, invert); + if (length <= 0) + return; + safe_udelay(length); +@@ -318,7 +320,7 @@ static int init_port(void) + + gpiochip->direction_input(gpiochip, gpio_in_pin); + gpiochip->direction_output(gpiochip, gpio_out_pin, 1); +- gpiochip->set(gpiochip, gpio_out_pin, 0); ++ gpiochip->set(gpiochip, gpio_out_pin, invert); + + irq = gpiochip->to_irq(gpiochip, gpio_in_pin); + dprintk("to_irq %d\n", irq); +@@ -457,7 +459,7 @@ static ssize_t lirc_write(struct file *file, const char *buf, + else + delta = send_pulse(wbuf[i]); + } +- gpiochip->set(gpiochip, gpio_out_pin, 0); ++ gpiochip->set(gpiochip, gpio_out_pin, invert); + + spin_unlock_irqrestore(&lock, flags); + kfree(wbuf); +@@ -683,5 +685,8 @@ static void __exit lirc_rpi_exit_module(void) + module_param(softcarrier, bool, S_IRUGO); + MODULE_PARM_DESC(softcarrier, "Software carrier (0 = off, 1 = on, default on)"); + ++module_param(invert, bool, S_IRUGO); ++MODULE_PARM_DESC(invert, "Invert output (0 = off, 1 = on, default off"); ++ + module_param(debug, bool, S_IRUGO | S_IWUSR); + MODULE_PARM_DESC(debug, "Enable debugging messages"); +-- +1.8.1.6 + + +From 28387c3a462a968228d0e6a22f89fb13680d0b50 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Sun, 24 Feb 2013 16:30:57 +0000 +Subject: [PATCH 83/95] Add retry on error and tidy of temperature driver + +--- + drivers/thermal/bcm2835-thermal.c | 78 ++++++++++++++------------------------- + 1 file changed, 27 insertions(+), 51 deletions(-) + +diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c +index 3f9a733..85fceb5 100644 +--- a/drivers/thermal/bcm2835-thermal.c ++++ b/drivers/thermal/bcm2835-thermal.c +@@ -33,7 +33,6 @@ + #define print_debug(fmt,...) + #endif + #define print_err(fmt,...) printk(KERN_ERR "%s:%s:%d: "fmt"\n", MODULE_NAME, __func__,__LINE__, ##__VA_ARGS__) +-#define print_info(fmt,...) printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ##__VA_ARGS__) + + #define VC_TAG_GET_TEMP 0x00030006 + #define VC_TAG_GET_MAX_TEMP 0x0003000A +@@ -66,12 +65,6 @@ struct bcm2835_thermal_data { + struct vc_msg msg; + }; + +-/* --- PROTOTYPES --- */ +-static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *); +-static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int, unsigned long *); +-static int bcm2835_get_trip_type(struct thermal_zone_device *thermal_dev, int trip_num, enum thermal_trip_type *trip_type); +-static int bcm2835_get_mode(struct thermal_zone_device *thermal_dev, enum thermal_device_mode *dev_mode); +- + /* --- GLOBALS --- */ + static struct bcm2835_thermal_data bcm2835_data; + +@@ -79,64 +72,47 @@ struct bcm2835_thermal_data { + static struct thermal_zone_device_ops ops; + + /* --- FUNCTIONS --- */ +-static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp) +-{ +- int result; + ++static int bcm2835_get_temp_or_max(struct thermal_zone_device *thermal_dev, unsigned long *temp, unsigned tag_id) ++{ ++ int result = -1, retry = 3; + print_debug("IN"); + +- /* wipe all previous message data */ +- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); +- +- /* prepare message */ +- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; +- bcm2835_data.msg.tag.buffer_size = 8; +- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_MAX_TEMP; +- +- /* send the message */ +- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); ++ *temp = 0; ++ while (result != 0 && retry-- > 0) { ++ /* wipe all previous message data */ ++ memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); ++ ++ /* prepare message */ ++ bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; ++ bcm2835_data.msg.tag.buffer_size = 8; ++ bcm2835_data.msg.tag.tag_id = tag_id; ++ ++ /* send the message */ ++ result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); ++ print_debug("Got %stemperature as %u (%d,%x)\n", tag_id==VC_TAG_GET_MAX_TEMP ? "max ":"", (uint)bcm2835_data.msg.tag.val, result, bcm2835_data.msg.request_code); ++ if (!(bcm2835_data.msg.request_code & 0x80000000)) ++ result = -1; ++ } + + /* check if it was all ok and return the rate in milli degrees C */ +- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000)) ++ if (result == 0) + *temp = (uint)bcm2835_data.msg.tag.val; +- #ifdef THERMAL_DEBUG_ENABLE + else +- print_debug("Failed to get temperature!"); +- #endif +- print_debug("Got temperature as %u",(uint)*temp); ++ print_err("Failed to get temperature! (%x:%d)\n", tag_id, result); + print_debug("OUT"); +- return 0; ++ return result; + } + + static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *temp) + { +- int result; +- +- print_debug("IN"); +- +- /* wipe all previous message data */ +- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); +- +- /* prepare message */ +- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; +- bcm2835_data.msg.tag.buffer_size = 8; +- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_TEMP; +- +- /* send the message */ +- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); +- +- /* check if it was all ok and return the rate in milli degrees C */ +- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000)) +- *temp = (uint)bcm2835_data.msg.tag.val; +- #ifdef THERMAL_DEBUG_ENABLE +- else +- print_debug("Failed to get temperature!"); +- #endif +- print_debug("Got temperature as %u",(uint)*temp); +- print_debug("OUT"); +- return 0; ++ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_TEMP); + } + ++static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp) ++{ ++ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_MAX_TEMP); ++} + + static int bcm2835_get_trip_type(struct thermal_zone_device * thermal_dev, int trip_num, enum thermal_trip_type *trip_type) + { +-- +1.8.1.6 + + +From 0b28dfd60c43cd1a263bfe0722e8ed6ca368c0ae Mon Sep 17 00:00:00 2001 +From: P33M +Date: Thu, 28 Feb 2013 16:52:51 +0000 +Subject: [PATCH 84/95] dwc_otg: fix potential use-after-free case in interrupt + handler + +If a transaction had previously aborted, certain interrupts are +enabled to track error counts and reset where necessary. On IN +endpoints the host generates an ACK interrupt near-simultaneously +with completion of transfer. In the case where this transfer had +previously had an error, this results in a use-after-free on +the QTD memory space with a 1-byte length being overwritten to +0x00. +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c +index e8c91e7..0c81a64 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c +@@ -2223,7 +2223,8 @@ int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd, uint32_t num) + retval |= handle_hc_nak_intr(dwc_otg_hcd, hc, hc_regs, qtd); + } + if (hcint.b.ack) { +- retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd); ++ if(!hcint.b.chhltd) ++ retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd); + } + if (hcint.b.nyet) { + retval |= handle_hc_nyet_intr(dwc_otg_hcd, hc, hc_regs, qtd); +-- +1.8.1.6 + + +From e84447e71ebb957d21e69999b54cae65d7b60d16 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Sun, 3 Mar 2013 14:45:53 +0000 +Subject: [PATCH 85/95] dwc_otg: add handling of SPLIT transaction data toggle + errors + +Previously a data toggle error on packets from a USB1.1 device behind +a TT would result in the Pi locking up as the driver never handled +the associated interrupt. Patch adds basic retry mechanism and +interrupt acknowledgement to cater for either a chance toggle error or +for devices that have a broken initial toggle state (FT8U232/FT232BM). +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c +index 0c81a64..16e8c6c 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c +@@ -1921,13 +1921,20 @@ static int32_t handle_hc_datatglerr_intr(dwc_otg_hcd_t * hcd, + dwc_otg_qtd_t * qtd) + { + DWC_DEBUGPL(DBG_HCDI, "--Host Channel %d Interrupt: " +- "Data Toggle Error--\n", hc->hc_num); ++ "Data Toggle Error on %s transfer--\n", ++ hc->hc_num, (hc->ep_is_in ? "IN" : "OUT")); + +- if (hc->ep_is_in) { ++ /* Data toggles on split transactions cause the hc to halt. ++ * restart transfer */ ++ if(hc->qh->do_split) ++ { ++ qtd->error_count++; ++ dwc_otg_hcd_save_data_toggle(hc, hc_regs, qtd); ++ update_urb_state_xfer_intr(hc, hc_regs, ++ qtd->urb, qtd, DWC_OTG_HC_XFER_XACT_ERR); ++ halt_channel(hcd, hc, qtd, DWC_OTG_HC_XFER_XACT_ERR); ++ } else if (hc->ep_is_in) { + qtd->error_count = 0; +- } else { +- DWC_ERROR("Data Toggle Error on OUT transfer," +- "channel %d\n", hc->hc_num); + } + + disable_hc_int(hc_regs, datatglerr); +@@ -2080,6 +2087,8 @@ static void handle_hc_chhltd_intr_dma(dwc_otg_hcd_t * hcd, + handle_hc_babble_intr(hcd, hc, hc_regs, qtd); + } else if (hcint.b.frmovrun) { + handle_hc_frmovrun_intr(hcd, hc, hc_regs, qtd); ++ } else if (hcint.b.datatglerr) { ++ handle_hc_datatglerr_intr(hcd, hc, hc_regs, qtd); + } else if (!out_nak_enh) { + if (hcint.b.nyet) { + /* +-- +1.8.1.6 + + +From 8c91077b39b262d7d7b04d5e74cadf40055d6a4f Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 1 May 2013 21:14:28 +0100 +Subject: [PATCH 86/95] Add bitbanging pullups, use them for w1-gpio + +Allows parasite power to work, uses module option pullup=1 +--- + drivers/w1/masters/w1-gpio.c | 20 ++++++++++++++++++++ + drivers/w1/w1.h | 6 ++++++ + drivers/w1/w1_int.c | 16 +++++++++------- + drivers/w1/w1_io.c | 18 +++++++++++++++--- + 4 files changed, 50 insertions(+), 10 deletions(-) + +diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c +index 46d9701..f615f80 100644 +--- a/drivers/w1/masters/w1-gpio.c ++++ b/drivers/w1/masters/w1-gpio.c +@@ -23,6 +23,9 @@ + #include "../w1.h" + #include "../w1_int.h" + ++static int w1_gpio_pullup = 0; ++module_param_named(pullup, w1_gpio_pullup, int, 0); ++ + static void w1_gpio_write_bit_dir(void *data, u8 bit) + { + struct w1_gpio_platform_data *pdata = data; +@@ -47,6 +50,16 @@ static u8 w1_gpio_read_bit(void *data) + return gpio_get_value(pdata->pin) ? 1 : 0; + } + ++static void w1_gpio_bitbang_pullup(void *data, u8 on) ++{ ++ struct w1_gpio_platform_data *pdata = data; ++ ++ if (on) ++ gpio_direction_output(pdata->pin, 1); ++ else ++ gpio_direction_input(pdata->pin); ++} ++ + #if defined(CONFIG_OF) + static struct of_device_id w1_gpio_dt_ids[] = { + { .compatible = "w1-gpio" }, +@@ -133,6 +146,13 @@ static int w1_gpio_probe(struct platform_device *pdev) + master->write_bit = w1_gpio_write_bit_dir; + } + ++ if (w1_gpio_pullup) ++ if (pdata->is_open_drain) ++ printk(KERN_ERR "w1-gpio 'pullup' option " ++ "doesn't work with open drain GPIO\n"); ++ else ++ master->bitbang_pullup = w1_gpio_bitbang_pullup; ++ + err = w1_add_master_device(master); + if (err) { + dev_err(&pdev->dev, "w1_add_master device failed\n"); +diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h +index 45908e5..0ba75f6 100644 +--- a/drivers/w1/w1.h ++++ b/drivers/w1/w1.h +@@ -148,6 +148,12 @@ struct w1_bus_master + */ + u8 (*set_pullup)(void *, int); + ++ /** ++ * Turns the pullup on/off in bitbanging mode, takes an on/off argument. ++ * @return -1=Error, 0=completed ++ */ ++ void (*bitbang_pullup) (void *, u8); ++ + /** Really nice hardware can handles the different types of ROM search + * w1_master* is passed to the slave found callback. + */ +diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c +index 5a98649..a4d69b6 100644 +--- a/drivers/w1/w1_int.c ++++ b/drivers/w1/w1_int.c +@@ -117,19 +117,21 @@ int w1_add_master_device(struct w1_bus_master *master) + printk(KERN_ERR "w1_add_master_device: invalid function set\n"); + return(-EINVAL); + } +- /* While it would be electrically possible to make a device that +- * generated a strong pullup in bit bang mode, only hardware that +- * controls 1-wire time frames are even expected to support a strong +- * pullup. w1_io.c would need to support calling set_pullup before +- * the last write_bit operation of a w1_write_8 which it currently +- * doesn't. +- */ ++ ++ /* bitbanging hardware uses bitbang_pullup, other hardware uses set_pullup ++ * and takes care of timing itself */ + if (!master->write_byte && !master->touch_bit && master->set_pullup) { + printk(KERN_ERR "w1_add_master_device: set_pullup requires " + "write_byte or touch_bit, disabling\n"); + master->set_pullup = NULL; + } + ++ if (master->set_pullup && master->bitbang_pullup) { ++ printk(KERN_ERR "w1_add_master_device: set_pullup should not " ++ "be set when bitbang_pullup is used, disabling\n"); ++ master->set_pullup = NULL; ++ } ++ + /* Lock until the device is added (or not) to w1_masters. */ + mutex_lock(&w1_mlock); + /* Search for the first available id (starting at 1). */ +diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c +index e10acc2..667fdd5 100644 +--- a/drivers/w1/w1_io.c ++++ b/drivers/w1/w1_io.c +@@ -127,10 +127,22 @@ static void w1_pre_write(struct w1_master *dev) + static void w1_post_write(struct w1_master *dev) + { + if (dev->pullup_duration) { +- if (dev->enable_pullup && dev->bus_master->set_pullup) +- dev->bus_master->set_pullup(dev->bus_master->data, 0); +- else ++ if (dev->enable_pullup) { ++ if (dev->bus_master->set_pullup) { ++ dev->bus_master->set_pullup(dev-> ++ bus_master->data, ++ 0); ++ } else if (dev->bus_master->bitbang_pullup) { ++ dev->bus_master-> ++ bitbang_pullup(dev->bus_master->data, 1); ++ msleep(dev->pullup_duration); ++ dev->bus_master-> ++ bitbang_pullup(dev->bus_master->data, 0); ++ } ++ } else { + msleep(dev->pullup_duration); ++ } ++ + dev->pullup_duration = 0; + } + } +-- +1.8.1.6 + + +From 9e0a44ca8629762becbcd8cfc91fce2880cc8ce5 Mon Sep 17 00:00:00 2001 +From: notro +Date: Sat, 26 Jan 2013 20:38:03 +0100 +Subject: [PATCH 87/95] spi-bcm2708: add 9-bit support using LoSSI mode + +--- + drivers/spi/spi-bcm2708.c | 30 ++++++++++++++++++++++++++++-- + 1 file changed, 28 insertions(+), 2 deletions(-) + +diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c +index b74aa32..abaa5a6 100644 +--- a/drivers/spi/spi-bcm2708.c ++++ b/drivers/spi/spi-bcm2708.c +@@ -146,10 +146,31 @@ static inline void bcm2708_rd_fifo(struct bcm2708_spi *bs, int len) + static inline void bcm2708_wr_fifo(struct bcm2708_spi *bs, int len) + { + u8 byte; ++ u16 val; + + if (len > bs->len) + len = bs->len; + ++ if (unlikely(bcm2708_rd(bs, SPI_CS) & SPI_CS_LEN)) { ++ /* LoSSI mode */ ++ if (unlikely(len % 2)) { ++ printk(KERN_ERR"bcm2708_wr_fifo: length must be even, skipping.\n"); ++ bs->len = 0; ++ return; ++ } ++ while (len) { ++ if (bs->tx_buf) { ++ val = *(const u16 *)bs->tx_buf; ++ bs->tx_buf += 2; ++ } else ++ val = 0; ++ bcm2708_wr(bs, SPI_FIFO, val); ++ bs->len -= 2; ++ len -= 2; ++ } ++ return; ++ } ++ + while (len--) { + byte = bs->tx_buf ? *bs->tx_buf++ : 0; + bcm2708_wr(bs, SPI_FIFO, byte); +@@ -234,8 +255,12 @@ static int bcm2708_setup_state(struct spi_master *master, + switch (bpw) { + case 8: + break; ++ case 9: ++ /* Reading in LoSSI mode is a special case. See 'BCM2835 ARM Peripherals' datasheet */ ++ cs |= SPI_CS_LEN; ++ break; + default: +- dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8)\n", ++ dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8 or 9)\n", + bpw); + return -EINVAL; + } +@@ -283,7 +308,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs, + ret = bcm2708_setup_state(spi->master, &spi->dev, &state, + xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz, + spi->chip_select, spi->mode, +- spi->bits_per_word); ++ xfer->bits_per_word ? xfer->bits_per_word : ++ spi->bits_per_word); + if (ret) + return ret; + +-- +1.8.1.6 + + +From deebe69082b9df25018ea89a5817d164e0aae387 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Thu, 21 Mar 2013 19:36:17 +0000 +Subject: [PATCH 88/95] dwc_otg: implement tasklet for returning URBs to + usbcore hcd layer + +The dwc_otg driver interrupt handler for transfer completion will spend +a very long time with interrupts disabled when a URB is completed - +this is because usb_hcd_giveback_urb is called from within the handler +which for a USB device driver with complicated processing (e.g. webcam) +will take an exorbitant amount of time to complete. This results in +missed completion interrupts for other USB packets which lead to them +being dropped due to microframe overruns. + +This patch splits returning the URB to the usb hcd layer into a +high-priority tasklet. This will have most benefit for isochronous IN +transfers but will also have incidental benefit where multiple periodic +devices are active at once. +--- + .../usb/host/dwc_common_port/dwc_common_linux.c | 5 ++++ + drivers/usb/host/dwc_common_port/dwc_list.h | 14 ++++----- + drivers/usb/host/dwc_common_port/dwc_os.h | 2 ++ + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 34 +++++++++++++++++++++- + drivers/usb/host/dwc_otg/dwc_otg_hcd.h | 10 +++++++ + drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 25 ++++++++++------ + 6 files changed, 73 insertions(+), 17 deletions(-) + +diff --git a/drivers/usb/host/dwc_common_port/dwc_common_linux.c b/drivers/usb/host/dwc_common_port/dwc_common_linux.c +index f00a9ff..6814e51 100644 +--- a/drivers/usb/host/dwc_common_port/dwc_common_linux.c ++++ b/drivers/usb/host/dwc_common_port/dwc_common_linux.c +@@ -991,6 +991,11 @@ void DWC_TASK_SCHEDULE(dwc_tasklet_t *task) + tasklet_schedule(&task->t); + } + ++void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task) ++{ ++ tasklet_hi_schedule(&task->t); ++} ++ + + /* workqueues + - run in process context (can sleep) +diff --git a/drivers/usb/host/dwc_common_port/dwc_list.h b/drivers/usb/host/dwc_common_port/dwc_list.h +index 89cc325..4ce560d 100644 +--- a/drivers/usb/host/dwc_common_port/dwc_list.h ++++ b/drivers/usb/host/dwc_common_port/dwc_list.h +@@ -384,17 +384,17 @@ struct { \ + #define DWC_TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + #define DWC_TAILQ_EMPTY(head) \ +- (TAILQ_FIRST(head) == TAILQ_END(head)) ++ (DWC_TAILQ_FIRST(head) == DWC_TAILQ_END(head)) + + #define DWC_TAILQ_FOREACH(var, head, field) \ +- for((var) = TAILQ_FIRST(head); \ +- (var) != TAILQ_END(head); \ +- (var) = TAILQ_NEXT(var, field)) ++ for ((var) = DWC_TAILQ_FIRST(head); \ ++ (var) != DWC_TAILQ_END(head); \ ++ (var) = DWC_TAILQ_NEXT(var, field)) + + #define DWC_TAILQ_FOREACH_REVERSE(var, head, headname, field) \ +- for((var) = TAILQ_LAST(head, headname); \ +- (var) != TAILQ_END(head); \ +- (var) = TAILQ_PREV(var, headname, field)) ++ for ((var) = DWC_TAILQ_LAST(head, headname); \ ++ (var) != DWC_TAILQ_END(head); \ ++ (var) = DWC_TAILQ_PREV(var, headname, field)) + + /* + * Tail queue functions. +diff --git a/drivers/usb/host/dwc_common_port/dwc_os.h b/drivers/usb/host/dwc_common_port/dwc_os.h +index 308ddd5..8eb24ea 100644 +--- a/drivers/usb/host/dwc_common_port/dwc_os.h ++++ b/drivers/usb/host/dwc_common_port/dwc_os.h +@@ -981,6 +981,8 @@ extern void DWC_WORKQ_SCHEDULE_DELAYED(dwc_workq_t *workq, dwc_work_callback_t c + extern void DWC_TASK_SCHEDULE(dwc_tasklet_t *task); + #define dwc_task_schedule DWC_TASK_SCHEDULE + ++extern void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task); ++#define dwc_task_hi_schedule DWC_TASK_HI_SCHEDULE + + /** @name Timer + * +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +index fcec97f..91eefecd 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -40,6 +40,9 @@ + * header file. + */ + ++#include ++#include ++ + #include "dwc_otg_hcd.h" + #include "dwc_otg_regs.h" + +@@ -694,6 +697,31 @@ static void reset_tasklet_func(void *data) + dwc_otg_hcd->flags.b.port_reset_change = 1; + } + ++static void completion_tasklet_func(void *ptr) ++{ ++ dwc_otg_hcd_t *hcd = (dwc_otg_hcd_t *) ptr; ++ struct urb *urb; ++ urb_tq_entry_t *item; ++ dwc_irqflags_t flags; ++ ++ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); ++ while (!DWC_TAILQ_EMPTY(&hcd->completed_urb_list)) { ++ item = DWC_TAILQ_FIRST(&hcd->completed_urb_list); ++ urb = item->urb; ++ DWC_TAILQ_REMOVE(&hcd->completed_urb_list, item, ++ urb_tq_entries); ++ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); ++ DWC_FREE(item); ++ ++ usb_hcd_unlink_urb_from_ep(hcd->priv, urb); ++ usb_hcd_giveback_urb(hcd->priv, urb, urb->status); ++ ++ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); ++ } ++ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); ++ return; ++} ++ + static void qh_list_free(dwc_otg_hcd_t * hcd, dwc_list_link_t * qh_list) + { + dwc_list_link_t *item; +@@ -833,6 +861,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd_t * dwc_otg_hcd) + + DWC_TIMER_FREE(dwc_otg_hcd->conn_timer); + DWC_TASK_FREE(dwc_otg_hcd->reset_tasklet); ++ DWC_TASK_FREE(dwc_otg_hcd->completion_tasklet); + + #ifdef DWC_DEV_SRPCAP + if (dwc_otg_hcd->core_if->power_down == 2 && +@@ -877,7 +906,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if) + DWC_LIST_INIT(&hcd->periodic_sched_ready); + DWC_LIST_INIT(&hcd->periodic_sched_assigned); + DWC_LIST_INIT(&hcd->periodic_sched_queued); +- ++ DWC_TAILQ_INIT(&hcd->completed_urb_list); + /* + * Create a host channel descriptor for each host channel implemented + * in the controller. Initialize the channel descriptor array. +@@ -915,6 +944,9 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if) + + /* Initialize reset tasklet. */ + hcd->reset_tasklet = DWC_TASK_ALLOC("reset_tasklet", reset_tasklet_func, hcd); ++ ++ hcd->completion_tasklet = DWC_TASK_ALLOC("completion_tasklet", ++ completion_tasklet_func, hcd); + #ifdef DWC_DEV_SRPCAP + if (hcd->core_if->power_down == 2) { + /* Initialize Power on timer for Host power up in case hibernation */ +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h +index 45e44ea..0493dbf 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h +@@ -374,6 +374,13 @@ static inline void dwc_otg_hcd_fill_pipe(struct dwc_otg_hcd_pipe_info *pipe, + + DWC_CIRCLEQ_HEAD(hc_list, dwc_hc); + ++typedef struct urb_tq_entry { ++ struct urb *urb; ++ DWC_TAILQ_ENTRY(urb_tq_entry) urb_tq_entries; ++} urb_tq_entry_t; ++ ++DWC_TAILQ_HEAD(urb_list, urb_tq_entry); ++ + /** + * This structure holds the state of the HCD, including the non-periodic and + * periodic schedules. +@@ -551,6 +558,9 @@ struct dwc_otg_hcd { + /* Tasket to do a reset */ + dwc_tasklet_t *reset_tasklet; + ++ dwc_tasklet_t *completion_tasklet; ++ struct urb_list completed_urb_list; ++ + /* */ + dwc_spinlock_t *lock; + dwc_spinlock_t *channel_lock; +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c +index 9702f81..7bb133a 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c +@@ -271,7 +271,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, + dwc_otg_hcd_urb_t * dwc_otg_urb, int32_t status) + { + struct urb *urb = (struct urb *)urb_handle; +- ++ urb_tq_entry_t *new_entry; + if (CHK_DEBUG_LEVEL(DBG_HCDV | DBG_HCD_URB)) { + DWC_PRINTF("%s: urb %p, device %d, ep %d %s, status=%d\n", + __func__, urb, usb_pipedevice(urb->pipe), +@@ -285,7 +285,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, + } + } + } +- ++ new_entry = DWC_ALLOC_ATOMIC(sizeof(urb_tq_entry_t)); + urb->actual_length = dwc_otg_hcd_urb_get_actual_length(dwc_otg_urb); + /* Convert status value. */ + switch (status) { +@@ -348,18 +348,25 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, + } + + DWC_FREE(dwc_otg_urb); +- ++ if (!new_entry) { ++ DWC_ERROR("dwc_otg_hcd: complete: cannot allocate URB TQ entry\n"); ++ urb->status = -EPROTO; ++ /* don't schedule the tasklet - ++ * directly return the packet here with error. */ + #if USB_URB_EP_LINKING +- usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb); ++ usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb); + #endif +- DWC_SPINUNLOCK(hcd->lock); + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28) +- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb); ++ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb); + #else +- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, status); ++ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, urb->status); + #endif +- DWC_SPINLOCK(hcd->lock); +- ++ } else { ++ new_entry->urb = urb; ++ DWC_TAILQ_INSERT_TAIL(&hcd->completed_urb_list, new_entry, ++ urb_tq_entries); ++ DWC_TASK_HI_SCHEDULE(hcd->completion_tasklet); ++ } + return 0; + } + +-- +1.8.1.6 + + +From f3706de4a993683d123fbadad2b14a3d9b5196e8 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 27 Mar 2013 20:23:39 +0000 +Subject: [PATCH 89/95] dwc_otg: Fix build issue with usb_gadget_probe_driver + +--- + drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c | 22 +++------------------- + 1 file changed, 3 insertions(+), 19 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c +index 903e670..a591d89 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c +@@ -1284,12 +1284,8 @@ void pcd_remove(dwc_bus_dev_t *_dev) + * @param driver The driver being registered + * @param bind The bind function of gadget driver + */ +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) +-int usb_gadget_register_driver(struct usb_gadget_driver *driver) +-#else +-int usb_gadget_probe_driver(struct usb_gadget_driver *driver, +- int (*bind)(struct usb_gadget *)) +-#endif ++ ++int usb_gadget_probe_driver(struct usb_gadget_driver *driver) + { + int retval; + +@@ -1297,11 +1293,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, + driver->driver.name); + + if (!driver || driver->max_speed == USB_SPEED_UNKNOWN || +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) + !driver->bind || +-#else +- !bind || +-#endif + !driver->unbind || !driver->disconnect || !driver->setup) { + DWC_DEBUGPL(DBG_PCDV, "EINVAL\n"); + return -EINVAL; +@@ -1320,11 +1312,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, + gadget_wrapper->gadget.dev.driver = &driver->driver; + + DWC_DEBUGPL(DBG_PCD, "bind to driver %s\n", driver->driver.name); +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) +- retval = driver->bind(&gadget_wrapper->gadget); +-#else +- retval = bind(&gadget_wrapper->gadget); +-#endif ++ retval = driver->bind(&gadget_wrapper->gadget, gadget_wrapper->driver); + if (retval) { + DWC_ERROR("bind to driver %s --> error %d\n", + driver->driver.name, retval); +@@ -1336,11 +1324,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, + driver->driver.name); + return 0; + } +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) +-EXPORT_SYMBOL(usb_gadget_register_driver); +-#else + EXPORT_SYMBOL(usb_gadget_probe_driver); +-#endif + + /** + * This function unregisters a gadget driver +-- +1.8.1.6 + + +From 66a26e9f64b85ac9d8cde6ddcc123f98d232907e Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 27 Apr 2012 00:31:37 +0100 +Subject: [PATCH 90/95] Update config files for f2fs and 3.8 kernel + +--- + arch/arm/configs/bcmrpi_cutdown_defconfig | 504 ---------------------------- + arch/arm/configs/bcmrpi_defconfig | 378 ++++++++++++++------- + arch/arm/configs/bcmrpi_emergency_defconfig | 1 + + arch/arm/configs/bcmrpi_quick_defconfig | 298 ++++++++++++++++ + 4 files changed, 560 insertions(+), 621 deletions(-) + create mode 100644 arch/arm/configs/bcmrpi_quick_defconfig + +diff --git a/arch/arm/configs/bcmrpi_cutdown_defconfig b/arch/arm/configs/bcmrpi_cutdown_defconfig +index a61a915..e69de29 100644 +--- a/arch/arm/configs/bcmrpi_cutdown_defconfig ++++ b/arch/arm/configs/bcmrpi_cutdown_defconfig +@@ -1,504 +0,0 @@ +-CONFIG_EXPERIMENTAL=y +-# CONFIG_LOCALVERSION_AUTO is not set +-CONFIG_SYSVIPC=y +-CONFIG_POSIX_MQUEUE=y +-CONFIG_IKCONFIG=y +-CONFIG_IKCONFIG_PROC=y +-# CONFIG_UID16 is not set +-# CONFIG_KALLSYMS is not set +-CONFIG_EMBEDDED=y +-# CONFIG_VM_EVENT_COUNTERS is not set +-# CONFIG_COMPAT_BRK is not set +-CONFIG_SLAB=y +-CONFIG_MODULES=y +-CONFIG_MODULE_UNLOAD=y +-CONFIG_MODVERSIONS=y +-CONFIG_MODULE_SRCVERSION_ALL=y +-# CONFIG_BLK_DEV_BSG is not set +-CONFIG_ARCH_BCM2708=y +-CONFIG_NO_HZ=y +-CONFIG_HIGH_RES_TIMERS=y +-CONFIG_AEABI=y +-CONFIG_ZBOOT_ROM_TEXT=0x0 +-CONFIG_ZBOOT_ROM_BSS=0x0 +-CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" +-CONFIG_CPU_IDLE=y +-CONFIG_VFP=y +-CONFIG_BINFMT_MISC=m +-CONFIG_NET=y +-CONFIG_PACKET=y +-CONFIG_UNIX=y +-CONFIG_XFRM_USER=y +-CONFIG_NET_KEY=m +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-CONFIG_IP_PNP_RARP=y +-CONFIG_SYN_COOKIES=y +-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +-# CONFIG_INET_XFRM_MODE_TUNNEL is not set +-# CONFIG_INET_XFRM_MODE_BEET is not set +-# CONFIG_INET_LRO is not set +-# CONFIG_INET_DIAG is not set +-# CONFIG_IPV6 is not set +-CONFIG_NET_PKTGEN=m +-CONFIG_IRDA=m +-CONFIG_IRLAN=m +-CONFIG_IRCOMM=m +-CONFIG_IRDA_ULTRA=y +-CONFIG_IRDA_CACHE_LAST_LSAP=y +-CONFIG_IRDA_FAST_RR=y +-CONFIG_IRTTY_SIR=m +-CONFIG_KINGSUN_DONGLE=m +-CONFIG_KSDAZZLE_DONGLE=m +-CONFIG_KS959_DONGLE=m +-CONFIG_USB_IRDA=m +-CONFIG_SIGMATEL_FIR=m +-CONFIG_MCS_FIR=m +-CONFIG_BT=m +-CONFIG_BT_L2CAP=y +-CONFIG_BT_SCO=y +-CONFIG_BT_RFCOMM=m +-CONFIG_BT_RFCOMM_TTY=y +-CONFIG_BT_BNEP=m +-CONFIG_BT_BNEP_MC_FILTER=y +-CONFIG_BT_BNEP_PROTO_FILTER=y +-CONFIG_BT_HIDP=m +-CONFIG_BT_HCIBTUSB=m +-CONFIG_BT_HCIBCM203X=m +-CONFIG_BT_HCIBPA10X=m +-CONFIG_BT_HCIBFUSB=m +-CONFIG_BT_HCIVHCI=m +-CONFIG_BT_MRVL=m +-CONFIG_BT_MRVL_SDIO=m +-CONFIG_BT_ATH3K=m +-CONFIG_CFG80211=m +-CONFIG_MAC80211=m +-CONFIG_MAC80211_RC_PID=y +-CONFIG_MAC80211_MESH=y +-CONFIG_WIMAX=m +-CONFIG_NET_9P=m +-CONFIG_NFC=m +-CONFIG_NFC_PN533=m +-CONFIG_DEVTMPFS=y +-CONFIG_BLK_DEV_LOOP=y +-CONFIG_BLK_DEV_CRYPTOLOOP=m +-CONFIG_BLK_DEV_NBD=m +-CONFIG_BLK_DEV_RAM=y +-CONFIG_CDROM_PKTCDVD=m +-CONFIG_MISC_DEVICES=y +-CONFIG_SCSI=y +-# CONFIG_SCSI_PROC_FS is not set +-CONFIG_BLK_DEV_SD=m +-CONFIG_BLK_DEV_SR=m +-CONFIG_SCSI_MULTI_LUN=y +-# CONFIG_SCSI_LOWLEVEL is not set +-CONFIG_NETDEVICES=y +-CONFIG_TUN=m +-CONFIG_PHYLIB=m +-CONFIG_MDIO_BITBANG=m +-CONFIG_NET_ETHERNET=y +-# CONFIG_NETDEV_1000 is not set +-# CONFIG_NETDEV_10000 is not set +-CONFIG_LIBERTAS_THINFIRM=m +-CONFIG_LIBERTAS_THINFIRM_USB=m +-CONFIG_AT76C50X_USB=m +-CONFIG_USB_ZD1201=m +-CONFIG_USB_NET_RNDIS_WLAN=m +-CONFIG_RTL8187=m +-CONFIG_MAC80211_HWSIM=m +-CONFIG_ATH_COMMON=m +-CONFIG_ATH9K=m +-CONFIG_ATH9K_HTC=m +-CONFIG_CARL9170=m +-CONFIG_B43=m +-CONFIG_B43LEGACY=m +-CONFIG_HOSTAP=m +-CONFIG_IWM=m +-CONFIG_LIBERTAS=m +-CONFIG_LIBERTAS_USB=m +-CONFIG_LIBERTAS_SDIO=m +-CONFIG_P54_COMMON=m +-CONFIG_P54_USB=m +-CONFIG_RT2X00=m +-CONFIG_RT2500USB=m +-CONFIG_RT73USB=m +-CONFIG_RT2800USB=m +-CONFIG_RT2800USB_RT53XX=y +-CONFIG_RTL8192CU=m +-CONFIG_WL1251=m +-CONFIG_WL12XX_MENU=m +-CONFIG_ZD1211RW=m +-CONFIG_MWIFIEX=m +-CONFIG_MWIFIEX_SDIO=m +-CONFIG_WIMAX_I2400M_USB=m +-CONFIG_USB_CATC=m +-CONFIG_USB_KAWETH=m +-CONFIG_USB_PEGASUS=m +-CONFIG_USB_RTL8150=m +-CONFIG_USB_USBNET=y +-CONFIG_USB_NET_AX8817X=m +-CONFIG_USB_NET_CDCETHER=m +-CONFIG_USB_NET_CDC_EEM=m +-CONFIG_USB_NET_DM9601=m +-CONFIG_USB_NET_SMSC75XX=m +-CONFIG_USB_NET_SMSC95XX=y +-CONFIG_USB_NET_GL620A=m +-CONFIG_USB_NET_NET1080=m +-CONFIG_USB_NET_PLUSB=m +-CONFIG_USB_NET_MCS7830=m +-CONFIG_USB_NET_CDC_SUBSET=m +-CONFIG_USB_ALI_M5632=y +-CONFIG_USB_AN2720=y +-CONFIG_USB_KC2190=y +-# CONFIG_USB_NET_ZAURUS is not set +-CONFIG_USB_NET_CX82310_ETH=m +-CONFIG_USB_NET_KALMIA=m +-CONFIG_USB_NET_INT51X1=m +-CONFIG_USB_IPHETH=m +-CONFIG_USB_SIERRA_NET=m +-CONFIG_USB_VL600=m +-CONFIG_PPP=m +-CONFIG_PPP_ASYNC=m +-CONFIG_PPP_SYNC_TTY=m +-CONFIG_PPP_DEFLATE=m +-CONFIG_PPP_BSDCOMP=m +-CONFIG_SLIP=m +-CONFIG_SLIP_COMPRESSED=y +-CONFIG_NETCONSOLE=m +-CONFIG_INPUT_POLLDEV=m +-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +-CONFIG_INPUT_JOYDEV=m +-CONFIG_INPUT_EVDEV=m +-# CONFIG_INPUT_KEYBOARD is not set +-# CONFIG_INPUT_MOUSE is not set +-CONFIG_INPUT_MISC=y +-CONFIG_INPUT_AD714X=m +-CONFIG_INPUT_ATI_REMOTE=m +-CONFIG_INPUT_ATI_REMOTE2=m +-CONFIG_INPUT_KEYSPAN_REMOTE=m +-CONFIG_INPUT_POWERMATE=m +-CONFIG_INPUT_YEALINK=m +-CONFIG_INPUT_CM109=m +-CONFIG_INPUT_UINPUT=m +-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +-CONFIG_INPUT_ADXL34X=m +-CONFIG_INPUT_CMA3000=m +-CONFIG_SERIO=m +-CONFIG_SERIO_RAW=m +-CONFIG_GAMEPORT=m +-CONFIG_GAMEPORT_NS558=m +-CONFIG_GAMEPORT_L4=m +-CONFIG_VT_HW_CONSOLE_BINDING=y +-# CONFIG_LEGACY_PTYS is not set +-# CONFIG_DEVKMEM is not set +-CONFIG_SERIAL_AMBA_PL011=y +-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +-# CONFIG_HW_RANDOM is not set +-CONFIG_RAW_DRIVER=y +-CONFIG_GPIO_SYSFS=y +-# CONFIG_HWMON is not set +-CONFIG_WATCHDOG=y +-CONFIG_BCM2708_WDT=m +-# CONFIG_MFD_SUPPORT is not set +-CONFIG_FB=y +-CONFIG_FB_BCM2708=y +-CONFIG_FRAMEBUFFER_CONSOLE=y +-CONFIG_LOGO=y +-# CONFIG_LOGO_LINUX_MONO is not set +-# CONFIG_LOGO_LINUX_VGA16 is not set +-CONFIG_SOUND=y +-CONFIG_SND=m +-CONFIG_SND_SEQUENCER=m +-CONFIG_SND_SEQ_DUMMY=m +-CONFIG_SND_MIXER_OSS=m +-CONFIG_SND_PCM_OSS=m +-CONFIG_SND_SEQUENCER_OSS=y +-CONFIG_SND_HRTIMER=m +-CONFIG_SND_DUMMY=m +-CONFIG_SND_ALOOP=m +-CONFIG_SND_VIRMIDI=m +-CONFIG_SND_MTPAV=m +-CONFIG_SND_SERIAL_U16550=m +-CONFIG_SND_MPU401=m +-CONFIG_SND_BCM2835=m +-CONFIG_SND_USB_AUDIO=m +-CONFIG_SND_USB_UA101=m +-CONFIG_SND_USB_CAIAQ=m +-CONFIG_SND_USB_6FIRE=m +-CONFIG_SOUND_PRIME=m +-CONFIG_HID_PID=y +-CONFIG_USB_HIDDEV=y +-CONFIG_HID_A4TECH=m +-CONFIG_HID_ACRUX=m +-CONFIG_HID_APPLE=m +-CONFIG_HID_BELKIN=m +-CONFIG_HID_CHERRY=m +-CONFIG_HID_CHICONY=m +-CONFIG_HID_CYPRESS=m +-CONFIG_HID_DRAGONRISE=m +-CONFIG_HID_EMS_FF=m +-CONFIG_HID_ELECOM=m +-CONFIG_HID_EZKEY=m +-CONFIG_HID_HOLTEK=m +-CONFIG_HID_KEYTOUCH=m +-CONFIG_HID_KYE=m +-CONFIG_HID_UCLOGIC=m +-CONFIG_HID_WALTOP=m +-CONFIG_HID_GYRATION=m +-CONFIG_HID_TWINHAN=m +-CONFIG_HID_KENSINGTON=m +-CONFIG_HID_LCPOWER=m +-CONFIG_HID_LOGITECH=m +-CONFIG_HID_MAGICMOUSE=m +-CONFIG_HID_MICROSOFT=m +-CONFIG_HID_MONTEREY=m +-CONFIG_HID_MULTITOUCH=m +-CONFIG_HID_NTRIG=m +-CONFIG_HID_ORTEK=m +-CONFIG_HID_PANTHERLORD=m +-CONFIG_HID_PETALYNX=m +-CONFIG_HID_PICOLCD=m +-CONFIG_HID_QUANTA=m +-CONFIG_HID_ROCCAT=m +-CONFIG_HID_SAMSUNG=m +-CONFIG_HID_SONY=m +-CONFIG_HID_SPEEDLINK=m +-CONFIG_HID_SUNPLUS=m +-CONFIG_HID_GREENASIA=m +-CONFIG_HID_SMARTJOYPLUS=m +-CONFIG_HID_TOPSEED=m +-CONFIG_HID_THRUSTMASTER=m +-CONFIG_HID_WACOM=m +-CONFIG_HID_WIIMOTE=m +-CONFIG_HID_ZEROPLUS=m +-CONFIG_HID_ZYDACRON=m +-CONFIG_USB=y +-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +-CONFIG_USB_MON=m +-CONFIG_USB_DWCOTG=y +-CONFIG_USB_STORAGE=y +-CONFIG_USB_STORAGE_REALTEK=m +-CONFIG_USB_STORAGE_DATAFAB=m +-CONFIG_USB_STORAGE_FREECOM=m +-CONFIG_USB_STORAGE_ISD200=m +-CONFIG_USB_STORAGE_USBAT=m +-CONFIG_USB_STORAGE_SDDR09=m +-CONFIG_USB_STORAGE_SDDR55=m +-CONFIG_USB_STORAGE_JUMPSHOT=m +-CONFIG_USB_STORAGE_ALAUDA=m +-CONFIG_USB_STORAGE_ONETOUCH=m +-CONFIG_USB_STORAGE_KARMA=m +-CONFIG_USB_STORAGE_CYPRESS_ATACB=m +-CONFIG_USB_STORAGE_ENE_UB6250=m +-CONFIG_USB_UAS=m +-CONFIG_USB_LIBUSUAL=y +-CONFIG_USB_MDC800=m +-CONFIG_USB_MICROTEK=m +-CONFIG_USB_SERIAL=m +-CONFIG_USB_SERIAL_GENERIC=y +-CONFIG_USB_SERIAL_AIRCABLE=m +-CONFIG_USB_SERIAL_ARK3116=m +-CONFIG_USB_SERIAL_BELKIN=m +-CONFIG_USB_SERIAL_CH341=m +-CONFIG_USB_SERIAL_WHITEHEAT=m +-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +-CONFIG_USB_SERIAL_CP210X=m +-CONFIG_USB_SERIAL_CYPRESS_M8=m +-CONFIG_USB_SERIAL_EMPEG=m +-CONFIG_USB_SERIAL_FTDI_SIO=m +-CONFIG_USB_SERIAL_FUNSOFT=m +-CONFIG_USB_SERIAL_VISOR=m +-CONFIG_USB_SERIAL_IPAQ=m +-CONFIG_USB_SERIAL_IR=m +-CONFIG_USB_SERIAL_EDGEPORT=m +-CONFIG_USB_SERIAL_EDGEPORT_TI=m +-CONFIG_USB_SERIAL_GARMIN=m +-CONFIG_USB_SERIAL_IPW=m +-CONFIG_USB_SERIAL_IUU=m +-CONFIG_USB_SERIAL_KEYSPAN_PDA=m +-CONFIG_USB_SERIAL_KEYSPAN=m +-CONFIG_USB_SERIAL_KLSI=m +-CONFIG_USB_SERIAL_KOBIL_SCT=m +-CONFIG_USB_SERIAL_MCT_U232=m +-CONFIG_USB_SERIAL_MOS7720=m +-CONFIG_USB_SERIAL_MOS7840=m +-CONFIG_USB_SERIAL_MOTOROLA=m +-CONFIG_USB_SERIAL_NAVMAN=m +-CONFIG_USB_SERIAL_PL2303=m +-CONFIG_USB_SERIAL_OTI6858=m +-CONFIG_USB_SERIAL_QCAUX=m +-CONFIG_USB_SERIAL_QUALCOMM=m +-CONFIG_USB_SERIAL_SPCP8X5=m +-CONFIG_USB_SERIAL_HP4X=m +-CONFIG_USB_SERIAL_SAFE=m +-CONFIG_USB_SERIAL_SIEMENS_MPI=m +-CONFIG_USB_SERIAL_SIERRAWIRELESS=m +-CONFIG_USB_SERIAL_SYMBOL=m +-CONFIG_USB_SERIAL_TI=m +-CONFIG_USB_SERIAL_CYBERJACK=m +-CONFIG_USB_SERIAL_XIRCOM=m +-CONFIG_USB_SERIAL_OPTION=m +-CONFIG_USB_SERIAL_OMNINET=m +-CONFIG_USB_SERIAL_OPTICON=m +-CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m +-CONFIG_USB_SERIAL_ZIO=m +-CONFIG_USB_SERIAL_SSU100=m +-CONFIG_USB_SERIAL_DEBUG=m +-CONFIG_USB_EMI62=m +-CONFIG_USB_EMI26=m +-CONFIG_USB_ADUTUX=m +-CONFIG_USB_SEVSEG=m +-CONFIG_USB_RIO500=m +-CONFIG_USB_LEGOTOWER=m +-CONFIG_USB_LCD=m +-CONFIG_USB_LED=m +-CONFIG_USB_CYPRESS_CY7C63=m +-CONFIG_USB_CYTHERM=m +-CONFIG_USB_IDMOUSE=m +-CONFIG_USB_FTDI_ELAN=m +-CONFIG_USB_APPLEDISPLAY=m +-CONFIG_USB_LD=m +-CONFIG_USB_TRANCEVIBRATOR=m +-CONFIG_USB_IOWARRIOR=m +-CONFIG_USB_TEST=m +-CONFIG_USB_ISIGHTFW=m +-CONFIG_USB_YUREX=m +-CONFIG_MMC=y +-CONFIG_MMC_SDHCI=y +-CONFIG_MMC_SDHCI_PLTFM=y +-CONFIG_MMC_SDHCI_BCM2708=y +-CONFIG_MMC_SDHCI_BCM2708_DMA=y +-CONFIG_LEDS_GPIO=y +-CONFIG_LEDS_TRIGGER_TIMER=m +-CONFIG_LEDS_TRIGGER_HEARTBEAT=m +-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +-CONFIG_UIO=m +-CONFIG_UIO_PDRV=m +-CONFIG_UIO_PDRV_GENIRQ=m +-# CONFIG_IOMMU_SUPPORT is not set +-CONFIG_EXT4_FS=y +-CONFIG_EXT4_FS_POSIX_ACL=y +-CONFIG_EXT4_FS_SECURITY=y +-CONFIG_REISERFS_FS=m +-CONFIG_REISERFS_FS_XATTR=y +-CONFIG_REISERFS_FS_POSIX_ACL=y +-CONFIG_REISERFS_FS_SECURITY=y +-CONFIG_JFS_FS=m +-CONFIG_JFS_POSIX_ACL=y +-CONFIG_JFS_SECURITY=y +-CONFIG_XFS_FS=m +-CONFIG_XFS_QUOTA=y +-CONFIG_XFS_POSIX_ACL=y +-CONFIG_XFS_RT=y +-CONFIG_GFS2_FS=m +-CONFIG_OCFS2_FS=m +-CONFIG_BTRFS_FS=m +-CONFIG_BTRFS_FS_POSIX_ACL=y +-CONFIG_NILFS2_FS=m +-CONFIG_AUTOFS4_FS=y +-CONFIG_FUSE_FS=m +-CONFIG_CUSE=m +-CONFIG_FSCACHE=y +-CONFIG_CACHEFILES=y +-CONFIG_ISO9660_FS=m +-CONFIG_JOLIET=y +-CONFIG_ZISOFS=y +-CONFIG_UDF_FS=m +-CONFIG_MSDOS_FS=y +-CONFIG_VFAT_FS=y +-CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +-CONFIG_NTFS_FS=m +-CONFIG_TMPFS=y +-CONFIG_TMPFS_POSIX_ACL=y +-CONFIG_CONFIGFS_FS=y +-CONFIG_SQUASHFS=m +-CONFIG_SQUASHFS_XATTR=y +-CONFIG_SQUASHFS_LZO=y +-CONFIG_SQUASHFS_XZ=y +-CONFIG_NFS_FS=y +-CONFIG_NFS_V3=y +-CONFIG_NFS_V3_ACL=y +-CONFIG_NFS_V4=y +-CONFIG_ROOT_NFS=y +-CONFIG_NFS_FSCACHE=y +-CONFIG_CIFS=m +-CONFIG_CIFS_WEAK_PW_HASH=y +-CONFIG_CIFS_XATTR=y +-CONFIG_CIFS_POSIX=y +-CONFIG_9P_FS=m +-CONFIG_PARTITION_ADVANCED=y +-CONFIG_MAC_PARTITION=y +-CONFIG_EFI_PARTITION=y +-CONFIG_NLS_DEFAULT="utf8" +-CONFIG_NLS_CODEPAGE_437=y +-CONFIG_NLS_CODEPAGE_737=m +-CONFIG_NLS_CODEPAGE_775=m +-CONFIG_NLS_CODEPAGE_850=m +-CONFIG_NLS_CODEPAGE_852=m +-CONFIG_NLS_CODEPAGE_855=m +-CONFIG_NLS_CODEPAGE_857=m +-CONFIG_NLS_CODEPAGE_860=m +-CONFIG_NLS_CODEPAGE_861=m +-CONFIG_NLS_CODEPAGE_862=m +-CONFIG_NLS_CODEPAGE_863=m +-CONFIG_NLS_CODEPAGE_864=m +-CONFIG_NLS_CODEPAGE_865=m +-CONFIG_NLS_CODEPAGE_866=m +-CONFIG_NLS_CODEPAGE_869=m +-CONFIG_NLS_CODEPAGE_936=m +-CONFIG_NLS_CODEPAGE_950=m +-CONFIG_NLS_CODEPAGE_932=m +-CONFIG_NLS_CODEPAGE_949=m +-CONFIG_NLS_CODEPAGE_874=m +-CONFIG_NLS_ISO8859_8=m +-CONFIG_NLS_CODEPAGE_1250=m +-CONFIG_NLS_CODEPAGE_1251=m +-CONFIG_NLS_ASCII=y +-CONFIG_NLS_ISO8859_1=m +-CONFIG_NLS_ISO8859_2=m +-CONFIG_NLS_ISO8859_3=m +-CONFIG_NLS_ISO8859_4=m +-CONFIG_NLS_ISO8859_5=m +-CONFIG_NLS_ISO8859_6=m +-CONFIG_NLS_ISO8859_7=m +-CONFIG_NLS_ISO8859_9=m +-CONFIG_NLS_ISO8859_13=m +-CONFIG_NLS_ISO8859_14=m +-CONFIG_NLS_ISO8859_15=m +-CONFIG_NLS_KOI8_R=m +-CONFIG_NLS_KOI8_U=m +-CONFIG_NLS_UTF8=m +-# CONFIG_SCHED_DEBUG is not set +-# CONFIG_DEBUG_BUGVERBOSE is not set +-# CONFIG_FTRACE is not set +-# CONFIG_ARM_UNWIND is not set +-CONFIG_CRYPTO_AUTHENC=m +-CONFIG_CRYPTO_SEQIV=m +-CONFIG_CRYPTO_CBC=y +-CONFIG_CRYPTO_HMAC=y +-CONFIG_CRYPTO_XCBC=m +-CONFIG_CRYPTO_MD5=y +-CONFIG_CRYPTO_SHA1=y +-CONFIG_CRYPTO_SHA256=m +-CONFIG_CRYPTO_SHA512=m +-CONFIG_CRYPTO_TGR192=m +-CONFIG_CRYPTO_WP512=m +-CONFIG_CRYPTO_CAST5=m +-CONFIG_CRYPTO_DES=y +-CONFIG_CRYPTO_DEFLATE=m +-# CONFIG_CRYPTO_ANSI_CPRNG is not set +-# CONFIG_CRYPTO_HW is not set +-CONFIG_CRC_ITU_T=y +-CONFIG_LIBCRC32C=y +-CONFIG_I2C=y +-CONFIG_I2C_BOARDINFO=y +-CONFIG_I2C_COMPAT=y +-CONFIG_I2C_CHARDEV=m +-CONFIG_I2C_HELPER_AUTO=y +-CONFIG_I2C_BCM2708=m +-CONFIG_SPI=y +-CONFIG_SPI_MASTER=y +-CONFIG_SPI_BCM2708=m +- diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 12e6d92..4db7a00 100644 +index c1afa47..f1ada24 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -33,7 +33,6 @@ CONFIG_MODULES=y +@@ -3,10 +3,16 @@ CONFIG_EXPERIMENTAL=y + # CONFIG_LOCALVERSION_AUTO is not set + CONFIG_SYSVIPC=y + CONFIG_POSIX_MQUEUE=y +-CONFIG_BSD_PROCESS_ACCT=y +-CONFIG_BSD_PROCESS_ACCT_V3=y + CONFIG_FHANDLE=y + CONFIG_AUDIT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_TASKSTATS=y ++CONFIG_TASK_DELAY_ACCT=y ++CONFIG_TASK_XACCT=y ++CONFIG_TASK_IO_ACCOUNTING=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y + CONFIG_CGROUP_FREEZER=y +@@ -16,6 +22,7 @@ CONFIG_RESOURCE_COUNTERS=y + CONFIG_BLK_CGROUP=y + CONFIG_NAMESPACES=y + CONFIG_SCHED_AUTOGROUP=y ++CONFIG_RELAY=y + CONFIG_EMBEDDED=y + # CONFIG_COMPAT_BRK is not set + CONFIG_SLAB=y +@@ -26,18 +33,22 @@ CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y -# CONFIG_BLK_DEV_BSG is not set CONFIG_BLK_DEV_THROTTLING=y - CONFIG_PARTITION_ADVANCED=y - CONFIG_MAC_PARTITION=y -@@ -331,8 +330,6 @@ CONFIG_NFC=m - CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y - CONFIG_DEVTMPFS_MOUNT=y --CONFIG_CMA=y --CONFIG_CMA_DEBUG=y - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_DRBD=m -@@ -346,7 +343,8 @@ CONFIG_CHR_DEV_ST=m - CONFIG_CHR_DEV_OSST=m - CONFIG_BLK_DEV_SR=m - CONFIG_SCSI_MULTI_LUN=y --# CONFIG_SCSI_LOWLEVEL is not set -+CONFIG_SCSI_ISCSI_ATTRS=y -+CONFIG_ISCSI_TCP=m - CONFIG_MD=y - CONFIG_BLK_DEV_DM=m - CONFIG_DM_CRYPT=m -@@ -461,8 +459,6 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - CONFIG_TTY_PRINTK=y - # CONFIG_HW_RANDOM is not set - CONFIG_RAW_DRIVER=y --CONFIG_BRCM_CHAR_DRIVERS=y --CONFIG_BCM_VC_CMA=y - CONFIG_I2C=y - CONFIG_I2C_CHARDEV=m - CONFIG_I2C_BCM2708=m -@@ -490,8 +486,216 @@ CONFIG_THERMAL_BCM2835=y - CONFIG_WATCHDOG=y - CONFIG_BCM2708_WDT=m - CONFIG_MEDIA_SUPPORT=m -+CONFIG_MEDIA_CAMERA_SUPPORT=y -+CONFIG_MEDIA_ANALOG_TV_SUPPORT=y -+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y -+CONFIG_MEDIA_RADIO_SUPPORT=y -+CONFIG_MEDIA_RC_SUPPORT=y -+CONFIG_MEDIA_CONTROLLER=y -+CONFIG_LIRC=m -+CONFIG_RC_DEVICES=y -+CONFIG_RC_ATI_REMOTE=m -+CONFIG_IR_IMON=m -+CONFIG_IR_MCEUSB=m -+CONFIG_IR_REDRAT3=m -+CONFIG_IR_STREAMZAP=m -+CONFIG_IR_IGUANA=m -+CONFIG_RC_LOOPBACK=m -+CONFIG_IR_GPIO_CIR=m -+CONFIG_MEDIA_ATTACH=y -+CONFIG_VIDEO_VIVI=m -+CONFIG_USB_VIDEO_CLASS=m -+CONFIG_USB_M5602=m -+CONFIG_USB_STV06XX=m -+CONFIG_USB_GL860=m -+CONFIG_USB_GSPCA_BENQ=m -+CONFIG_USB_GSPCA_CONEX=m -+CONFIG_USB_GSPCA_CPIA1=m -+CONFIG_USB_GSPCA_ETOMS=m -+CONFIG_USB_GSPCA_FINEPIX=m -+CONFIG_USB_GSPCA_JEILINJ=m -+CONFIG_USB_GSPCA_JL2005BCD=m -+CONFIG_USB_GSPCA_KINECT=m -+CONFIG_USB_GSPCA_KONICA=m -+CONFIG_USB_GSPCA_MARS=m -+CONFIG_USB_GSPCA_MR97310A=m -+CONFIG_USB_GSPCA_NW80X=m -+CONFIG_USB_GSPCA_OV519=m -+CONFIG_USB_GSPCA_OV534=m -+CONFIG_USB_GSPCA_OV534_9=m -+CONFIG_USB_GSPCA_PAC207=m -+CONFIG_USB_GSPCA_PAC7302=m -+CONFIG_USB_GSPCA_PAC7311=m -+CONFIG_USB_GSPCA_SE401=m -+CONFIG_USB_GSPCA_SN9C2028=m -+CONFIG_USB_GSPCA_SN9C20X=m -+CONFIG_USB_GSPCA_SONIXB=m -+CONFIG_USB_GSPCA_SONIXJ=m -+CONFIG_USB_GSPCA_SPCA500=m -+CONFIG_USB_GSPCA_SPCA501=m -+CONFIG_USB_GSPCA_SPCA505=m -+CONFIG_USB_GSPCA_SPCA506=m -+CONFIG_USB_GSPCA_SPCA508=m -+CONFIG_USB_GSPCA_SPCA561=m -+CONFIG_USB_GSPCA_SPCA1528=m -+CONFIG_USB_GSPCA_SQ905=m -+CONFIG_USB_GSPCA_SQ905C=m -+CONFIG_USB_GSPCA_SQ930X=m -+CONFIG_USB_GSPCA_STK014=m -+CONFIG_USB_GSPCA_STV0680=m -+CONFIG_USB_GSPCA_SUNPLUS=m -+CONFIG_USB_GSPCA_T613=m -+CONFIG_USB_GSPCA_TOPRO=m -+CONFIG_USB_GSPCA_TV8532=m -+CONFIG_USB_GSPCA_VC032X=m -+CONFIG_USB_GSPCA_VICAM=m -+CONFIG_USB_GSPCA_XIRLINK_CIT=m -+CONFIG_USB_GSPCA_ZC3XX=m -+CONFIG_USB_PWC=m -+CONFIG_VIDEO_CPIA2=m -+CONFIG_USB_ZR364XX=m -+CONFIG_USB_STKWEBCAM=m -+CONFIG_USB_S2255=m -+CONFIG_USB_SN9C102=m -+CONFIG_VIDEO_EM28XX=m -+CONFIG_VIDEO_EM28XX_ALSA=m -+CONFIG_VIDEO_EM28XX_DVB=m -+CONFIG_VIDEO_AU0828=m -+CONFIG_VIDEO_PVRUSB2=m -+CONFIG_VIDEO_HDPVR=m -+CONFIG_VIDEO_TLG2300=m -+CONFIG_VIDEO_CX231XX=m -+CONFIG_VIDEO_CX231XX_ALSA=m -+CONFIG_VIDEO_CX231XX_DVB=m -+CONFIG_VIDEO_TM6000=m -+CONFIG_VIDEO_TM6000_ALSA=m -+CONFIG_VIDEO_TM6000_DVB=m -+CONFIG_VIDEO_USBVISION=m -+CONFIG_USB_MR800=m -+CONFIG_USB_DSBR=m -+CONFIG_RADIO_SHARK=m -+CONFIG_RADIO_SHARK2=m -+CONFIG_USB_KEENE=m -+CONFIG_DVB_USB=m -+CONFIG_DVB_USB_A800=m -+CONFIG_DVB_USB_DIBUSB_MB=m -+CONFIG_DVB_USB_DIBUSB_MC=m -+CONFIG_DVB_USB_DIB0700=m -+CONFIG_DVB_USB_UMT_010=m -+CONFIG_DVB_USB_CXUSB=m -+CONFIG_DVB_USB_M920X=m -+CONFIG_DVB_USB_GL861=m -+CONFIG_DVB_USB_AU6610=m -+CONFIG_DVB_USB_DIGITV=m -+CONFIG_DVB_USB_VP7045=m -+CONFIG_DVB_USB_VP702X=m -+CONFIG_DVB_USB_GP8PSK=m -+CONFIG_DVB_USB_NOVA_T_USB2=m -+CONFIG_DVB_USB_TTUSB2=m -+CONFIG_DVB_USB_DTT200U=m -+CONFIG_DVB_USB_OPERA1=m -+CONFIG_DVB_USB_AF9005=m -+CONFIG_DVB_USB_AF9005_REMOTE=m -+CONFIG_DVB_USB_PCTV452E=m -+CONFIG_DVB_USB_DW2102=m -+CONFIG_DVB_USB_CINERGY_T2=m -+CONFIG_DVB_USB_ANYSEE=m -+CONFIG_DVB_USB_DTV5100=m -+CONFIG_DVB_USB_AF9015=m -+CONFIG_DVB_USB_CE6230=m -+CONFIG_DVB_USB_FRIIO=m -+CONFIG_DVB_USB_EC168=m -+CONFIG_DVB_USB_AZ6007=m -+CONFIG_DVB_USB_AZ6027=m -+CONFIG_DVB_USB_LME2510=m -+CONFIG_DVB_USB_TECHNISAT_USB2=m -+CONFIG_DVB_USB_IT913X=m -+CONFIG_DVB_USB_MXL111SF=m -+CONFIG_DVB_USB_RTL28XXU=m -+CONFIG_DVB_USB_AF9035=m -+# CONFIG_DVB_STB0899 is not set -+# CONFIG_DVB_STB6100 is not set -+# CONFIG_DVB_STV090x is not set -+# CONFIG_DVB_STV6110x is not set -+# CONFIG_DVB_DRXK is not set -+# CONFIG_DVB_TDA18271C2DD is not set -+# CONFIG_DVB_CX24110 is not set -+# CONFIG_DVB_CX24123 is not set -+# CONFIG_DVB_MT312 is not set -+# CONFIG_DVB_ZL10036 is not set -+# CONFIG_DVB_ZL10039 is not set -+# CONFIG_DVB_S5H1420 is not set -+# CONFIG_DVB_STV0288 is not set -+# CONFIG_DVB_STB6000 is not set -+# CONFIG_DVB_STV0299 is not set -+# CONFIG_DVB_STV6110 is not set -+# CONFIG_DVB_STV0900 is not set -+# CONFIG_DVB_TDA8083 is not set -+# CONFIG_DVB_TDA10086 is not set -+# CONFIG_DVB_TDA8261 is not set -+# CONFIG_DVB_VES1X93 is not set -+# CONFIG_DVB_TUNER_ITD1000 is not set -+# CONFIG_DVB_TUNER_CX24113 is not set -+# CONFIG_DVB_TDA826X is not set -+# CONFIG_DVB_TUA6100 is not set -+# CONFIG_DVB_CX24116 is not set -+# CONFIG_DVB_SI21XX is not set -+# CONFIG_DVB_DS3000 is not set -+# CONFIG_DVB_MB86A16 is not set -+# CONFIG_DVB_TDA10071 is not set -+# CONFIG_DVB_SP8870 is not set -+# CONFIG_DVB_SP887X is not set -+# CONFIG_DVB_CX22700 is not set -+# CONFIG_DVB_CX22702 is not set -+# CONFIG_DVB_S5H1432 is not set -+# CONFIG_DVB_DRXD is not set -+# CONFIG_DVB_L64781 is not set -+# CONFIG_DVB_TDA1004X is not set -+# CONFIG_DVB_NXT6000 is not set -+# CONFIG_DVB_MT352 is not set -+# CONFIG_DVB_DIB7000M is not set -+# CONFIG_DVB_DIB7000P is not set -+# CONFIG_DVB_DIB9000 is not set -+# CONFIG_DVB_TDA10048 is not set -+# CONFIG_DVB_HD29L2 is not set -+# CONFIG_DVB_STV0367 is not set -+# CONFIG_DVB_CXD2820R is not set -+# CONFIG_DVB_VES1820 is not set -+# CONFIG_DVB_TDA10021 is not set -+# CONFIG_DVB_TDA10023 is not set -+# CONFIG_DVB_STV0297 is not set -+# CONFIG_DVB_NXT200X is not set -+# CONFIG_DVB_OR51211 is not set -+# CONFIG_DVB_OR51132 is not set -+# CONFIG_DVB_BCM3510 is not set -+# CONFIG_DVB_LGDT330X is not set -+# CONFIG_DVB_LGDT3305 is not set -+# CONFIG_DVB_LG2160 is not set -+# CONFIG_DVB_S5H1409 is not set -+# CONFIG_DVB_AU8522_DTV is not set -+# CONFIG_DVB_AU8522_V4L is not set -+# CONFIG_DVB_S5H1411 is not set -+# CONFIG_DVB_S921 is not set -+# CONFIG_DVB_DIB8000 is not set -+# CONFIG_DVB_MB86A20S is not set -+# CONFIG_DVB_PLL is not set -+# CONFIG_DVB_TUNER_DIB0070 is not set -+# CONFIG_DVB_TUNER_DIB0090 is not set -+# CONFIG_DVB_LNBP21 is not set -+# CONFIG_DVB_LNBP22 is not set -+# CONFIG_DVB_ISL6405 is not set -+# CONFIG_DVB_ISL6421 is not set -+# CONFIG_DVB_ISL6423 is not set -+# CONFIG_DVB_A8293 is not set -+# CONFIG_DVB_LGS8GL5 is not set -+# CONFIG_DVB_LGS8GXX is not set -+# CONFIG_DVB_ATBM8830 is not set -+# CONFIG_DVB_TDA665x is not set -+# CONFIG_DVB_IX2505V is not set -+# CONFIG_DVB_M88RS2000 is not set - CONFIG_FB=y - CONFIG_FB_BCM2708=y -+# CONFIG_BACKLIGHT_GENERIC is not set - CONFIG_FRAMEBUFFER_CONSOLE=y - CONFIG_LOGO=y - # CONFIG_LOGO_LINUX_MONO is not set -@@ -514,6 +718,7 @@ CONFIG_SND_BCM2835=m - CONFIG_SND_USB_AUDIO=m - CONFIG_SND_USB_UA101=m - CONFIG_SND_USB_CAIAQ=m -+CONFIG_SND_USB_CAIAQ_INPUT=y - CONFIG_SND_USB_6FIRE=m - CONFIG_SOUND_PRIME=m - CONFIG_HID_A4TECH=m -@@ -601,6 +806,7 @@ CONFIG_USB_SERIAL_IPAQ=m - CONFIG_USB_SERIAL_IR=m - CONFIG_USB_SERIAL_EDGEPORT=m - CONFIG_USB_SERIAL_EDGEPORT_TI=m -+CONFIG_USB_SERIAL_F81232=m - CONFIG_USB_SERIAL_GARMIN=m - CONFIG_USB_SERIAL_IPW=m - CONFIG_USB_SERIAL_IUU=m -@@ -609,6 +815,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m - CONFIG_USB_SERIAL_KLSI=m - CONFIG_USB_SERIAL_KOBIL_SCT=m - CONFIG_USB_SERIAL_MCT_U232=m -+CONFIG_USB_SERIAL_METRO=m - CONFIG_USB_SERIAL_MOS7720=m - CONFIG_USB_SERIAL_MOS7840=m - CONFIG_USB_SERIAL_MOTOROLA=m -@@ -632,6 +839,7 @@ CONFIG_USB_SERIAL_OPTICON=m - CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m - CONFIG_USB_SERIAL_ZIO=m - CONFIG_USB_SERIAL_SSU100=m -+CONFIG_USB_SERIAL_QT2=m - CONFIG_USB_SERIAL_DEBUG=m - CONFIG_USB_EMI62=m - CONFIG_USB_EMI26=m -@@ -697,6 +905,14 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m -+CONFIG_STAGING_MEDIA=y -+CONFIG_LIRC_STAGING=y -+CONFIG_LIRC_IGORPLUGUSB=m -+CONFIG_LIRC_IMON=m -+CONFIG_LIRC_RPI=m -+CONFIG_LIRC_SASEM=m -+CONFIG_LIRC_SERIAL=m -+CONFIG_LIRC_TTUSBIR=m - # CONFIG_IOMMU_SUPPORT is not set - CONFIG_EXT4_FS=y - CONFIG_EXT4_FS_POSIX_ACL=y --- -1.8.1.5 - - -From e60725e08c8db3ce291e40dc8518ee1888f74683 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 25 Nov 2012 14:52:18 +0000 -Subject: [PATCH 122/169] Enable CMA in defconfig - ---- - arch/arm/configs/bcmrpi_defconfig | 6 +- - arch/arm/configs/bcmrpi_quick_defconfig | 298 ++++++++++++++++++++++++++++++++ - 2 files changed, 303 insertions(+), 1 deletion(-) - create mode 100644 arch/arm/configs/bcmrpi_quick_defconfig - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 4db7a00..53cc6c2 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -47,7 +47,7 @@ CONFIG_SECCOMP=y ++CONFIG_PARTITION_ADVANCED=y ++CONFIG_MAC_PARTITION=y + CONFIG_CFQ_GROUP_IOSCHED=y + CONFIG_ARCH_BCM2708=y +-CONFIG_NO_HZ=y +-CONFIG_HIGH_RES_TIMERS=y ++CONFIG_BCM2708_DMAER=m ++CONFIG_PREEMPT=y + CONFIG_AEABI=y ++CONFIG_CLEANCACHE=y ++CONFIG_FRONTSWAP=y ++CONFIG_UACCESS_WITH_MEMCPY=y + CONFIG_SECCOMP=y CONFIG_CC_STACKPROTECTOR=y CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 @@ -130543,24 +123784,751 @@ index 4db7a00..53cc6c2 100644 CONFIG_KEXEC=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=m -@@ -330,6 +330,8 @@ CONFIG_NFC=m +@@ -56,9 +67,17 @@ CONFIG_XFRM_USER=y + CONFIG_NET_KEY=m + CONFIG_INET=y + CONFIG_IP_MULTICAST=y ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_IP_MULTIPLE_TABLES=y ++CONFIG_IP_ROUTE_MULTIPATH=y ++CONFIG_IP_ROUTE_VERBOSE=y + CONFIG_IP_PNP=y + CONFIG_IP_PNP_DHCP=y + CONFIG_IP_PNP_RARP=y ++CONFIG_NET_IPIP=m ++CONFIG_NET_IPGRE_DEMUX=m ++CONFIG_NET_IPGRE=m ++CONFIG_ARPD=y + CONFIG_SYN_COOKIES=y + CONFIG_INET_AH=m + CONFIG_INET_ESP=m +@@ -79,7 +98,6 @@ CONFIG_NF_CONNTRACK_ZONES=y + CONFIG_NF_CONNTRACK_EVENTS=y + CONFIG_NF_CONNTRACK_TIMESTAMP=y + CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_SCTP=m + CONFIG_NF_CT_PROTO_UDPLITE=m + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m +@@ -98,10 +116,11 @@ CONFIG_NETFILTER_XT_TARGET_AUDIT=m + CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m + CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m + CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +-CONFIG_NETFILTER_XT_TARGET_CT=m + CONFIG_NETFILTER_XT_TARGET_DSCP=m ++CONFIG_NETFILTER_XT_TARGET_HMARK=m + CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m + CONFIG_NETFILTER_XT_TARGET_LED=m ++CONFIG_NETFILTER_XT_TARGET_LOG=m + CONFIG_NETFILTER_XT_TARGET_MARK=m + CONFIG_NETFILTER_XT_TARGET_NFLOG=m + CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +@@ -126,11 +145,13 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m + CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + CONFIG_NETFILTER_XT_MATCH_HELPER=m + CONFIG_NETFILTER_XT_MATCH_IPRANGE=m ++CONFIG_NETFILTER_XT_MATCH_IPVS=m + CONFIG_NETFILTER_XT_MATCH_LENGTH=m + CONFIG_NETFILTER_XT_MATCH_LIMIT=m + CONFIG_NETFILTER_XT_MATCH_MAC=m + CONFIG_NETFILTER_XT_MATCH_MARK=m + CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_NFACCT=m + CONFIG_NETFILTER_XT_MATCH_OSF=m + CONFIG_NETFILTER_XT_MATCH_OWNER=m + CONFIG_NETFILTER_XT_MATCH_POLICY=m +@@ -140,7 +161,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m + CONFIG_NETFILTER_XT_MATCH_RATEEST=m + CONFIG_NETFILTER_XT_MATCH_REALM=m + CONFIG_NETFILTER_XT_MATCH_RECENT=m +-CONFIG_NETFILTER_XT_MATCH_SCTP=m + CONFIG_NETFILTER_XT_MATCH_SOCKET=m + CONFIG_NETFILTER_XT_MATCH_STATE=m + CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +@@ -160,20 +180,41 @@ CONFIG_IP_SET_HASH_NET=m + CONFIG_IP_SET_HASH_NETPORT=m + CONFIG_IP_SET_HASH_NETIFACE=m + CONFIG_IP_SET_LIST_SET=m ++CONFIG_IP_VS=m ++CONFIG_IP_VS_IPV6=y ++CONFIG_IP_VS_PROTO_TCP=y ++CONFIG_IP_VS_PROTO_UDP=y ++CONFIG_IP_VS_PROTO_ESP=y ++CONFIG_IP_VS_PROTO_AH=y ++CONFIG_IP_VS_PROTO_SCTP=y ++CONFIG_IP_VS_RR=m ++CONFIG_IP_VS_WRR=m ++CONFIG_IP_VS_LC=m ++CONFIG_IP_VS_WLC=m ++CONFIG_IP_VS_LBLC=m ++CONFIG_IP_VS_LBLCR=m ++CONFIG_IP_VS_DH=m ++CONFIG_IP_VS_SH=m ++CONFIG_IP_VS_SED=m ++CONFIG_IP_VS_NQ=m ++CONFIG_IP_VS_FTP=m ++CONFIG_IP_VS_PE_SIP=m + CONFIG_NF_CONNTRACK_IPV4=m ++CONFIG_IP_NF_QUEUE=m + CONFIG_IP_NF_IPTABLES=m + CONFIG_IP_NF_MATCH_AH=m + CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_RPFILTER=m + CONFIG_IP_NF_MATCH_TTL=m + CONFIG_IP_NF_FILTER=m + CONFIG_IP_NF_TARGET_REJECT=m +-CONFIG_IP_NF_TARGET_LOG=m + CONFIG_IP_NF_TARGET_ULOG=m +-CONFIG_NF_NAT=m ++CONFIG_NF_NAT_IPV4=m + CONFIG_IP_NF_TARGET_MASQUERADE=m + CONFIG_IP_NF_TARGET_NETMAP=m + CONFIG_IP_NF_TARGET_REDIRECT=m + CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_CLUSTERIP=m + CONFIG_IP_NF_TARGET_ECN=m + CONFIG_IP_NF_TARGET_TTL=m + CONFIG_IP_NF_RAW=m +@@ -181,7 +222,6 @@ CONFIG_IP_NF_ARPTABLES=m + CONFIG_IP_NF_ARPFILTER=m + CONFIG_IP_NF_ARP_MANGLE=m + CONFIG_NF_CONNTRACK_IPV6=m +-CONFIG_IP6_NF_IPTABLES=m + CONFIG_IP6_NF_MATCH_AH=m + CONFIG_IP6_NF_MATCH_EUI64=m + CONFIG_IP6_NF_MATCH_FRAG=m +@@ -189,13 +229,16 @@ CONFIG_IP6_NF_MATCH_OPTS=m + CONFIG_IP6_NF_MATCH_HL=m + CONFIG_IP6_NF_MATCH_IPV6HEADER=m + CONFIG_IP6_NF_MATCH_MH=m ++CONFIG_IP6_NF_MATCH_RPFILTER=m + CONFIG_IP6_NF_MATCH_RT=m + CONFIG_IP6_NF_TARGET_HL=m +-CONFIG_IP6_NF_TARGET_LOG=m + CONFIG_IP6_NF_FILTER=m + CONFIG_IP6_NF_TARGET_REJECT=m + CONFIG_IP6_NF_MANGLE=m + CONFIG_IP6_NF_RAW=m ++CONFIG_NF_NAT_IPV6=m ++CONFIG_IP6_NF_TARGET_MASQUERADE=m ++CONFIG_IP6_NF_TARGET_NPT=m + CONFIG_BRIDGE_NF_EBTABLES=m + CONFIG_BRIDGE_EBT_BROUTE=m + CONFIG_BRIDGE_EBT_T_FILTER=m +@@ -240,6 +283,10 @@ CONFIG_NET_SCH_DRR=m + CONFIG_NET_SCH_MQPRIO=m + CONFIG_NET_SCH_CHOKE=m + CONFIG_NET_SCH_QFQ=m ++CONFIG_NET_SCH_CODEL=m ++CONFIG_NET_SCH_FQ_CODEL=m ++CONFIG_NET_SCH_INGRESS=m ++CONFIG_NET_SCH_PLUG=m + CONFIG_NET_CLS_BASIC=m + CONFIG_NET_CLS_TCINDEX=m + CONFIG_NET_CLS_ROUTE4=m +@@ -256,6 +303,7 @@ CONFIG_NET_EMATCH_NBYTE=m + CONFIG_NET_EMATCH_U32=m + CONFIG_NET_EMATCH_META=m + CONFIG_NET_EMATCH_TEXT=m ++CONFIG_NET_EMATCH_IPSET=m + CONFIG_NET_CLS_ACT=y + CONFIG_NET_ACT_POLICE=m + CONFIG_NET_ACT_GACT=m +@@ -267,9 +315,21 @@ CONFIG_NET_ACT_PEDIT=m + CONFIG_NET_ACT_SIMP=m + CONFIG_NET_ACT_SKBEDIT=m + CONFIG_NET_ACT_CSUM=m ++CONFIG_BATMAN_ADV=m + CONFIG_NET_PKTGEN=m ++CONFIG_HAMRADIO=y ++CONFIG_AX25=m ++CONFIG_NETROM=m ++CONFIG_ROSE=m ++CONFIG_MKISS=m ++CONFIG_6PACK=m ++CONFIG_BPQETHER=m ++CONFIG_BAYCOM_SER_FDX=m ++CONFIG_BAYCOM_SER_HDX=m ++CONFIG_YAM=m + CONFIG_IRDA=m + CONFIG_IRLAN=m ++CONFIG_IRNET=m + CONFIG_IRCOMM=m + CONFIG_IRDA_ULTRA=y + CONFIG_IRDA_CACHE_LAST_LSAP=y +@@ -282,8 +342,6 @@ CONFIG_USB_IRDA=m + CONFIG_SIGMATEL_FIR=m + CONFIG_MCS_FIR=m + CONFIG_BT=m +-CONFIG_BT_L2CAP=y +-CONFIG_BT_SCO=y + CONFIG_BT_RFCOMM=m + CONFIG_BT_RFCOMM_TTY=y + CONFIG_BT_BNEP=m +@@ -291,6 +349,8 @@ CONFIG_BT_BNEP_MC_FILTER=y + CONFIG_BT_BNEP_PROTO_FILTER=y + CONFIG_BT_HIDP=m + CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBTSDIO=m ++CONFIG_BT_HCIUART=m + CONFIG_BT_HCIBCM203X=m + CONFIG_BT_HCIBPA10X=m + CONFIG_BT_HCIBFUSB=m +@@ -298,71 +358,66 @@ CONFIG_BT_HCIVHCI=m + CONFIG_BT_MRVL=m + CONFIG_BT_MRVL_SDIO=m + CONFIG_BT_ATH3K=m ++CONFIG_BT_WILINK=m ++CONFIG_AF_RXRPC=m ++CONFIG_RXKAD=m + CONFIG_CFG80211=m ++CONFIG_CFG80211_WEXT=y + CONFIG_MAC80211=m + CONFIG_MAC80211_RC_PID=y + CONFIG_MAC80211_MESH=y + CONFIG_WIMAX=m ++CONFIG_RFKILL=m ++CONFIG_RFKILL_INPUT=y + CONFIG_NET_9P=m + CONFIG_NFC=m CONFIG_NFC_PN533=m +-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y +CONFIG_CMA=y -+CONFIG_CMA_DEBUG=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=m CONFIG_BLK_DEV_DRBD=m -@@ -459,6 +461,8 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y - CONFIG_TTY_PRINTK=y - # CONFIG_HW_RANDOM is not set + CONFIG_BLK_DEV_NBD=m + CONFIG_BLK_DEV_RAM=y + CONFIG_CDROM_PKTCDVD=m +-CONFIG_MISC_DEVICES=y + CONFIG_SCSI=y + # CONFIG_SCSI_PROC_FS is not set +-CONFIG_BLK_DEV_SD=m ++CONFIG_BLK_DEV_SD=y ++CONFIG_CHR_DEV_ST=m ++CONFIG_CHR_DEV_OSST=m + CONFIG_BLK_DEV_SR=m + CONFIG_SCSI_MULTI_LUN=y +-# CONFIG_SCSI_LOWLEVEL is not set ++CONFIG_SCSI_ISCSI_ATTRS=y ++CONFIG_ISCSI_TCP=m + CONFIG_MD=y ++CONFIG_MD_RAID0=m ++CONFIG_BLK_DEV_DM=m ++CONFIG_DM_CRYPT=m ++CONFIG_DM_SNAPSHOT=m ++CONFIG_DM_MIRROR=m ++CONFIG_DM_RAID=m ++CONFIG_DM_LOG_USERSPACE=m ++CONFIG_DM_ZERO=m ++CONFIG_DM_DELAY=m + CONFIG_NETDEVICES=y ++CONFIG_BONDING=m ++CONFIG_MACVLAN=m ++CONFIG_NETCONSOLE=m + CONFIG_TUN=m +-CONFIG_PHYLIB=m + CONFIG_MDIO_BITBANG=m +-CONFIG_NET_ETHERNET=y +-# CONFIG_NETDEV_1000 is not set +-# CONFIG_NETDEV_10000 is not set +-CONFIG_LIBERTAS_THINFIRM=m +-CONFIG_LIBERTAS_THINFIRM_USB=m +-CONFIG_AT76C50X_USB=m +-CONFIG_USB_ZD1201=m +-CONFIG_USB_NET_RNDIS_WLAN=m +-CONFIG_RTL8187=m +-CONFIG_MAC80211_HWSIM=m +-CONFIG_ATH_COMMON=m +-CONFIG_ATH9K=m +-CONFIG_ATH9K_HTC=m +-CONFIG_CARL9170=m +-CONFIG_B43=m +-CONFIG_B43LEGACY=m +-CONFIG_HOSTAP=m +-CONFIG_IWM=m +-CONFIG_LIBERTAS=m +-CONFIG_LIBERTAS_USB=m +-CONFIG_LIBERTAS_SDIO=m +-CONFIG_P54_COMMON=m +-CONFIG_P54_USB=m +-CONFIG_RT2X00=m +-CONFIG_RT2500USB=m +-CONFIG_RT73USB=m +-CONFIG_RT2800USB=m +-CONFIG_RT2800USB_RT53XX=y +-CONFIG_RT2800USB_UNKNOWN=y +-CONFIG_WL1251=m +-CONFIG_WL12XX_MENU=m +-CONFIG_ZD1211RW=m +-CONFIG_MWIFIEX=m +-CONFIG_MWIFIEX_SDIO=m +-CONFIG_RTL8192CU=m +-CONFIG_WIMAX_I2400M_USB=m ++CONFIG_PPP=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_FILTER=y ++CONFIG_PPP_MPPE=m ++CONFIG_PPP_MULTILINK=y ++CONFIG_PPPOE=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_SLIP_SMART=y + CONFIG_USB_CATC=m + CONFIG_USB_KAWETH=m + CONFIG_USB_PEGASUS=m +@@ -371,6 +426,8 @@ CONFIG_USB_USBNET=y + CONFIG_USB_NET_AX8817X=m + CONFIG_USB_NET_CDCETHER=m + CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_CDC_NCM=m ++CONFIG_USB_NET_CDC_MBIM=m + CONFIG_USB_NET_DM9601=m + CONFIG_USB_NET_SMSC75XX=m + CONFIG_USB_NET_SMSC95XX=y +@@ -382,21 +439,42 @@ CONFIG_USB_NET_CDC_SUBSET=m + CONFIG_USB_ALI_M5632=y + CONFIG_USB_AN2720=y + CONFIG_USB_KC2190=y +-# CONFIG_USB_NET_ZAURUS is not set ++CONFIG_USB_NET_ZAURUS=m + CONFIG_USB_NET_CX82310_ETH=m + CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_QMI_WWAN=m ++CONFIG_USB_HSO=m + CONFIG_USB_NET_INT51X1=m + CONFIG_USB_IPHETH=m + CONFIG_USB_SIERRA_NET=m + CONFIG_USB_VL600=m +-CONFIG_PPP=m +-CONFIG_PPP_ASYNC=m +-CONFIG_PPP_SYNC_TTY=m +-CONFIG_PPP_DEFLATE=m +-CONFIG_PPP_BSDCOMP=m +-CONFIG_SLIP=m +-CONFIG_SLIP_COMPRESSED=y +-CONFIG_NETCONSOLE=m ++CONFIG_LIBERTAS_THINFIRM=m ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_AT76C50X_USB=m ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8187=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_ATH_CARDS=m ++CONFIG_CARL9170=m ++CONFIG_AR5523=m ++CONFIG_HOSTAP=m ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_SDIO=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RT2800USB_UNKNOWN=y ++CONFIG_ZD1211RW=m ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_RTL8192CU=m ++CONFIG_WIMAX_I2400M_USB=m + CONFIG_INPUT_POLLDEV=m + # CONFIG_INPUT_MOUSEDEV_PSAUX is not set + CONFIG_INPUT_JOYDEV=m +@@ -405,7 +483,6 @@ CONFIG_INPUT_EVDEV=m + # CONFIG_INPUT_MOUSE is not set + CONFIG_INPUT_MISC=y + CONFIG_INPUT_AD714X=m +-CONFIG_INPUT_ATI_REMOTE=m + CONFIG_INPUT_ATI_REMOTE2=m + CONFIG_INPUT_KEYSPAN_REMOTE=m + CONFIG_INPUT_POWERMATE=m +@@ -425,8 +502,11 @@ CONFIG_VT_HW_CONSOLE_BINDING=y + # CONFIG_DEVKMEM is not set + CONFIG_SERIAL_AMBA_PL011=y + CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +-# CONFIG_HW_RANDOM is not set ++CONFIG_TTY_PRINTK=y ++CONFIG_HW_RANDOM_BCM2708=m CONFIG_RAW_DRIVER=y +CONFIG_BRCM_CHAR_DRIVERS=y +CONFIG_BCM_VC_CMA=y CONFIG_I2C=y CONFIG_I2C_CHARDEV=m CONFIG_I2C_BCM2708=m +@@ -434,21 +514,45 @@ CONFIG_SPI=y + CONFIG_SPI_BCM2708=m + CONFIG_SPI_SPIDEV=m + CONFIG_GPIO_SYSFS=y ++CONFIG_W1=m ++CONFIG_W1_MASTER_DS2490=m ++CONFIG_W1_MASTER_DS2482=m ++CONFIG_W1_MASTER_DS1WM=m ++CONFIG_W1_MASTER_GPIO=m ++CONFIG_W1_SLAVE_THERM=m ++CONFIG_W1_SLAVE_SMEM=m ++CONFIG_W1_SLAVE_DS2408=m ++CONFIG_W1_SLAVE_DS2423=m ++CONFIG_W1_SLAVE_DS2431=m ++CONFIG_W1_SLAVE_DS2433=m ++CONFIG_W1_SLAVE_DS2760=m ++CONFIG_W1_SLAVE_DS2780=m ++CONFIG_W1_SLAVE_BQ27000=m + # CONFIG_HWMON is not set + CONFIG_THERMAL=y + CONFIG_THERMAL_BCM2835=y + CONFIG_WATCHDOG=y + CONFIG_BCM2708_WDT=m ++CONFIG_UCB1400_CORE=m + CONFIG_MEDIA_SUPPORT=m +-CONFIG_VIDEO_DEV=m +-CONFIG_DVB_CORE=m ++CONFIG_MEDIA_CAMERA_SUPPORT=y ++CONFIG_MEDIA_ANALOG_TV_SUPPORT=y ++CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y ++CONFIG_MEDIA_RADIO_SUPPORT=y ++CONFIG_MEDIA_RC_SUPPORT=y ++CONFIG_MEDIA_CONTROLLER=y ++CONFIG_LIRC=m ++CONFIG_RC_DEVICES=y + CONFIG_RC_ATI_REMOTE=m + CONFIG_IR_IMON=m + CONFIG_IR_MCEUSB=m + CONFIG_IR_REDRAT3=m + CONFIG_IR_STREAMZAP=m ++CONFIG_IR_IGUANA=m ++CONFIG_IR_TTUSBIR=m + CONFIG_RC_LOOPBACK=m +-CONFIG_MEDIA_ATTACH=y ++CONFIG_IR_GPIO_CIR=m ++CONFIG_MEDIA_USB_SUPPORT=y + CONFIG_USB_VIDEO_CLASS=m + CONFIG_USB_M5602=m + CONFIG_USB_STV06XX=m +@@ -459,6 +563,7 @@ CONFIG_USB_GSPCA_CPIA1=m + CONFIG_USB_GSPCA_ETOMS=m + CONFIG_USB_GSPCA_FINEPIX=m + CONFIG_USB_GSPCA_JEILINJ=m ++CONFIG_USB_GSPCA_JL2005BCD=m + CONFIG_USB_GSPCA_KINECT=m + CONFIG_USB_GSPCA_KONICA=m + CONFIG_USB_GSPCA_MARS=m +@@ -489,31 +594,32 @@ CONFIG_USB_GSPCA_STK014=m + CONFIG_USB_GSPCA_STV0680=m + CONFIG_USB_GSPCA_SUNPLUS=m + CONFIG_USB_GSPCA_T613=m ++CONFIG_USB_GSPCA_TOPRO=m + CONFIG_USB_GSPCA_TV8532=m + CONFIG_USB_GSPCA_VC032X=m + CONFIG_USB_GSPCA_VICAM=m + CONFIG_USB_GSPCA_XIRLINK_CIT=m + CONFIG_USB_GSPCA_ZC3XX=m ++CONFIG_USB_PWC=m ++CONFIG_VIDEO_CPIA2=m ++CONFIG_USB_ZR364XX=m ++CONFIG_USB_STKWEBCAM=m ++CONFIG_USB_S2255=m ++CONFIG_USB_SN9C102=m ++CONFIG_VIDEO_AU0828=m + CONFIG_VIDEO_PVRUSB2=m ++CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y + CONFIG_VIDEO_HDPVR=m +-CONFIG_VIDEO_EM28XX=m +-CONFIG_VIDEO_EM28XX_ALSA=m +-CONFIG_VIDEO_EM28XX_DVB=m + CONFIG_VIDEO_TLG2300=m ++CONFIG_VIDEO_USBVISION=m ++CONFIG_VIDEO_STK1160=m ++CONFIG_VIDEO_STK1160_AC97=y + CONFIG_VIDEO_CX231XX=m + CONFIG_VIDEO_CX231XX_ALSA=m + CONFIG_VIDEO_CX231XX_DVB=m +-CONFIG_VIDEO_USBVISION=m +-CONFIG_USB_ET61X251=m +-CONFIG_USB_SN9C102=m +-CONFIG_USB_PWC=m +-CONFIG_USB_ZR364XX=m +-CONFIG_USB_STKWEBCAM=m +-CONFIG_USB_S2255=m +-CONFIG_USB_DSBR=m +-CONFIG_RADIO_SI470X=y +-CONFIG_USB_SI470X=m +-CONFIG_USB_MR800=m ++CONFIG_VIDEO_TM6000=m ++CONFIG_VIDEO_TM6000_ALSA=m ++CONFIG_VIDEO_TM6000_DVB=m + CONFIG_DVB_USB=m + CONFIG_DVB_USB_A800=m + CONFIG_DVB_USB_DIBUSB_MB=m +@@ -522,8 +628,6 @@ CONFIG_DVB_USB_DIB0700=m + CONFIG_DVB_USB_UMT_010=m + CONFIG_DVB_USB_CXUSB=m + CONFIG_DVB_USB_M920X=m +-CONFIG_DVB_USB_GL861=m +-CONFIG_DVB_USB_AU6610=m + CONFIG_DVB_USB_DIGITV=m + CONFIG_DVB_USB_VP7045=m + CONFIG_DVB_USB_VP702X=m +@@ -536,21 +640,44 @@ CONFIG_DVB_USB_AF9005=m + CONFIG_DVB_USB_AF9005_REMOTE=m + CONFIG_DVB_USB_DW2102=m + CONFIG_DVB_USB_CINERGY_T2=m +-CONFIG_DVB_USB_ANYSEE=m + CONFIG_DVB_USB_DTV5100=m ++CONFIG_DVB_USB_FRIIO=m ++CONFIG_DVB_USB_AZ6027=m ++CONFIG_DVB_USB_TECHNISAT_USB2=m ++CONFIG_DVB_USB_V2=m + CONFIG_DVB_USB_AF9015=m ++CONFIG_DVB_USB_AF9035=m ++CONFIG_DVB_USB_ANYSEE=m ++CONFIG_DVB_USB_AU6610=m ++CONFIG_DVB_USB_AZ6007=m + CONFIG_DVB_USB_CE6230=m +-CONFIG_DVB_USB_FRIIO=m + CONFIG_DVB_USB_EC168=m +-CONFIG_DVB_USB_AZ6027=m ++CONFIG_DVB_USB_GL861=m ++CONFIG_DVB_USB_IT913X=m + CONFIG_DVB_USB_LME2510=m +-CONFIG_DVB_USB_TECHNISAT_USB2=m +-CONFIG_SMS_SIANO_MDTV=m ++CONFIG_DVB_USB_MXL111SF=m ++CONFIG_DVB_USB_RTL28XXU=m + CONFIG_SMS_USB_DRV=m +-CONFIG_DVB_B2C2_FLEXCOP=m + CONFIG_DVB_B2C2_FLEXCOP_USB=m ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_EM28XX_DVB=m ++CONFIG_SMS_SDIO_DRV=m ++CONFIG_USB_MR800=m ++CONFIG_USB_DSBR=m ++CONFIG_RADIO_SHARK=m ++CONFIG_RADIO_SHARK2=m ++CONFIG_RADIO_SI4713=m ++CONFIG_USB_KEENE=m ++CONFIG_RADIO_TEA5764=m ++CONFIG_RADIO_SAA7706H=m ++CONFIG_RADIO_TEF6862=m ++CONFIG_RADIO_WL1273=m ++CONFIG_RADIO_WL128X=m ++CONFIG_MEDIA_ATTACH=y + CONFIG_FB=y + CONFIG_FB_BCM2708=y ++# CONFIG_BACKLIGHT_GENERIC is not set + CONFIG_FRAMEBUFFER_CONSOLE=y + CONFIG_LOGO=y + # CONFIG_LOGO_LINUX_MONO is not set +@@ -573,10 +700,10 @@ CONFIG_SND_BCM2835=m + CONFIG_SND_USB_AUDIO=m + CONFIG_SND_USB_UA101=m + CONFIG_SND_USB_CAIAQ=m ++CONFIG_SND_USB_CAIAQ_INPUT=y + CONFIG_SND_USB_6FIRE=m + CONFIG_SOUND_PRIME=m +-CONFIG_HID_PID=y +-CONFIG_USB_HIDDEV=y ++CONFIG_HIDRAW=y + CONFIG_HID_A4TECH=m + CONFIG_HID_ACRUX=m + CONFIG_HID_APPLE=m +@@ -607,7 +734,6 @@ CONFIG_HID_ORTEK=m + CONFIG_HID_PANTHERLORD=m + CONFIG_HID_PETALYNX=m + CONFIG_HID_PICOLCD=m +-CONFIG_HID_QUANTA=m + CONFIG_HID_ROCCAT=m + CONFIG_HID_SAMSUNG=m + CONFIG_HID_SONY=m +@@ -617,14 +743,16 @@ CONFIG_HID_GREENASIA=m + CONFIG_HID_SMARTJOYPLUS=m + CONFIG_HID_TOPSEED=m + CONFIG_HID_THRUSTMASTER=m +-CONFIG_HID_WACOM=m +-CONFIG_HID_WIIMOTE=m + CONFIG_HID_ZEROPLUS=m + CONFIG_HID_ZYDACRON=m ++CONFIG_HID_PID=y ++CONFIG_USB_HIDDEV=y + CONFIG_USB=y + CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + CONFIG_USB_MON=m + CONFIG_USB_DWCOTG=y ++CONFIG_USB_PRINTER=m ++CONFIG_USB_TMC=m + CONFIG_USB_STORAGE=y + CONFIG_USB_STORAGE_REALTEK=m + CONFIG_USB_STORAGE_DATAFAB=m +@@ -639,8 +767,6 @@ CONFIG_USB_STORAGE_ONETOUCH=m + CONFIG_USB_STORAGE_KARMA=m + CONFIG_USB_STORAGE_CYPRESS_ATACB=m + CONFIG_USB_STORAGE_ENE_UB6250=m +-CONFIG_USB_UAS=m +-CONFIG_USB_LIBUSUAL=y + CONFIG_USB_MDC800=m + CONFIG_USB_MICROTEK=m + CONFIG_USB_SERIAL=m +@@ -661,6 +787,7 @@ CONFIG_USB_SERIAL_IPAQ=m + CONFIG_USB_SERIAL_IR=m + CONFIG_USB_SERIAL_EDGEPORT=m + CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_F81232=m + CONFIG_USB_SERIAL_GARMIN=m + CONFIG_USB_SERIAL_IPW=m + CONFIG_USB_SERIAL_IUU=m +@@ -669,6 +796,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m + CONFIG_USB_SERIAL_KLSI=m + CONFIG_USB_SERIAL_KOBIL_SCT=m + CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_METRO=m + CONFIG_USB_SERIAL_MOS7720=m + CONFIG_USB_SERIAL_MOS7840=m + CONFIG_USB_SERIAL_MOTOROLA=m +@@ -691,7 +819,9 @@ CONFIG_USB_SERIAL_OMNINET=m + CONFIG_USB_SERIAL_OPTICON=m + CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m + CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_ZTE=m + CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_SERIAL_QT2=m + CONFIG_USB_SERIAL_DEBUG=m + CONFIG_USB_EMI62=m + CONFIG_USB_EMI26=m +@@ -717,11 +847,10 @@ CONFIG_MMC_SDHCI=y + CONFIG_MMC_SDHCI_PLTFM=y + CONFIG_MMC_SDHCI_BCM2708=y + CONFIG_MMC_SDHCI_BCM2708_DMA=y +-CONFIG_LEDS_GPIO=y +-CONFIG_LEDS_TRIGGER_TIMER=m +-CONFIG_LEDS_TRIGGER_HEARTBEAT=m +-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m ++CONFIG_MMC_SPI=m ++CONFIG_LEDS_GPIO=m + CONFIG_RTC_CLASS=y ++# CONFIG_RTC_HCTOSYS is not set + CONFIG_RTC_DRV_DS1307=m + CONFIG_RTC_DRV_DS1374=m + CONFIG_RTC_DRV_DS1672=m +@@ -753,6 +882,23 @@ CONFIG_RTC_DRV_PCF2123=m + CONFIG_UIO=m + CONFIG_UIO_PDRV=m + CONFIG_UIO_PDRV_GENIRQ=m ++CONFIG_STAGING=y ++CONFIG_W35UND=m ++CONFIG_PRISM2_USB=m ++CONFIG_R8712U=m ++CONFIG_VT6656=m ++CONFIG_ZRAM=m ++CONFIG_ZSMALLOC=m ++CONFIG_SPEAKUP=m ++CONFIG_SPEAKUP_SYNTH_SOFT=m ++CONFIG_STAGING_MEDIA=y ++CONFIG_DVB_AS102=m ++CONFIG_LIRC_STAGING=y ++CONFIG_LIRC_IGORPLUGUSB=m ++CONFIG_LIRC_IMON=m ++CONFIG_LIRC_RPI=m ++CONFIG_LIRC_SASEM=m ++CONFIG_LIRC_SERIAL=m + # CONFIG_IOMMU_SUPPORT is not set + CONFIG_EXT4_FS=y + CONFIG_EXT4_FS_POSIX_ACL=y +@@ -770,6 +916,7 @@ CONFIG_XFS_QUOTA=y + CONFIG_XFS_POSIX_ACL=y + CONFIG_XFS_RT=y + CONFIG_GFS2_FS=m ++CONFIG_GFS2_FS_LOCKING_DLM=y + CONFIG_OCFS2_FS=m + CONFIG_BTRFS_FS=m + CONFIG_BTRFS_FS_POSIX_ACL=y +@@ -790,15 +937,19 @@ CONFIG_MSDOS_FS=y + CONFIG_VFAT_FS=y + CONFIG_FAT_DEFAULT_IOCHARSET="ascii" + CONFIG_NTFS_FS=m ++CONFIG_NTFS_RW=y + CONFIG_TMPFS=y + CONFIG_TMPFS_POSIX_ACL=y + CONFIG_CONFIGFS_FS=y ++CONFIG_ECRYPT_FS=m ++CONFIG_HFS_FS=m ++CONFIG_HFSPLUS_FS=m + CONFIG_SQUASHFS=m + CONFIG_SQUASHFS_XATTR=y + CONFIG_SQUASHFS_LZO=y + CONFIG_SQUASHFS_XZ=y ++CONFIG_F2FS_FS=y + CONFIG_NFS_FS=y +-CONFIG_NFS_V3=y + CONFIG_NFS_V3_ACL=y + CONFIG_NFS_V4=y + CONFIG_ROOT_NFS=y +@@ -812,9 +963,6 @@ CONFIG_CIFS_XATTR=y + CONFIG_CIFS_POSIX=y + CONFIG_9P_FS=m + CONFIG_9P_FS_POSIX_ACL=y +-CONFIG_PARTITION_ADVANCED=y +-CONFIG_MAC_PARTITION=y +-CONFIG_EFI_PARTITION=y + CONFIG_NLS_DEFAULT="utf8" + CONFIG_NLS_CODEPAGE_437=y + CONFIG_NLS_CODEPAGE_737=m +@@ -853,32 +1001,28 @@ CONFIG_NLS_ISO8859_14=m + CONFIG_NLS_ISO8859_15=m + CONFIG_NLS_KOI8_R=m + CONFIG_NLS_KOI8_U=m +-CONFIG_NLS_UTF8=m ++CONFIG_DLM=m + CONFIG_PRINTK_TIME=y ++CONFIG_DEBUG_FS=y + CONFIG_DETECT_HUNG_TASK=y + CONFIG_TIMER_STATS=y +-CONFIG_DEBUG_STACK_USAGE=y +-CONFIG_DEBUG_INFO=y ++# CONFIG_DEBUG_PREEMPT is not set + CONFIG_DEBUG_MEMORY_INIT=y + CONFIG_BOOT_PRINTK_DELAY=y + CONFIG_LATENCYTOP=y +-CONFIG_SYSCTL_SYSCALL_CHECK=y +-CONFIG_IRQSOFF_TRACER=y +-CONFIG_SCHED_TRACER=y +-CONFIG_STACK_TRACER=y +-CONFIG_BLK_DEV_IO_TRACE=y +-CONFIG_FUNCTION_PROFILER=y ++# CONFIG_KPROBE_EVENT is not set + CONFIG_KGDB=y + CONFIG_KGDB_KDB=y + CONFIG_KDB_KEYBOARD=y + CONFIG_STRICT_DEVMEM=y ++CONFIG_CRYPTO_NULL=m + CONFIG_CRYPTO_SEQIV=m + CONFIG_CRYPTO_CBC=y ++CONFIG_CRYPTO_XTS=m + CONFIG_CRYPTO_HMAC=y + CONFIG_CRYPTO_XCBC=m + CONFIG_CRYPTO_MD5=y + CONFIG_CRYPTO_SHA1=y +-CONFIG_CRYPTO_SHA256=m + CONFIG_CRYPTO_SHA512=m + CONFIG_CRYPTO_TGR192=m + CONFIG_CRYPTO_WP512=m +diff --git a/arch/arm/configs/bcmrpi_emergency_defconfig b/arch/arm/configs/bcmrpi_emergency_defconfig +index 3b40c49..ab1b8d9 100644 +--- a/arch/arm/configs/bcmrpi_emergency_defconfig ++++ b/arch/arm/configs/bcmrpi_emergency_defconfig +@@ -530,3 +530,4 @@ CONFIG_CRYPTO_DEFLATE=m + # CONFIG_CRYPTO_HW is not set + CONFIG_CRC_ITU_T=y + CONFIG_LIBCRC32C=y ++CONFIG_F2FS=y diff --git a/arch/arm/configs/bcmrpi_quick_defconfig b/arch/arm/configs/bcmrpi_quick_defconfig new file mode 100644 index 0000000..10b84df @@ -130866,5774 +124834,986 @@ index 0000000..10b84df +CONFIG_LIBCRC32C=y +CONFIG_AVERAGE=y -- -1.8.1.5 +1.8.1.6 -From ccf0ba7e1ab42232bad13e15314295871c8d92f9 Mon Sep 17 00:00:00 2001 +From b7d81237d4a4e0c72de823db7a77dafebe40be17 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Sun, 25 Nov 2012 18:28:09 +0000 -Subject: [PATCH 123/169] Allow mailbox driver to be called from user code - though ioctl +Date: Tue, 16 Apr 2013 15:36:01 +0100 +Subject: [PATCH 92/95] Add v6wbi_flush_kern_tlb_range to allow zsmalloc to be + built as a module --- - arch/arm/mach-bcm2708/include/mach/vcio.h | 33 +++++++ - arch/arm/mach-bcm2708/vcio.c | 137 +++++++++++++++++++++++++++++- - 2 files changed, 168 insertions(+), 2 deletions(-) + arch/arm/kernel/armksyms.c | 4 ++++ + 1 file changed, 4 insertions(+) -diff --git a/arch/arm/mach-bcm2708/include/mach/vcio.h b/arch/arm/mach-bcm2708/include/mach/vcio.h -index 7dfd14e..b522ba9 100644 ---- a/arch/arm/mach-bcm2708/include/mach/vcio.h -+++ b/arch/arm/mach-bcm2708/include/mach/vcio.h -@@ -105,4 +105,37 @@ enum { - extern int /*rc*/ bcm_mailbox_write(unsigned chan, uint32_t data28); - extern int /*rc*/ bcm_mailbox_property(void *data, int size); - -+#include -+ -+/* -+ * The major device number. We can't rely on dynamic -+ * registration any more, because ioctls need to know -+ * it. -+ */ -+#define MAJOR_NUM 100 -+ -+/* -+ * Set the message of the device driver -+ */ -+#define IOCTL_MBOX_PROPERTY _IOWR(MAJOR_NUM, 0, char *) -+/* -+ * _IOWR means that we're creating an ioctl command -+ * number for passing information from a user process -+ * to the kernel module and from the kernel module to user process -+ * -+ * The first arguments, MAJOR_NUM, is the major device -+ * number we're using. -+ * -+ * The second argument is the number of the command -+ * (there could be several with different meanings). -+ * -+ * The third argument is the type we want to get from -+ * the process to the kernel. -+ */ -+ -+/* -+ * The name of the device file -+ */ -+#define DEVICE_FILE_NAME "char_dev" -+ +diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c +index 60d3b73..cba4d28 100644 +--- a/arch/arm/kernel/armksyms.c ++++ b/arch/arm/kernel/armksyms.c +@@ -156,3 +156,7 @@ + #ifdef CONFIG_ARM_PATCH_PHYS_VIRT + EXPORT_SYMBOL(__pv_phys_offset); #endif -diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c -index 468fdef..09b78b5 100644 ---- a/arch/arm/mach-bcm2708/vcio.c -+++ b/arch/arm/mach-bcm2708/vcio.c -@@ -37,6 +37,9 @@ - #include - #include - -+#include + ++extern void v6wbi_flush_kern_tlb_range(void); ++EXPORT_SYMBOL(v6wbi_flush_kern_tlb_range); + - #define DRIVER_NAME BCM_VCIO_DRIVER_NAME +-- +1.8.1.6 + + +From af21f81d58195d0712fd047a86429b80dfb3b461 Mon Sep 17 00:00:00 2001 +From: P33M +Date: Mon, 22 Apr 2013 00:08:36 +0100 +Subject: [PATCH 93/95] dwc_otg: fix NAK holdoff and allow on split + transactions only + +This corrects a bug where if a single active non-periodic endpoint +had at least one transaction in its qh, on frnum == MAX_FRNUM the qh +would get skipped and never get queued again. This would result in +a silent device until error detection (automatic or otherwise) would +either reset the device or flush and requeue the URBs. + +Additionally the NAK holdoff was enabled for all transactions - this +would potentially stall a HS endpoint for 1ms if a previous error state +enabled this interrupt and the next response was a NAK. Fix so that +only split transactions get held off. +--- + drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +index 91eefecd..eaa8f38 100644 +--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c ++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +@@ -46,7 +46,7 @@ + #include "dwc_otg_hcd.h" + #include "dwc_otg_regs.h" - /* ---------------------------------------------------------------------- -@@ -216,6 +219,33 @@ static void dev_mbox_register(const char *dev_name, struct device *dev) - mbox_dev = dev; +-extern bool microframe_schedule; ++extern bool microframe_schedule, nak_holdoff_enable; + + //#define DEBUG_HOST_CHANNELS + #ifdef DEBUG_HOST_CHANNELS +@@ -1349,18 +1349,26 @@ dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t * hcd) + + /* + * Check to see if this is a NAK'd retransmit, in which case ignore for retransmission +- * we hold off on bulk retransmissions to reduce NAK interrupt overhead for ++ * we hold off on bulk retransmissions to reduce NAK interrupt overhead for full-speed + * cheeky devices that just hold off using NAKs + */ +- if (dwc_full_frame_num(qh->nak_frame) == dwc_full_frame_num(dwc_otg_hcd_get_frame_number(hcd))) { +- // Make fiq interrupt run on next frame (i.e. 8 uframes) +- g_next_sched_frame = ((qh->nak_frame + 8) & ~7) & DWC_HFNUM_MAX_FRNUM; +- qh_ptr = DWC_LIST_NEXT(qh_ptr); +- continue; ++ if (nak_holdoff_enable && qh->do_split) { ++ if (qh->nak_frame != 0xffff && ++ dwc_full_frame_num(qh->nak_frame) == ++ dwc_full_frame_num(dwc_otg_hcd_get_frame_number(hcd))) { ++ /* ++ * Revisit: Need to avoid trampling on periodic scheduling. ++ * Currently we are safe because g_np_count != g_np_sent whenever we hit this, ++ * but if this behaviour is changed then periodic endpoints will get a slower ++ * polling rate. ++ */ ++ g_next_sched_frame = ((qh->nak_frame + 8) & ~7) & DWC_HFNUM_MAX_FRNUM; ++ qh_ptr = DWC_LIST_NEXT(qh_ptr); ++ continue; ++ } else { ++ qh->nak_frame = 0xffff; ++ } + } +- else +- qh->nak_frame = 0xffff; +- + if (microframe_schedule) { + DWC_SPINLOCK_IRQSAVE(channel_lock, &flags); + if (hcd->available_host_channels < 1) { +-- +1.8.1.6 + + +From 9f5ffefb664c9ac66735944afb0e6eea51527e93 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 26 Apr 2013 10:08:31 -0700 +Subject: [PATCH 94/95] Merge pull request #286 from + martinezjavier/rpi-3.6.y-dev + +add mmap support and some cleanups to bcm2835 ALSA driver +--- + sound/arm/bcm2835-pcm.c | 69 ++++++++++++++++++++++-------------- + sound/arm/bcm2835-vchiq.c | 89 +++++++++++++++++++++++++++++++++-------------- + sound/arm/bcm2835.c | 34 +++++++++--------- + sound/arm/bcm2835.h | 2 ++ + 4 files changed, 124 insertions(+), 70 deletions(-) + +diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c +index 4206b7e..21e435b 100755 +--- a/sound/arm/bcm2835-pcm.c ++++ b/sound/arm/bcm2835-pcm.c +@@ -19,7 +19,8 @@ + + /* hardware definition */ + static struct snd_pcm_hardware snd_bcm2835_playback_hw = { +- .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER), ++ .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | ++ SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID), + .formats = SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE, + .rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000, + .rate_min = 8000, +@@ -251,6 +252,12 @@ static int snd_bcm2835_pcm_prepare(struct snd_pcm_substream *substream) + + audio_info(" .. IN\n"); + ++ memset(&alsa_stream->pcm_indirect, 0, sizeof(alsa_stream->pcm_indirect)); ++ ++ alsa_stream->pcm_indirect.hw_buffer_size = ++ alsa_stream->pcm_indirect.sw_buffer_size = ++ snd_pcm_lib_buffer_bytes(substream); ++ + alsa_stream->buffer_size = snd_pcm_lib_buffer_bytes(substream); + alsa_stream->period_size = snd_pcm_lib_period_bytes(substream); + alsa_stream->pos = 0; +@@ -263,6 +270,32 @@ static int snd_bcm2835_pcm_prepare(struct snd_pcm_substream *substream) + return 0; } -+static int mbox_copy_from_user(void *dst, const void *src, int size) ++static void snd_bcm2835_pcm_transfer(struct snd_pcm_substream *substream, ++ struct snd_pcm_indirect *rec, size_t bytes) +{ -+ if ( (uint32_t)src < TASK_SIZE) -+ { -+ return copy_from_user(dst, src, size); -+ } -+ else -+ { -+ memcpy( dst, src, size ); -+ return 0; -+ } ++ struct snd_pcm_runtime *runtime = substream->runtime; ++ bcm2835_alsa_stream_t *alsa_stream = runtime->private_data; ++ void *src = (void *)(substream->runtime->dma_area + rec->sw_data); ++ int err; ++ ++ err = bcm2835_audio_write(alsa_stream, bytes, src); ++ if (err) ++ audio_error(" Failed to transfer to alsa device (%d)\n", err); ++ +} + -+static int mbox_copy_to_user(void *dst, const void *src, int size) ++static int snd_bcm2835_pcm_ack(struct snd_pcm_substream *substream) +{ -+ if ( (uint32_t)dst < TASK_SIZE) -+ { -+ return copy_to_user(dst, src, size); -+ } -+ else -+ { -+ memcpy( dst, src, size ); -+ return 0; -+ } ++ struct snd_pcm_runtime *runtime = substream->runtime; ++ bcm2835_alsa_stream_t *alsa_stream = runtime->private_data; ++ struct snd_pcm_indirect *pcm_indirect = &alsa_stream->pcm_indirect; ++ ++ pcm_indirect->hw_queue_size = runtime->hw.buffer_bytes_max; ++ snd_pcm_indirect_playback_transfer(substream, pcm_indirect, ++ snd_bcm2835_pcm_transfer); ++ return 0; +} + -+ - extern int bcm_mailbox_property(void *data, int size) + /* trigger callback */ + static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd) { - uint32_t success; -@@ -227,7 +257,7 @@ extern int bcm_mailbox_property(void *data, int size) - mem_kern = dma_alloc_coherent(NULL, PAGE_ALIGN(size), &mem_bus, GFP_ATOMIC); - if (mem_kern) { - /* create the message */ -- memcpy(mem_kern, data, size); -+ mbox_copy_from_user(mem_kern, data, size); +@@ -279,6 +312,11 @@ static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd) + if (!alsa_stream->running) { + err = bcm2835_audio_start(alsa_stream); + if (err == 0) { ++ alsa_stream->pcm_indirect.hw_io = ++ alsa_stream->pcm_indirect.hw_data = ++ bytes_to_frames(runtime, ++ alsa_stream->pos); ++ substream->ops->ack(substream); + alsa_stream->running = 1; + alsa_stream->draining = 1; + } else { +@@ -327,30 +365,9 @@ static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd) + alsa_stream->pos); - /* send the message */ - wmb(); -@@ -238,7 +268,7 @@ extern int bcm_mailbox_property(void *data, int size) - if (s == 0) { - /* copy the response */ - rmb(); -- memcpy(data, mem_kern, size); -+ mbox_copy_to_user(data, mem_kern, size); - } - dma_free_coherent(NULL, PAGE_ALIGN(size), mem_kern, mem_bus); - } else { -@@ -254,6 +284,93 @@ extern int bcm_mailbox_property(void *data, int size) - * Platform Device for Mailbox - * -------------------------------------------------------------------- */ + audio_info(" .. OUT\n"); +- return bytes_to_frames(runtime, alsa_stream->pos); +-} +- +-static int snd_bcm2835_pcm_copy(struct snd_pcm_substream *substream, +- int channel, snd_pcm_uframes_t pos, void *src, +- snd_pcm_uframes_t count) +-{ +- int ret; +- struct snd_pcm_runtime *runtime = substream->runtime; +- bcm2835_alsa_stream_t *alsa_stream = runtime->private_data; +- +- audio_info(" .. IN\n"); +- audio_debug("copy.......... (%d) hwptr=%d appl=%d pos=%d\n", +- frames_to_bytes(runtime, count), frames_to_bytes(runtime, +- runtime-> +- status-> +- hw_ptr), +- frames_to_bytes(runtime, runtime->control->appl_ptr), +- alsa_stream->pos); +- ret = +- bcm2835_audio_write(alsa_stream, frames_to_bytes(runtime, count), +- src); +- audio_info(" .. OUT\n"); +- return ret; ++ return snd_pcm_indirect_playback_pointer(substream, ++ &alsa_stream->pcm_indirect, ++ alsa_stream->pos); + } -+/* -+ * Is the device open right now? Used to prevent -+ * concurent access into the same device -+ */ -+static int Device_Open = 0; + static int snd_bcm2835_pcm_lib_ioctl(struct snd_pcm_substream *substream, +@@ -372,7 +389,7 @@ static int snd_bcm2835_pcm_lib_ioctl(struct snd_pcm_substream *substream, + .prepare = snd_bcm2835_pcm_prepare, + .trigger = snd_bcm2835_pcm_trigger, + .pointer = snd_bcm2835_pcm_pointer, +- .copy = snd_bcm2835_pcm_copy, ++ .ack = snd_bcm2835_pcm_ack, + }; + + /* create a pcm device */ +diff --git a/sound/arm/bcm2835-vchiq.c b/sound/arm/bcm2835-vchiq.c +index 9ecb2d6..169d899 100755 +--- a/sound/arm/bcm2835-vchiq.c ++++ b/sound/arm/bcm2835-vchiq.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + #include "bcm2835.h" + +@@ -37,6 +38,10 @@ + + /* ---- Private Constants and Types ------------------------------------------ */ + ++#define BCM2835_AUDIO_STOP 0 ++#define BCM2835_AUDIO_START 1 ++#define BCM2835_AUDIO_WRITE 2 + -+/* -+ * This is called whenever a process attempts to open the device file -+ */ -+static int device_open(struct inode *inode, struct file *file) -+{ -+ /* -+ * We don't want to talk to two processes at the same time -+ */ -+ if (Device_Open) -+ return -EBUSY; -+ -+ Device_Open++; -+ /* -+ * Initialize the message -+ */ -+ try_module_get(THIS_MODULE); -+ return 0; -+} -+ -+static int device_release(struct inode *inode, struct file *file) -+{ -+ /* -+ * We're now ready for our next caller -+ */ -+ Device_Open--; -+ -+ module_put(THIS_MODULE); -+ return 0; -+} -+ -+/* -+ * This function is called whenever a process tries to do an ioctl on our -+ * device file. We get two extra parameters (additional to the inode and file -+ * structures, which all device functions get): the number of the ioctl called -+ * and the parameter given to the ioctl function. -+ * -+ * If the ioctl is write or read/write (meaning output is returned to the -+ * calling process), the ioctl call returns the output of this function. -+ * -+ */ -+static long device_ioctl(struct file *file, /* see include/linux/fs.h */ -+ unsigned int ioctl_num, /* number and param for ioctl */ -+ unsigned long ioctl_param) -+{ -+ unsigned size; -+ /* -+ * Switch according to the ioctl called -+ */ -+ switch (ioctl_num) { -+ case IOCTL_MBOX_PROPERTY: -+ /* -+ * Receive a pointer to a message (in user space) and set that -+ * to be the device's message. Get the parameter given to -+ * ioctl by the process. -+ */ -+ mbox_copy_from_user(&size, (void *)ioctl_param, sizeof size); -+ return bcm_mailbox_property((void *)ioctl_param, size); + /* Logging macros (for remapping to other logging mechanisms, i.e., printf) */ + #ifdef AUDIO_DEBUG_ENABLE + #define LOG_ERR( fmt, arg... ) pr_err( "%s:%d " fmt, __func__, __LINE__, ##arg) +@@ -53,7 +58,7 @@ + typedef struct opaque_AUDIO_INSTANCE_T { + uint32_t num_connections; + VCHI_SERVICE_HANDLE_T vchi_handle[VCHI_MAX_NUM_CONNECTIONS]; +- struct semaphore msg_avail_event; ++ struct completion msg_avail_comp; + struct mutex vchi_mutex; + bcm2835_alsa_stream_t *alsa_stream; + int32_t result; +@@ -70,27 +75,35 @@ + + static int bcm2835_audio_stop_worker(bcm2835_alsa_stream_t * alsa_stream); + static int bcm2835_audio_start_worker(bcm2835_alsa_stream_t * alsa_stream); ++static int bcm2835_audio_write_worker(bcm2835_alsa_stream_t *alsa_stream, ++ uint32_t count, void *src); + + typedef struct { + struct work_struct my_work; + bcm2835_alsa_stream_t *alsa_stream; +- int x; ++ int cmd; ++ void *src; ++ uint32_t count; + } my_work_t; + + static void my_wq_function(struct work_struct *work) + { + my_work_t *w = (my_work_t *) work; + int ret = -9; +- LOG_DBG(" .. IN %p:%d\n", w->alsa_stream, w->x); +- switch (w->x) { +- case 1: ++ LOG_DBG(" .. IN %p:%d\n", w->alsa_stream, w->cmd); ++ switch (w->cmd) { ++ case BCM2835_AUDIO_START: + ret = bcm2835_audio_start_worker(w->alsa_stream); + break; +- case 2: ++ case BCM2835_AUDIO_STOP: + ret = bcm2835_audio_stop_worker(w->alsa_stream); + break; ++ case BCM2835_AUDIO_WRITE: ++ ret = bcm2835_audio_write_worker(w->alsa_stream, w->count, ++ w->src); + break; -+ default: -+ printk(KERN_ERR DRIVER_NAME "unknown ioctl: %d\n", ioctl_num); -+ return -EINVAL; + default: +- LOG_ERR(" Unexpected work: %p:%d\n", w->alsa_stream, w->x); ++ LOG_ERR(" Unexpected work: %p:%d\n", w->alsa_stream, w->cmd); + break; + } + kfree((void *)work); +@@ -107,7 +120,7 @@ int bcm2835_audio_start(bcm2835_alsa_stream_t * alsa_stream) + if (work) { + INIT_WORK((struct work_struct *)work, my_wq_function); + work->alsa_stream = alsa_stream; +- work->x = 1; ++ work->cmd = BCM2835_AUDIO_START; + if (queue_work + (alsa_stream->my_wq, (struct work_struct *)work)) + ret = 0; +@@ -128,7 +141,31 @@ int bcm2835_audio_stop(bcm2835_alsa_stream_t * alsa_stream) + if (work) { + INIT_WORK((struct work_struct *)work, my_wq_function); + work->alsa_stream = alsa_stream; +- work->x = 2; ++ work->cmd = BCM2835_AUDIO_STOP; ++ if (queue_work ++ (alsa_stream->my_wq, (struct work_struct *)work)) ++ ret = 0; ++ } else ++ LOG_ERR(" .. Error: NULL work kmalloc\n"); + } -+ -+ return 0; ++ LOG_DBG(" .. OUT %d\n", ret); ++ return ret; +} + -+/* Module Declarations */ -+ -+/* -+ * This structure will hold the functions to be called -+ * when a process does something to the device we -+ * created. Since a pointer to this structure is kept in -+ * the devices table, it can't be local to -+ * init_module. NULL is for unimplemented functios. -+ */ -+struct file_operations fops = { -+ .unlocked_ioctl = device_ioctl, -+ .open = device_open, -+ .release = device_release, /* a.k.a. close */ -+}; -+ - static int bcm_vcio_probe(struct platform_device *pdev) - { - int ret = 0; -@@ -286,6 +403,22 @@ static int bcm_vcio_probe(struct platform_device *pdev) - __io_address(ARM_0_MAIL0_RD)); - } ++int bcm2835_audio_write(bcm2835_alsa_stream_t *alsa_stream, ++ uint32_t count, void *src) ++{ ++ int ret = -1; ++ LOG_DBG(" .. IN\n"); ++ if (alsa_stream->my_wq) { ++ my_work_t *work = kmalloc(sizeof(my_work_t), GFP_ATOMIC); ++ /*--- Queue some work (item 1) ---*/ ++ if (work) { ++ INIT_WORK((struct work_struct *)work, my_wq_function); ++ work->alsa_stream = alsa_stream; ++ work->cmd = BCM2835_AUDIO_WRITE; ++ work->src = src; ++ work->count = count; + if (queue_work + (alsa_stream->my_wq, (struct work_struct *)work)) + ret = 0; +@@ -178,7 +215,7 @@ static void audio_vchi_callback(void *param, + (" .. instance=%p, m.type=VC_AUDIO_MSG_TYPE_RESULT, success=%d\n", + instance, m.u.result.success); + instance->result = m.u.result.success; +- up(&instance->msg_avail_event); ++ complete(&instance->msg_avail_comp); + } else if (m.type == VC_AUDIO_MSG_TYPE_COMPLETE) { + irq_handler_t callback = (irq_handler_t) m.u.complete.callback; + LOG_DBG +@@ -435,8 +472,8 @@ static int bcm2835_audio_set_ctls_chan(bcm2835_alsa_stream_t * alsa_stream, + m.u.control.dest = chip->dest; + m.u.control.volume = chip->volume; + +- /* Create the message available event */ +- sema_init(&instance->msg_avail_event, 0); ++ /* Create the message available completion */ ++ init_completion(&instance->msg_avail_comp); + + /* Send the message to the videocore */ + success = vchi_msg_queue(instance->vchi_handle[0], +@@ -452,11 +489,10 @@ static int bcm2835_audio_set_ctls_chan(bcm2835_alsa_stream_t * alsa_stream, } + + /* We are expecting a reply from the videocore */ +- if (down_interruptible(&instance->msg_avail_event)) { ++ ret = wait_for_completion_interruptible(&instance->msg_avail_comp); ++ if (ret) { + LOG_ERR("%s: failed on waiting for event (status=%d)\n", + __func__, success); +- +- ret = -1; + goto unlock; + } + +@@ -539,8 +575,8 @@ int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream, + m.u.config.samplerate = samplerate; + m.u.config.bps = bps; + +- /* Create the message available event */ +- sema_init(&instance->msg_avail_event, 0); ++ /* Create the message available completion */ ++ init_completion(&instance->msg_avail_comp); + + /* Send the message to the videocore */ + success = vchi_msg_queue(instance->vchi_handle[0], +@@ -556,11 +592,10 @@ int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream, + } + + /* We are expecting a reply from the videocore */ +- if (down_interruptible(&instance->msg_avail_event)) { ++ ret = wait_for_completion_interruptible(&instance->msg_avail_comp); ++ if (ret) { + LOG_ERR("%s: failed on waiting for event (status=%d)\n", + __func__, success); +- +- ret = -1; + goto unlock; + } + +@@ -688,8 +723,8 @@ int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream) + + m.type = VC_AUDIO_MSG_TYPE_CLOSE; + +- /* Create the message available event */ +- sema_init(&instance->msg_avail_event, 0); ++ /* Create the message available completion */ ++ init_completion(&instance->msg_avail_comp); + + /* Send the message to the videocore */ + success = vchi_msg_queue(instance->vchi_handle[0], +@@ -702,11 +737,11 @@ int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream) + ret = -1; + goto unlock; + } +- if (down_interruptible(&instance->msg_avail_event)) { + -+ if (ret == 0) { -+ /* -+ * Register the character device -+ */ -+ ret = register_chrdev(MAJOR_NUM, DEVICE_FILE_NAME, &fops); -+ -+ /* -+ * Negative values signify an error -+ */ -+ if (ret < 0) { -+ printk(KERN_ERR DRIVER_NAME -+ "Failed registering the character device %d\n", ret); -+ return ret; -+ } -+ } ++ ret = wait_for_completion_interruptible(&instance->msg_avail_comp); ++ if (ret) { + LOG_ERR("%s: failed on waiting for event (status=%d)", + __func__, success); +- +- ret = -1; + goto unlock; + } + if (instance->result != 0) { +@@ -732,8 +767,8 @@ int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream) return ret; } --- -1.8.1.5 - - -From fe31673ed24746d97bf2b4259d049142b8763f41 Mon Sep 17 00:00:00 2001 -From: dero -Date: Mon, 19 Nov 2012 12:46:06 +0100 -Subject: [PATCH 124/169] Lazy CRC quirk: Implemented retrying mechanisms for - SD SSR and SCR, disabled missing_status and spurious CRC ACMD51 quirks by - default (should be fixed by the retrying-mechanishm) - ---- - drivers/mmc/core/sd.c | 115 +++++++++++++++++++++++++++++++++------ - drivers/mmc/host/sdhci-bcm2708.c | 11 +++- - 2 files changed, 108 insertions(+), 18 deletions(-) - -diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c -index 74972c2..3302478 100644 ---- a/drivers/mmc/core/sd.c -+++ b/drivers/mmc/core/sd.c -@@ -13,6 +13,8 @@ - #include - #include - #include -+#include -+#include +-int bcm2835_audio_write(bcm2835_alsa_stream_t * alsa_stream, uint32_t count, +- void *src) ++int bcm2835_audio_write_worker(bcm2835_alsa_stream_t *alsa_stream, ++ uint32_t count, void *src) + { + VC_AUDIO_MSG_T m; + AUDIO_INSTANCE_T *instance = alsa_stream->instance; +diff --git a/sound/arm/bcm2835.c b/sound/arm/bcm2835.c +index e5ac894..d5ad830 100755 +--- a/sound/arm/bcm2835.c ++++ b/sound/arm/bcm2835.c +@@ -110,20 +110,20 @@ static int snd_bcm2835_alsa_probe(struct platform_device *pdev) - #include - #include -@@ -58,6 +60,15 @@ - __res & __mask; \ - }) + err = snd_bcm2835_create(g_card, pdev, &chip); + if (err < 0) { +- printk(KERN_ERR "Failed to create bcm2835 chip\n"); ++ dev_err(&pdev->dev, "Failed to create bcm2835 chip\n"); + goto out_bcm2835_create; + } -+// timeout for tries -+static const unsigned long retry_timeout_ms= 10*1000; -+ -+// try at least 10 times, even if timeout is reached -+static const int retry_min_tries= 10; -+ -+// delay between tries -+static const unsigned long retry_delay_ms= 10; -+ - /* - * Given the decoded CSD structure, decode the raw CID to our CID structure. - */ -@@ -210,12 +221,62 @@ static int mmc_decode_scr(struct mmc_card *card) + g_chip = chip; + err = snd_bcm2835_new_pcm(chip); + if (err < 0) { +- printk(KERN_ERR "Failed to create new BCM2835 pcm device\n"); ++ dev_err(&pdev->dev, "Failed to create new BCM2835 pcm device\n"); + goto out_bcm2835_new_pcm; + } + + err = snd_bcm2835_new_ctl(chip); + if (err < 0) { +- printk(KERN_ERR "Failed to create new BCM2835 ctl\n"); ++ dev_err(&pdev->dev, "Failed to create new BCM2835 ctl\n"); + goto out_bcm2835_new_ctl; + } + +@@ -139,14 +139,14 @@ static int snd_bcm2835_alsa_probe(struct platform_device *pdev) + if (dev == 0) { + err = snd_card_register(card); + if (err < 0) { +- printk(KERN_ERR +- "Failed to register bcm2835 ALSA card \n"); ++ dev_err(&pdev->dev, ++ "Failed to register bcm2835 ALSA card \n"); + goto out_card_register; + } + platform_set_drvdata(pdev, card); +- printk(KERN_INFO "bcm2835 ALSA card created!\n"); ++ audio_info("bcm2835 ALSA card created!\n"); + } else { +- printk(KERN_INFO "bcm2835 ALSA chip created!\n"); ++ audio_info("bcm2835 ALSA chip created!\n"); + platform_set_drvdata(pdev, (void *)dev); + } + +@@ -160,11 +160,11 @@ static int snd_bcm2835_alsa_probe(struct platform_device *pdev) + out_bcm2835_create: + BUG_ON(!g_card); + if (snd_card_free(g_card)) +- printk(KERN_ERR "Failed to free Registered alsa card\n"); ++ dev_err(&pdev->dev, "Failed to free Registered alsa card\n"); + g_card = NULL; + out: + dev = SNDRV_CARDS; /* stop more avail_substreams from being probed */ +- printk(KERN_ERR "BCM2835 ALSA Probe failed !!\n"); ++ dev_err(&pdev->dev, "BCM2835 ALSA Probe failed !!\n"); + return err; } - /* -- * Fetch and process SD Status register. -+ * Fetch and process SD Configuration Register. -+ */ -+static int mmc_read_scr(struct mmc_card *card) -+{ -+ unsigned long timeout_at; -+ int err, tries; -+ -+ timeout_at= jiffies + msecs_to_jiffies( retry_timeout_ms ); -+ tries= 0; -+ -+ while( tries < retry_min_tries || time_before( jiffies, timeout_at ) ) -+ { -+ unsigned long delay_at; -+ tries++; -+ -+ err = mmc_app_send_scr(card, card->raw_scr); -+ if( !err ) -+ break; // sucess!!! -+ -+ touch_nmi_watchdog(); // we are still alive! -+ -+ // delay -+ delay_at= jiffies + msecs_to_jiffies( retry_delay_ms ); -+ while( time_before( jiffies, delay_at ) ) -+ { -+ mdelay( 1 ); -+ touch_nmi_watchdog(); // we are still alive! -+ } -+ } -+ -+ if( err) -+ { -+ pr_err("%s: failed to read SD Configuration register (SCR) after %d tries during %lu ms, error %d\n", mmc_hostname(card->host), tries, retry_timeout_ms, err ); -+ return err; -+ } -+ -+ if( tries > 1 ) -+ { -+ pr_info("%s: could read SD Configuration register (SCR) at the %dth attempt\n", mmc_hostname(card->host), tries ); -+ } -+ -+ err = mmc_decode_scr(card); -+ if (err) -+ return err; -+ -+ return err; -+} -+ -+/* -+ * Fetch and process SD Status Register. - */ - static int mmc_read_ssr(struct mmc_card *card) - { -+ unsigned long timeout_at; - unsigned int au, es, et, eo; -- int err, i; -+ int err, i, tries; - u32 *ssr; - - if (!(card->csd.cmdclass & CCC_APP_SPEC)) { -@@ -227,15 +288,41 @@ static int mmc_read_ssr(struct mmc_card *card) - ssr = kmalloc(64, GFP_KERNEL); - if (!ssr) - return -ENOMEM; -- -- err = mmc_app_sd_status(card, ssr); -- if (err) { -- pr_warning("%s: problem reading SD Status " -- "register.\n", mmc_hostname(card->host)); -- err = 0; -+ -+ timeout_at= jiffies + msecs_to_jiffies( retry_timeout_ms ); -+ tries= 0; -+ -+ while( tries < retry_min_tries || time_before( jiffies, timeout_at ) ) -+ { -+ unsigned long delay_at; -+ tries++; -+ -+ err= mmc_app_sd_status(card, ssr); -+ if( !err ) -+ break; // sucess!!! -+ -+ touch_nmi_watchdog(); // we are still alive! -+ -+ // delay -+ delay_at= jiffies + msecs_to_jiffies( retry_delay_ms ); -+ while( time_before( jiffies, delay_at ) ) -+ { -+ mdelay( 1 ); -+ touch_nmi_watchdog(); // we are still alive! -+ } -+ } -+ -+ if( err) -+ { -+ pr_err("%s: failed to read SD Status register (SSR) after %d tries during %lu ms, error %d\n", mmc_hostname(card->host), tries, retry_timeout_ms, err ); +@@ -326,49 +326,49 @@ static int bcm2835_alsa_device_init(void) + int err; + err = platform_driver_register(&bcm2835_alsa0_driver); + if (err) { +- printk("Error registering bcm2835_alsa0_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); goto out; } -+ if( tries > 1 ) -+ { -+ pr_info("%s: could read SD Status register (SSR) at the %dth attempt\n", mmc_hostname(card->host), tries ); -+ } -+ - for (i = 0; i < 16; i++) - ssr[i] = be32_to_cpu(ssr[i]); - -@@ -799,15 +886,11 @@ int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card, - - if (!reinit) { - /* -- * Fetch SCR from card. -+ * Fetch and decode SD Configuration register. - */ -- err = mmc_app_send_scr(card, card->raw_scr); -- if (err) -- return err; -- -- err = mmc_decode_scr(card); -- if (err) -- return err; -+ err = mmc_read_scr(card); -+ if( err ) -+ return err; - - /* - * Fetch and process SD Status register. -diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index cd7d35d..bc7df3f 100644 ---- a/drivers/mmc/host/sdhci-bcm2708.c -+++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -137,6 +137,7 @@ static inline unsigned long int since_ns(hptime_t t) - static int emmc_clock_freq = BCM2708_EMMC_CLOCK_FREQ; - static bool sync_after_dma = 1; - static bool missing_status = 1; -+static bool spurious_crc_acmd51 = 0; - bool enable_llm = 1; - - #if 0 -@@ -1103,7 +1104,7 @@ static unsigned int sdhci_bcm2708_quirk_extra_ints(struct sdhci_host *host) - return 1; - } - --static unsigned int sdhci_bcm2708_quirk_spurious_crc(struct sdhci_host *host) -+static unsigned int sdhci_bcm2708_quirk_spurious_crc_acmd51(struct sdhci_host *host) - { - return 1; - } -@@ -1149,7 +1150,6 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) - .pdma_reset = sdhci_bcm2708_platdma_reset, - #endif - .extra_ints = sdhci_bcm2708_quirk_extra_ints, -- .spurious_crc_acmd51 = sdhci_bcm2708_quirk_spurious_crc, - .voltage_broken = sdhci_bcm2708_quirk_voltage_broken, - .uhs_broken = sdhci_bcm2708_uhs_broken, - }; -@@ -1194,6 +1194,11 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) - sdhci_bcm2708_ops.missing_status = sdhci_bcm2708_missing_status; + err = platform_driver_register(&bcm2835_alsa1_driver); + if (err) { +- printk("Error registering bcm2835_alsa1_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_0; } -+ if( spurious_crc_acmd51 ) { -+ sdhci_bcm2708_ops.spurious_crc_acmd51 = sdhci_bcm2708_quirk_spurious_crc_acmd51; -+ } -+ -+ - printk("sdhci: %s low-latency mode\n",enable_llm?"Enable":"Disable"); + err = platform_driver_register(&bcm2835_alsa2_driver); + if (err) { +- printk("Error registering bcm2835_alsa2_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_1; + } - host->hw_name = "BCM2708_Arasan"; -@@ -1389,6 +1394,7 @@ static void __exit sdhci_drv_exit(void) - module_param(emmc_clock_freq, int, 0444); - module_param(sync_after_dma, bool, 0444); - module_param(missing_status, bool, 0444); -+module_param(spurious_crc_acmd51, bool, 0444); - module_param(enable_llm, bool, 0444); - module_param(cycle_delay, int, 0444); + err = platform_driver_register(&bcm2835_alsa3_driver); + if (err) { +- printk("Error registering bcm2835_alsa3_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_2; + } -@@ -1401,6 +1407,7 @@ static void __exit sdhci_drv_exit(void) - MODULE_PARM_DESC(emmc_clock_freq, "Specify the speed of emmc clock"); - MODULE_PARM_DESC(sync_after_dma, "Block in driver until dma complete"); - MODULE_PARM_DESC(missing_status, "Use the missing status quirk"); -+MODULE_PARM_DESC(spurious_crc_acmd51, "Use the spurious crc quirk for reading SCR (ACMD51)"); - MODULE_PARM_DESC(enable_llm, "Enable low-latency mode"); + err = platform_driver_register(&bcm2835_alsa4_driver); + if (err) { +- printk("Error registering bcm2835_alsa4_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_3; + } + err = platform_driver_register(&bcm2835_alsa5_driver); + if (err) { +- printk("Error registering bcm2835_alsa5_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_4; + } + err = platform_driver_register(&bcm2835_alsa6_driver); + if (err) { +- printk("Error registering bcm2835_alsa6_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_5; + } + + err = platform_driver_register(&bcm2835_alsa7_driver); + if (err) { +- printk("Error registering bcm2835_alsa7_driver %d .\n", err); ++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err); + goto unregister_6; + } + +diff --git a/sound/arm/bcm2835.h b/sound/arm/bcm2835.h +index b966e28..08c763d 100755 +--- a/sound/arm/bcm2835.h ++++ b/sound/arm/bcm2835.h +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + + /* +@@ -110,6 +111,7 @@ enum { + typedef struct bcm2835_alsa_stream { + bcm2835_chip_t *chip; + struct snd_pcm_substream *substream; ++ struct snd_pcm_indirect pcm_indirect; + + struct semaphore buffers_update_sem; + struct semaphore control_sem; -- -1.8.1.5 +1.8.1.6 -From 958d8d10422965a0bc15612ac5cb4e27d7043919 Mon Sep 17 00:00:00 2001 +From 5ded0f9a6a8cdefc25dc893afecda51367d9ed25 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Thu, 28 Mar 2013 00:23:28 +0000 -Subject: [PATCH 125/169] Add CoDel network scheduling. Add HIDRAW. Remove CMA - debug +Date: Tue, 7 May 2013 22:20:24 +0100 +Subject: [PATCH 95/95] Add quick config. +This is designed for quick compiling when developing. +No modules are needed and it includes all Pi specific drivers --- - arch/arm/configs/bcmrpi_defconfig | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + arch/arm/configs/bcmrpi_quick_defconfig | 265 ++++++++++---------------------- + 1 file changed, 82 insertions(+), 183 deletions(-) -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 53cc6c2..a01369e 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -253,6 +253,10 @@ CONFIG_NET_SCH_DRR=m - CONFIG_NET_SCH_MQPRIO=m - CONFIG_NET_SCH_CHOKE=m - CONFIG_NET_SCH_QFQ=m -+CONFIG_NET_SCH_CODEL=m -+CONFIG_NET_SCH_FQ_CODEL=m -+CONFIG_NET_SCH_INGRESS=m -+CONFIG_NET_SCH_PLUG=m - CONFIG_NET_CLS_BASIC=m - CONFIG_NET_CLS_TCINDEX=m - CONFIG_NET_CLS_ROUTE4=m -@@ -331,7 +335,6 @@ CONFIG_NFC_PN533=m - CONFIG_DEVTMPFS=y - CONFIG_DEVTMPFS_MOUNT=y - CONFIG_CMA=y --CONFIG_CMA_DEBUG=y - CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_DRBD=m -@@ -725,6 +728,7 @@ CONFIG_SND_USB_CAIAQ=m - CONFIG_SND_USB_CAIAQ_INPUT=y - CONFIG_SND_USB_6FIRE=m - CONFIG_SOUND_PRIME=m -+CONFIG_HIDRAW=y - CONFIG_HID_A4TECH=m - CONFIG_HID_ACRUX=m - CONFIG_HID_APPLE=m --- -1.8.1.5 - - -From 8b633b941dbc0f9ca261c9b68e6907c1b845e3d7 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 11 Dec 2012 18:23:03 +0000 -Subject: [PATCH 126/169] Default to dwc_otp.lpm_enable=0 - ---- - drivers/usb/host/dwc_otg/dwc_otg_driver.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.c b/drivers/usb/host/dwc_otg/dwc_otg_driver.c -index d353a9a..cea8fcb 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_driver.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c -@@ -228,7 +228,7 @@ struct dwc_otg_driver_module_params { - .rx_thr_length = -1, - .pti_enable = -1, - .mpi_enable = -1, -- .lpm_enable = -1, -+ .lpm_enable = 0, - .ic_usb_cap = -1, - .ahb_thr_ratio = -1, - .power_down = -1, --- -1.8.1.5 - - -From 3ba39fbf8ebe381bff2712d4e2edded54679e341 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 11 Dec 2012 18:24:20 +0000 -Subject: [PATCH 127/169] Add CONFIG_CFG80211_WEXT and CONFIG_MMC_SPI - ---- - arch/arm/configs/bcmrpi_defconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index a01369e..14d6ebf 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -325,6 +325,7 @@ CONFIG_BT_MRVL=m - CONFIG_BT_MRVL_SDIO=m - CONFIG_BT_ATH3K=m - CONFIG_CFG80211=m -+CONFIG_CFG80211_WEXT=y - CONFIG_MAC80211=m - CONFIG_MAC80211_RC_PID=y - CONFIG_MAC80211_MESH=y -@@ -873,6 +874,7 @@ CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y - CONFIG_MMC_SDHCI_BCM2708=y - CONFIG_MMC_SDHCI_BCM2708_DMA=y -+CONFIG_MMC_SPI=m - CONFIG_LEDS_GPIO=m - CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m --- -1.8.1.5 - - -From 950979a7cf6c990ace93270aaf5a29c641d26698 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 11 Dec 2012 19:04:27 +0000 -Subject: [PATCH 128/169] Increase default coherent pool so vchiq starts up - ---- - arch/arm/mach-bcm2708/bcm2708.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index ac33f93..4335d72 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -923,9 +923,7 @@ void __init bcm2708_init_early(void) - * context. Increase size of atomic coherent pool to make sure such - * the allocations won't fail. - */ --#if !defined(CONFIG_BCM_VC_CMA) -- init_dma_coherent_pool_size(SZ_2M); --#endif -+ init_dma_coherent_pool_size(SZ_4M); - } - - static void __init board_reserve(void) --- -1.8.1.5 - - -From 54d3ebd310df00be29c6419b8482c58d9c8175e0 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 19 Dec 2012 22:38:45 +0000 -Subject: [PATCH 129/169] Update to Simon's latest dmaer module - ---- - arch/arm/mach-bcm2708/Makefile | 4 +- - arch/arm/mach-bcm2708/dmaer.c | 376 ++++++++++++++++-------- - arch/arm/mach-bcm2708/include/mach/vc_support.h | 69 +++++ - arch/arm/mach-bcm2708/vc_support.c | 319 ++++++++++++++++++++ - 4 files changed, 645 insertions(+), 123 deletions(-) - create mode 100755 arch/arm/mach-bcm2708/include/mach/vc_support.h - create mode 100755 arch/arm/mach-bcm2708/vc_support.c - -diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile -index af4a6ee..b180e06 100644 ---- a/arch/arm/mach-bcm2708/Makefile -+++ b/arch/arm/mach-bcm2708/Makefile -@@ -5,5 +5,7 @@ - obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o delay.o - obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o - obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o --obj-$(CONFIG_BCM2708_DMAER) += dmaer.o -+ -+obj-$(CONFIG_BCM2708_DMAER) += dmaer_master.o -+dmaer_master-objs := dmaer.o vc_support.o - -diff --git a/arch/arm/mach-bcm2708/dmaer.c b/arch/arm/mach-bcm2708/dmaer.c -index 1b53ff2..9063874 100755 ---- a/arch/arm/mach-bcm2708/dmaer.c -+++ b/arch/arm/mach-bcm2708/dmaer.c -@@ -11,6 +11,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -18,10 +19,30 @@ - #include - - #include -+#include - --MODULE_LICENSE("Dual BSD/GPL"); -+#ifdef ECLIPSE_IGNORE -+ -+#define __user -+#define __init -+#define __exit -+#define __iomem -+#define KERN_DEBUG -+#define KERN_ERR -+#define KERN_WARNING -+#define KERN_INFO -+#define _IOWR(a, b, c) b -+#define _IOW(a, b, c) b -+#define _IO(a, b) b -+ -+#endif - --//#define inline -+//#define inline -+ -+#define PRINTK(args...) printk(args) -+//#define PRINTK_VERBOSE(args...) printk(args) -+//#define PRINTK(args...) -+#define PRINTK_VERBOSE(args...) - - /***** TYPES ****/ - #define PAGES_PER_LIST 500 -@@ -39,6 +60,7 @@ struct VmaPageList - struct PageList *m_pPageTail; - unsigned int m_refCount; - }; -+ - struct DmaControlBlock - { - unsigned int m_transferInfo; -@@ -78,6 +100,15 @@ struct DmaControlBlock - //set the address range through which the user address is assumed to already by a physical address - #define DMA_SET_MIN_PHYS _IOW(DMA_MAGIC, 7, unsigned long) - #define DMA_SET_MAX_PHYS _IOW(DMA_MAGIC, 8, unsigned long) -+#define DMA_SET_PHYS_OFFSET _IOW(DMA_MAGIC, 9, unsigned long) -+ -+//used to define the size for the CMA-based allocation *in pages*, can only be done once once the file is opened -+#define DMA_CMA_SET_SIZE _IOW(DMA_MAGIC, 10, unsigned long) -+ -+//used to get the version of the module, to test for a capability -+#define DMA_GET_VERSION _IO(DMA_MAGIC, 99) -+ -+#define VERSION_NUMBER 1 - - #define VIRT_TO_BUS_CACHE_SIZE 8 - -@@ -89,19 +120,24 @@ struct DmaControlBlock - static int Mmap(struct file *pFile, struct vm_area_struct *pVma); - - /***** VMA OPS ****/ --static void VmaOpen(struct vm_area_struct *pVma); --static void VmaClose(struct vm_area_struct *pVma); --static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf); -+static void VmaOpen4k(struct vm_area_struct *pVma); -+static void VmaClose4k(struct vm_area_struct *pVma); -+static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf); -+ -+/**** DMA PROTOTYPES */ -+static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *pUserCB, int *pError); -+static int DmaKick(struct DmaControlBlock __user *pUserCB); -+static void DmaWaitAll(void); - - /**** GENERIC ****/ - static int __init dmaer_init(void); - static void __exit dmaer_exit(void); - - /*** OPS ***/ --static struct vm_operations_struct g_vmOps = { -- .open = VmaOpen, -- .close = VmaClose, -- .fault = VmaFault, -+static struct vm_operations_struct g_vmOps4k = { -+ .open = VmaOpen4k, -+ .close = VmaClose4k, -+ .fault = VmaFault4k, - }; - - static struct file_operations g_fOps = { -@@ -117,13 +153,23 @@ struct DmaControlBlock - - /***** GLOBALS ******/ - static dev_t g_majorMinor; --static atomic_t g_oneLock = ATOMIC_INIT(1); -+ -+//tracking usage of the two files -+static atomic_t g_oneLock4k = ATOMIC_INIT(1); -+ -+//device operations - static struct cdev g_cDev; - static int g_trackedPages = 0; -+ -+//dma control - static unsigned int *g_pDmaChanBase; - static int g_dmaIrq; - static int g_dmaChan; - -+//cma allocation -+static int g_cmaHandle; -+ -+//user virtual to bus address translation acceleration - static unsigned long g_virtAddr[VIRT_TO_BUS_CACHE_SIZE]; - static unsigned long g_busAddr[VIRT_TO_BUS_CACHE_SIZE]; - static unsigned long g_cbVirtAddr; -@@ -132,8 +178,9 @@ struct DmaControlBlock - static int g_cacheHit, g_cacheMiss; - - //off by default --static void __user *g_pMinPhys = (void __user *)-1; --static void __user *g_pMaxPhys = (void __user *)0; -+static void __user *g_pMinPhys; -+static void __user *g_pMaxPhys; -+static unsigned long g_physOffset; - - /****** CACHE OPERATIONS ********/ - static inline void FlushAddrCache(void) -@@ -165,6 +212,9 @@ static inline void __iomem *UserVirtualToBus(void __user *pUser) - if (mapped <= 0) //error - return 0; - -+ PRINTK_VERBOSE(KERN_DEBUG "user virtual %p arm phys %p bus %p\n", -+ pUser, page_address(pPage), (void __iomem *)__virt_to_bus(page_address(pPage))); -+ - //get the arm physical address - phys = page_address(pPage) + offset_in_page(pUser); - page_cache_release(pPage); -@@ -211,8 +261,8 @@ static inline void __iomem *UserVirtualToBusViaCache(void __user *pUser) - - if (pUser >= g_pMinPhys && pUser < g_pMaxPhys) - { --// printk(KERN_DEBUG "user->phys passthrough on %p\n", pUser); -- return (void __iomem *)__virt_to_bus(pUser); -+ PRINTK_VERBOSE(KERN_DEBUG "user->phys passthrough on %p\n", pUser); -+ return (void __iomem *)((unsigned long)pUser + g_physOffset); - } - - //check the cache for our entry -@@ -246,25 +296,57 @@ static inline void __iomem *UserVirtualToBusViaCache(void __user *pUser) - /***** FILE OPERATIONS ****/ - static int Open(struct inode *pInode, struct file *pFile) - { -- printk(KERN_DEBUG "file opening\n"); -+ PRINTK(KERN_DEBUG "file opening: %d/%d\n", imajor(pInode), iminor(pInode)); - -- //only one at a time -- if (!atomic_dec_and_test(&g_oneLock)) -+ //check which device we are -+ if (iminor(pInode) == 0) //4k - { -- atomic_inc(&g_oneLock); -- return -EBUSY; -+ //only one at a time -+ if (!atomic_dec_and_test(&g_oneLock4k)) -+ { -+ atomic_inc(&g_oneLock4k); -+ return -EBUSY; -+ } - } -+ else -+ return -EINVAL; - -+ //todo there will be trouble if two different processes open the files -+ -+ //reset after any file is opened -+ g_pMinPhys = (void __user *)-1; -+ g_pMaxPhys = (void __user *)0; -+ g_physOffset = 0; -+ g_cmaHandle = 0; -+ - return 0; - } - - static int Release(struct inode *pInode, struct file *pFile) - { -- printk(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages); -+ PRINTK(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages); - if (g_trackedPages) -- printk(KERN_ERR "we\'re leaking memory!\n"); -+ PRINTK(KERN_ERR "we\'re leaking memory!\n"); - -- atomic_inc(&g_oneLock); -+ //wait for any dmas to finish -+ DmaWaitAll(); -+ -+ //free this memory on the application closing the file or it crashing (implicitly closing the file) -+ if (g_cmaHandle) -+ { -+ PRINTK(KERN_DEBUG "unlocking vc memory\n"); -+ if (UnlockVcMemory(g_cmaHandle)) -+ PRINTK(KERN_ERR "uh-oh, unable to unlock vc memory!\n"); -+ PRINTK(KERN_DEBUG "releasing vc memory\n"); -+ if (ReleaseVcMemory(g_cmaHandle)) -+ PRINTK(KERN_ERR "uh-oh, unable to release vc memory!\n"); -+ } -+ -+ if (iminor(pInode) == 0) -+ atomic_inc(&g_oneLock4k); -+ else -+ return -EINVAL; -+ - return 0; - } - -@@ -274,18 +356,17 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user * - struct DmaControlBlock __user *pUNext; - void __iomem *pSourceBus, __iomem *pDestBus; - -- - //get the control block into kernel memory so we can work on it - if (copy_from_user(&kernCB, pUserCB, sizeof(struct DmaControlBlock)) != 0) - { -- printk(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB); -+ PRINTK(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB); - *pError = 1; - return 0; - } - - if (kernCB.m_pSourceAddr == 0 || kernCB.m_pDestAddr == 0) - { -- printk(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n", -+ PRINTK(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n", - kernCB.m_pSourceAddr, kernCB.m_pDestAddr, pUserCB); - *pError = 1; - return 0; -@@ -296,7 +377,9 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user * - - if (!pSourceBus || !pDestBus) - { -- printk(KERN_ERR "virtual to bus translation failure for source/dest\n"); -+ PRINTK(KERN_ERR "virtual to bus translation failure for source/dest %p/%p->%p/%p\n", -+ kernCB.m_pSourceAddr, kernCB.m_pDestAddr, -+ pSourceBus, pDestBus); - *pError = 1; - return 0; - } -@@ -304,6 +387,8 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user * - //update the user structure with the new bus addresses - kernCB.m_pSourceAddr = pSourceBus; - kernCB.m_pDestAddr = pDestBus; -+ -+ PRINTK_VERBOSE(KERN_DEBUG "final source %p dest %p\n", kernCB.m_pSourceAddr, kernCB.m_pDestAddr); - - //sort out the bus address for the next block - pUNext = kernCB.m_pNext; -@@ -315,7 +400,7 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user * - - if (!pNextBus) - { -- printk(KERN_ERR "virtual to bus translation failure for m_pNext\n"); -+ PRINTK(KERN_ERR "virtual to bus translation failure for m_pNext\n"); - *pError = 1; - return 0; - } -@@ -327,7 +412,7 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user * - //write it back to user space - if (copy_to_user(pUserCB, &kernCB, sizeof(struct DmaControlBlock)) != 0) - { -- printk(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB); -+ PRINTK(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB); - *pError = 1; - return 0; - } -@@ -345,7 +430,7 @@ static int DmaKick(struct DmaControlBlock __user *pUserCB) - pBusCB = UserVirtualToBusViaCbCache(pUserCB); - if (!pBusCB) - { -- printk(KERN_ERR "virtual to bus translation failure for cb\n"); -+ PRINTK(KERN_ERR "virtual to bus translation failure for cb\n"); - return 1; - } - -@@ -361,9 +446,9 @@ static void DmaWaitAll(void) - int counter = 0; - volatile int inner_count; - volatile unsigned int cs; -- //unsigned long time_before, time_after; -+ unsigned long time_before, time_after; - -- //time_before = jiffies; -+ time_before = jiffies; - //bcm_dma_wait_idle(g_pDmaChanBase); - dsb(); - -@@ -380,19 +465,19 @@ static void DmaWaitAll(void) - //cpu_do_idle(); - if (counter >= 1000000) - { -- printk(KERN_WARNING "DMA failed to finish in a timely fashion\n"); -+ PRINTK(KERN_WARNING "DMA failed to finish in a timely fashion\n"); - break; - } - } -- //time_after = jiffies; -- //printk(KERN_DEBUG "done, counter %d, cs %08x", counter, cs); -- //printk(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ); -+ time_after = jiffies; -+ PRINTK_VERBOSE(KERN_DEBUG "done, counter %d, cs %08x", counter, cs); -+ PRINTK_VERBOSE(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ); - } - - static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) - { - int error = 0; -- //printk(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg); -+ PRINTK_VERBOSE(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg); - - switch (cmd) - { -@@ -402,29 +487,30 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) - { - struct DmaControlBlock __user *pUCB = (struct DmaControlBlock *)arg; - int steps = 0; -- //unsigned long start_time = jiffies; -+ unsigned long start_time = jiffies; -+ (void)start_time; - - //flush our address cache - FlushAddrCache(); - --// printk(KERN_DEBUG "dma prepare\n"); -- -+ PRINTK_VERBOSE(KERN_DEBUG "dma prepare\n"); -+ - //do virtual to bus translation for each entry - do - { - pUCB = DmaPrepare(pUCB, &error); - } while (error == 0 && ++steps && pUCB); -- //printk(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time); -+ PRINTK_VERBOSE(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time); - - //carry straight on if we want to kick too - if (cmd == DMA_PREPARE || error) - { --// printk(KERN_DEBUG "falling out\n"); -- break; -+ PRINTK_VERBOSE(KERN_DEBUG "falling out\n"); -+ return error ? -EINVAL : 0; - } -- }; -+ } - case DMA_KICK: --// printk(KERN_DEBUG "dma begin\n"); -+ PRINTK_VERBOSE(KERN_DEBUG "dma begin\n"); - - if (cmd == DMA_KICK) - FlushAddrCache(); -@@ -434,10 +520,10 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) - if (cmd != DMA_PREPARE_KICK_WAIT) - break; - /* case DMA_WAIT_ONE: -- //printk(KERN_DEBUG "dma wait one\n"); -+ //PRINTK(KERN_DEBUG "dma wait one\n"); - break;*/ - case DMA_WAIT_ALL: -- //printk(KERN_DEBUG "dma wait all\n"); -+ //PRINTK(KERN_DEBUG "dma wait all\n"); - DmaWaitAll(); - break; - case DMA_MAX_BURST: -@@ -447,14 +533,54 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) - return 5; - case DMA_SET_MIN_PHYS: - g_pMinPhys = (void __user *)arg; -- printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); -+ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); - break; - case DMA_SET_MAX_PHYS: - g_pMaxPhys = (void __user *)arg; -- printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); -+ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys); - break; -+ case DMA_SET_PHYS_OFFSET: -+ g_physOffset = arg; -+ PRINTK(KERN_DEBUG "user/phys bypass offset set to %ld\n", g_physOffset); -+ break; -+ case DMA_CMA_SET_SIZE: -+ { -+ unsigned int pBusAddr; -+ -+ if (g_cmaHandle) -+ { -+ PRINTK(KERN_ERR "memory has already been allocated (handle %d)\n", g_cmaHandle); -+ return -EINVAL; -+ } -+ -+ PRINTK(KERN_INFO "allocating %ld bytes of VC memory\n", arg * 4096); -+ -+ //get the memory -+ if (AllocateVcMemory(&g_cmaHandle, arg * 4096, 4096, MEM_FLAG_L1_NONALLOCATING | MEM_FLAG_NO_INIT | MEM_FLAG_HINT_PERMALOCK)) -+ { -+ PRINTK(KERN_ERR "failed to allocate %ld bytes of VC memory\n", arg * 4096); -+ g_cmaHandle = 0; -+ return -EINVAL; -+ } -+ -+ //get an address for it -+ PRINTK(KERN_INFO "trying to map VC memory\n"); -+ -+ if (LockVcMemory(&pBusAddr, g_cmaHandle)) -+ { -+ PRINTK(KERN_ERR "failed to map CMA handle %d, releasing memory\n", g_cmaHandle); -+ ReleaseVcMemory(g_cmaHandle); -+ g_cmaHandle = 0; -+ } -+ -+ PRINTK(KERN_INFO "bus address for CMA memory is %x\n", pBusAddr); -+ return pBusAddr; -+ } -+ case DMA_GET_VERSION: -+ PRINTK(KERN_DEBUG "returning version number, %d\n", VERSION_NUMBER); -+ return VERSION_NUMBER; - default: -- printk(KERN_DEBUG "unknown ioctl: %d\n", cmd); -+ PRINTK(KERN_DEBUG "unknown ioctl: %d\n", cmd); - return -EINVAL; - } - -@@ -463,12 +589,6 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg) - - static ssize_t Read(struct file *pFile, char __user *pUser, size_t count, loff_t *offp) - { -- /*printk(KERN_DEBUG "file read pFile %p pUser %p count %ld offp %p\n", -- pFile, pUser, count, offp); -- printk(KERN_DEBUG "phys pFile %lx pUser %lx offp %lx\n", -- __pa(pFile), __pa(pUser), __pa(offp)); -- printk(KERN_DEBUG "bus pFile %lx pUser %lx offp %lx\n", -- virt_to_bus(pFile), virt_to_bus(pUser), virt_to_bus(offp));*/ - return -EIO; - } - -@@ -477,20 +597,20 @@ static int Mmap(struct file *pFile, struct vm_area_struct *pVma) - struct PageList *pPages; - struct VmaPageList *pVmaList; - --// printk(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n", --// pVma, pVma->vm_end - pVma->vm_start, --// current->comm, current->pid); --// printk(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages); -- -+ PRINTK_VERBOSE(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n", -+ pVma, pVma->vm_end - pVma->vm_start, -+ current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages); -+ - //make a new page list - pPages = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL); - if (!pPages) - { -- printk(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n", -+ PRINTK(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n", - current->comm, current->pid); - return -ENOMEM; - } -- -+ - //clear the page list - pPages->m_used = 0; - pPages->m_pNext = 0; -@@ -500,67 +620,72 @@ static int Mmap(struct file *pFile, struct vm_area_struct *pVma) - { - struct VmaPageList *pList; - --// printk(KERN_DEBUG "new vma list, making new one (%s %d)\n", --// current->comm, current->pid); -- -+ PRINTK_VERBOSE(KERN_DEBUG "new vma list, making new one (%s %d)\n", -+ current->comm, current->pid); -+ - //make a new vma list - pList = (struct VmaPageList *)kmalloc(sizeof(struct VmaPageList), GFP_KERNEL); - if (!pList) - { -- printk(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n", -+ PRINTK(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n", - current->comm, current->pid); - kfree(pPages); - return -ENOMEM; - } -- -+ - //clear this list - pVma->vm_private_data = (void *)pList; - pList->m_refCount = 0; - } -- -+ - pVmaList = (struct VmaPageList *)pVma->vm_private_data; -- -+ - //add it to the vma list - pVmaList->m_pPageHead = pPages; - pVmaList->m_pPageTail = pPages; -- -- pVma->vm_ops = &g_vmOps; -+ -+ pVma->vm_ops = &g_vmOps4k; - pVma->vm_flags |= VM_RESERVED; -- -- VmaOpen(pVma); -- -+ -+ VmaOpen4k(pVma); -+ - return 0; - } - - /****** VMA OPERATIONS ******/ - --static void VmaOpen(struct vm_area_struct *pVma) -+static void VmaOpen4k(struct vm_area_struct *pVma) - { - struct VmaPageList *pVmaList; - --// printk(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages); --// printk(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n", --// pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12, --// g_trackedPages); -+ PRINTK_VERBOSE(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages); -+ PRINTK_VERBOSE(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n", -+ pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12, -+ g_trackedPages); - - pVmaList = (struct VmaPageList *)pVma->vm_private_data; - - if (pVmaList) - { - pVmaList->m_refCount++; --// printk(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount); -+ PRINTK_VERBOSE(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount); -+ } -+ else -+ { -+ PRINTK_VERBOSE(KERN_DEBUG "err, open but no vma page list\n"); - } --// else --// printk(KERN_DEBUG "err, open but no vma page list\n"); - } - --static void VmaClose(struct vm_area_struct *pVma) -+static void VmaClose4k(struct vm_area_struct *pVma) - { - struct VmaPageList *pVmaList; - int freed = 0; - --// printk(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid); - -+ //wait for any dmas to finish -+ DmaWaitAll(); -+ - //find our vma in the list - pVmaList = (struct VmaPageList *)pVma->vm_private_data; - -@@ -573,14 +698,14 @@ static void VmaClose(struct vm_area_struct *pVma) - - if (pVmaList->m_refCount == 0) - { --// printk(KERN_DEBUG "found vma, freeing pages (%s %d)\n", --// current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "found vma, freeing pages (%s %d)\n", -+ current->comm, current->pid); - - pPages = pVmaList->m_pPageHead; - - if (!pPages) - { -- printk(KERN_ERR "no page list (%s %d)!\n", -+ PRINTK(KERN_ERR "no page list (%s %d)!\n", - current->comm, current->pid); - return; - } -@@ -590,22 +715,22 @@ static void VmaClose(struct vm_area_struct *pVma) - struct PageList *next; - int count; - --// printk(KERN_DEBUG "page list (%s %d)\n", --// current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "page list (%s %d)\n", -+ current->comm, current->pid); - - next = pPages->m_pNext; - for (count = 0; count < pPages->m_used; count++) - { --// printk(KERN_DEBUG "freeing page %p (%s %d)\n", --// pPages->m_pPages[count], --// current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "freeing page %p (%s %d)\n", -+ pPages->m_pPages[count], -+ current->comm, current->pid); - __free_pages(pPages->m_pPages[count], 0); - g_trackedPages--; - freed++; - } - --// printk(KERN_DEBUG "freeing page list (%s %d)\n", --// current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "freeing page list (%s %d)\n", -+ current->comm, current->pid); - kfree(pPages); - pPages = next; - } -@@ -614,33 +739,38 @@ static void VmaClose(struct vm_area_struct *pVma) - kfree(pVmaList); - pVma->vm_private_data = 0; - } --// else --// printk(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount); -+ else -+ { -+ PRINTK_VERBOSE(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount); -+ } - } - else - { --// printk(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid); --// printk(KERN_ERR "CLOSE ERR\n"); -+ PRINTK_VERBOSE(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_ERR "CLOSE ERR\n"); - } - --// printk(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)", --// pVma, current->pid, freed, g_trackedPages); -+ PRINTK_VERBOSE(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)", -+ pVma, current->pid, freed, g_trackedPages); - --// printk(KERN_DEBUG "%d pages open\n", g_trackedPages); -+ PRINTK_VERBOSE(KERN_DEBUG "%d pages open\n", g_trackedPages); - } - --static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf) -+static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf) - { --// printk(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff, --// current->comm, current->pid); -- //printk(KERN_DEBUG "FAULT\n"); -+ PRINTK_VERBOSE(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff, -+ current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "FAULT\n"); - pVmf->page = alloc_page(GFP_KERNEL); -- /*if (pVmf->page) -- printk(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page));*/ - -+ if (pVmf->page) -+ { -+ PRINTK_VERBOSE(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page)); -+ } -+ - if (!pVmf->page) - { -- printk(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid); -+ PRINTK(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid); - return VM_FAULT_OOM; - } - else -@@ -655,11 +785,11 @@ static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf) - - if (pVmaList) - { --// printk(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid); - - if (pVmaList->m_pPageTail->m_used == PAGES_PER_LIST) - { --// printk(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid); - //making a new page list - pVmaList->m_pPageTail->m_pNext = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL); - if (!pVmaList->m_pPageTail->m_pNext) -@@ -671,13 +801,13 @@ static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf) - pVmaList->m_pPageTail->m_pNext = 0; - } - --// printk(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid); -+ PRINTK_VERBOSE(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid); - - pVmaList->m_pPageTail->m_pPages[pVmaList->m_pPageTail->m_used] = pVmf->page; - pVmaList->m_pPageTail->m_used++; - } - else -- printk(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid); -+ PRINTK(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid); - - return 0; - } -@@ -689,32 +819,33 @@ static int __init dmaer_init(void) - int result = alloc_chrdev_region(&g_majorMinor, 0, 1, "dmaer"); - if (result < 0) - { -- printk(KERN_ERR "unable to get major device number\n"); -+ PRINTK(KERN_ERR "unable to get major device number\n"); - return result; - } - else -- printk(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor)); -+ PRINTK(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor)); - -- printk(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n", -+ PRINTK(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n", - sizeof(struct VmaPageList), sizeof(struct PageList), PAGE_SIZE); -- -- -+ - //get a dma channel to work with - result = bcm_dma_chan_alloc(BCM_DMA_FEATURE_FAST, (void **)&g_pDmaChanBase, &g_dmaIrq); -+ -+ //uncomment to force to channel 0 - //result = 0; - //g_pDmaChanBase = 0xce808000; - - if (result < 0) - { -- printk(KERN_ERR "failed to allocate dma channel\n"); -+ PRINTK(KERN_ERR "failed to allocate dma channel\n"); - cdev_del(&g_cDev); - unregister_chrdev_region(g_majorMinor, 1); - } - - //reset the channel -- printk(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase); -+ PRINTK(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase); - *g_pDmaChanBase = 1 << 31; -- printk(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase); -+ PRINTK(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase); - - g_dmaChan = result; - -@@ -730,7 +861,7 @@ static int __init dmaer_init(void) - result = cdev_add(&g_cDev, g_majorMinor, 1); - if (result < 0) - { -- printk(KERN_ERR "failed to add character device\n"); -+ PRINTK(KERN_ERR "failed to add character device\n"); - unregister_chrdev_region(g_majorMinor, 1); - bcm_dma_chan_free(g_dmaChan); - return result; -@@ -741,7 +872,7 @@ static int __init dmaer_init(void) - - static void __exit dmaer_exit(void) - { -- printk(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss); -+ PRINTK(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss); - //unregister the device - cdev_del(&g_cDev); - unregister_chrdev_region(g_majorMinor, 1); -@@ -749,6 +880,7 @@ static void __exit dmaer_exit(void) - bcm_dma_chan_free(g_dmaChan); - } - -+MODULE_LICENSE("Dual BSD/GPL"); - MODULE_AUTHOR("Simon Hall"); - module_init(dmaer_init); - module_exit(dmaer_exit); -diff --git a/arch/arm/mach-bcm2708/include/mach/vc_support.h b/arch/arm/mach-bcm2708/include/mach/vc_support.h -new file mode 100755 -index 0000000..70e809f ---- /dev/null -+++ b/arch/arm/mach-bcm2708/include/mach/vc_support.h -@@ -0,0 +1,69 @@ -+#ifndef _VC_SUPPORT_H_ -+#define _VC_SUPPORT_H_ -+ -+/* -+ * vc_support.h -+ * -+ * Created on: 25 Nov 2012 -+ * Author: Simon -+ */ -+ -+enum { -+/* -+ If a MEM_HANDLE_T is discardable, the memory manager may resize it to size -+ 0 at any time when it is not locked or retained. -+ */ -+ MEM_FLAG_DISCARDABLE = 1 << 0, -+ -+ /* -+ If a MEM_HANDLE_T is allocating (or normal), its block of memory will be -+ accessed in an allocating fashion through the cache. -+ */ -+ MEM_FLAG_NORMAL = 0 << 2, -+ MEM_FLAG_ALLOCATING = MEM_FLAG_NORMAL, -+ -+ /* -+ If a MEM_HANDLE_T is direct, its block of memory will be accessed -+ directly, bypassing the cache. -+ */ -+ MEM_FLAG_DIRECT = 1 << 2, -+ -+ /* -+ If a MEM_HANDLE_T is coherent, its block of memory will be accessed in a -+ non-allocating fashion through the cache. -+ */ -+ MEM_FLAG_COHERENT = 2 << 2, -+ -+ /* -+ If a MEM_HANDLE_T is L1-nonallocating, its block of memory will be accessed by -+ the VPU in a fashion which is allocating in L2, but only coherent in L1. -+ */ -+ MEM_FLAG_L1_NONALLOCATING = (MEM_FLAG_DIRECT | MEM_FLAG_COHERENT), -+ -+ /* -+ If a MEM_HANDLE_T is zero'd, its contents are set to 0 rather than -+ MEM_HANDLE_INVALID on allocation and resize up. -+ */ -+ MEM_FLAG_ZERO = 1 << 4, -+ -+ /* -+ If a MEM_HANDLE_T is uninitialised, it will not be reset to a defined value -+ (either zero, or all 1's) on allocation. -+ */ -+ MEM_FLAG_NO_INIT = 1 << 5, -+ -+ /* -+ Hints. -+ */ -+ MEM_FLAG_HINT_PERMALOCK = 1 << 6, /* Likely to be locked for long periods of time. */ -+}; -+ -+unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags); -+unsigned int ReleaseVcMemory(unsigned int handle); -+unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle); -+unsigned int UnlockVcMemory(unsigned int handle); -+ -+unsigned int ExecuteVcCode(unsigned int code, -+ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5); -+ -+#endif -diff --git a/arch/arm/mach-bcm2708/vc_support.c b/arch/arm/mach-bcm2708/vc_support.c -new file mode 100755 -index 0000000..5cb1335 ---- /dev/null -+++ b/arch/arm/mach-bcm2708/vc_support.c -@@ -0,0 +1,319 @@ -+/* -+ * vc_support.c -+ * -+ * Created on: 25 Nov 2012 -+ * Author: Simon -+ */ -+ -+#include -+#include -+ -+#ifdef ECLIPSE_IGNORE -+ -+#define __user -+#define __init -+#define __exit -+#define __iomem -+#define KERN_DEBUG -+#define KERN_ERR -+#define KERN_WARNING -+#define KERN_INFO -+#define _IOWR(a, b, c) b -+#define _IOW(a, b, c) b -+#define _IO(a, b) b -+ -+#endif -+ -+/****** VC MAILBOX FUNCTIONALITY ******/ -+unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags) -+{ -+ struct vc_msg -+ { -+ unsigned int m_msgSize; -+ unsigned int m_response; -+ -+ struct vc_tag -+ { -+ unsigned int m_tagId; -+ unsigned int m_sendBufferSize; -+ union { -+ unsigned int m_sendDataSize; -+ unsigned int m_recvDataSize; -+ }; -+ -+ struct args -+ { -+ union { -+ unsigned int m_size; -+ unsigned int m_handle; -+ }; -+ unsigned int m_alignment; -+ unsigned int m_flags; -+ } m_args; -+ } m_tag; -+ -+ unsigned int m_endTag; -+ } msg; -+ int s; -+ -+ msg.m_msgSize = sizeof(msg); -+ msg.m_response = 0; -+ msg.m_endTag = 0; -+ -+ //fill in the tag for the allocation command -+ msg.m_tag.m_tagId = 0x3000c; -+ msg.m_tag.m_sendBufferSize = 12; -+ msg.m_tag.m_sendDataSize = 12; -+ -+ //fill in our args -+ msg.m_tag.m_args.m_size = size; -+ msg.m_tag.m_args.m_alignment = alignment; -+ msg.m_tag.m_args.m_flags = flags; -+ -+ //run the command -+ s = bcm_mailbox_property(&msg, sizeof(msg)); -+ -+ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) -+ { -+ *pHandle = msg.m_tag.m_args.m_handle; -+ return 0; -+ } -+ else -+ { -+ printk(KERN_ERR "failed to allocate vc memory: s=%d response=%08x recv data size=%08x\n", -+ s, msg.m_response, msg.m_tag.m_recvDataSize); -+ return 1; -+ } -+} -+ -+unsigned int ReleaseVcMemory(unsigned int handle) -+{ -+ struct vc_msg -+ { -+ unsigned int m_msgSize; -+ unsigned int m_response; -+ -+ struct vc_tag -+ { -+ unsigned int m_tagId; -+ unsigned int m_sendBufferSize; -+ union { -+ unsigned int m_sendDataSize; -+ unsigned int m_recvDataSize; -+ }; -+ -+ struct args -+ { -+ union { -+ unsigned int m_handle; -+ unsigned int m_error; -+ }; -+ } m_args; -+ } m_tag; -+ -+ unsigned int m_endTag; -+ } msg; -+ int s; -+ -+ msg.m_msgSize = sizeof(msg); -+ msg.m_response = 0; -+ msg.m_endTag = 0; -+ -+ //fill in the tag for the release command -+ msg.m_tag.m_tagId = 0x3000f; -+ msg.m_tag.m_sendBufferSize = 4; -+ msg.m_tag.m_sendDataSize = 4; -+ -+ //pass across the handle -+ msg.m_tag.m_args.m_handle = handle; -+ -+ s = bcm_mailbox_property(&msg, sizeof(msg)); -+ -+ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0) -+ return 0; -+ else -+ { -+ printk(KERN_ERR "failed to release vc memory: s=%d response=%08x recv data size=%08x error=%08x\n", -+ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error); -+ return 1; -+ } -+} -+ -+unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle) -+{ -+ struct vc_msg -+ { -+ unsigned int m_msgSize; -+ unsigned int m_response; -+ -+ struct vc_tag -+ { -+ unsigned int m_tagId; -+ unsigned int m_sendBufferSize; -+ union { -+ unsigned int m_sendDataSize; -+ unsigned int m_recvDataSize; -+ }; -+ -+ struct args -+ { -+ union { -+ unsigned int m_handle; -+ unsigned int m_busAddress; -+ }; -+ } m_args; -+ } m_tag; -+ -+ unsigned int m_endTag; -+ } msg; -+ int s; -+ -+ msg.m_msgSize = sizeof(msg); -+ msg.m_response = 0; -+ msg.m_endTag = 0; -+ -+ //fill in the tag for the lock command -+ msg.m_tag.m_tagId = 0x3000d; -+ msg.m_tag.m_sendBufferSize = 4; -+ msg.m_tag.m_sendDataSize = 4; -+ -+ //pass across the handle -+ msg.m_tag.m_args.m_handle = handle; -+ -+ s = bcm_mailbox_property(&msg, sizeof(msg)); -+ -+ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) -+ { -+ //pick out the bus address -+ *pBusAddress = msg.m_tag.m_args.m_busAddress; -+ return 0; -+ } -+ else -+ { -+ printk(KERN_ERR "failed to lock vc memory: s=%d response=%08x recv data size=%08x\n", -+ s, msg.m_response, msg.m_tag.m_recvDataSize); -+ return 1; -+ } -+} -+ -+unsigned int UnlockVcMemory(unsigned int handle) -+{ -+ struct vc_msg -+ { -+ unsigned int m_msgSize; -+ unsigned int m_response; -+ -+ struct vc_tag -+ { -+ unsigned int m_tagId; -+ unsigned int m_sendBufferSize; -+ union { -+ unsigned int m_sendDataSize; -+ unsigned int m_recvDataSize; -+ }; -+ -+ struct args -+ { -+ union { -+ unsigned int m_handle; -+ unsigned int m_error; -+ }; -+ } m_args; -+ } m_tag; -+ -+ unsigned int m_endTag; -+ } msg; -+ int s; -+ -+ msg.m_msgSize = sizeof(msg); -+ msg.m_response = 0; -+ msg.m_endTag = 0; -+ -+ //fill in the tag for the unlock command -+ msg.m_tag.m_tagId = 0x3000e; -+ msg.m_tag.m_sendBufferSize = 4; -+ msg.m_tag.m_sendDataSize = 4; -+ -+ //pass across the handle -+ msg.m_tag.m_args.m_handle = handle; -+ -+ s = bcm_mailbox_property(&msg, sizeof(msg)); -+ -+ //check the error code too -+ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0) -+ return 0; -+ else -+ { -+ printk(KERN_ERR "failed to unlock vc memory: s=%d response=%08x recv data size=%08x error%08x\n", -+ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error); -+ return 1; -+ } -+} -+ -+unsigned int ExecuteVcCode(unsigned int code, -+ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5) -+{ -+ struct vc_msg -+ { -+ unsigned int m_msgSize; -+ unsigned int m_response; -+ -+ struct vc_tag -+ { -+ unsigned int m_tagId; -+ unsigned int m_sendBufferSize; -+ union { -+ unsigned int m_sendDataSize; -+ unsigned int m_recvDataSize; -+ }; -+ -+ struct args -+ { -+ union { -+ unsigned int m_pCode; -+ unsigned int m_return; -+ }; -+ unsigned int m_r0; -+ unsigned int m_r1; -+ unsigned int m_r2; -+ unsigned int m_r3; -+ unsigned int m_r4; -+ unsigned int m_r5; -+ } m_args; -+ } m_tag; -+ -+ unsigned int m_endTag; -+ } msg; -+ int s; -+ -+ msg.m_msgSize = sizeof(msg); -+ msg.m_response = 0; -+ msg.m_endTag = 0; -+ -+ //fill in the tag for the unlock command -+ msg.m_tag.m_tagId = 0x30010; -+ msg.m_tag.m_sendBufferSize = 28; -+ msg.m_tag.m_sendDataSize = 28; -+ -+ //pass across the handle -+ msg.m_tag.m_args.m_pCode = code; -+ msg.m_tag.m_args.m_r0 = r0; -+ msg.m_tag.m_args.m_r1 = r1; -+ msg.m_tag.m_args.m_r2 = r2; -+ msg.m_tag.m_args.m_r3 = r3; -+ msg.m_tag.m_args.m_r4 = r4; -+ msg.m_tag.m_args.m_r5 = r5; -+ -+ s = bcm_mailbox_property(&msg, sizeof(msg)); -+ -+ //check the error code too -+ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004) -+ return msg.m_tag.m_args.m_return; -+ else -+ { -+ printk(KERN_ERR "failed to execute: s=%d response=%08x recv data size=%08x\n", -+ s, msg.m_response, msg.m_tag.m_recvDataSize); -+ return 1; -+ } -+} -+ --- -1.8.1.5 - - -From 504db1a44a4298e349aa93a8583bfbdccab417f4 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 27 Dec 2012 16:08:50 +0000 -Subject: [PATCH 130/169] Silence bootup errors from timer and gpio - ---- - arch/arm/mach-bcm2708/bcm2708.c | 11 ++++++----- - arch/arm/mach-bcm2708/bcm2708_gpio.c | 2 +- - 2 files changed, 7 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 4335d72..8f67092 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -762,13 +762,14 @@ static void timer_set_mode(enum clock_event_mode mode, - unsigned long stc; - - switch (mode) { -- case CLOCK_EVT_MODE_PERIODIC: -- stc = readl(__io_address(ST_BASE + 0x04)); -- writel(stc + TIMER_PERIOD, __io_address(ST_BASE + 0x18)); /* stc3 */ -+ case CLOCK_EVT_MODE_ONESHOT: /* Leave the timer disabled, .set_next_event will enable it */ -+ case CLOCK_EVT_MODE_SHUTDOWN: - break; -- case CLOCK_EVT_MODE_ONESHOT: -+ case CLOCK_EVT_MODE_PERIODIC: -+ - case CLOCK_EVT_MODE_UNUSED: -- case CLOCK_EVT_MODE_SHUTDOWN: -+ case CLOCK_EVT_MODE_RESUME: -+ - default: - printk(KERN_ERR "timer_set_mode: unhandled mode:%d\n", - (int)mode); -diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c -index 6c81d9d..c8161e1 100644 ---- a/arch/arm/mach-bcm2708/bcm2708_gpio.c -+++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c -@@ -263,7 +263,7 @@ static int bcm2708_gpio_probe(struct platform_device *dev) - struct resource *res; - int err = 0; - -- printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); -+ printk(KERN_INFO DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev); - - ucb = kzalloc(sizeof(*ucb), GFP_KERNEL); - if (NULL == ucb) { --- -1.8.1.5 - - -From f9c36b3aa870bace955c614af67333cfef1423ab Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 27 Dec 2012 17:09:39 +0000 -Subject: [PATCH 131/169] Remove RTC_HCTOSYS as it produces a kernel boot - error, and doesn't do anything with RTC kernel modules - ---- - arch/arm/configs/bcmrpi_defconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 14d6ebf..92e98e6 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -793,7 +793,6 @@ CONFIG_USB_STORAGE_ONETOUCH=m - CONFIG_USB_STORAGE_KARMA=m - CONFIG_USB_STORAGE_CYPRESS_ATACB=m - CONFIG_USB_STORAGE_ENE_UB6250=m --CONFIG_USB_UAS=y - CONFIG_USB_LIBUSUAL=y - CONFIG_USB_MDC800=m - CONFIG_USB_MICROTEK=m -@@ -880,6 +879,7 @@ CONFIG_LEDS_TRIGGER_TIMER=m - CONFIG_LEDS_TRIGGER_HEARTBEAT=m - CONFIG_LEDS_TRIGGER_DEFAULT_ON=m - CONFIG_RTC_CLASS=y -+# CONFIG_RTC_HCTOSYS is not set - CONFIG_RTC_DRV_DS1307=m - CONFIG_RTC_DRV_DS1374=m - CONFIG_RTC_DRV_DS1672=m --- -1.8.1.5 - - -From 9c035e23edbd0b0f3e39b9ce8445437ea04369dd Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 1 Jan 2013 16:17:43 +0000 -Subject: [PATCH 132/169] Add missing USB_NET modules - ---- - arch/arm/configs/bcmrpi_defconfig | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 92e98e6..4eb9edb 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -386,6 +386,7 @@ CONFIG_USB_USBNET=y - CONFIG_USB_NET_AX8817X=m - CONFIG_USB_NET_CDCETHER=m - CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_CDC_NCM=m - CONFIG_USB_NET_DM9601=m - CONFIG_USB_NET_SMSC75XX=m - CONFIG_USB_NET_SMSC95XX=y -@@ -397,9 +398,10 @@ CONFIG_USB_NET_CDC_SUBSET=m - CONFIG_USB_ALI_M5632=y - CONFIG_USB_AN2720=y - CONFIG_USB_KC2190=y --# CONFIG_USB_NET_ZAURUS is not set -+CONFIG_USB_NET_ZAURUS=m - CONFIG_USB_NET_CX82310_ETH=m - CONFIG_USB_NET_KALMIA=m -+CONFIG_USB_NET_QMI_WWAN=m - CONFIG_USB_NET_INT51X1=m - CONFIG_USB_IPHETH=m - CONFIG_USB_SIERRA_NET=m --- -1.8.1.5 - - -From d883665dfa5e4026ff4d097a843fa61c0c2cc45f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 7 Jan 2013 21:34:59 +0000 -Subject: [PATCH 133/169] Add mutex around bcm_mailbox_property function - ---- - arch/arm/mach-bcm2708/vcio.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c -index 09b78b5..599eb63 100644 ---- a/arch/arm/mach-bcm2708/vcio.c -+++ b/arch/arm/mach-bcm2708/vcio.c -@@ -245,7 +245,7 @@ static int mbox_copy_to_user(void *dst, const void *src, int size) - } - } - -- -+static DEFINE_MUTEX(mailbox_lock); - extern int bcm_mailbox_property(void *data, int size) - { - uint32_t success; -@@ -253,6 +253,7 @@ extern int bcm_mailbox_property(void *data, int size) - void *mem_kern; /* the memory address accessed from driver */ - int s = 0; - -+ mutex_lock(&mailbox_lock); - /* allocate some memory for the messages communicating with GPU */ - mem_kern = dma_alloc_coherent(NULL, PAGE_ALIGN(size), &mem_bus, GFP_ATOMIC); - if (mem_kern) { -@@ -276,6 +277,8 @@ extern int bcm_mailbox_property(void *data, int size) - } - if (s != 0) - printk(KERN_ERR DRIVER_NAME ": %s failed (%d)\n", __func__, s); -+ -+ mutex_unlock(&mailbox_lock); - return s; - } - EXPORT_SYMBOL_GPL(bcm_mailbox_property); --- -1.8.1.5 - - -From 2eb67c35d3c73f49105dd2886567e5523afe7809 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 7 Jan 2013 21:36:19 +0000 -Subject: [PATCH 134/169] Enable ZRAM and RFKILL config options - ---- - arch/arm/configs/bcmrpi_defconfig | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 4eb9edb..477b78b 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -42,6 +42,8 @@ CONFIG_ARCH_BCM2708=y - CONFIG_BCM2708_DMAER=m +diff --git a/arch/arm/configs/bcmrpi_quick_defconfig b/arch/arm/configs/bcmrpi_quick_defconfig +index 10b84df..e5efe75 100644 +--- a/arch/arm/configs/bcmrpi_quick_defconfig ++++ b/arch/arm/configs/bcmrpi_quick_defconfig +@@ -1,130 +1,84 @@ + # CONFIG_ARM_PATCH_PHYS_VIRT is not set +-CONFIG_EXPERIMENTAL=y + CONFIG_LOCALVERSION="-quick" + # CONFIG_LOCALVERSION_AUTO is not set ++# CONFIG_SWAP is not set + CONFIG_SYSVIPC=y + CONFIG_POSIX_MQUEUE=y +-CONFIG_BSD_PROCESS_ACCT=y +-CONFIG_BSD_PROCESS_ACCT_V3=y +-CONFIG_FHANDLE=y +-CONFIG_TASKSTATS=y +-CONFIG_TASK_DELAY_ACCT=y +-CONFIG_TASK_XACCT=y +-CONFIG_TASK_IO_ACCOUNTING=y +-CONFIG_AUDIT=y + CONFIG_NO_HZ=y + CONFIG_HIGH_RES_TIMERS=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y +-CONFIG_CGROUP_FREEZER=y +-CONFIG_CGROUP_DEVICE=y +-CONFIG_CGROUP_CPUACCT=y +-CONFIG_RESOURCE_COUNTERS=y +-CONFIG_BLK_CGROUP=y +-CONFIG_NAMESPACES=y +-CONFIG_SCHED_AUTOGROUP=y +-CONFIG_RELAY=y ++CONFIG_KALLSYMS_ALL=y + CONFIG_EMBEDDED=y ++CONFIG_PERF_EVENTS=y + # CONFIG_COMPAT_BRK is not set + CONFIG_SLAB=y +-CONFIG_PROFILING=y +-CONFIG_OPROFILE=m +-CONFIG_KPROBES=y + CONFIG_MODULES=y + CONFIG_MODULE_UNLOAD=y + CONFIG_MODVERSIONS=y + CONFIG_MODULE_SRCVERSION_ALL=y + # CONFIG_BLK_DEV_BSG is not set +-CONFIG_BLK_DEV_THROTTLING=y +-CONFIG_PARTITION_ADVANCED=y +-CONFIG_MAC_PARTITION=y +-CONFIG_EFI_PARTITION=y +-CONFIG_CFQ_GROUP_IOSCHED=y + CONFIG_ARCH_BCM2708=y +-# CONFIG_BCM2708_GPIO is not set +-# CONFIG_BCM2708_VCMEM is not set CONFIG_PREEMPT=y CONFIG_AEABI=y -+CONFIG_CLEANCACHE=y -+CONFIG_FRONTSWAP=y CONFIG_UACCESS_WITH_MEMCPY=y - CONFIG_SECCOMP=y - CONFIG_CC_STACKPROTECTOR=y -@@ -330,6 +332,8 @@ CONFIG_MAC80211=m - CONFIG_MAC80211_RC_PID=y - CONFIG_MAC80211_MESH=y - CONFIG_WIMAX=m -+CONFIG_RFKILL=m -+CONFIG_RFKILL_INPUT=y - CONFIG_NET_9P=m - CONFIG_NFC=m - CONFIG_NFC_PN533=m -@@ -917,6 +921,8 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m -+CONFIG_ZRAM=m -+CONFIG_ZSMALLOC=m - CONFIG_STAGING_MEDIA=y - CONFIG_LIRC_STAGING=y - CONFIG_LIRC_IGORPLUGUSB=m --- -1.8.1.5 - - -From 940c09b2f5788bd788ecb49089e0de3c1c8ef561 Mon Sep 17 00:00:00 2001 -From: P33M -Date: Wed, 9 Jan 2013 16:12:04 +0000 -Subject: [PATCH 135/169] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent - kernel memory corruption, escalating to OOPS under high USB load. - ---- - drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 2 -- - drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 1 + - 2 files changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -index 2b7945a..d5c94f4 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -@@ -500,8 +500,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, - DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. " - "Error status %d\n", retval); - dwc_otg_hcd_qtd_free(qtd); -- } else { -- qtd->qh = *ep_handle; - } - intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); - if (!intr_mask.b.sofintr && retval == 0) { -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -index e6b2a7b..b337e1b 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -@@ -946,6 +946,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, - if (retval == 0) { - DWC_CIRCLEQ_INSERT_TAIL(&((*qh)->qtd_list), qtd, - qtd_list_entry); -+ qtd->qh = *qh; - } - DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); - --- -1.8.1.5 - - -From 73bfd09224ef75ac73ebdab56d57fcdd59c233a8 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 13 Jan 2013 15:58:09 +0000 -Subject: [PATCH 136/169] Add config options for netfilter log and more dvb - modules - ---- - arch/arm/configs/bcmrpi_defconfig | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 477b78b..c66ba6b 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -117,8 +117,10 @@ CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m - CONFIG_NETFILTER_XT_TARGET_CONNMARK=m - CONFIG_NETFILTER_XT_TARGET_CT=m - CONFIG_NETFILTER_XT_TARGET_DSCP=m -+CONFIG_NETFILTER_XT_TARGET_HMARK=m - CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m - CONFIG_NETFILTER_XT_TARGET_LED=m -+CONFIG_NETFILTER_XT_TARGET_LOG=m - CONFIG_NETFILTER_XT_TARGET_MARK=m - CONFIG_NETFILTER_XT_TARGET_NFLOG=m - CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -@@ -627,6 +629,8 @@ CONFIG_DVB_USB_IT913X=m - CONFIG_DVB_USB_MXL111SF=m - CONFIG_DVB_USB_RTL28XXU=m - CONFIG_DVB_USB_AF9035=m -+CONFIG_SMS_SIANO_MDTV=m -+CONFIG_SMS_USB_DRV=m - # CONFIG_DVB_STB0899 is not set - # CONFIG_DVB_STB6100 is not set - # CONFIG_DVB_STV090x is not set -@@ -667,10 +671,6 @@ CONFIG_DVB_USB_AF9035=m - # CONFIG_DVB_TDA1004X is not set - # CONFIG_DVB_NXT6000 is not set - # CONFIG_DVB_MT352 is not set --# CONFIG_DVB_DIB7000M is not set --# CONFIG_DVB_DIB7000P is not set --# CONFIG_DVB_DIB9000 is not set --# CONFIG_DVB_TDA10048 is not set - # CONFIG_DVB_HD29L2 is not set - # CONFIG_DVB_STV0367 is not set - # CONFIG_DVB_CXD2820R is not set --- -1.8.1.5 - - -From 3f3d2e069769f723a1c786916b52ba717ec12041 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 15 Jan 2013 00:05:59 +0000 -Subject: [PATCH 137/169] Add more dvb modules - ---- - arch/arm/configs/bcmrpi_defconfig | 91 ++++++--------------------------------- - 1 file changed, 12 insertions(+), 79 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index c66ba6b..7e9eed2 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -423,9 +423,6 @@ CONFIG_ATH_COMMON=m - CONFIG_ATH9K=m - CONFIG_ATH9K_HTC=m - CONFIG_CARL9170=m --CONFIG_B43=m --CONFIG_B43_PHY_N=y --CONFIG_B43LEGACY=m - CONFIG_HOSTAP=m - CONFIG_LIBERTAS=m - CONFIG_LIBERTAS_USB=m -@@ -519,6 +516,7 @@ CONFIG_IR_IGUANA=m - CONFIG_RC_LOOPBACK=m - CONFIG_IR_GPIO_CIR=m - CONFIG_MEDIA_ATTACH=y -+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y - CONFIG_VIDEO_VIVI=m - CONFIG_USB_VIDEO_CLASS=m - CONFIG_USB_M5602=m -@@ -591,10 +589,15 @@ CONFIG_USB_MR800=m - CONFIG_USB_DSBR=m - CONFIG_RADIO_SHARK=m - CONFIG_RADIO_SHARK2=m -+CONFIG_RADIO_SI4713=m - CONFIG_USB_KEENE=m -+CONFIG_RADIO_TEA5764=m -+CONFIG_RADIO_SAA7706H=m -+CONFIG_RADIO_TEF6862=m - CONFIG_DVB_USB=m - CONFIG_DVB_USB_A800=m - CONFIG_DVB_USB_DIBUSB_MB=m -+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y - CONFIG_DVB_USB_DIBUSB_MC=m - CONFIG_DVB_USB_DIB0700=m - CONFIG_DVB_USB_UMT_010=m -@@ -631,82 +634,8 @@ CONFIG_DVB_USB_RTL28XXU=m - CONFIG_DVB_USB_AF9035=m - CONFIG_SMS_SIANO_MDTV=m - CONFIG_SMS_USB_DRV=m --# CONFIG_DVB_STB0899 is not set --# CONFIG_DVB_STB6100 is not set --# CONFIG_DVB_STV090x is not set --# CONFIG_DVB_STV6110x is not set --# CONFIG_DVB_DRXK is not set --# CONFIG_DVB_TDA18271C2DD is not set --# CONFIG_DVB_CX24110 is not set --# CONFIG_DVB_CX24123 is not set --# CONFIG_DVB_MT312 is not set --# CONFIG_DVB_ZL10036 is not set --# CONFIG_DVB_ZL10039 is not set --# CONFIG_DVB_S5H1420 is not set --# CONFIG_DVB_STV0288 is not set --# CONFIG_DVB_STB6000 is not set --# CONFIG_DVB_STV0299 is not set --# CONFIG_DVB_STV6110 is not set --# CONFIG_DVB_STV0900 is not set --# CONFIG_DVB_TDA8083 is not set --# CONFIG_DVB_TDA10086 is not set --# CONFIG_DVB_TDA8261 is not set --# CONFIG_DVB_VES1X93 is not set --# CONFIG_DVB_TUNER_ITD1000 is not set --# CONFIG_DVB_TUNER_CX24113 is not set --# CONFIG_DVB_TDA826X is not set --# CONFIG_DVB_TUA6100 is not set --# CONFIG_DVB_CX24116 is not set --# CONFIG_DVB_SI21XX is not set --# CONFIG_DVB_DS3000 is not set --# CONFIG_DVB_MB86A16 is not set --# CONFIG_DVB_TDA10071 is not set --# CONFIG_DVB_SP8870 is not set --# CONFIG_DVB_SP887X is not set --# CONFIG_DVB_CX22700 is not set --# CONFIG_DVB_CX22702 is not set --# CONFIG_DVB_S5H1432 is not set --# CONFIG_DVB_DRXD is not set --# CONFIG_DVB_L64781 is not set --# CONFIG_DVB_TDA1004X is not set --# CONFIG_DVB_NXT6000 is not set --# CONFIG_DVB_MT352 is not set --# CONFIG_DVB_HD29L2 is not set --# CONFIG_DVB_STV0367 is not set --# CONFIG_DVB_CXD2820R is not set --# CONFIG_DVB_VES1820 is not set --# CONFIG_DVB_TDA10021 is not set --# CONFIG_DVB_TDA10023 is not set --# CONFIG_DVB_STV0297 is not set --# CONFIG_DVB_NXT200X is not set --# CONFIG_DVB_OR51211 is not set --# CONFIG_DVB_OR51132 is not set --# CONFIG_DVB_BCM3510 is not set --# CONFIG_DVB_LGDT330X is not set --# CONFIG_DVB_LGDT3305 is not set --# CONFIG_DVB_LG2160 is not set --# CONFIG_DVB_S5H1409 is not set --# CONFIG_DVB_AU8522_DTV is not set --# CONFIG_DVB_AU8522_V4L is not set --# CONFIG_DVB_S5H1411 is not set --# CONFIG_DVB_S921 is not set --# CONFIG_DVB_DIB8000 is not set --# CONFIG_DVB_MB86A20S is not set --# CONFIG_DVB_PLL is not set --# CONFIG_DVB_TUNER_DIB0070 is not set --# CONFIG_DVB_TUNER_DIB0090 is not set --# CONFIG_DVB_LNBP21 is not set --# CONFIG_DVB_LNBP22 is not set --# CONFIG_DVB_ISL6405 is not set --# CONFIG_DVB_ISL6421 is not set --# CONFIG_DVB_ISL6423 is not set --# CONFIG_DVB_A8293 is not set --# CONFIG_DVB_LGS8GL5 is not set --# CONFIG_DVB_LGS8GXX is not set --# CONFIG_DVB_ATBM8830 is not set --# CONFIG_DVB_TDA665x is not set --# CONFIG_DVB_IX2505V is not set --# CONFIG_DVB_M88RS2000 is not set -+CONFIG_DVB_B2C2_FLEXCOP=m -+CONFIG_DVB_B2C2_FLEXCOP_USB=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - # CONFIG_BACKLIGHT_GENERIC is not set -@@ -921,9 +850,12 @@ CONFIG_STAGING=y - CONFIG_W35UND=m - CONFIG_PRISM2_USB=m - CONFIG_R8712U=m -+CONFIG_VT6656=m - CONFIG_ZRAM=m - CONFIG_ZSMALLOC=m - CONFIG_STAGING_MEDIA=y -+CONFIG_DVB_AS102=m -+CONFIG_EASYCAP=m - CONFIG_LIRC_STAGING=y - CONFIG_LIRC_IGORPLUGUSB=m - CONFIG_LIRC_IMON=m -@@ -968,6 +900,7 @@ CONFIG_MSDOS_FS=y - CONFIG_VFAT_FS=y - CONFIG_FAT_DEFAULT_IOCHARSET="ascii" - CONFIG_NTFS_FS=m -+CONFIG_NTFS_RW=y - CONFIG_TMPFS=y - CONFIG_TMPFS_POSIX_ACL=y - CONFIG_CONFIGFS_FS=y --- -1.8.1.5 - - -From fe500a17201785060837489ffd0fa7e36be6ff7d Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 21 Jan 2013 23:03:53 +0000 -Subject: [PATCH 138/169] Return error value from bcm2708_setup_state. Thanks - notro - ---- - drivers/spi/spi-bcm2708.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c -index 9f1580e..8513704 100644 ---- a/drivers/spi/spi-bcm2708.c -+++ b/drivers/spi/spi-bcm2708.c -@@ -378,6 +378,7 @@ static int bcm2708_spi_setup(struct spi_device *spi) - if (ret < 0) { - kfree(state); - spi->controller_state = NULL; -+ return ret; - } - - dev_dbg(&spi->dev, --- -1.8.1.5 - - -From e1f1269114a115b2b2ab06a6ba9d68f2dfe5e35c Mon Sep 17 00:00:00 2001 -From: Kamal Mostafa -Date: Mon, 22 Oct 2012 15:52:44 -0700 -Subject: [PATCH 139/169] spi/spi-bcm2708: respect per-transfer SPI clock - speed_hz value - -The bcm2708 SPI driver's bcm2708_process_transfer() was ignoring the -per-transfer speed_hz value even when it was provided (it always just -used the spi device's max_speed_hz value). Now, per-transfer speed_hz -values are respected. - -Also added debug print to bcm2708_setup_state() to help keep an eye on -the configured SPI parameters. - -Signed-off-by: Kamal Mostafa ---- - drivers/spi/spi-bcm2708.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c -index 8513704..b74aa32 100644 ---- a/drivers/spi/spi-bcm2708.c -+++ b/drivers/spi/spi-bcm2708.c -@@ -259,6 +259,10 @@ static int bcm2708_setup_state(struct spi_master *master, - if (state) { - state->cs = cs; - state->cdiv = cdiv; -+ dev_dbg(dev, "setup: want %d Hz; " -+ "bus_hz=%lu / cdiv=%u == %lu Hz; " -+ "mode %u: cs 0x%08X\n", -+ hz, bus_hz, cdiv, bus_hz/cdiv, mode, cs); - } - - return 0; -@@ -277,7 +281,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs, - - if (xfer->bits_per_word || xfer->speed_hz) { - ret = bcm2708_setup_state(spi->master, &spi->dev, &state, -- spi->max_speed_hz, spi->chip_select, spi->mode, -+ xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz, -+ spi->chip_select, spi->mode, - spi->bits_per_word); - if (ret) - return ret; --- -1.8.1.5 - - -From 408c9242e66136c727315ae3ab9145801b9d1c1d Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 26 Mar 2013 22:29:01 +0000 -Subject: [PATCH 140/169] Add hwrng (hardware random number generator) driver - -Conflicts: ---- - arch/arm/mach-bcm2708/include/mach/platform.h | 1 + - drivers/char/hw_random/Kconfig | 12 +++ - drivers/char/hw_random/Makefile | 2 + - drivers/char/hw_random/bcm2708-rng.c | 117 ++++++++++++++++++++++++++ - 4 files changed, 132 insertions(+) - create mode 100755 drivers/char/hw_random/bcm2708-rng.c - -diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h -index 9c5d334..e063a1e 100644 ---- a/arch/arm/mach-bcm2708/include/mach/platform.h -+++ b/arch/arm/mach-bcm2708/include/mach/platform.h -@@ -62,6 +62,7 @@ - #define DMA_BASE (BCM2708_PERI_BASE + 0x7000) /* DMA controller */ - #define ARM_BASE (BCM2708_PERI_BASE + 0xB000) /* BCM2708 ARM control block */ - #define PM_BASE (BCM2708_PERI_BASE + 0x100000) /* Power Management, Reset controller and Watchdog registers */ -+#define RNG_BASE (BCM2708_PERI_BASE + 0x104000) /* Hardware RNG */ - #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO */ - #define UART0_BASE (BCM2708_PERI_BASE + 0x201000) /* Uart 0 */ - #define MMCI0_BASE (BCM2708_PERI_BASE + 0x202000) /* MMC interface */ -diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig -index c5a0262..229f430 100644 ---- a/drivers/char/hw_random/Kconfig -+++ b/drivers/char/hw_random/Kconfig -@@ -302,3 +302,15 @@ config HW_RANDOM_TPM - module will be called tpm-rng. - - If unsure, say Y. -+ -+config HW_RANDOM_BCM2708 -+ tristate "BCM2708 generic true random number generator support" -+ depends on HW_RANDOM && ARCH_BCM2708 -+ ---help--- -+ This driver provides the kernel-side support for the BCM2708 hardware. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called bcm2708-rng. -+ -+ If unsure, say N. -+ -diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile -index 1fd7eec..1974a07 100644 ---- a/drivers/char/hw_random/Makefile -+++ b/drivers/char/hw_random/Makefile -@@ -26,3 +26,5 @@ obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o - obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o - obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o - obj-$(CONFIG_HW_RANDOM_TPM) += tpm-rng.o -+obj-$(CONFIG_HW_RANDOM_BCM2708) += bcm2708-rng.o -+ -diff --git a/drivers/char/hw_random/bcm2708-rng.c b/drivers/char/hw_random/bcm2708-rng.c -new file mode 100755 -index 0000000..1ffa7d7 ---- /dev/null -+++ b/drivers/char/hw_random/bcm2708-rng.c -@@ -0,0 +1,117 @@ -+/** -+ * Copyright (c) 2010-2012 Broadcom. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions, and the following disclaimer, -+ * without modification. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 3. The names of the above-listed copyright holders may not be used -+ * to endorse or promote products derived from this software without -+ * specific prior written permission. -+ * -+ * ALTERNATIVELY, this software may be distributed under the terms of the -+ * GNU General Public License ("GPL") version 2, as published by the Free -+ * Software Foundation. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#define RNG_CTRL (0x0) -+#define RNG_STATUS (0x4) -+#define RNG_DATA (0x8) -+#define RNG_FF_THRESHOLD (0xc) -+ -+/* enable rng */ -+#define RNG_RBGEN 0x1 -+/* double speed, less random mode */ -+#define RNG_RBG2X 0x2 -+ -+/* the initial numbers generated are "less random" so will be discarded */ -+#define RNG_WARMUP_COUNT 0x40000 -+ -+static int bcm2708_rng_data_read(struct hwrng *rng, u32 *buffer) -+{ -+ void __iomem *rng_base = (void __iomem *)rng->priv; -+ unsigned words; -+ /* wait for a random number to be in fifo */ -+ do { -+ words = __raw_readl(rng_base + RNG_STATUS)>>24; -+ } -+ while (words == 0); -+ /* read the random number */ -+ *buffer = __raw_readl(rng_base + RNG_DATA); -+ return 4; -+} -+ -+static struct hwrng bcm2708_rng_ops = { -+ .name = "bcm2708", -+ .data_read = bcm2708_rng_data_read, -+}; -+ -+static int __init bcm2708_rng_init(void) -+{ -+ void __iomem *rng_base; -+ int err; -+ -+ /* map peripheral */ -+ rng_base = ioremap(RNG_BASE, 0x10); -+ pr_info("bcm2708_rng_init=%p\n", rng_base); -+ if (!rng_base) { -+ pr_err("bcm2708_rng_init failed to ioremap\n"); -+ return -ENOMEM; -+ } -+ bcm2708_rng_ops.priv = (unsigned long)rng_base; -+ /* register driver */ -+ err = hwrng_register(&bcm2708_rng_ops); -+ if (err) { -+ pr_err("bcm2708_rng_init hwrng_register()=%d\n", err); -+ iounmap(rng_base); -+ } else { -+ /* set warm-up count & enable */ -+ __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS); -+ __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL); -+ } -+ return err; -+} -+ -+static void __exit bcm2708_rng_exit(void) -+{ -+ void __iomem *rng_base = (void __iomem *)bcm2708_rng_ops.priv; -+ pr_info("bcm2708_rng_exit\n"); -+ /* disable rng hardware */ -+ __raw_writel(0, rng_base + RNG_CTRL); -+ /* unregister driver */ -+ hwrng_unregister(&bcm2708_rng_ops); -+ iounmap(rng_base); -+} -+ -+module_init(bcm2708_rng_init); -+module_exit(bcm2708_rng_exit); -+ -+MODULE_DESCRIPTION("BCM2708 H/W Random Number Generator (RNG) driver"); -+MODULE_LICENSE("GPL and additional rights"); --- -1.8.1.5 - - -From 418f75611fa6d54267058544da3e315cd301efcc Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 30 Jan 2013 12:45:18 +0000 -Subject: [PATCH 141/169] Add HW_RANDOM, BATMAN_ADV and CONFIG_NET_IPGRE - ---- - arch/arm/configs/bcmrpi_defconfig | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 7e9eed2..62985f4 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -76,6 +76,8 @@ CONFIG_IP_PNP=y +-CONFIG_SECCOMP=y +-CONFIG_CC_STACKPROTECTOR=y + CONFIG_ZBOOT_ROM_TEXT=0x0 + CONFIG_ZBOOT_ROM_BSS=0x0 + CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" +-CONFIG_KEXEC=y + CONFIG_CPU_FREQ=y +-CONFIG_CPU_FREQ_STAT=m + CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y + CONFIG_CPU_FREQ_GOV_PERFORMANCE=y + CONFIG_CPU_FREQ_GOV_USERSPACE=y + CONFIG_CPU_FREQ_GOV_ONDEMAND=y + CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +-# CONFIG_ARM_BCM2835_CPUFREQ is not set + CONFIG_CPU_IDLE=y + CONFIG_VFP=y +-CONFIG_BINFMT_MISC=m ++CONFIG_BINFMT_MISC=y + CONFIG_NET=y + CONFIG_PACKET=y + CONFIG_UNIX=y +-CONFIG_XFRM_USER=y +-CONFIG_NET_KEY=m + CONFIG_INET=y + CONFIG_IP_MULTICAST=y +-CONFIG_IP_ADVANCED_ROUTER=y +-CONFIG_IP_MULTIPLE_TABLES=y +-CONFIG_IP_ROUTE_MULTIPATH=y +-CONFIG_IP_ROUTE_VERBOSE=y + CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_RARP=y - CONFIG_NET_IPIP=m -+CONFIG_NET_IPGRE_DEMUX=m -+CONFIG_NET_IPGRE=m +-CONFIG_NET_IPIP=m CONFIG_SYN_COOKIES=y - CONFIG_INET_AH=m - CONFIG_INET_ESP=m -@@ -288,6 +290,7 @@ CONFIG_NET_ACT_PEDIT=m - CONFIG_NET_ACT_SIMP=m - CONFIG_NET_ACT_SKBEDIT=m - CONFIG_NET_ACT_CSUM=m -+CONFIG_BATMAN_ADV=m - CONFIG_NET_PKTGEN=m - CONFIG_HAMRADIO=y - CONFIG_AX25=m -@@ -468,7 +471,7 @@ CONFIG_VT_HW_CONSOLE_BINDING=y +-CONFIG_INET_AH=m +-CONFIG_INET_ESP=m +-CONFIG_INET_IPCOMP=m +-CONFIG_INET_XFRM_MODE_TRANSPORT=m +-CONFIG_INET_XFRM_MODE_TUNNEL=m +-CONFIG_INET_XFRM_MODE_BEET=m +-CONFIG_INET_LRO=m +-CONFIG_INET_DIAG=m ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set + # CONFIG_IPV6 is not set +-CONFIG_L2TP=m +-CONFIG_NET_PKTGEN=m + # CONFIG_WIRELESS is not set +-CONFIG_WIMAX=m +-CONFIG_NET_9P=m +-CONFIG_NFC=m +-CONFIG_NFC_PN533=m + CONFIG_DEVTMPFS=y + CONFIG_DEVTMPFS_MOUNT=y + CONFIG_BLK_DEV_LOOP=y +-CONFIG_BLK_DEV_CRYPTOLOOP=m +-CONFIG_BLK_DEV_NBD=m + CONFIG_BLK_DEV_RAM=y +-CONFIG_CDROM_PKTCDVD=m +-CONFIG_EEPROM_93CX6=m +-# CONFIG_BCM2708_VCHIQ is not set + CONFIG_SCSI=y + # CONFIG_SCSI_PROC_FS is not set +-CONFIG_BLK_DEV_SD=y +-CONFIG_CHR_DEV_ST=m +-CONFIG_CHR_DEV_OSST=m +-CONFIG_BLK_DEV_SR=m +-CONFIG_SCSI_MULTI_LUN=y + # CONFIG_SCSI_LOWLEVEL is not set + CONFIG_NETDEVICES=y +-CONFIG_MII=y +-CONFIG_NETCONSOLE=m +-CONFIG_TUN=m +-CONFIG_PHYLIB=m +-CONFIG_MDIO_BITBANG=m +-CONFIG_SLIP=m +-CONFIG_SLIP_COMPRESSED=y ++# CONFIG_NET_VENDOR_BROADCOM is not set ++# CONFIG_NET_VENDOR_CIRRUS is not set ++# CONFIG_NET_VENDOR_FARADAY is not set ++# CONFIG_NET_VENDOR_INTEL is not set ++# CONFIG_NET_VENDOR_MARVELL is not set ++# CONFIG_NET_VENDOR_MICREL is not set ++# CONFIG_NET_VENDOR_NATSEMI is not set ++# CONFIG_NET_VENDOR_SEEQ is not set ++# CONFIG_NET_VENDOR_STMICRO is not set ++# CONFIG_NET_VENDOR_WIZNET is not set ++CONFIG_USB_USBNET=y ++# CONFIG_USB_NET_AX8817X is not set ++# CONFIG_USB_NET_CDCETHER is not set ++# CONFIG_USB_NET_CDC_NCM is not set ++CONFIG_USB_NET_SMSC95XX=y ++# CONFIG_USB_NET_NET1080 is not set ++# CONFIG_USB_NET_CDC_SUBSET is not set ++# CONFIG_USB_NET_ZAURUS is not set + # CONFIG_WLAN is not set +-CONFIG_INPUT_FF_MEMLESS=m +-CONFIG_INPUT_POLLDEV=m +-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +-CONFIG_INPUT_EVDEV=m ++# CONFIG_INPUT_MOUSEDEV is not set ++CONFIG_INPUT_EVDEV=y + # CONFIG_INPUT_KEYBOARD is not set + # CONFIG_INPUT_MOUSE is not set + # CONFIG_SERIO is not set +@@ -134,165 +88,110 @@ CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_TTY_PRINTK=y -# CONFIG_HW_RANDOM is not set -+CONFIG_HW_RANDOM_BCM2708=m ++CONFIG_HW_RANDOM=y ++CONFIG_HW_RANDOM_BCM2708=y CONFIG_RAW_DRIVER=y - CONFIG_BRCM_CHAR_DRIVERS=y - CONFIG_BCM_VC_CMA=y --- -1.8.1.5 - - -From 841472055ea7d7ad9fda6f33f799a51d76ad05dc Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 1 Feb 2013 19:54:05 +0000 -Subject: [PATCH 142/169] Add raid0 module - ---- - arch/arm/configs/bcmrpi_defconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 62985f4..570a312 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -361,6 +361,7 @@ CONFIG_SCSI_MULTI_LUN=y - CONFIG_SCSI_ISCSI_ATTRS=y - CONFIG_ISCSI_TCP=m - CONFIG_MD=y -+CONFIG_MD_RAID0=m - CONFIG_BLK_DEV_DM=m - CONFIG_DM_CRYPT=m - CONFIG_DM_SNAPSHOT=m --- -1.8.1.5 - - -From e57401a0e660886a45fe1ada455ffbca80ef1232 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 7 Feb 2013 17:04:13 +0000 -Subject: [PATCH 143/169] Add missing newlines to log messages - ---- - drivers/cpufreq/bcm2835-cpufreq.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/drivers/cpufreq/bcm2835-cpufreq.c b/drivers/cpufreq/bcm2835-cpufreq.c -index 6ff1edb..5a19212 100755 ---- a/drivers/cpufreq/bcm2835-cpufreq.c -+++ b/drivers/cpufreq/bcm2835-cpufreq.c -@@ -91,7 +91,7 @@ static uint32_t bcm2835_cpufreq_set_clock(int cur_rate, int arm_rate) - if (s == 0 && (msg.request_code & 0x80000000)) - actual_rate = msg.tag.val/1000; - -- print_debug("Setting new frequency = %d -> %d (actual %d)", cur_rate, arm_rate, actual_rate); -+ print_debug("Setting new frequency = %d -> %d (actual %d)\n", cur_rate, arm_rate, actual_rate); - return actual_rate; - } - -@@ -117,7 +117,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag) - if (s == 0 && (msg.request_code & 0x80000000)) - arm_rate = msg.tag.val/1000; - -- print_debug("%s frequency = %d", -+ print_debug("%s frequency = %d\n", - tag == VCMSG_GET_CLOCK_RATE ? "Current": - tag == VCMSG_GET_MIN_CLOCK ? "Min": - tag == VCMSG_GET_MAX_CLOCK ? "Max": -@@ -133,7 +133,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag) - */ - static int __init bcm2835_cpufreq_module_init(void) - { -- print_debug("IN"); -+ print_debug("IN\n"); - return cpufreq_register_driver(&bcm2835_cpufreq_driver); - } - -@@ -144,7 +144,7 @@ static int __init bcm2835_cpufreq_module_init(void) - */ - static void __exit bcm2835_cpufreq_module_exit(void) - { -- print_debug("IN"); -+ print_debug("IN\n"); - cpufreq_unregister_driver(&bcm2835_cpufreq_driver); - return; - } -@@ -164,7 +164,7 @@ static int bcm2835_cpufreq_driver_init(struct cpufreq_policy *policy) - policy->max = policy->cpuinfo.max_freq = bcm2835_cpufreq_get_clock(VCMSG_GET_MAX_CLOCK); - policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); - -- print_info("min=%d max=%d cur=%d", policy->min, policy->max, policy->cur); -+ print_info("min=%d max=%d cur=%d\n", policy->min, policy->max, policy->cur); - return 0; - } - -@@ -178,7 +178,7 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned - { - unsigned int target = target_freq; - unsigned int cur = policy->cur; -- print_debug("%s: min=%d max=%d cur=%d target=%d",policy->governor->name,policy->min,policy->max,policy->cur,target_freq); -+ print_debug("%s: min=%d max=%d cur=%d target=%d\n",policy->governor->name,policy->min,policy->max,policy->cur,target_freq); - - /* if we are above min and using ondemand, then just use max */ - if (strcmp("ondemand", policy->governor->name)==0 && target > policy->min) -@@ -192,18 +192,18 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned - - if (!policy->cur) - { -- print_err("Error occurred setting a new frequency (%d)!", target); -+ print_err("Error occurred setting a new frequency (%d)!\n", target); - policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); - return -EINVAL; - } -- print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)", cur, policy->cur, policy->min, policy->max, target_freq, target); -+ print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)\n", cur, policy->cur, policy->min, policy->max, target_freq, target); - return 0; - } - - static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu) - { - unsigned int actual_rate = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); -- print_debug("%d", actual_rate); -+ print_debug("cpu=%d\n", actual_rate); - return actual_rate; - } - -@@ -215,7 +215,7 @@ static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu) - - static int bcm2835_cpufreq_driver_verify(struct cpufreq_policy *policy) - { -- print_info("switching to governor %s", policy->governor->name); -+ print_info("switching to governor %s\n", policy->governor->name); - return 0; - } - --- -1.8.1.5 - - -From 1d7b6f035b5a2ad7bfad61598cfb9ef284d7ce7f Mon Sep 17 00:00:00 2001 -From: Technion -Date: Mon, 11 Feb 2013 22:08:53 +1100 -Subject: [PATCH 144/169] Changed wording on logging. Previously, we received - errors like this: mmc0: could read SD Status register (SSR) at the 3th - attempt A more sensible response is now returned. A typo also fixed in - comments. - ---- - drivers/mmc/core/sd.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c -index 3302478..5366b31 100644 ---- a/drivers/mmc/core/sd.c -+++ b/drivers/mmc/core/sd.c -@@ -238,7 +238,7 @@ static int mmc_read_scr(struct mmc_card *card) - - err = mmc_app_send_scr(card, card->raw_scr); - if( !err ) -- break; // sucess!!! -+ break; // success!!! - - touch_nmi_watchdog(); // we are still alive! - -@@ -320,7 +320,7 @@ static int mmc_read_ssr(struct mmc_card *card) - - if( tries > 1 ) - { -- pr_info("%s: could read SD Status register (SSR) at the %dth attempt\n", mmc_hostname(card->host), tries ); -+ pr_info("%s: read SD Status register (SSR) after %d attempts\n", mmc_hostname(card->host), tries ); - } - - for (i = 0; i < 16; i++) --- -1.8.1.5 - - -From a15bf5b4e313a8f84d31774b8d18ed9e2e7b751a Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 12 Feb 2013 01:04:21 +0000 -Subject: [PATCH 145/169] Fix for low bogomips value reported. The delay loop - was badly aligned and generated extra stalls - ---- - arch/arm/mach-bcm2708/bcm2708.c | 9 +++------ - arch/arm/mach-bcm2708/delay.S | 1 + - 2 files changed, 4 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 8f67092..fe623eb 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -160,13 +160,12 @@ static inline uint32_t timer_read(void) - return readl(__io_address(ST_BASE + 0x04)); - } - -+#ifdef ARCH_HAS_READ_CURRENT_TIMER - int read_current_timer(unsigned long *timer_val) - { - *timer_val = timer_read(); - return 0; - } -- --#ifdef CONFIG_ARM_ARCH_TIMER - EXPORT_SYMBOL(read_current_timer); - #endif - -@@ -759,8 +758,6 @@ void __init bcm2708_init(void) - static void timer_set_mode(enum clock_event_mode mode, - struct clock_event_device *clk) - { -- unsigned long stc; -- - switch (mode) { - case CLOCK_EVT_MODE_ONESHOT: /* Leave the timer disabled, .set_next_event will enable it */ - case CLOCK_EVT_MODE_SHUTDOWN: -@@ -887,7 +884,7 @@ static inline void bcm2708_init_led(void) - - /* The assembly versions in delay.S don't account for core freq changing in cpufreq driver */ - /* Use 1MHz system timer for busy waiting */ --void bcm2708_udelay(unsigned long usecs) -+static void bcm2708_udelay(unsigned long usecs) - { - unsigned long start = timer_read(); - unsigned long now; -@@ -897,7 +894,7 @@ void bcm2708_udelay(unsigned long usecs) - } - - --void bcm2708_const_udelay(unsigned long scaled_usecs) -+static void bcm2708_const_udelay(unsigned long scaled_usecs) - { - /* want /107374, this is about 3% bigger. We know usecs is less than 2000, so shouldn't overflow */ - const unsigned long usecs = scaled_usecs * 10 >> 20; -diff --git a/arch/arm/mach-bcm2708/delay.S b/arch/arm/mach-bcm2708/delay.S -index 91754d6..06f4780 100644 ---- a/arch/arm/mach-bcm2708/delay.S -+++ b/arch/arm/mach-bcm2708/delay.S -@@ -12,6 +12,7 @@ - #include - - .text -+.align 3 @ 8 byte alignment seems to be needed to avoid fetching stalls - @ Delay routine - ENTRY(bcm2708_delay) - subs r0, r0, #1 --- -1.8.1.5 - - -From 023aa8ae57038fe6c20b77219bc147bffc284392 Mon Sep 17 00:00:00 2001 -From: P33M -Date: Fri, 15 Feb 2013 22:36:47 +0000 -Subject: [PATCH 146/169] dwc_otg: Fix unsafe access of QTD during URB enqueue - -In dwc_otg_hcd_urb_enqueue during qtd creation, it was possible that the -transaction could complete almost immediately after the qtd was assigned -to a host channel during URB enqueue, which meant the qtd pointer was no -longer valid having been completed and removed. Usually, this resulted in -an OOPS during URB submission. By predetermining whether transactions -need to be queued or not, this unsafe pointer access is avoided. - -This bug was only evident on the Pi model A where a device was attached -that had no periodic endpoints (e.g. USB pendrive or some wlan devices). ---- - drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 23 ++++++++++++----------- - drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 2 +- - 2 files changed, 13 insertions(+), 12 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -index d5c94f4..e653d84 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -@@ -462,6 +462,8 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, - { - dwc_irqflags_t flags; - int retval = 0; -+ uint8_t needs_scheduling = 0; -+ dwc_otg_transaction_type_e tr_type; - dwc_otg_qtd_t *qtd; - gintmsk_data_t intr_mask = {.d32 = 0 }; - -@@ -493,22 +495,22 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, - return -DWC_E_NO_MEMORY; - } - #endif -- retval = -- dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc); -+ intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); -+ if(!intr_mask.b.sofintr) needs_scheduling = 1; -+ if((((dwc_otg_qh_t *)ep_handle)->ep_type == UE_BULK) && !(qtd->urb->flags & URB_GIVEBACK_ASAP)) -+ /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */ -+ needs_scheduling = 0; -+ -+ retval = dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc); - // creates a new queue in ep_handle if it doesn't exist already - if (retval < 0) { - DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. " - "Error status %d\n", retval); - dwc_otg_hcd_qtd_free(qtd); -+ return retval; - } -- intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk); -- if (!intr_mask.b.sofintr && retval == 0) { -- dwc_otg_transaction_type_e tr_type; -- if ((qtd->qh->ep_type == UE_BULK) -- && !(qtd->urb->flags & URB_GIVEBACK_ASAP)) { -- /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */ -- return 0; -- } -+ -+ if(needs_scheduling) { - DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); - tr_type = dwc_otg_hcd_select_transactions(hcd); - if (tr_type != DWC_OTG_TRANSACTION_NONE) { -@@ -516,7 +518,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd, - } - DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); - } -- - return retval; - } - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -index b337e1b..b3e6e52 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c -@@ -937,7 +937,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, - if (*qh == NULL) { - *qh = dwc_otg_hcd_qh_create(hcd, urb, atomic_alloc); - if (*qh == NULL) { -- retval = -1; -+ retval = -DWC_E_NO_MEMORY; - goto done; - } - } --- -1.8.1.5 - - -From c0b158bac26bdb6e3fe2744bf855b68be51a7dc9 Mon Sep 17 00:00:00 2001 -From: P33M -Date: Fri, 15 Feb 2013 22:38:40 +0000 -Subject: [PATCH 147/169] dwc_otg: Fix incorrect URB allocation error handling - -If the memory allocation for a dwc_otg_urb failed, the kernel would OOPS -because for some reason a member of the *unallocated* struct was set to -zero. Error handling changed to fail correctly. ---- - drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 16 ++++++---------- - 1 file changed, 6 insertions(+), 10 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -index e653d84..fcec97f 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -@@ -3136,17 +3136,13 @@ dwc_otg_hcd_urb_t *dwc_otg_hcd_urb_alloc(dwc_otg_hcd_t * hcd, - else - dwc_otg_urb = DWC_ALLOC(size); - -- if (NULL != dwc_otg_urb) -- dwc_otg_urb->packet_count = iso_desc_count; -+ if (dwc_otg_urb) -+ dwc_otg_urb->packet_count = iso_desc_count; - else { -- dwc_otg_urb->packet_count = 0; -- if (size != 0) { -- DWC_ERROR("**** DWC OTG HCD URB alloc - " -- "%salloc of %db failed\n", -- atomic_alloc?"atomic ":"", size); -- } -- } -- -+ DWC_ERROR("**** DWC OTG HCD URB alloc - " -+ "%salloc of %db failed\n", -+ atomic_alloc?"atomic ":"", size); -+ } - return dwc_otg_urb; - } - --- -1.8.1.5 - - -From a6bc277ad8a5f7fd8e63ef99e92c1af99ea89d4d Mon Sep 17 00:00:00 2001 -From: pjennings -Date: Wed, 20 Feb 2013 17:51:43 -0600 -Subject: [PATCH 148/169] Added inverted transmitter support - ---- - drivers/staging/media/lirc/lirc_rpi.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c -index 96acab0..5bb0dfe 100644 ---- a/drivers/staging/media/lirc/lirc_rpi.c -+++ b/drivers/staging/media/lirc/lirc_rpi.c -@@ -68,6 +68,8 @@ - static int sense = -1; - /* use softcarrier by default */ - static int softcarrier = 1; -+/* 0 = do not invert output, 1 = invert output */ -+static int invert = 0; - - struct gpio_chip *gpiochip; - struct irq_chip *irqchip; -@@ -135,10 +137,10 @@ static long send_pulse_softcarrier(unsigned long length) - actual = 0; target = 0; flag = 0; - while (actual < length) { - if (flag) { -- gpiochip->set(gpiochip, gpio_out_pin, 0); -+ gpiochip->set(gpiochip, gpio_out_pin, invert); - target += space_width; - } else { -- gpiochip->set(gpiochip, gpio_out_pin, 1); -+ gpiochip->set(gpiochip, gpio_out_pin, !invert); - target += pulse_width; - } - d = (target - actual - -@@ -162,7 +164,7 @@ static long send_pulse(unsigned long length) - if (softcarrier) { - return send_pulse_softcarrier(length); - } else { -- gpiochip->set(gpiochip, gpio_out_pin, 1); -+ gpiochip->set(gpiochip, gpio_out_pin, !invert); - safe_udelay(length); - return 0; - } -@@ -170,7 +172,7 @@ static long send_pulse(unsigned long length) - - static void send_space(long length) - { -- gpiochip->set(gpiochip, gpio_out_pin, 0); -+ gpiochip->set(gpiochip, gpio_out_pin, invert); - if (length <= 0) - return; - safe_udelay(length); -@@ -318,7 +320,7 @@ static int init_port(void) - - gpiochip->direction_input(gpiochip, gpio_in_pin); - gpiochip->direction_output(gpiochip, gpio_out_pin, 1); -- gpiochip->set(gpiochip, gpio_out_pin, 0); -+ gpiochip->set(gpiochip, gpio_out_pin, invert); - - irq = gpiochip->to_irq(gpiochip, gpio_in_pin); - dprintk("to_irq %d\n", irq); -@@ -457,7 +459,7 @@ static ssize_t lirc_write(struct file *file, const char *buf, - else - delta = send_pulse(wbuf[i]); - } -- gpiochip->set(gpiochip, gpio_out_pin, 0); -+ gpiochip->set(gpiochip, gpio_out_pin, invert); - - spin_unlock_irqrestore(&lock, flags); - kfree(wbuf); -@@ -683,5 +685,8 @@ static void __exit lirc_rpi_exit_module(void) - module_param(softcarrier, bool, S_IRUGO); - MODULE_PARM_DESC(softcarrier, "Software carrier (0 = off, 1 = on, default on)"); - -+module_param(invert, bool, S_IRUGO); -+MODULE_PARM_DESC(invert, "Invert output (0 = off, 1 = on, default off"); -+ - module_param(debug, bool, S_IRUGO | S_IWUSR); - MODULE_PARM_DESC(debug, "Enable debugging messages"); --- -1.8.1.5 - - -From fdb340631bcc173ca068d800fc495ec0ad272682 Mon Sep 17 00:00:00 2001 -From: Kamal Mostafa -Date: Thu, 21 Feb 2013 16:42:07 -0800 -Subject: [PATCH 149/169] fbcon: clear the logo bitmap from the margin area - -Explicitly clear_margins when clearing the logo, in case the font dimensions -are non-integral to the framebuffer dimensions. - -Signed-off-by: Kamal Mostafa -Cc: Florian Tobias Schandinat -Cc: Tomi Valkeinen -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - drivers/video/console/fbcon.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c -index 501c599..3cd6759 100644 ---- a/drivers/video/console/fbcon.c -+++ b/drivers/video/console/fbcon.c -@@ -1275,8 +1275,16 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, - if (!height || !width) - return; - -- if (sy < vc->vc_top && vc->vc_top == logo_lines) -+ if (sy < vc->vc_top && vc->vc_top == logo_lines) { - vc->vc_top = 0; -+ /* -+ * If the font dimensions are not an integral of the display -+ * dimensions then the ops->clear below won't end up clearing -+ * the margins. Call clear_margins here in case the logo -+ * bitmap stretched into the margin area. -+ */ -+ fbcon_clear_margins(vc, 0); -+ } - - /* Split blits that cross physical y_wrap boundary */ - --- -1.8.1.5 - - -From 1eae91a9090a6f98b5ed13c3e3a19bdb6340da9d Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 24 Feb 2013 15:51:31 +0000 -Subject: [PATCH 150/169] Add config request CONFIG_IP_SCTP - ---- - arch/arm/configs/bcmrpi_defconfig | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 570a312..5e853f82 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -98,7 +98,6 @@ CONFIG_NF_CONNTRACK_ZONES=y - CONFIG_NF_CONNTRACK_EVENTS=y - CONFIG_NF_CONNTRACK_TIMESTAMP=y - CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_SCTP=m - CONFIG_NF_CT_PROTO_UDPLITE=m - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m -@@ -161,7 +160,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m - CONFIG_NETFILTER_XT_MATCH_RATEEST=m - CONFIG_NETFILTER_XT_MATCH_REALM=m - CONFIG_NETFILTER_XT_MATCH_RECENT=m --CONFIG_NETFILTER_XT_MATCH_SCTP=m - CONFIG_NETFILTER_XT_MATCH_SOCKET=m - CONFIG_NETFILTER_XT_MATCH_STATE=m - CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -@@ -237,6 +235,8 @@ CONFIG_BRIDGE_EBT_SNAT=m - CONFIG_BRIDGE_EBT_LOG=m - CONFIG_BRIDGE_EBT_ULOG=m - CONFIG_BRIDGE_EBT_NFLOG=m -+CONFIG_IP_SCTP=m -+CONFIG_SCTP_HMAC_SHA1=y - CONFIG_L2TP=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m --- -1.8.1.5 - - -From fa1e4d5d11f63b7952f4946f960392e496f313bc Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 24 Feb 2013 16:30:57 +0000 -Subject: [PATCH 151/169] Add retry on error and tidy of temperature driver - ---- - drivers/thermal/bcm2835-thermal.c | 78 ++++++++++++++------------------------- - 1 file changed, 27 insertions(+), 51 deletions(-) - -diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c -index 3f9a733..85fceb5 100644 ---- a/drivers/thermal/bcm2835-thermal.c -+++ b/drivers/thermal/bcm2835-thermal.c -@@ -33,7 +33,6 @@ - #define print_debug(fmt,...) - #endif - #define print_err(fmt,...) printk(KERN_ERR "%s:%s:%d: "fmt"\n", MODULE_NAME, __func__,__LINE__, ##__VA_ARGS__) --#define print_info(fmt,...) printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ##__VA_ARGS__) - - #define VC_TAG_GET_TEMP 0x00030006 - #define VC_TAG_GET_MAX_TEMP 0x0003000A -@@ -66,12 +65,6 @@ struct bcm2835_thermal_data { - struct vc_msg msg; - }; - --/* --- PROTOTYPES --- */ --static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *); --static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int, unsigned long *); --static int bcm2835_get_trip_type(struct thermal_zone_device *thermal_dev, int trip_num, enum thermal_trip_type *trip_type); --static int bcm2835_get_mode(struct thermal_zone_device *thermal_dev, enum thermal_device_mode *dev_mode); -- - /* --- GLOBALS --- */ - static struct bcm2835_thermal_data bcm2835_data; - -@@ -79,64 +72,47 @@ struct bcm2835_thermal_data { - static struct thermal_zone_device_ops ops; - - /* --- FUNCTIONS --- */ --static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp) --{ -- int result; - -+static int bcm2835_get_temp_or_max(struct thermal_zone_device *thermal_dev, unsigned long *temp, unsigned tag_id) -+{ -+ int result = -1, retry = 3; - print_debug("IN"); - -- /* wipe all previous message data */ -- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); -- -- /* prepare message */ -- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; -- bcm2835_data.msg.tag.buffer_size = 8; -- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_MAX_TEMP; -- -- /* send the message */ -- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); -+ *temp = 0; -+ while (result != 0 && retry-- > 0) { -+ /* wipe all previous message data */ -+ memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); -+ -+ /* prepare message */ -+ bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; -+ bcm2835_data.msg.tag.buffer_size = 8; -+ bcm2835_data.msg.tag.tag_id = tag_id; -+ -+ /* send the message */ -+ result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); -+ print_debug("Got %stemperature as %u (%d,%x)\n", tag_id==VC_TAG_GET_MAX_TEMP ? "max ":"", (uint)bcm2835_data.msg.tag.val, result, bcm2835_data.msg.request_code); -+ if (!(bcm2835_data.msg.request_code & 0x80000000)) -+ result = -1; -+ } - - /* check if it was all ok and return the rate in milli degrees C */ -- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000)) -+ if (result == 0) - *temp = (uint)bcm2835_data.msg.tag.val; -- #ifdef THERMAL_DEBUG_ENABLE - else -- print_debug("Failed to get temperature!"); -- #endif -- print_debug("Got temperature as %u",(uint)*temp); -+ print_err("Failed to get temperature! (%x:%d)\n", tag_id, result); - print_debug("OUT"); -- return 0; -+ return result; - } - - static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *temp) - { -- int result; -- -- print_debug("IN"); -- -- /* wipe all previous message data */ -- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg); -- -- /* prepare message */ -- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg; -- bcm2835_data.msg.tag.buffer_size = 8; -- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_TEMP; -- -- /* send the message */ -- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg); -- -- /* check if it was all ok and return the rate in milli degrees C */ -- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000)) -- *temp = (uint)bcm2835_data.msg.tag.val; -- #ifdef THERMAL_DEBUG_ENABLE -- else -- print_debug("Failed to get temperature!"); -- #endif -- print_debug("Got temperature as %u",(uint)*temp); -- print_debug("OUT"); -- return 0; -+ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_TEMP); - } - -+static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp) -+{ -+ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_MAX_TEMP); -+} - - static int bcm2835_get_trip_type(struct thermal_zone_device * thermal_dev, int trip_num, enum thermal_trip_type *trip_type) - { --- -1.8.1.5 - - -From 982339c6c87f83b47684d28e05a50450ca4d4b4c Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 25 Feb 2013 11:37:20 +0000 -Subject: [PATCH 152/169] Add SPEAKUP and SPEAKUP_SYNTH_SOFT kernel modules - ---- - arch/arm/configs/bcmrpi_defconfig | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 5e853f82..4e52bbb 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -857,6 +857,8 @@ CONFIG_R8712U=m - CONFIG_VT6656=m - CONFIG_ZRAM=m - CONFIG_ZSMALLOC=m -+CONFIG_SPEAKUP=m -+CONFIG_SPEAKUP_SYNTH_SOFT=m - CONFIG_STAGING_MEDIA=y - CONFIG_DVB_AS102=m - CONFIG_EASYCAP=m --- -1.8.1.5 - - -From 8a5753e2d8da71f101bad7a2dc81247598bb5bd2 Mon Sep 17 00:00:00 2001 -From: P33M -Date: Thu, 28 Feb 2013 16:52:51 +0000 -Subject: [PATCH 153/169] dwc_otg: fix potential use-after-free case in - interrupt handler - -If a transaction had previously aborted, certain interrupts are -enabled to track error counts and reset where necessary. On IN -endpoints the host generates an ACK interrupt near-simultaneously -with completion of transfer. In the case where this transfer had -previously had an error, this results in a use-after-free on -the QTD memory space with a 1-byte length being overwritten to -0x00. ---- - drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -index e8c91e7..0c81a64 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -@@ -2223,7 +2223,8 @@ int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd, uint32_t num) - retval |= handle_hc_nak_intr(dwc_otg_hcd, hc, hc_regs, qtd); - } - if (hcint.b.ack) { -- retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd); -+ if(!hcint.b.chhltd) -+ retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd); - } - if (hcint.b.nyet) { - retval |= handle_hc_nyet_intr(dwc_otg_hcd, hc, hc_regs, qtd); --- -1.8.1.5 - - -From 694aefcf4053d6f313ea58231d853741469d34ea Mon Sep 17 00:00:00 2001 -From: Zeta -Date: Sat, 2 Mar 2013 15:15:39 +0100 -Subject: [PATCH 154/169] fix missing modulo for bit in bank computation, in - bcm2708 gpio irq mask - ---- - arch/arm/mach-bcm2708/bcm2708_gpio.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c -index c8161e1..2d87250 100644 ---- a/arch/arm/mach-bcm2708/bcm2708_gpio.c -+++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c -@@ -173,6 +173,8 @@ static void bcm2708_gpio_irq_mask(struct irq_data *d) - unsigned long rising = readl(gpio->base + GPIOREN(gb)); - unsigned long falling = readl(gpio->base + GPIOFEN(gb)); - -+ gn = gn % 32; -+ - writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb)); - writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb)); - } --- -1.8.1.5 - - -From 6b3ce5abfc1122aec34bc807bfa2f84a8ca815d1 Mon Sep 17 00:00:00 2001 -From: P33M -Date: Sun, 3 Mar 2013 14:45:53 +0000 -Subject: [PATCH 155/169] dwc_otg: add handling of SPLIT transaction data - toggle errors - -Previously a data toggle error on packets from a USB1.1 device behind -a TT would result in the Pi locking up as the driver never handled -the associated interrupt. Patch adds basic retry mechanism and -interrupt acknowledgement to cater for either a chance toggle error or -for devices that have a broken initial toggle state (FT8U232/FT232BM). ---- - drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 19 ++++++++++++++----- - 1 file changed, 14 insertions(+), 5 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -index 0c81a64..16e8c6c 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c -@@ -1921,13 +1921,20 @@ static int32_t handle_hc_datatglerr_intr(dwc_otg_hcd_t * hcd, - dwc_otg_qtd_t * qtd) - { - DWC_DEBUGPL(DBG_HCDI, "--Host Channel %d Interrupt: " -- "Data Toggle Error--\n", hc->hc_num); -+ "Data Toggle Error on %s transfer--\n", -+ hc->hc_num, (hc->ep_is_in ? "IN" : "OUT")); - -- if (hc->ep_is_in) { -+ /* Data toggles on split transactions cause the hc to halt. -+ * restart transfer */ -+ if(hc->qh->do_split) -+ { -+ qtd->error_count++; -+ dwc_otg_hcd_save_data_toggle(hc, hc_regs, qtd); -+ update_urb_state_xfer_intr(hc, hc_regs, -+ qtd->urb, qtd, DWC_OTG_HC_XFER_XACT_ERR); -+ halt_channel(hcd, hc, qtd, DWC_OTG_HC_XFER_XACT_ERR); -+ } else if (hc->ep_is_in) { - qtd->error_count = 0; -- } else { -- DWC_ERROR("Data Toggle Error on OUT transfer," -- "channel %d\n", hc->hc_num); - } - - disable_hc_int(hc_regs, datatglerr); -@@ -2080,6 +2087,8 @@ static void handle_hc_chhltd_intr_dma(dwc_otg_hcd_t * hcd, - handle_hc_babble_intr(hcd, hc, hc_regs, qtd); - } else if (hcint.b.frmovrun) { - handle_hc_frmovrun_intr(hcd, hc, hc_regs, qtd); -+ } else if (hcint.b.datatglerr) { -+ handle_hc_datatglerr_intr(hcd, hc, hc_regs, qtd); - } else if (!out_nak_enh) { - if (hcint.b.nyet) { - /* --- -1.8.1.5 - - -From 596f4a74a8406a5871598feaead93a0ec8a3a38f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 26 Mar 2013 22:58:30 +0000 -Subject: [PATCH 156/169] Add bitbanging pullups, use them for w1-gpio - -Allows parasite power to work, uses module option pullup=1 ---- - drivers/w1/masters/w1-gpio.c | 20 ++++++++++++++++++++ - drivers/w1/w1.h | 6 ++++++ - drivers/w1/w1_int.c | 25 ++++++++++++++----------- - drivers/w1/w1_io.c | 14 +++++++++++--- - 4 files changed, 51 insertions(+), 14 deletions(-) - -diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c -index 012817a..a0da999 100644 ---- a/drivers/w1/masters/w1-gpio.c -+++ b/drivers/w1/masters/w1-gpio.c -@@ -23,6 +23,9 @@ - #include "../w1.h" - #include "../w1_int.h" - -+static int w1_gpio_pullup = 0; -+module_param_named(pullup, w1_gpio_pullup, int, 0); -+ - static void w1_gpio_write_bit_dir(void *data, u8 bit) - { - struct w1_gpio_platform_data *pdata = data; -@@ -47,6 +50,16 @@ static u8 w1_gpio_read_bit(void *data) - return gpio_get_value(pdata->pin) ? 1 : 0; - } - -+static void w1_gpio_bitbang_pullup(void *data, u8 on) -+{ -+ struct w1_gpio_platform_data *pdata = data; -+ -+ if (on) -+ gpio_direction_output(pdata->pin, 1); -+ else -+ gpio_direction_input(pdata->pin); -+} -+ - static struct of_device_id w1_gpio_dt_ids[] = { - { .compatible = "w1-gpio" }, - {} -@@ -131,6 +144,13 @@ static int w1_gpio_probe(struct platform_device *pdev) - master->write_bit = w1_gpio_write_bit_dir; - } - -+ if (w1_gpio_pullup) -+ if (pdata->is_open_drain) -+ printk(KERN_ERR "w1-gpio 'pullup' option " -+ "doesn't work with open drain GPIO\n"); -+ else -+ master->bitbang_pullup = w1_gpio_bitbang_pullup; -+ - err = w1_add_master_device(master); - if (err) { - dev_err(&pdev->dev, "w1_add_master device failed\n"); -diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h -index 45908e5..463d019 100644 ---- a/drivers/w1/w1.h -+++ b/drivers/w1/w1.h -@@ -148,6 +148,12 @@ struct w1_bus_master - */ - u8 (*set_pullup)(void *, int); - -+ /** -+ * Turns the pullup on/off in bitbanging mode, takes an on/off argument. -+ * @return -1=Error, 0=completed -+ */ -+ void (*bitbang_pullup)(void *, u8); -+ - /** Really nice hardware can handles the different types of ROM search - * w1_master* is passed to the slave found callback. - */ -diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c -index 5a98649..eb906e8 100644 ---- a/drivers/w1/w1_int.c -+++ b/drivers/w1/w1_int.c -@@ -110,26 +110,29 @@ int w1_add_master_device(struct w1_bus_master *master) - struct w1_netlink_msg msg; - int id, found; - -- /* validate minimum functionality */ -- if (!(master->touch_bit && master->reset_bus) && -- !(master->write_bit && master->read_bit) && -+ /* validate minimum functionality */ -+ if (!(master->touch_bit && master->reset_bus) && -+ !(master->write_bit && master->read_bit) && - !(master->write_byte && master->read_byte && master->reset_bus)) { - printk(KERN_ERR "w1_add_master_device: invalid function set\n"); - return(-EINVAL); -- } -- /* While it would be electrically possible to make a device that -- * generated a strong pullup in bit bang mode, only hardware that -- * controls 1-wire time frames are even expected to support a strong -- * pullup. w1_io.c would need to support calling set_pullup before -- * the last write_bit operation of a w1_write_8 which it currently -- * doesn't. -- */ -+ } -+ -+ /* bitbanging hardware uses bitbang_pullup, other hardware uses set_pullup -+ * and takes care of timing itself */ - if (!master->write_byte && !master->touch_bit && master->set_pullup) { - printk(KERN_ERR "w1_add_master_device: set_pullup requires " - "write_byte or touch_bit, disabling\n"); - master->set_pullup = NULL; - } - -+ if (master->set_pullup && master->bitbang_pullup) -+ { -+ printk(KERN_ERR "w1_add_master_device: set_pullup should not " -+ "be set when bitbang_pullup is used, disabling\n"); -+ master->set_pullup = NULL; -+ } -+ - /* Lock until the device is added (or not) to w1_masters. */ - mutex_lock(&w1_mlock); - /* Search for the first available id (starting at 1). */ -diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c -index e10acc2..e546fdc 100644 ---- a/drivers/w1/w1_io.c -+++ b/drivers/w1/w1_io.c -@@ -127,10 +127,18 @@ static void w1_pre_write(struct w1_master *dev) - static void w1_post_write(struct w1_master *dev) - { - if (dev->pullup_duration) { -- if (dev->enable_pullup && dev->bus_master->set_pullup) -- dev->bus_master->set_pullup(dev->bus_master->data, 0); -- else -+ if (dev->enable_pullup) { -+ if (dev->bus_master->set_pullup) { -+ dev->bus_master->set_pullup(dev->bus_master->data, 0); -+ } else if (dev->bus_master->bitbang_pullup) { -+ dev->bus_master->bitbang_pullup(dev->bus_master->data, 1); -+ msleep(dev->pullup_duration); -+ dev->bus_master->bitbang_pullup(dev->bus_master->data, 0); -+ } -+ } else { - msleep(dev->pullup_duration); -+ } -+ - dev->pullup_duration = 0; - } - } --- -1.8.1.5 - - -From beacc79967fb9f87cbb29cf192a79339340fc0dd Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 26 Mar 2013 23:04:30 +0000 -Subject: [PATCH 157/169] Run Lindent to fix whitespace, fix braces - ---- - drivers/w1/masters/w1-gpio.c | 8 +-- - drivers/w1/w1.h | 141 ++++++++++++++++++++----------------------- - drivers/w1/w1_int.c | 63 +++++++++---------- - drivers/w1/w1_io.c | 98 ++++++++++++++++++------------ - 4 files changed, 162 insertions(+), 148 deletions(-) - -diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c -index a0da999..4bdaec0 100644 ---- a/drivers/w1/masters/w1-gpio.c -+++ b/drivers/w1/masters/w1-gpio.c -@@ -147,7 +147,7 @@ static int w1_gpio_probe(struct platform_device *pdev) - if (w1_gpio_pullup) - if (pdata->is_open_drain) - printk(KERN_ERR "w1-gpio 'pullup' option " -- "doesn't work with open drain GPIO\n"); -+ "doesn't work with open drain GPIO\n"); - else - master->bitbang_pullup = w1_gpio_bitbang_pullup; - -@@ -167,12 +167,12 @@ static int w1_gpio_probe(struct platform_device *pdev) - - return 0; - -- free_gpio_ext_pu: -+free_gpio_ext_pu: - if (gpio_is_valid(pdata->ext_pullup_enable_pin)) - gpio_free(pdata->ext_pullup_enable_pin); -- free_gpio: -+free_gpio: - gpio_free(pdata->pin); -- free_master: -+free_master: - kfree(master); - - return err; -diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h -index 463d019..40123e3 100644 ---- a/drivers/w1/w1.h -+++ b/drivers/w1/w1.h -@@ -22,16 +22,11 @@ - #ifndef __W1_H - #define __W1_H - --struct w1_reg_num --{ -+struct w1_reg_num { - #if defined(__LITTLE_ENDIAN_BITFIELD) -- __u64 family:8, -- id:48, -- crc:8; -+ __u64 family:8, id:48, crc:8; - #elif defined(__BIG_ENDIAN_BITFIELD) -- __u64 crc:8, -- id:48, -- family:8; -+ __u64 crc:8, id:48, family:8; - #else - #error "Please fix " - #endif -@@ -59,26 +54,24 @@ struct w1_reg_num - - #define W1_SLAVE_ACTIVE 0 - --struct w1_slave --{ -- struct module *owner; -- unsigned char name[W1_MAXNAMELEN]; -- struct list_head w1_slave_entry; -- struct w1_reg_num reg_num; -- atomic_t refcnt; -- u8 rom[9]; -- u32 flags; -- int ttl; -- -- struct w1_master *master; -- struct w1_family *family; -- void *family_data; -- struct device dev; -- struct completion released; -+struct w1_slave { -+ struct module *owner; -+ unsigned char name[W1_MAXNAMELEN]; -+ struct list_head w1_slave_entry; -+ struct w1_reg_num reg_num; -+ atomic_t refcnt; -+ u8 rom[9]; -+ u32 flags; -+ int ttl; -+ -+ struct w1_master *master; -+ struct w1_family *family; -+ void *family_data; -+ struct device dev; -+ struct completion released; - }; - --typedef void (*w1_slave_found_callback)(struct w1_master *, u64); -- -+typedef void (*w1_slave_found_callback) (struct w1_master *, u64); - - /** - * Note: read_bit and write_bit are very low level functions and should only -@@ -87,19 +80,18 @@ struct w1_slave - * Either define read_bit and write_bit OR define, at minimum, touch_bit and - * reset_bus. - */ --struct w1_bus_master --{ -+struct w1_bus_master { - /** the first parameter in all the functions below */ -- void *data; -+ void *data; - - /** - * Sample the line level - * @return the level read (0 or 1) - */ -- u8 (*read_bit)(void *); -+ u8(*read_bit) (void *); - - /** Sets the line level */ -- void (*write_bit)(void *, u8); -+ void (*write_bit) (void *, u8); - - /** - * touch_bit is the lowest-level function for devices that really -@@ -108,102 +100,103 @@ struct w1_bus_master - * touch_bit(1) = write-1 / read cycle - * @return the bit read (0 or 1) - */ -- u8 (*touch_bit)(void *, u8); -+ u8(*touch_bit) (void *, u8); - - /** - * Reads a bytes. Same as 8 touch_bit(1) calls. - * @return the byte read - */ -- u8 (*read_byte)(void *); -+ u8(*read_byte) (void *); - - /** - * Writes a byte. Same as 8 touch_bit(x) calls. - */ -- void (*write_byte)(void *, u8); -+ void (*write_byte) (void *, u8); - - /** - * Same as a series of read_byte() calls - * @return the number of bytes read - */ -- u8 (*read_block)(void *, u8 *, int); -+ u8(*read_block) (void *, u8 *, int); - - /** Same as a series of write_byte() calls */ -- void (*write_block)(void *, const u8 *, int); -+ void (*write_block) (void *, const u8 *, int); - - /** - * Combines two reads and a smart write for ROM searches - * @return bit0=Id bit1=comp_id bit2=dir_taken - */ -- u8 (*triplet)(void *, u8); -+ u8(*triplet) (void *, u8); - - /** - * long write-0 with a read for the presence pulse detection - * @return -1=Error, 0=Device present, 1=No device present - */ -- u8 (*reset_bus)(void *); -+ u8(*reset_bus) (void *); - - /** - * Put out a strong pull-up pulse of the specified duration. - * @return -1=Error, 0=completed - */ -- u8 (*set_pullup)(void *, int); -+ u8(*set_pullup) (void *, int); - - /** - * Turns the pullup on/off in bitbanging mode, takes an on/off argument. - * @return -1=Error, 0=completed - */ -- void (*bitbang_pullup)(void *, u8); -+ void (*bitbang_pullup) (void *, u8); - - /** Really nice hardware can handles the different types of ROM search - * w1_master* is passed to the slave found callback. - */ -- void (*search)(void *, struct w1_master *, -- u8, w1_slave_found_callback); -+ void (*search) (void *, struct w1_master *, -+ u8, w1_slave_found_callback); - }; - --struct w1_master --{ -- struct list_head w1_master_entry; -- struct module *owner; -- unsigned char name[W1_MAXNAMELEN]; -- struct list_head slist; -- int max_slave_count, slave_count; -- unsigned long attempts; -- int slave_ttl; -- int initialized; -- u32 id; -- int search_count; -- -- atomic_t refcnt; -- -- void *priv; -- int priv_size; -+struct w1_master { -+ struct list_head w1_master_entry; -+ struct module *owner; -+ unsigned char name[W1_MAXNAMELEN]; -+ struct list_head slist; -+ int max_slave_count, slave_count; -+ unsigned long attempts; -+ int slave_ttl; -+ int initialized; -+ u32 id; -+ int search_count; -+ -+ atomic_t refcnt; -+ -+ void *priv; -+ int priv_size; - - /** 5V strong pullup enabled flag, 1 enabled, zero disabled. */ -- int enable_pullup; -+ int enable_pullup; - /** 5V strong pullup duration in milliseconds, zero disabled. */ -- int pullup_duration; -+ int pullup_duration; - -- struct task_struct *thread; -- struct mutex mutex; -- struct mutex bus_mutex; -+ struct task_struct *thread; -+ struct mutex mutex; -+ struct mutex bus_mutex; - -- struct device_driver *driver; -- struct device dev; -+ struct device_driver *driver; -+ struct device dev; - -- struct w1_bus_master *bus_master; -+ struct w1_bus_master *bus_master; - -- u32 seq; -+ u32 seq; - }; - - int w1_create_master_attributes(struct w1_master *); - void w1_destroy_master_attributes(struct w1_master *master); --void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb); --void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb); -+void w1_search(struct w1_master *dev, u8 search_type, -+ w1_slave_found_callback cb); -+void w1_search_devices(struct w1_master *dev, u8 search_type, -+ w1_slave_found_callback cb); - struct w1_slave *w1_search_slave(struct w1_reg_num *id); - void w1_slave_found(struct w1_master *dev, u64 rn); - void w1_search_process_cb(struct w1_master *dev, u8 search_type, -- w1_slave_found_callback cb); -+ w1_slave_found_callback cb); - struct w1_master *w1_search_master_id(u32 id); - - /* Disconnect and reconnect devices in the given family. Used for finding -@@ -226,17 +219,17 @@ void w1_search_process_cb(struct w1_master *dev, u8 search_type, - int w1_reset_resume_command(struct w1_master *); - void w1_next_pullup(struct w1_master *, int); - --static inline struct w1_slave* dev_to_w1_slave(struct device *dev) -+static inline struct w1_slave *dev_to_w1_slave(struct device *dev) - { - return container_of(dev, struct w1_slave, dev); - } - --static inline struct w1_slave* kobj_to_w1_slave(struct kobject *kobj) -+static inline struct w1_slave *kobj_to_w1_slave(struct kobject *kobj) - { - return dev_to_w1_slave(container_of(kobj, struct device, kobj)); - } - --static inline struct w1_master* dev_to_w1_master(struct device *dev) -+static inline struct w1_master *dev_to_w1_master(struct device *dev) - { - return container_of(dev, struct w1_master, dev); - } -diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c -index eb906e8..e7e3d11 100644 ---- a/drivers/w1/w1_int.c -+++ b/drivers/w1/w1_int.c -@@ -32,15 +32,15 @@ - #include "w1_netlink.h" - #include "w1_int.h" - --static int w1_search_count = -1; /* Default is continual scan */ -+static int w1_search_count = -1; /* Default is continual scan */ - module_param_named(search_count, w1_search_count, int, 0); - - static int w1_enable_pullup = 1; - module_param_named(enable_pullup, w1_enable_pullup, int, 0); - --static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, -- struct device_driver *driver, -- struct device *device) -+static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl, -+ struct device_driver *driver, -+ struct device *device) - { - struct w1_master *dev; - int err; -@@ -48,26 +48,27 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, - /* - * We are in process context(kernel thread), so can sleep. - */ -- dev = kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master), GFP_KERNEL); -+ dev = -+ kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master), -+ GFP_KERNEL); - if (!dev) { - printk(KERN_ERR -- "Failed to allocate %zd bytes for new w1 device.\n", -- sizeof(struct w1_master)); -+ "Failed to allocate %zd bytes for new w1 device.\n", -+ sizeof(struct w1_master)); - return NULL; - } - -- - dev->bus_master = (struct w1_bus_master *)(dev + 1); - -- dev->owner = THIS_MODULE; -- dev->max_slave_count = slave_count; -- dev->slave_count = 0; -- dev->attempts = 0; -- dev->initialized = 0; -- dev->id = id; -- dev->slave_ttl = slave_ttl; -- dev->search_count = w1_search_count; -- dev->enable_pullup = w1_enable_pullup; -+ dev->owner = THIS_MODULE; -+ dev->max_slave_count = slave_count; -+ dev->slave_count = 0; -+ dev->attempts = 0; -+ dev->initialized = 0; -+ dev->id = id; -+ dev->slave_ttl = slave_ttl; -+ dev->search_count = w1_search_count; -+ dev->enable_pullup = w1_enable_pullup; - - /* 1 for w1_process to decrement - * 1 for __w1_remove_master_device to decrement -@@ -89,7 +90,8 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, - - err = device_register(&dev->dev); - if (err) { -- printk(KERN_ERR "Failed to register master device. err=%d\n", err); -+ printk(KERN_ERR "Failed to register master device. err=%d\n", -+ err); - memset(dev, 0, sizeof(struct w1_master)); - kfree(dev); - dev = NULL; -@@ -115,21 +117,20 @@ int w1_add_master_device(struct w1_bus_master *master) - !(master->write_bit && master->read_bit) && - !(master->write_byte && master->read_byte && master->reset_bus)) { - printk(KERN_ERR "w1_add_master_device: invalid function set\n"); -- return(-EINVAL); -+ return (-EINVAL); - } - - /* bitbanging hardware uses bitbang_pullup, other hardware uses set_pullup - * and takes care of timing itself */ - if (!master->write_byte && !master->touch_bit && master->set_pullup) { - printk(KERN_ERR "w1_add_master_device: set_pullup requires " -- "write_byte or touch_bit, disabling\n"); -+ "write_byte or touch_bit, disabling\n"); - master->set_pullup = NULL; - } - -- if (master->set_pullup && master->bitbang_pullup) -- { -+ if (master->set_pullup && master->bitbang_pullup) { - printk(KERN_ERR "w1_add_master_device: set_pullup should not " -- "be set when bitbang_pullup is used, disabling\n"); -+ "be set when bitbang_pullup is used, disabling\n"); - master->set_pullup = NULL; - } - -@@ -149,13 +150,13 @@ int w1_add_master_device(struct w1_bus_master *master) - } while (found); - - dev = w1_alloc_dev(id, w1_max_slave_count, w1_max_slave_ttl, -- &w1_master_driver, &w1_master_device); -+ &w1_master_driver, &w1_master_device); - if (!dev) { - mutex_unlock(&w1_mlock); - return -ENOMEM; - } - -- retval = w1_create_master_attributes(dev); -+ retval = w1_create_master_attributes(dev); - if (retval) { - mutex_unlock(&w1_mlock); - goto err_out_free_dev; -@@ -169,8 +170,7 @@ int w1_add_master_device(struct w1_bus_master *master) - if (IS_ERR(dev->thread)) { - retval = PTR_ERR(dev->thread); - dev_err(&dev->dev, -- "Failed to create new kernel thread. err=%d\n", -- retval); -+ "Failed to create new kernel thread. err=%d\n", retval); - mutex_unlock(&w1_mlock); - goto err_out_rm_attr; - } -@@ -185,7 +185,7 @@ int w1_add_master_device(struct w1_bus_master *master) - - return 0; - --#if 0 /* Thread cleanup code, not required currently. */ -+#if 0 /* Thread cleanup code, not required currently. */ - err_out_kill_thread: - kthread_stop(dev->thread); - #endif -@@ -210,14 +210,15 @@ void __w1_remove_master_device(struct w1_master *dev) - - mutex_lock(&dev->mutex); - list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) -- w1_slave_detach(sl); -+ w1_slave_detach(sl); - w1_destroy_master_attributes(dev); - mutex_unlock(&dev->mutex); - atomic_dec(&dev->refcnt); - - while (atomic_read(&dev->refcnt)) { -- dev_info(&dev->dev, "Waiting for %s to become free: refcnt=%d.\n", -- dev->name, atomic_read(&dev->refcnt)); -+ dev_info(&dev->dev, -+ "Waiting for %s to become free: refcnt=%d.\n", -+ dev->name, atomic_read(&dev->refcnt)); - - if (msleep_interruptible(1000)) - flush_signals(current); -diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c -index e546fdc..0566abe 100644 ---- a/drivers/w1/w1_io.c -+++ b/drivers/w1/w1_io.c -@@ -43,14 +43,15 @@ - 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, - 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, - 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, -- 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, -- 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, -- 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, -- 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, -- 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, -- 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, -- 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, -- 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53 -+ 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, -+ 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, -+ 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, -+ 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, -+ 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, -+ 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, -+ 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, -+ 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, -+ 169, 247, 182, 232, 10, 84, 215, 137, 107, 53 - }; - - static void w1_delay(unsigned long tm) -@@ -84,7 +85,8 @@ static void w1_write_bit(struct w1_master *dev, int bit) - { - unsigned long flags = 0; - -- if(w1_disable_irqs) local_irq_save(flags); -+ if (w1_disable_irqs) -+ local_irq_save(flags); - - if (bit) { - dev->bus_master->write_bit(dev->bus_master->data, 0); -@@ -98,7 +100,8 @@ static void w1_write_bit(struct w1_master *dev, int bit) - w1_delay(10); - } - -- if(w1_disable_irqs) local_irq_restore(flags); -+ if (w1_disable_irqs) -+ local_irq_restore(flags); - } - - /** -@@ -111,9 +114,9 @@ static void w1_write_bit(struct w1_master *dev, int bit) - static void w1_pre_write(struct w1_master *dev) - { - if (dev->pullup_duration && -- dev->enable_pullup && dev->bus_master->set_pullup) { -+ dev->enable_pullup && dev->bus_master->set_pullup) { - dev->bus_master->set_pullup(dev->bus_master->data, -- dev->pullup_duration); -+ dev->pullup_duration); - } - } - -@@ -129,15 +132,19 @@ static void w1_post_write(struct w1_master *dev) - if (dev->pullup_duration) { - if (dev->enable_pullup) { - if (dev->bus_master->set_pullup) { -- dev->bus_master->set_pullup(dev->bus_master->data, 0); -+ dev->bus_master->set_pullup(dev-> -+ bus_master->data, -+ 0); - } else if (dev->bus_master->bitbang_pullup) { -- dev->bus_master->bitbang_pullup(dev->bus_master->data, 1); -+ dev->bus_master-> -+ bitbang_pullup(dev->bus_master->data, 1); - msleep(dev->pullup_duration); -- dev->bus_master->bitbang_pullup(dev->bus_master->data, 0); -+ dev->bus_master-> -+ bitbang_pullup(dev->bus_master->data, 0); - } -- } else { -+ } else { - msleep(dev->pullup_duration); -- } -+ } - - dev->pullup_duration = 0; - } -@@ -156,8 +163,7 @@ void w1_write_8(struct w1_master *dev, u8 byte) - if (dev->bus_master->write_byte) { - w1_pre_write(dev); - dev->bus_master->write_byte(dev->bus_master->data, byte); -- } -- else -+ } else - for (i = 0; i < 8; ++i) { - if (i == 7) - w1_pre_write(dev); -@@ -165,8 +171,8 @@ void w1_write_8(struct w1_master *dev, u8 byte) - } - w1_post_write(dev); - } --EXPORT_SYMBOL_GPL(w1_write_8); - -+EXPORT_SYMBOL_GPL(w1_write_8); - - /** - * Generates a write-1 cycle and samples the level. -@@ -204,17 +210,17 @@ static u8 w1_read_bit(struct w1_master *dev) - * @param bdir the bit to write if both id_bit and comp_bit are 0 - * @return bit fields - see above - */ --u8 w1_triplet(struct w1_master *dev, int bdir) -+u8 w1_triplet(struct w1_master * dev, int bdir) - { - if (dev->bus_master->triplet) - return dev->bus_master->triplet(dev->bus_master->data, bdir); - else { -- u8 id_bit = w1_touch_bit(dev, 1); -+ u8 id_bit = w1_touch_bit(dev, 1); - u8 comp_bit = w1_touch_bit(dev, 1); - u8 retval; - - if (id_bit && comp_bit) -- return 0x03; /* error */ -+ return 0x03; /* error */ - - if (!id_bit && !comp_bit) { - /* Both bits are valid, take the direction given */ -@@ -239,7 +245,7 @@ u8 w1_triplet(struct w1_master *dev, int bdir) - * @param dev the master device - * @return the byte read - */ --u8 w1_read_8(struct w1_master *dev) -+u8 w1_read_8(struct w1_master * dev) - { - int i; - u8 res = 0; -@@ -248,10 +254,11 @@ u8 w1_read_8(struct w1_master *dev) - res = dev->bus_master->read_byte(dev->bus_master->data); - else - for (i = 0; i < 8; ++i) -- res |= (w1_touch_bit(dev,1) << i); -+ res |= (w1_touch_bit(dev, 1) << i); - - return res; - } -+ - EXPORT_SYMBOL_GPL(w1_read_8); - - /** -@@ -261,19 +268,19 @@ u8 w1_read_8(struct w1_master *dev) - * @param buf pointer to the data to write - * @param len the number of bytes to write - */ --void w1_write_block(struct w1_master *dev, const u8 *buf, int len) -+void w1_write_block(struct w1_master *dev, const u8 * buf, int len) - { - int i; - - if (dev->bus_master->write_block) { - w1_pre_write(dev); - dev->bus_master->write_block(dev->bus_master->data, buf, len); -- } -- else -+ } else - for (i = 0; i < len; ++i) -- w1_write_8(dev, buf[i]); /* calls w1_pre_write */ -+ w1_write_8(dev, buf[i]); /* calls w1_pre_write */ - w1_post_write(dev); - } -+ - EXPORT_SYMBOL_GPL(w1_write_block); - - /** -@@ -283,7 +290,7 @@ void w1_write_block(struct w1_master *dev, const u8 *buf, int len) - * @param buf pointer to the data to write - * @param len the number of bytes to write - */ --void w1_touch_block(struct w1_master *dev, u8 *buf, int len) -+void w1_touch_block(struct w1_master *dev, u8 * buf, int len) - { - int i, j; - u8 tmp; -@@ -299,6 +306,7 @@ void w1_touch_block(struct w1_master *dev, u8 *buf, int len) - buf[i] = tmp; - } - } -+ - EXPORT_SYMBOL_GPL(w1_touch_block); - - /** -@@ -309,13 +317,15 @@ void w1_touch_block(struct w1_master *dev, u8 *buf, int len) - * @param len the number of bytes to read - * @return the number of bytes read - */ --u8 w1_read_block(struct w1_master *dev, u8 *buf, int len) -+u8 w1_read_block(struct w1_master *dev, u8 * buf, int len) - { - int i; - u8 ret; - - if (dev->bus_master->read_block) -- ret = dev->bus_master->read_block(dev->bus_master->data, buf, len); -+ ret = -+ dev->bus_master->read_block(dev->bus_master->data, buf, -+ len); - else { - for (i = 0; i < len; ++i) - buf[i] = w1_read_8(dev); -@@ -324,6 +334,7 @@ u8 w1_read_block(struct w1_master *dev, u8 *buf, int len) - - return ret; - } -+ - EXPORT_SYMBOL_GPL(w1_read_block); - - /** -@@ -337,10 +348,12 @@ int w1_reset_bus(struct w1_master *dev) - int result; - unsigned long flags = 0; - -- if(w1_disable_irqs) local_irq_save(flags); -+ if (w1_disable_irqs) -+ local_irq_save(flags); - - if (dev->bus_master->reset_bus) -- result = dev->bus_master->reset_bus(dev->bus_master->data) & 0x1; -+ result = -+ dev->bus_master->reset_bus(dev->bus_master->data) & 0x1; - else { - dev->bus_master->write_bit(dev->bus_master->data, 0); - /* minimum 480, max ? us -@@ -363,10 +376,12 @@ int w1_reset_bus(struct w1_master *dev) - msleep(1); - } - -- if(w1_disable_irqs) local_irq_restore(flags); -+ if (w1_disable_irqs) -+ local_irq_restore(flags); - - return result; - } -+ - EXPORT_SYMBOL_GPL(w1_reset_bus); - - u8 w1_calc_crc8(u8 * data, int len) -@@ -378,14 +393,16 @@ u8 w1_calc_crc8(u8 * data, int len) - - return crc; - } -+ - EXPORT_SYMBOL_GPL(w1_calc_crc8); - --void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb) -+void w1_search_devices(struct w1_master *dev, u8 search_type, -+ w1_slave_found_callback cb) - { - dev->attempts++; - if (dev->bus_master->search) - dev->bus_master->search(dev->bus_master->data, dev, -- search_type, cb); -+ search_type, cb); - else - w1_search(dev, search_type, cb); - } -@@ -406,14 +423,15 @@ int w1_reset_select_slave(struct w1_slave *sl) - if (sl->master->slave_count == 1) - w1_write_8(sl->master, W1_SKIP_ROM); - else { -- u8 match[9] = {W1_MATCH_ROM, }; -- u64 rn = le64_to_cpu(*((u64*)&sl->reg_num)); -+ u8 match[9] = { W1_MATCH_ROM, }; -+ u64 rn = le64_to_cpu(*((u64 *) & sl->reg_num)); - - memcpy(&match[1], &rn, 8); - w1_write_block(sl->master, match, 9); - } - return 0; - } -+ - EXPORT_SYMBOL_GPL(w1_reset_select_slave); - - /** -@@ -440,6 +458,7 @@ int w1_reset_resume_command(struct w1_master *dev) - w1_write_8(dev, W1_RESUME_CMD); - return 0; - } -+ - EXPORT_SYMBOL_GPL(w1_reset_resume_command); - - /** -@@ -457,4 +476,5 @@ void w1_next_pullup(struct w1_master *dev, int delay) - { - dev->pullup_duration = delay; - } -+ - EXPORT_SYMBOL_GPL(w1_next_pullup); --- -1.8.1.5 - - -From 0fc68d53477faab6745bd4a963a6c7e977ad46c3 Mon Sep 17 00:00:00 2001 -From: notro -Date: Sat, 26 Jan 2013 20:38:03 +0100 -Subject: [PATCH 159/169] spi-bcm2708: add 9-bit support using LoSSI mode - ---- - drivers/spi/spi-bcm2708.c | 30 ++++++++++++++++++++++++++++-- - 1 file changed, 28 insertions(+), 2 deletions(-) - -diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c -index b74aa32..abaa5a6 100644 ---- a/drivers/spi/spi-bcm2708.c -+++ b/drivers/spi/spi-bcm2708.c -@@ -146,10 +146,31 @@ static inline void bcm2708_rd_fifo(struct bcm2708_spi *bs, int len) - static inline void bcm2708_wr_fifo(struct bcm2708_spi *bs, int len) - { - u8 byte; -+ u16 val; - - if (len > bs->len) - len = bs->len; - -+ if (unlikely(bcm2708_rd(bs, SPI_CS) & SPI_CS_LEN)) { -+ /* LoSSI mode */ -+ if (unlikely(len % 2)) { -+ printk(KERN_ERR"bcm2708_wr_fifo: length must be even, skipping.\n"); -+ bs->len = 0; -+ return; -+ } -+ while (len) { -+ if (bs->tx_buf) { -+ val = *(const u16 *)bs->tx_buf; -+ bs->tx_buf += 2; -+ } else -+ val = 0; -+ bcm2708_wr(bs, SPI_FIFO, val); -+ bs->len -= 2; -+ len -= 2; -+ } -+ return; -+ } -+ - while (len--) { - byte = bs->tx_buf ? *bs->tx_buf++ : 0; - bcm2708_wr(bs, SPI_FIFO, byte); -@@ -234,8 +255,12 @@ static int bcm2708_setup_state(struct spi_master *master, - switch (bpw) { - case 8: - break; -+ case 9: -+ /* Reading in LoSSI mode is a special case. See 'BCM2835 ARM Peripherals' datasheet */ -+ cs |= SPI_CS_LEN; -+ break; - default: -- dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8)\n", -+ dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8 or 9)\n", - bpw); - return -EINVAL; - } -@@ -283,7 +308,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs, - ret = bcm2708_setup_state(spi->master, &spi->dev, &state, - xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz, - spi->chip_select, spi->mode, -- spi->bits_per_word); -+ xfer->bits_per_word ? xfer->bits_per_word : -+ spi->bits_per_word); - if (ret) - return ret; - --- -1.8.1.5 - - -From 384c0ae6d199469fc86f1ab2b974501b66684cbc Mon Sep 17 00:00:00 2001 -From: P33M -Date: Thu, 21 Mar 2013 19:36:17 +0000 -Subject: [PATCH 160/169] dwc_otg: implement tasklet for returning URBs to - usbcore hcd layer - -The dwc_otg driver interrupt handler for transfer completion will spend -a very long time with interrupts disabled when a URB is completed - -this is because usb_hcd_giveback_urb is called from within the handler -which for a USB device driver with complicated processing (e.g. webcam) -will take an exorbitant amount of time to complete. This results in -missed completion interrupts for other USB packets which lead to them -being dropped due to microframe overruns. - -This patch splits returning the URB to the usb hcd layer into a -high-priority tasklet. This will have most benefit for isochronous IN -transfers but will also have incidental benefit where multiple periodic -devices are active at once. ---- - .../usb/host/dwc_common_port/dwc_common_linux.c | 5 ++++ - drivers/usb/host/dwc_common_port/dwc_list.h | 14 ++++----- - drivers/usb/host/dwc_common_port/dwc_os.h | 2 ++ - drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 34 +++++++++++++++++++++- - drivers/usb/host/dwc_otg/dwc_otg_hcd.h | 10 +++++++ - drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 25 ++++++++++------ - 6 files changed, 73 insertions(+), 17 deletions(-) - -diff --git a/drivers/usb/host/dwc_common_port/dwc_common_linux.c b/drivers/usb/host/dwc_common_port/dwc_common_linux.c -index f00a9ff..6814e51 100644 ---- a/drivers/usb/host/dwc_common_port/dwc_common_linux.c -+++ b/drivers/usb/host/dwc_common_port/dwc_common_linux.c -@@ -991,6 +991,11 @@ void DWC_TASK_SCHEDULE(dwc_tasklet_t *task) - tasklet_schedule(&task->t); - } - -+void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task) -+{ -+ tasklet_hi_schedule(&task->t); -+} -+ - - /* workqueues - - run in process context (can sleep) -diff --git a/drivers/usb/host/dwc_common_port/dwc_list.h b/drivers/usb/host/dwc_common_port/dwc_list.h -index 89cc325..4ce560d 100644 ---- a/drivers/usb/host/dwc_common_port/dwc_list.h -+++ b/drivers/usb/host/dwc_common_port/dwc_list.h -@@ -384,17 +384,17 @@ struct { \ - #define DWC_TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) - #define DWC_TAILQ_EMPTY(head) \ -- (TAILQ_FIRST(head) == TAILQ_END(head)) -+ (DWC_TAILQ_FIRST(head) == DWC_TAILQ_END(head)) - - #define DWC_TAILQ_FOREACH(var, head, field) \ -- for((var) = TAILQ_FIRST(head); \ -- (var) != TAILQ_END(head); \ -- (var) = TAILQ_NEXT(var, field)) -+ for ((var) = DWC_TAILQ_FIRST(head); \ -+ (var) != DWC_TAILQ_END(head); \ -+ (var) = DWC_TAILQ_NEXT(var, field)) - - #define DWC_TAILQ_FOREACH_REVERSE(var, head, headname, field) \ -- for((var) = TAILQ_LAST(head, headname); \ -- (var) != TAILQ_END(head); \ -- (var) = TAILQ_PREV(var, headname, field)) -+ for ((var) = DWC_TAILQ_LAST(head, headname); \ -+ (var) != DWC_TAILQ_END(head); \ -+ (var) = DWC_TAILQ_PREV(var, headname, field)) - - /* - * Tail queue functions. -diff --git a/drivers/usb/host/dwc_common_port/dwc_os.h b/drivers/usb/host/dwc_common_port/dwc_os.h -index 308ddd5..8eb24ea 100644 ---- a/drivers/usb/host/dwc_common_port/dwc_os.h -+++ b/drivers/usb/host/dwc_common_port/dwc_os.h -@@ -981,6 +981,8 @@ extern void DWC_WORKQ_SCHEDULE_DELAYED(dwc_workq_t *workq, dwc_work_callback_t c - extern void DWC_TASK_SCHEDULE(dwc_tasklet_t *task); - #define dwc_task_schedule DWC_TASK_SCHEDULE - -+extern void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task); -+#define dwc_task_hi_schedule DWC_TASK_HI_SCHEDULE - - /** @name Timer - * -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -index fcec97f..91eefecd 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c -@@ -40,6 +40,9 @@ - * header file. - */ - -+#include -+#include -+ - #include "dwc_otg_hcd.h" - #include "dwc_otg_regs.h" - -@@ -694,6 +697,31 @@ static void reset_tasklet_func(void *data) - dwc_otg_hcd->flags.b.port_reset_change = 1; - } - -+static void completion_tasklet_func(void *ptr) -+{ -+ dwc_otg_hcd_t *hcd = (dwc_otg_hcd_t *) ptr; -+ struct urb *urb; -+ urb_tq_entry_t *item; -+ dwc_irqflags_t flags; -+ -+ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); -+ while (!DWC_TAILQ_EMPTY(&hcd->completed_urb_list)) { -+ item = DWC_TAILQ_FIRST(&hcd->completed_urb_list); -+ urb = item->urb; -+ DWC_TAILQ_REMOVE(&hcd->completed_urb_list, item, -+ urb_tq_entries); -+ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); -+ DWC_FREE(item); -+ -+ usb_hcd_unlink_urb_from_ep(hcd->priv, urb); -+ usb_hcd_giveback_urb(hcd->priv, urb, urb->status); -+ -+ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags); -+ } -+ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags); -+ return; -+} -+ - static void qh_list_free(dwc_otg_hcd_t * hcd, dwc_list_link_t * qh_list) - { - dwc_list_link_t *item; -@@ -833,6 +861,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd_t * dwc_otg_hcd) - - DWC_TIMER_FREE(dwc_otg_hcd->conn_timer); - DWC_TASK_FREE(dwc_otg_hcd->reset_tasklet); -+ DWC_TASK_FREE(dwc_otg_hcd->completion_tasklet); - - #ifdef DWC_DEV_SRPCAP - if (dwc_otg_hcd->core_if->power_down == 2 && -@@ -877,7 +906,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if) - DWC_LIST_INIT(&hcd->periodic_sched_ready); - DWC_LIST_INIT(&hcd->periodic_sched_assigned); - DWC_LIST_INIT(&hcd->periodic_sched_queued); -- -+ DWC_TAILQ_INIT(&hcd->completed_urb_list); - /* - * Create a host channel descriptor for each host channel implemented - * in the controller. Initialize the channel descriptor array. -@@ -915,6 +944,9 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if) - - /* Initialize reset tasklet. */ - hcd->reset_tasklet = DWC_TASK_ALLOC("reset_tasklet", reset_tasklet_func, hcd); -+ -+ hcd->completion_tasklet = DWC_TASK_ALLOC("completion_tasklet", -+ completion_tasklet_func, hcd); - #ifdef DWC_DEV_SRPCAP - if (hcd->core_if->power_down == 2) { - /* Initialize Power on timer for Host power up in case hibernation */ -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h -index 45e44ea..0493dbf 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h -@@ -374,6 +374,13 @@ static inline void dwc_otg_hcd_fill_pipe(struct dwc_otg_hcd_pipe_info *pipe, - - DWC_CIRCLEQ_HEAD(hc_list, dwc_hc); - -+typedef struct urb_tq_entry { -+ struct urb *urb; -+ DWC_TAILQ_ENTRY(urb_tq_entry) urb_tq_entries; -+} urb_tq_entry_t; -+ -+DWC_TAILQ_HEAD(urb_list, urb_tq_entry); -+ - /** - * This structure holds the state of the HCD, including the non-periodic and - * periodic schedules. -@@ -551,6 +558,9 @@ struct dwc_otg_hcd { - /* Tasket to do a reset */ - dwc_tasklet_t *reset_tasklet; - -+ dwc_tasklet_t *completion_tasklet; -+ struct urb_list completed_urb_list; -+ - /* */ - dwc_spinlock_t *lock; - dwc_spinlock_t *channel_lock; -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -index f91c4b1..0137ce3 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c -@@ -271,7 +271,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, - dwc_otg_hcd_urb_t * dwc_otg_urb, int32_t status) - { - struct urb *urb = (struct urb *)urb_handle; -- -+ urb_tq_entry_t *new_entry; - if (CHK_DEBUG_LEVEL(DBG_HCDV | DBG_HCD_URB)) { - DWC_PRINTF("%s: urb %p, device %d, ep %d %s, status=%d\n", - __func__, urb, usb_pipedevice(urb->pipe), -@@ -285,7 +285,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, - } - } - } -- -+ new_entry = DWC_ALLOC_ATOMIC(sizeof(urb_tq_entry_t)); - urb->actual_length = dwc_otg_hcd_urb_get_actual_length(dwc_otg_urb); - /* Convert status value. */ - switch (status) { -@@ -348,18 +348,25 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle, - } - - DWC_FREE(dwc_otg_urb); -- -+ if (!new_entry) { -+ DWC_ERROR("dwc_otg_hcd: complete: cannot allocate URB TQ entry\n"); -+ urb->status = -EPROTO; -+ /* don't schedule the tasklet - -+ * directly return the packet here with error. */ - #if USB_URB_EP_LINKING -- usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb); -+ usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb); - #endif -- DWC_SPINUNLOCK(hcd->lock); - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28) -- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb); -+ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb); - #else -- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, status); -+ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, urb->status); - #endif -- DWC_SPINLOCK(hcd->lock); -- -+ } else { -+ new_entry->urb = urb; -+ DWC_TAILQ_INSERT_TAIL(&hcd->completed_urb_list, new_entry, -+ urb_tq_entries); -+ DWC_TASK_HI_SCHEDULE(hcd->completion_tasklet); -+ } - return 0; - } - --- -1.8.1.5 - - -From ca05e82149790d6ed565f808c23174fd43e661ad Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:23:39 +0000 -Subject: [PATCH 162/169] dwc_otg: Fix build issue with usb_gadget_probe_driver - ---- - drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c | 22 +++------------------- - 1 file changed, 3 insertions(+), 19 deletions(-) - -diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -index 903e670..a591d89 100644 ---- a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c -@@ -1284,12 +1284,8 @@ void pcd_remove(dwc_bus_dev_t *_dev) - * @param driver The driver being registered - * @param bind The bind function of gadget driver - */ --#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) --int usb_gadget_register_driver(struct usb_gadget_driver *driver) --#else --int usb_gadget_probe_driver(struct usb_gadget_driver *driver, -- int (*bind)(struct usb_gadget *)) --#endif -+ -+int usb_gadget_probe_driver(struct usb_gadget_driver *driver) - { - int retval; - -@@ -1297,11 +1293,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, - driver->driver.name); - - if (!driver || driver->max_speed == USB_SPEED_UNKNOWN || --#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) - !driver->bind || --#else -- !bind || --#endif - !driver->unbind || !driver->disconnect || !driver->setup) { - DWC_DEBUGPL(DBG_PCDV, "EINVAL\n"); - return -EINVAL; -@@ -1320,11 +1312,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, - gadget_wrapper->gadget.dev.driver = &driver->driver; - - DWC_DEBUGPL(DBG_PCD, "bind to driver %s\n", driver->driver.name); --#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) -- retval = driver->bind(&gadget_wrapper->gadget); --#else -- retval = bind(&gadget_wrapper->gadget); --#endif -+ retval = driver->bind(&gadget_wrapper->gadget, gadget_wrapper->driver); - if (retval) { - DWC_ERROR("bind to driver %s --> error %d\n", - driver->driver.name, retval); -@@ -1336,11 +1324,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, - driver->driver.name); - return 0; - } --#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) --EXPORT_SYMBOL(usb_gadget_register_driver); --#else - EXPORT_SYMBOL(usb_gadget_probe_driver); --#endif - - /** - * This function unregisters a gadget driver --- -1.8.1.5 - - -From 68144ca042c97e36ca81bceae4d595e42ae80f45 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:24:40 +0000 -Subject: [PATCH 163/169] snd_bcm2835: remove __devinit - ---- - sound/arm/bcm2835-ctl.c | 4 ++-- - sound/arm/bcm2835-pcm.c | 2 +- - sound/arm/bcm2835.c | 8 ++++---- - 3 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/sound/arm/bcm2835-ctl.c b/sound/arm/bcm2835-ctl.c -index 5e77752..c3e0f7a 100755 ---- a/sound/arm/bcm2835-ctl.c -+++ b/sound/arm/bcm2835-ctl.c -@@ -146,7 +146,7 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol, - - static DECLARE_TLV_DB_SCALE(snd_bcm2835_db_scale, CTRL_VOL_MIN, 1, 1); - --static struct snd_kcontrol_new snd_bcm2835_ctl[] __devinitdata = { -+static struct snd_kcontrol_new snd_bcm2835_ctl[] = { - { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "PCM Playback Volume", -@@ -183,7 +183,7 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol, - }, - }; - --int __devinit snd_bcm2835_new_ctl(bcm2835_chip_t * chip) -+int snd_bcm2835_new_ctl(bcm2835_chip_t * chip) - { - int err; - unsigned int idx; -diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c -index 8d182f0..4206b7e 100755 ---- a/sound/arm/bcm2835-pcm.c -+++ b/sound/arm/bcm2835-pcm.c -@@ -376,7 +376,7 @@ static int snd_bcm2835_pcm_lib_ioctl(struct snd_pcm_substream *substream, - }; - - /* create a pcm device */ --int __devinit snd_bcm2835_new_pcm(bcm2835_chip_t * chip) -+int snd_bcm2835_new_pcm(bcm2835_chip_t * chip) - { - struct snd_pcm *pcm; - int err; -diff --git a/sound/arm/bcm2835.c b/sound/arm/bcm2835.c -index 9546fe6..e5ac894 100755 ---- a/sound/arm/bcm2835.c -+++ b/sound/arm/bcm2835.c -@@ -53,7 +53,7 @@ static int snd_bcm2835_dev_free(struct snd_device *device) - /* chip-specific constructor - * (see "Management of Cards and Components") - */ --static int __devinit snd_bcm2835_create(struct snd_card *card, -+static int snd_bcm2835_create(struct snd_card *card, - struct platform_device *pdev, - bcm2835_chip_t ** rchip) - { -@@ -81,7 +81,7 @@ static int __devinit snd_bcm2835_create(struct snd_card *card, - return 0; - } - --static int __devinit snd_bcm2835_alsa_probe(struct platform_device *pdev) -+static int snd_bcm2835_alsa_probe(struct platform_device *pdev) - { - static int dev; - bcm2835_chip_t *chip; -@@ -321,7 +321,7 @@ static int snd_bcm2835_alsa_resume(struct platform_device *pdev) - }, - }; - --static int __devinit bcm2835_alsa_device_init(void) -+static int bcm2835_alsa_device_init(void) - { - int err; - err = platform_driver_register(&bcm2835_alsa0_driver); -@@ -392,7 +392,7 @@ static int __devinit bcm2835_alsa_device_init(void) - return err; - } - --static void __devexit bcm2835_alsa_device_exit(void) -+static void bcm2835_alsa_device_exit(void) - { - platform_driver_unregister(&bcm2835_alsa0_driver); - platform_driver_unregister(&bcm2835_alsa1_driver); --- -1.8.1.5 - - -From ceca1b159a8b07651369c8a45d9304dc18437cb4 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:25:33 +0000 -Subject: [PATCH 164/169] dmaer: VM_RESERVED is gone. Replace with VM_IO - ---- - arch/arm/mach-bcm2708/dmaer.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/mach-bcm2708/dmaer.c b/arch/arm/mach-bcm2708/dmaer.c -index 9063874..d1bc0fa 100755 ---- a/arch/arm/mach-bcm2708/dmaer.c -+++ b/arch/arm/mach-bcm2708/dmaer.c -@@ -645,7 +645,7 @@ static int Mmap(struct file *pFile, struct vm_area_struct *pVma) - pVmaList->m_pPageTail = pPages; - - pVma->vm_ops = &g_vmOps4k; -- pVma->vm_flags |= VM_RESERVED; -+ pVma->vm_flags |= VM_IO; - - VmaOpen4k(pVma); - --- -1.8.1.5 - - -From 6632d18fcf68969195dff4d8a68767a543c5d845 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:27:09 +0000 -Subject: [PATCH 165/169] mach-bcm2708: Fix gpio header - ---- - arch/arm/mach-bcm2708/include/mach/gpio.h | 23 ----------------------- - 1 file changed, 23 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/include/mach/gpio.h b/arch/arm/mach-bcm2708/include/mach/gpio.h -index 0b82f26..42851ee 100644 ---- a/arch/arm/mach-bcm2708/include/mach/gpio.h -+++ b/arch/arm/mach-bcm2708/include/mach/gpio.h -@@ -16,32 +16,9 @@ - #include - - #ifdef CONFIG_GPIOLIB -- --static inline int gpio_get_value(unsigned gpio) --{ -- return __gpio_get_value(gpio); --} -- --static inline void gpio_set_value(unsigned gpio, int value) --{ -- __gpio_set_value(gpio, value); --} -- --static inline int gpio_cansleep(unsigned gpio) --{ -- return __gpio_cansleep(gpio); --} -- -- - static inline unsigned irq_to_gpio(unsigned irq) { - return (irq-GPIO_IRQ_START); - } -- --static inline unsigned gpio_to_irq(unsigned gpio) { -- return GPIO_IRQ_START+gpio; --} --#define gpio_to_irq gpio_to_irq -- - #endif /* CONFIG_GPIOLIB */ - - #endif --- -1.8.1.5 - - -From e7bbfba32f87139ec17fac6516ab05fcdff98107 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:28:50 +0000 -Subject: [PATCH 166/169] sdhci-bcm2708: Fix extra endchoice - ---- - drivers/mmc/host/Kconfig | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig -index 3210927..90d0855 100644 ---- a/drivers/mmc/host/Kconfig -+++ b/drivers/mmc/host/Kconfig -@@ -313,7 +313,6 @@ config MMC_ATMELMCI - - If unsure, say N. - --endchoice - config MMC_BCM2708 - tristate "BCM2708 Multimedia Card Interface support" - help --- -1.8.1.5 - - -From 86eff058c0095c447bfb7f0b66e8e5e6779d5021 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:30:12 +0000 -Subject: [PATCH 167/169] bcm2708_sdhci: Remove dev_init - ---- - drivers/mmc/host/sdhci-bcm2708.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c -index bc7df3f..3c14f73 100644 ---- a/drivers/mmc/host/sdhci-bcm2708.c -+++ b/drivers/mmc/host/sdhci-bcm2708.c -@@ -1160,7 +1160,7 @@ static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) - * * - \*****************************************************************************/ - --static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) -+static int sdhci_bcm2708_probe(struct platform_device *pdev) - { - struct sdhci_host *host; - struct resource *iomem; -@@ -1325,7 +1325,7 @@ static int __devinit sdhci_bcm2708_probe(struct platform_device *pdev) - return ret; - } - --static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) -+static int sdhci_bcm2708_remove(struct platform_device *pdev) - { - struct sdhci_host *host = platform_get_drvdata(pdev); - struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); -@@ -1362,7 +1362,7 @@ static int __devexit sdhci_bcm2708_remove(struct platform_device *pdev) - .owner = THIS_MODULE, - }, - .probe = sdhci_bcm2708_probe, -- .remove = __devexit_p(sdhci_bcm2708_remove), -+ .remove = sdhci_bcm2708_remove, - - #ifdef CONFIG_PM - .suspend = sdhci_bcm2708_suspend, --- -1.8.1.5 - - -From 4c77aac4e9f8f3095fbddde4277ae94dbb7a5b8f Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 27 Mar 2013 20:30:40 +0000 -Subject: [PATCH 168/169] sdhci: fix up merge - ---- - drivers/mmc/host/sdhci.c | 355 ++++++++++++++++++++++++++--------------------- - 1 file changed, 195 insertions(+), 160 deletions(-) - -diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index 9b7a727..3da032b 100644 ---- a/drivers/mmc/host/sdhci.c -+++ b/drivers/mmc/host/sdhci.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - - #include "sdhci.h" - -@@ -933,11 +934,11 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) - ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); - ctrl &= ~SDHCI_CTRL_DMA_MASK; - if (! (host->flags & SDHCI_USE_PLATDMA)) { -- if ((host->flags & SDHCI_REQ_USE_DMA) && -- (host->flags & SDHCI_USE_ADMA)) -- ctrl |= SDHCI_CTRL_ADMA32; -- else -- ctrl |= SDHCI_CTRL_SDMA; -+ if ((host->flags & SDHCI_REQ_USE_DMA) && -+ (host->flags & SDHCI_USE_ADMA)) -+ ctrl |= SDHCI_CTRL_ADMA32; -+ else -+ ctrl |= SDHCI_CTRL_SDMA; - } - sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); - } -@@ -1351,35 +1352,6 @@ static int sdhci_set_power(struct sdhci_host *host, unsigned short power) - return power; - } - --/* Power on or off the circuitary supporting the register set */ --static int sdhci_set_plat_power(struct sdhci_host *host, int power_mode) --{ -- if (host->ops->set_plat_power) -- return host->ops->set_plat_power(host, power_mode); -- else -- return 0; --} -- --/* Click forwards one step towards fully on */ --static int sdhci_enable(struct mmc_host *mmc) --{ -- struct sdhci_host *host; -- -- host = mmc_priv(mmc); -- -- return host->ops->enable? host->ops->enable(host): 0; --} -- --/* Click backwards one step towards fully off */ --static int sdhci_disable(struct mmc_host *mmc, int lazy) --{ -- struct sdhci_host *host; -- -- host = mmc_priv(mmc); -- -- return host->ops->disable? host->ops->disable(host, lazy): 0; --} -- - /*****************************************************************************\ - * * - * MMC callbacks * -@@ -1425,6 +1397,13 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) - present = sdhci_readl(host, SDHCI_PRESENT_STATE) & - SDHCI_CARD_PRESENT; - -+ /* If we're using a cd-gpio, testing the presence bit might fail. */ -+ if (!present) { -+ int ret = mmc_gpio_get_cd(host->mmc); -+ if (ret > 0) -+ present = true; -+ } -+ - if (!present || host->flags & SDHCI_DEVICE_DEAD) { - host->mrq->cmd->error = -ENOMEDIUM; - tasklet_schedule(&host->finish_tasklet); -@@ -1469,7 +1448,6 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) - unsigned long flags; - int vdd_bit = -1; - u8 ctrl; -- int rc; - - sdhci_spin_lock_irqsave(host, &flags); - -@@ -1630,12 +1608,6 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) - - mmiowb(); - sdhci_spin_unlock_irqrestore(host, flags); -- -- if (ios->power_mode == MMC_POWER_OFF) { -- do -- rc = sdhci_set_plat_power(host, ios->power_mode); -- while (rc == -EINTR); -- } - } - - static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) -@@ -1740,57 +1712,65 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) - sdhci_spin_unlock_irqrestore(host, flags); - } - --static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, -- struct mmc_ios *ios) -+static int sdhci_do_3_3v_signal_voltage_switch(struct sdhci_host *host, -+ u16 ctrl) - { -- u8 pwr; -- u16 clk, ctrl; -- u32 present_state; -+ int ret; - -- /* -- * Signal Voltage Switching is only applicable for Host Controllers -- * v3.00 and above. -- */ -- if (host->version < SDHCI_SPEC_300) -- return 0; -+ /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ -+ ctrl &= ~SDHCI_CTRL_VDD_180; -+ sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - -- /* -- * We first check whether the request is to set signalling voltage -- * to 3.3V. If so, we change the voltage to 3.3V and return quickly. -- */ -+ if (host->vqmmc) { -+ ret = regulator_set_voltage(host->vqmmc, 2700000, 3600000); -+ if (ret) { -+ pr_warning("%s: Switching to 3.3V signalling voltage " -+ " failed\n", mmc_hostname(host->mmc)); -+ return -EIO; -+ } -+ } -+ /* Wait for 5ms */ -+ usleep_range(5000, 5500); -+ -+ /* 3.3V regulator output should be stable within 5 ms */ - ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -- if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) { -- /* Set 1.8V Signal Enable in the Host Control2 register to 0 */ -- ctrl &= ~SDHCI_CTRL_VDD_180; -- sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); -+ if (!(ctrl & SDHCI_CTRL_VDD_180)) -+ return 0; - -- /* Wait for 5ms */ -- usleep_range(5000, 5500); -+ pr_warning("%s: 3.3V regulator output did not became stable\n", -+ mmc_hostname(host->mmc)); - -- /* 3.3V regulator output should be stable within 5 ms */ -- ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -- if (!(ctrl & SDHCI_CTRL_VDD_180)) -- return 0; -- else { -- pr_info(DRIVER_NAME ": Switching to 3.3V " -- "signalling voltage failed\n"); -- return -EIO; -- } -- } else if (!(ctrl & SDHCI_CTRL_VDD_180) && -- (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180)) { -- /* Stop SDCLK */ -- clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); -- clk &= ~SDHCI_CLOCK_CARD_EN; -- sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -+ return -EIO; -+} - -- /* Check whether DAT[3:0] is 0000 */ -- present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); -- if (!((present_state & SDHCI_DATA_LVL_MASK) >> -- SDHCI_DATA_LVL_SHIFT)) { -- /* -- * Enable 1.8V Signal Enable in the Host Control2 -- * register -- */ -+static int sdhci_do_1_8v_signal_voltage_switch(struct sdhci_host *host, -+ u16 ctrl) -+{ -+ u8 pwr; -+ u16 clk; -+ u32 present_state; -+ int ret; -+ -+ /* Stop SDCLK */ -+ clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); -+ clk &= ~SDHCI_CLOCK_CARD_EN; -+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -+ -+ /* Check whether DAT[3:0] is 0000 */ -+ present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); -+ if (!((present_state & SDHCI_DATA_LVL_MASK) >> -+ SDHCI_DATA_LVL_SHIFT)) { -+ /* -+ * Enable 1.8V Signal Enable in the Host Control2 -+ * register -+ */ -+ if (host->vqmmc) -+ ret = regulator_set_voltage(host->vqmmc, -+ 1700000, 1950000); -+ else -+ ret = 0; -+ -+ if (!ret) { - ctrl |= SDHCI_CTRL_VDD_180; - sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - -@@ -1799,7 +1779,7 @@ static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, - - ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); - if (ctrl & SDHCI_CTRL_VDD_180) { -- /* Provide SDCLK again and wait for 1ms*/ -+ /* Provide SDCLK again and wait for 1ms */ - clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); - clk |= SDHCI_CLOCK_CARD_EN; - sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); -@@ -1816,29 +1796,55 @@ static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, - return 0; - } - } -+ } - -- /* -- * If we are here, that means the switch to 1.8V signaling -- * failed. We power cycle the card, and retry initialization -- * sequence by setting S18R to 0. -- */ -- pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); -- pwr &= ~SDHCI_POWER_ON; -- sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -- if (host->vmmc) -- regulator_disable(host->vmmc); -+ /* -+ * If we are here, that means the switch to 1.8V signaling -+ * failed. We power cycle the card, and retry initialization -+ * sequence by setting S18R to 0. -+ */ -+ pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); -+ pwr &= ~SDHCI_POWER_ON; -+ sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -+ if (host->vmmc) -+ regulator_disable(host->vmmc); - -- /* Wait for 1ms as per the spec */ -- usleep_range(1000, 1500); -- pwr |= SDHCI_POWER_ON; -- sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -- if (host->vmmc) -- regulator_enable(host->vmmc); -+ /* Wait for 1ms as per the spec */ -+ usleep_range(1000, 1500); -+ pwr |= SDHCI_POWER_ON; -+ sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); -+ if (host->vmmc) -+ regulator_enable(host->vmmc); - -- pr_info(DRIVER_NAME ": Switching to 1.8V signalling " -- "voltage failed, retrying with S18R set to 0\n"); -- return -EAGAIN; -- } else -+ pr_warning("%s: Switching to 1.8V signalling voltage failed, " -+ "retrying with S18R set to 0\n", mmc_hostname(host->mmc)); -+ -+ return -EAGAIN; -+} -+ -+static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, -+ struct mmc_ios *ios) -+{ -+ u16 ctrl; -+ -+ /* -+ * Signal Voltage Switching is only applicable for Host Controllers -+ * v3.00 and above. -+ */ -+ if (host->version < SDHCI_SPEC_300) -+ return 0; -+ -+ /* -+ * We first check whether the request is to set signalling voltage -+ * to 3.3V. If so, we change the voltage to 3.3V and return quickly. -+ */ -+ ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); -+ if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) -+ return sdhci_do_3_3v_signal_voltage_switch(host, ctrl); -+ else if (!(ctrl & SDHCI_CTRL_VDD_180) && -+ (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180)) -+ return sdhci_do_1_8v_signal_voltage_switch(host, ctrl); -+ else - /* No signal voltage switch required */ - return 0; - } -@@ -2092,32 +2098,17 @@ static void sdhci_enable_preset_value(struct mmc_host *mmc, bool enable) - sdhci_runtime_pm_put(host); - } - --static const struct mmc_host_ops sdhci_ops = { -- .request = sdhci_request, -- .set_ios = sdhci_set_ios, -- .get_ro = sdhci_get_ro, -- .hw_reset = sdhci_hw_reset, -- .enable_sdio_irq = sdhci_enable_sdio_irq, -- .start_signal_voltage_switch = sdhci_start_signal_voltage_switch, -- .execute_tuning = sdhci_execute_tuning, -- .enable_preset_value = sdhci_enable_preset_value, -- .enable = sdhci_enable, -- .disable = sdhci_disable, --}; -- - /*****************************************************************************\ - * * - * Tasklets * - * * - \*****************************************************************************/ - --static void sdhci_tasklet_card(unsigned long param) -+static void sdhci_card_event(struct mmc_host *mmc) - { -- struct sdhci_host *host; -+ struct sdhci_host *host = mmc_priv(mmc); - unsigned long flags; - -- host = (struct sdhci_host*)param; -- - sdhci_spin_lock_irqsave(host, &flags); - - /* Check host->mrq first in case we are runtime suspended */ -@@ -2136,6 +2127,31 @@ static void sdhci_tasklet_card(unsigned long param) - } - - sdhci_spin_unlock_irqrestore(host, flags); -+} -+ -+static const struct mmc_host_ops sdhci_ops = { -+ .request = sdhci_request, -+ .set_ios = sdhci_set_ios, -+ .get_ro = sdhci_get_ro, -+ .hw_reset = sdhci_hw_reset, -+ .enable_sdio_irq = sdhci_enable_sdio_irq, -+ .start_signal_voltage_switch = sdhci_start_signal_voltage_switch, -+ .execute_tuning = sdhci_execute_tuning, -+ .enable_preset_value = sdhci_enable_preset_value, -+ .card_event = sdhci_card_event, -+}; -+ -+/*****************************************************************************\ -+ * * -+ * Tasklets * -+ * * -+\*****************************************************************************/ -+ -+static void sdhci_tasklet_card(unsigned long param) -+{ -+ struct sdhci_host *host = (struct sdhci_host*)param; -+ -+ sdhci_card_event(host->mmc); - - mmc_detect_change(host->mmc, msecs_to_jiffies(200)); - } -@@ -2261,10 +2277,10 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask) - - if (!host->cmd) { - if (!(host->ops->extra_ints)) { -- pr_err("%s: Got command interrupt 0x%08x even " -- "though no command operation was in progress.\n", -- mmc_hostname(host->mmc), (unsigned)intmask); -- sdhci_dumpregs(host); -+ pr_err("%s: Got command interrupt 0x%08x even " -+ "though no command operation was in progress.\n", -+ mmc_hostname(host->mmc), (unsigned)intmask); -+ sdhci_dumpregs(host); - } else - DBG("cmd irq 0x%08x cmd complete\n", (unsigned)intmask); - return; -@@ -2377,12 +2393,12 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) - return; - } - } -- -+ - if (!(host->ops->extra_ints)) { -- pr_err("%s: Got data interrupt 0x%08x even " -- "though no data operation was in progress.\n", -- mmc_hostname(host->mmc), (unsigned)intmask); -- sdhci_dumpregs(host); -+ pr_err("%s: Got data interrupt 0x%08x even " -+ "though no data operation was in progress.\n", -+ mmc_hostname(host->mmc), (unsigned)intmask); -+ sdhci_dumpregs(host); - } else - DBG("data irq 0x%08x but no data\n", (unsigned)intmask); - -@@ -2398,7 +2414,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) - DBG("ignoring spurious data_end_bit error\n"); - intmask = SDHCI_INT_DATA_AVAIL|SDHCI_INT_DATA_END; - } else -- host->data->error = -EILSEQ; -+ host->data->error = -EILSEQ; - } else if ((intmask & SDHCI_INT_DATA_CRC) && - SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND)) - != MMC_BUS_TEST_R) { -@@ -2408,12 +2424,14 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) - DBG("ignoring spurious data_crc_bit error\n"); - intmask = SDHCI_INT_DATA_AVAIL|SDHCI_INT_DATA_END; - } else { -- host->data->error = -EILSEQ; -+ host->data->error = -EILSEQ; - } - } else if (intmask & SDHCI_INT_ADMA_ERROR) { - pr_err("%s: ADMA error\n", mmc_hostname(host->mmc)); - sdhci_show_adma_error(host); - host->data->error = -EIO; -+ if (host->ops->adma_workaround) -+ host->ops->adma_workaround(host, intmask); - } - - if (host->data->error) { -@@ -2638,12 +2656,6 @@ int sdhci_resume_host(struct sdhci_host *host) - { - int ret; - -- if (host->vmmc) { -- int ret = regulator_enable(host->vmmc); -- if (ret) -- return ret; -- } -- - if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA | - SDHCI_USE_PLATDMA)) { - if (host->ops->enable_dma) -@@ -2983,7 +2995,7 @@ int sdhci_add_host(struct sdhci_host *host) - /* Auto-CMD23 stuff only works in ADMA or PIO. */ - if ((host->version >= SDHCI_SPEC_300) && - ((host->flags & SDHCI_USE_ADMA) || -- !(host->flags & SDHCI_USE_SDMA) )) { -+ !(host->flags & SDHCI_USE_SDMA))) { - host->flags |= SDHCI_AUTO_CMD23; - DBG("%s: Auto-CMD23 available\n", mmc_hostname(mmc)); - } else { -@@ -3000,6 +3012,9 @@ int sdhci_add_host(struct sdhci_host *host) - if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA)) - mmc->caps |= MMC_CAP_4_BIT_DATA; - -+ if (host->quirks2 & SDHCI_QUIRK2_HOST_NO_CMD23) -+ mmc->caps &= ~MMC_CAP_CMD23; -+ - if (caps[0] & SDHCI_CAN_DO_HISPD) - mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; - -@@ -3007,6 +3022,27 @@ int sdhci_add_host(struct sdhci_host *host) - !(host->mmc->caps & MMC_CAP_NONREMOVABLE)) - mmc->caps |= MMC_CAP_NEEDS_POLL; - -+ /* If vqmmc regulator and no 1.8V signalling, then there's no UHS */ -+ host->vqmmc = regulator_get(mmc_dev(mmc), "vqmmc"); -+ if (IS_ERR_OR_NULL(host->vqmmc)) { -+ if (PTR_ERR(host->vqmmc) < 0) { -+ pr_info("%s: no vqmmc regulator found\n", -+ mmc_hostname(mmc)); -+ host->vqmmc = NULL; -+ } -+ } else { -+ regulator_enable(host->vqmmc); -+ if (!regulator_is_supported_voltage(host->vqmmc, 1700000, -+ 1950000)) -+ caps[1] &= ~(SDHCI_SUPPORT_SDR104 | -+ SDHCI_SUPPORT_SDR50 | -+ SDHCI_SUPPORT_DDR50); -+ } -+ -+ if (host->quirks2 & SDHCI_QUIRK2_NO_1_8_V) -+ caps[1] &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | -+ SDHCI_SUPPORT_DDR50); -+ - /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */ - if (caps[1] & (SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | - SDHCI_SUPPORT_DDR50)) -@@ -3037,15 +3073,6 @@ int sdhci_add_host(struct sdhci_host *host) - if (caps[1] & SDHCI_DRIVER_TYPE_D) - mmc->caps |= MMC_CAP_DRIVER_TYPE_D; - -- /* -- * If Power Off Notify capability is enabled by the host, -- * set notify to short power off notify timeout value. -- */ -- if (mmc->caps2 & MMC_CAP2_POWEROFF_NOTIFY) -- mmc->power_notify_type = MMC_HOST_PW_NOTIFY_SHORT; -- else -- mmc->power_notify_type = MMC_HOST_PW_NOTIFY_NONE; -- - /* Initial value for re-tuning timer count */ - host->tuning_count = (caps[1] & SDHCI_RETUNING_TIMER_COUNT_MASK) >> - SDHCI_RETUNING_TIMER_COUNT_SHIFT; -@@ -3064,23 +3091,24 @@ int sdhci_add_host(struct sdhci_host *host) - ocr_avail = 0; - - host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); -- if (IS_ERR(host->vmmc)) { -- pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc)); -- host->vmmc = NULL; -+ if (IS_ERR_OR_NULL(host->vmmc)) { -+ if (PTR_ERR(host->vmmc) < 0) { -+ pr_info("%s: no vmmc regulator found\n", -+ mmc_hostname(mmc)); -+ host->vmmc = NULL; -+ } - } - - #ifdef CONFIG_REGULATOR - if (host->vmmc) { -- ret = regulator_is_supported_voltage(host->vmmc, 3300000, -- 3300000); -+ ret = regulator_is_supported_voltage(host->vmmc, 2700000, -+ 3600000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_330))) - caps[0] &= ~SDHCI_CAN_VDD_330; -- ret = regulator_is_supported_voltage(host->vmmc, 3000000, -- 3000000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_300))) - caps[0] &= ~SDHCI_CAN_VDD_300; -- ret = regulator_is_supported_voltage(host->vmmc, 1800000, -- 1800000); -+ ret = regulator_is_supported_voltage(host->vmmc, 1700000, -+ 1950000); - if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_180))) - caps[0] &= ~SDHCI_CAN_VDD_180; - } -@@ -3331,8 +3359,15 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) - tasklet_kill(&host->card_tasklet); - tasklet_kill(&host->finish_tasklet); - -- if (host->vmmc) -+ if (host->vmmc) { -+ regulator_disable(host->vmmc); - regulator_put(host->vmmc); -+ } -+ -+ if (host->vqmmc) { -+ regulator_disable(host->vqmmc); -+ regulator_put(host->vqmmc); -+ } - - kfree(host->adma_desc); - kfree(host->align_buffer); --- -1.8.1.5 - - -From ebe08d8bfbe6be10253a674e922e71f1ea9062c8 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 8 Apr 2013 21:44:15 +0100 -Subject: [PATCH 169/169] Update config files for f2fs and 3.8 kernel - ---- - arch/arm/configs/bcmrpi_defconfig | 143 ++++------------------------ - arch/arm/configs/bcmrpi_emergency_defconfig | 1 + - 2 files changed, 19 insertions(+), 125 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 4e52bbb..0d6d2b1 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -3,16 +3,16 @@ CONFIG_EXPERIMENTAL=y - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y - CONFIG_POSIX_MQUEUE=y -+CONFIG_FHANDLE=y -+CONFIG_AUDIT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y - CONFIG_BSD_PROCESS_ACCT=y - CONFIG_BSD_PROCESS_ACCT_V3=y --CONFIG_FHANDLE=y - CONFIG_TASKSTATS=y - CONFIG_TASK_DELAY_ACCT=y - CONFIG_TASK_XACCT=y - CONFIG_TASK_IO_ACCOUNTING=y --CONFIG_AUDIT=y --CONFIG_NO_HZ=y --CONFIG_HIGH_RES_TIMERS=y - CONFIG_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_CGROUP_FREEZER=y -@@ -36,7 +36,6 @@ CONFIG_MODULE_SRCVERSION_ALL=y - CONFIG_BLK_DEV_THROTTLING=y - CONFIG_PARTITION_ADVANCED=y - CONFIG_MAC_PARTITION=y --CONFIG_EFI_PARTITION=y - CONFIG_CFQ_GROUP_IOSCHED=y - CONFIG_ARCH_BCM2708=y - CONFIG_BCM2708_DMAER=m -@@ -116,11 +115,9 @@ CONFIG_NETFILTER_XT_TARGET_AUDIT=m - CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m - CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m - CONFIG_NETFILTER_XT_TARGET_CONNMARK=m --CONFIG_NETFILTER_XT_TARGET_CT=m - CONFIG_NETFILTER_XT_TARGET_DSCP=m - CONFIG_NETFILTER_XT_TARGET_HMARK=m - CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m --CONFIG_NETFILTER_XT_TARGET_LED=m - CONFIG_NETFILTER_XT_TARGET_LOG=m - CONFIG_NETFILTER_XT_TARGET_MARK=m - CONFIG_NETFILTER_XT_TARGET_NFLOG=m -@@ -187,10 +184,6 @@ CONFIG_IP_NF_MATCH_TTL=m - CONFIG_IP_NF_FILTER=m - CONFIG_IP_NF_TARGET_REJECT=m - CONFIG_IP_NF_TARGET_ULOG=m --CONFIG_NF_NAT=m --CONFIG_IP_NF_TARGET_MASQUERADE=m --CONFIG_IP_NF_TARGET_NETMAP=m --CONFIG_IP_NF_TARGET_REDIRECT=m - CONFIG_IP_NF_MANGLE=m - CONFIG_IP_NF_TARGET_ECN=m - CONFIG_IP_NF_TARGET_TTL=m -@@ -236,7 +229,6 @@ CONFIG_BRIDGE_EBT_LOG=m - CONFIG_BRIDGE_EBT_ULOG=m - CONFIG_BRIDGE_EBT_NFLOG=m - CONFIG_IP_SCTP=m --CONFIG_SCTP_HMAC_SHA1=y - CONFIG_L2TP=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m -@@ -423,10 +415,9 @@ CONFIG_USB_ZD1201=m - CONFIG_USB_NET_RNDIS_WLAN=m - CONFIG_RTL8187=m - CONFIG_MAC80211_HWSIM=m --CONFIG_ATH_COMMON=m --CONFIG_ATH9K=m --CONFIG_ATH9K_HTC=m -+CONFIG_ATH_CARDS=m - CONFIG_CARL9170=m -+CONFIG_AR5523=m - CONFIG_HOSTAP=m - CONFIG_LIBERTAS=m - CONFIG_LIBERTAS_USB=m -@@ -519,76 +510,28 @@ CONFIG_IR_STREAMZAP=m - CONFIG_IR_IGUANA=m - CONFIG_RC_LOOPBACK=m - CONFIG_IR_GPIO_CIR=m --CONFIG_MEDIA_ATTACH=y --CONFIG_VIDEO_HELPER_CHIPS_AUTO=y --CONFIG_VIDEO_VIVI=m -+CONFIG_MEDIA_USB_SUPPORT=y - CONFIG_USB_VIDEO_CLASS=m --CONFIG_USB_M5602=m --CONFIG_USB_STV06XX=m --CONFIG_USB_GL860=m --CONFIG_USB_GSPCA_BENQ=m --CONFIG_USB_GSPCA_CONEX=m --CONFIG_USB_GSPCA_CPIA1=m --CONFIG_USB_GSPCA_ETOMS=m --CONFIG_USB_GSPCA_FINEPIX=m --CONFIG_USB_GSPCA_JEILINJ=m --CONFIG_USB_GSPCA_JL2005BCD=m --CONFIG_USB_GSPCA_KINECT=m --CONFIG_USB_GSPCA_KONICA=m --CONFIG_USB_GSPCA_MARS=m --CONFIG_USB_GSPCA_MR97310A=m --CONFIG_USB_GSPCA_NW80X=m --CONFIG_USB_GSPCA_OV519=m --CONFIG_USB_GSPCA_OV534=m --CONFIG_USB_GSPCA_OV534_9=m --CONFIG_USB_GSPCA_PAC207=m --CONFIG_USB_GSPCA_PAC7302=m --CONFIG_USB_GSPCA_PAC7311=m --CONFIG_USB_GSPCA_SE401=m --CONFIG_USB_GSPCA_SN9C2028=m --CONFIG_USB_GSPCA_SN9C20X=m --CONFIG_USB_GSPCA_SONIXB=m --CONFIG_USB_GSPCA_SONIXJ=m --CONFIG_USB_GSPCA_SPCA500=m --CONFIG_USB_GSPCA_SPCA501=m --CONFIG_USB_GSPCA_SPCA505=m --CONFIG_USB_GSPCA_SPCA506=m --CONFIG_USB_GSPCA_SPCA508=m --CONFIG_USB_GSPCA_SPCA561=m --CONFIG_USB_GSPCA_SPCA1528=m --CONFIG_USB_GSPCA_SQ905=m --CONFIG_USB_GSPCA_SQ905C=m --CONFIG_USB_GSPCA_SQ930X=m --CONFIG_USB_GSPCA_STK014=m --CONFIG_USB_GSPCA_STV0680=m --CONFIG_USB_GSPCA_SUNPLUS=m --CONFIG_USB_GSPCA_T613=m --CONFIG_USB_GSPCA_TOPRO=m --CONFIG_USB_GSPCA_TV8532=m --CONFIG_USB_GSPCA_VC032X=m --CONFIG_USB_GSPCA_VICAM=m --CONFIG_USB_GSPCA_XIRLINK_CIT=m --CONFIG_USB_GSPCA_ZC3XX=m - CONFIG_USB_PWC=m - CONFIG_VIDEO_CPIA2=m - CONFIG_USB_ZR364XX=m - CONFIG_USB_STKWEBCAM=m - CONFIG_USB_S2255=m - CONFIG_USB_SN9C102=m --CONFIG_VIDEO_EM28XX=m --CONFIG_VIDEO_EM28XX_ALSA=m --CONFIG_VIDEO_EM28XX_DVB=m - CONFIG_VIDEO_AU0828=m - CONFIG_VIDEO_PVRUSB2=m -+CONFIG_VIDEO_PVRUSB2_DEBUGIFC=y - CONFIG_VIDEO_HDPVR=m - CONFIG_VIDEO_TLG2300=m -+CONFIG_VIDEO_USBVISION=m -+CONFIG_VIDEO_STK1160=m - CONFIG_VIDEO_CX231XX=m --CONFIG_VIDEO_CX231XX_ALSA=m --CONFIG_VIDEO_CX231XX_DVB=m - CONFIG_VIDEO_TM6000=m --CONFIG_VIDEO_TM6000_ALSA=m --CONFIG_VIDEO_TM6000_DVB=m --CONFIG_VIDEO_USBVISION=m -+CONFIG_DVB_USB=m -+CONFIG_DVB_USB_V2=m -+CONFIG_SMS_USB_DRV=m -+CONFIG_DVB_B2C2_FLEXCOP_USB=m -+CONFIG_VIDEO_EM28XX=m - CONFIG_USB_MR800=m - CONFIG_USB_DSBR=m - CONFIG_RADIO_SHARK=m -@@ -598,48 +541,7 @@ CONFIG_USB_KEENE=m - CONFIG_RADIO_TEA5764=m - CONFIG_RADIO_SAA7706H=m - CONFIG_RADIO_TEF6862=m --CONFIG_DVB_USB=m --CONFIG_DVB_USB_A800=m --CONFIG_DVB_USB_DIBUSB_MB=m --CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y --CONFIG_DVB_USB_DIBUSB_MC=m --CONFIG_DVB_USB_DIB0700=m --CONFIG_DVB_USB_UMT_010=m --CONFIG_DVB_USB_CXUSB=m --CONFIG_DVB_USB_M920X=m --CONFIG_DVB_USB_GL861=m --CONFIG_DVB_USB_AU6610=m --CONFIG_DVB_USB_DIGITV=m --CONFIG_DVB_USB_VP7045=m --CONFIG_DVB_USB_VP702X=m --CONFIG_DVB_USB_GP8PSK=m --CONFIG_DVB_USB_NOVA_T_USB2=m --CONFIG_DVB_USB_TTUSB2=m --CONFIG_DVB_USB_DTT200U=m --CONFIG_DVB_USB_OPERA1=m --CONFIG_DVB_USB_AF9005=m --CONFIG_DVB_USB_AF9005_REMOTE=m --CONFIG_DVB_USB_PCTV452E=m --CONFIG_DVB_USB_DW2102=m --CONFIG_DVB_USB_CINERGY_T2=m --CONFIG_DVB_USB_ANYSEE=m --CONFIG_DVB_USB_DTV5100=m --CONFIG_DVB_USB_AF9015=m --CONFIG_DVB_USB_CE6230=m --CONFIG_DVB_USB_FRIIO=m --CONFIG_DVB_USB_EC168=m --CONFIG_DVB_USB_AZ6007=m --CONFIG_DVB_USB_AZ6027=m --CONFIG_DVB_USB_LME2510=m --CONFIG_DVB_USB_TECHNISAT_USB2=m --CONFIG_DVB_USB_IT913X=m --CONFIG_DVB_USB_MXL111SF=m --CONFIG_DVB_USB_RTL28XXU=m --CONFIG_DVB_USB_AF9035=m --CONFIG_SMS_SIANO_MDTV=m --CONFIG_SMS_USB_DRV=m --CONFIG_DVB_B2C2_FLEXCOP=m --CONFIG_DVB_B2C2_FLEXCOP_USB=m -+CONFIG_MEDIA_ATTACH=y +-# CONFIG_HWMON is not set ++CONFIG_THERMAL=y ++CONFIG_THERMAL_BCM2835=y ++CONFIG_WATCHDOG=y ++CONFIG_BCM2708_WDT=y ++CONFIG_REGULATOR=y ++CONFIG_REGULATOR_DEBUG=y ++CONFIG_REGULATOR_FIXED_VOLTAGE=y ++CONFIG_REGULATOR_VIRTUAL_CONSUMER=y ++CONFIG_REGULATOR_USERSPACE_CONSUMER=y CONFIG_FB=y CONFIG_FB_BCM2708=y - # CONFIG_BACKLIGHT_GENERIC is not set -@@ -708,8 +610,6 @@ CONFIG_HID_GREENASIA=m - CONFIG_HID_SMARTJOYPLUS=m - CONFIG_HID_TOPSEED=m - CONFIG_HID_THRUSTMASTER=m --CONFIG_HID_WACOM=m --CONFIG_HID_WIIMOTE=m - CONFIG_HID_ZEROPLUS=m - CONFIG_HID_ZYDACRON=m - CONFIG_HID_PID=y -@@ -732,7 +632,6 @@ CONFIG_USB_STORAGE_ONETOUCH=m - CONFIG_USB_STORAGE_KARMA=m - CONFIG_USB_STORAGE_CYPRESS_ATACB=m - CONFIG_USB_STORAGE_ENE_UB6250=m --CONFIG_USB_LIBUSUAL=y - CONFIG_USB_MDC800=m - CONFIG_USB_MICROTEK=m - CONFIG_USB_SERIAL=m -@@ -813,10 +712,6 @@ CONFIG_MMC_SDHCI_PLTFM=y +-CONFIG_BACKLIGHT_LCD_SUPPORT=y + CONFIG_FRAMEBUFFER_CONSOLE=y + CONFIG_LOGO=y + # CONFIG_LOGO_LINUX_MONO is not set + # CONFIG_LOGO_LINUX_VGA16 is not set + CONFIG_SOUND=y +-# CONFIG_USB_HID is not set ++CONFIG_SND=y ++CONFIG_SND_BCM2835=y ++# CONFIG_SND_USB is not set + CONFIG_USB=y + CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + CONFIG_USB_DWCOTG=y +-CONFIG_USB_ACM=m +-CONFIG_USB_MDC800=m +-CONFIG_USB_MICROTEK=m + CONFIG_MMC=y + CONFIG_MMC_SDHCI=y + CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_BCM2708=y CONFIG_MMC_SDHCI_BCM2708_DMA=y - CONFIG_MMC_SPI=m --CONFIG_LEDS_GPIO=m + CONFIG_NEW_LEDS=y +-CONFIG_LEDS_CLASS=m ++CONFIG_LEDS_CLASS=y + CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_LEDS_TRIGGER_DEFAULT_ON=m - CONFIG_RTC_CLASS=y - # CONFIG_RTC_HCTOSYS is not set - CONFIG_RTC_DRV_DS1307=m -@@ -856,19 +751,17 @@ CONFIG_PRISM2_USB=m - CONFIG_R8712U=m - CONFIG_VT6656=m - CONFIG_ZRAM=m --CONFIG_ZSMALLOC=m -+CONFIG_ZSMALLOC=y - CONFIG_SPEAKUP=m - CONFIG_SPEAKUP_SYNTH_SOFT=m - CONFIG_STAGING_MEDIA=y - CONFIG_DVB_AS102=m --CONFIG_EASYCAP=m - CONFIG_LIRC_STAGING=y - CONFIG_LIRC_IGORPLUGUSB=m - CONFIG_LIRC_IMON=m - CONFIG_LIRC_RPI=m - CONFIG_LIRC_SASEM=m - CONFIG_LIRC_SERIAL=m --CONFIG_LIRC_TTUSBIR=m +-CONFIG_UIO=m +-CONFIG_UIO_PDRV=m +-CONFIG_UIO_PDRV_GENIRQ=m # CONFIG_IOMMU_SUPPORT is not set CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y -@@ -917,6 +810,7 @@ CONFIG_SQUASHFS=m - CONFIG_SQUASHFS_XATTR=y - CONFIG_SQUASHFS_LZO=y - CONFIG_SQUASHFS_XZ=y -+CONFIG_F2FS_FS=y + CONFIG_EXT4_FS_SECURITY=y +-CONFIG_REISERFS_FS=m +-CONFIG_REISERFS_FS_XATTR=y +-CONFIG_REISERFS_FS_POSIX_ACL=y +-CONFIG_REISERFS_FS_SECURITY=y +-CONFIG_JFS_FS=m +-CONFIG_JFS_POSIX_ACL=y +-CONFIG_JFS_SECURITY=y +-CONFIG_XFS_FS=m +-CONFIG_XFS_QUOTA=y +-CONFIG_XFS_POSIX_ACL=y +-CONFIG_XFS_RT=y +-CONFIG_GFS2_FS=m +-CONFIG_OCFS2_FS=m +-CONFIG_BTRFS_FS=m +-CONFIG_BTRFS_FS_POSIX_ACL=y +-CONFIG_NILFS2_FS=m + CONFIG_AUTOFS4_FS=y +-CONFIG_FUSE_FS=m +-CONFIG_CUSE=m + CONFIG_FSCACHE=y + CONFIG_CACHEFILES=y +-CONFIG_ISO9660_FS=m +-CONFIG_JOLIET=y +-CONFIG_ZISOFS=y +-CONFIG_UDF_FS=m + CONFIG_MSDOS_FS=y + CONFIG_VFAT_FS=y + CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +-CONFIG_NTFS_FS=m + CONFIG_TMPFS=y + CONFIG_TMPFS_POSIX_ACL=y + CONFIG_CONFIGFS_FS=y +-CONFIG_SQUASHFS=m +-CONFIG_SQUASHFS_XATTR=y +-CONFIG_SQUASHFS_LZO=y +-CONFIG_SQUASHFS_XZ=y ++# CONFIG_MISC_FILESYSTEMS is not set CONFIG_NFS_FS=y CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=y -@@ -989,7 +883,6 @@ CONFIG_CRYPTO_HMAC=y - CONFIG_CRYPTO_XCBC=m + CONFIG_ROOT_NFS=y + CONFIG_NFS_FSCACHE=y +-CONFIG_NFSD=m +-CONFIG_NFSD_V3_ACL=y +-CONFIG_NFSD_V4=y +-CONFIG_CIFS=m +-CONFIG_CIFS_WEAK_PW_HASH=y +-CONFIG_CIFS_XATTR=y +-CONFIG_CIFS_POSIX=y +-CONFIG_9P_FS=m +-CONFIG_9P_FS_POSIX_ACL=y + CONFIG_NLS_DEFAULT="utf8" + CONFIG_NLS_CODEPAGE_437=y +-CONFIG_NLS_CODEPAGE_737=m +-CONFIG_NLS_CODEPAGE_775=m +-CONFIG_NLS_CODEPAGE_850=m +-CONFIG_NLS_CODEPAGE_852=m +-CONFIG_NLS_CODEPAGE_855=m +-CONFIG_NLS_CODEPAGE_857=m +-CONFIG_NLS_CODEPAGE_860=m +-CONFIG_NLS_CODEPAGE_861=m +-CONFIG_NLS_CODEPAGE_862=m +-CONFIG_NLS_CODEPAGE_863=m +-CONFIG_NLS_CODEPAGE_864=m +-CONFIG_NLS_CODEPAGE_865=m +-CONFIG_NLS_CODEPAGE_866=m +-CONFIG_NLS_CODEPAGE_869=m +-CONFIG_NLS_CODEPAGE_936=m +-CONFIG_NLS_CODEPAGE_950=m +-CONFIG_NLS_CODEPAGE_932=m +-CONFIG_NLS_CODEPAGE_949=m +-CONFIG_NLS_CODEPAGE_874=m +-CONFIG_NLS_ISO8859_8=m +-CONFIG_NLS_CODEPAGE_1250=m +-CONFIG_NLS_CODEPAGE_1251=m ++CONFIG_NLS_CODEPAGE_737=y ++CONFIG_NLS_CODEPAGE_775=y ++CONFIG_NLS_CODEPAGE_850=y ++CONFIG_NLS_CODEPAGE_852=y ++CONFIG_NLS_CODEPAGE_855=y ++CONFIG_NLS_CODEPAGE_857=y ++CONFIG_NLS_CODEPAGE_860=y ++CONFIG_NLS_CODEPAGE_861=y ++CONFIG_NLS_CODEPAGE_862=y ++CONFIG_NLS_CODEPAGE_863=y ++CONFIG_NLS_CODEPAGE_864=y ++CONFIG_NLS_CODEPAGE_865=y ++CONFIG_NLS_CODEPAGE_866=y ++CONFIG_NLS_CODEPAGE_869=y ++CONFIG_NLS_CODEPAGE_936=y ++CONFIG_NLS_CODEPAGE_950=y ++CONFIG_NLS_CODEPAGE_932=y ++CONFIG_NLS_CODEPAGE_949=y ++CONFIG_NLS_CODEPAGE_874=y ++CONFIG_NLS_ISO8859_8=y ++CONFIG_NLS_CODEPAGE_1250=y ++CONFIG_NLS_CODEPAGE_1251=y + CONFIG_NLS_ASCII=y +-CONFIG_NLS_ISO8859_1=m +-CONFIG_NLS_ISO8859_2=m +-CONFIG_NLS_ISO8859_3=m +-CONFIG_NLS_ISO8859_4=m +-CONFIG_NLS_ISO8859_5=m +-CONFIG_NLS_ISO8859_6=m +-CONFIG_NLS_ISO8859_7=m +-CONFIG_NLS_ISO8859_9=m +-CONFIG_NLS_ISO8859_13=m +-CONFIG_NLS_ISO8859_14=m +-CONFIG_NLS_ISO8859_15=m +-CONFIG_NLS_KOI8_R=m +-CONFIG_NLS_KOI8_U=m ++CONFIG_NLS_ISO8859_1=y ++CONFIG_NLS_ISO8859_2=y ++CONFIG_NLS_ISO8859_3=y ++CONFIG_NLS_ISO8859_4=y ++CONFIG_NLS_ISO8859_5=y ++CONFIG_NLS_ISO8859_6=y ++CONFIG_NLS_ISO8859_7=y ++CONFIG_NLS_ISO8859_9=y ++CONFIG_NLS_ISO8859_13=y ++CONFIG_NLS_ISO8859_14=y ++CONFIG_NLS_ISO8859_15=y ++CONFIG_NLS_UTF8=y + CONFIG_PRINTK_TIME=y + CONFIG_DEBUG_FS=y + CONFIG_DETECT_HUNG_TASK=y +-CONFIG_TIMER_STATS=y + # CONFIG_DEBUG_PREEMPT is not set +-CONFIG_DEBUG_MEMORY_INIT=y +-CONFIG_BOOT_PRINTK_DELAY=y +-CONFIG_LATENCYTOP=y +-# CONFIG_KPROBE_EVENT is not set ++# CONFIG_DEBUG_BUGVERBOSE is not set ++# CONFIG_FTRACE is not set + CONFIG_KGDB=y + CONFIG_KGDB_KDB=y +-CONFIG_KDB_KEYBOARD=y +-CONFIG_STRICT_DEVMEM=y +-CONFIG_DEBUG_LL=y +-CONFIG_DEBUG_BCM2708_UART0=y +-CONFIG_EARLY_PRINTK=y +-CONFIG_CRYPTO_SEQIV=m ++# CONFIG_ARM_UNWIND is not set + CONFIG_CRYPTO_CBC=y +-CONFIG_CRYPTO_XTS=m + CONFIG_CRYPTO_HMAC=y +-CONFIG_CRYPTO_XCBC=m CONFIG_CRYPTO_MD5=y +-CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=m - CONFIG_CRYPTO_SHA512=m - CONFIG_CRYPTO_TGR192=m - CONFIG_CRYPTO_WP512=m -diff --git a/arch/arm/configs/bcmrpi_emergency_defconfig b/arch/arm/configs/bcmrpi_emergency_defconfig -index 3b40c49..ab1b8d9 100644 ---- a/arch/arm/configs/bcmrpi_emergency_defconfig -+++ b/arch/arm/configs/bcmrpi_emergency_defconfig -@@ -530,3 +530,4 @@ CONFIG_CRYPTO_DEFLATE=m +-CONFIG_CRYPTO_SHA512=m +-CONFIG_CRYPTO_TGR192=m +-CONFIG_CRYPTO_WP512=m +-CONFIG_CRYPTO_AES=m +-CONFIG_CRYPTO_CAST5=m + CONFIG_CRYPTO_DES=y + # CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_HW is not set +-CONFIG_CRC_CCITT=m CONFIG_CRC_ITU_T=y +-CONFIG_CRC7=m CONFIG_LIBCRC32C=y -+CONFIG_F2FS=y +-CONFIG_AVERAGE=y -- -1.8.1.5 +1.8.1.6