diff --git a/projects/RPi/patches/linux/linux-01-RPi_support-c5fd68b.patch b/projects/RPi/patches/linux/linux-01-RPi_support-b49aafd.patch similarity index 96% rename from projects/RPi/patches/linux/linux-01-RPi_support-c5fd68b.patch rename to projects/RPi/patches/linux/linux-01-RPi_support-b49aafd.patch index 6a0ed1e0c3..be18fb800d 100644 --- a/projects/RPi/patches/linux/linux-01-RPi_support-c5fd68b.patch +++ b/projects/RPi/patches/linux/linux-01-RPi_support-b49aafd.patch @@ -1,7 +1,7 @@ -From 6c4909d4722da1526564e65a44bcff67cd0fd428 Mon Sep 17 00:00:00 2001 +From 464ff6a40a8e684ebc730b5ede44c646b1d4e6c9 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 12 May 2013 12:24:19 +0100 -Subject: [PATCH 001/128] Main bcm2708 linux port +Subject: [PATCH 001/104] Main bcm2708 linux port Signed-off-by: popcornmix --- @@ -11,12 +11,13 @@ Signed-off-by: popcornmix arch/arm/configs/bcmrpi_cutdown_defconfig | 474 +++++++ arch/arm/configs/bcmrpi_defconfig | 510 ++++++++ arch/arm/configs/bcmrpi_emergency_defconfig | 532 ++++++++ + arch/arm/kernel/process.c | 2 +- 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 | 208 ++++ arch/arm/mach-bcm2708/armctrl.h | 27 + - arch/arm/mach-bcm2708/bcm2708.c | 638 ++++++++++ + arch/arm/mach-bcm2708/bcm2708.c | 695 +++++++++++ arch/arm/mach-bcm2708/bcm2708.h | 51 + arch/arm/mach-bcm2708/bcm2708_gpio.c | 339 +++++ arch/arm/mach-bcm2708/clock.c | 61 + @@ -36,15 +37,15 @@ Signed-off-by: popcornmix 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/system.h | 38 + arch/arm/mach-bcm2708/include/mach/timex.h | 23 + 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/vc_mem.h | 36 + + arch/arm/mach-bcm2708/include/mach/vcio.h | 141 +++ arch/arm/mach-bcm2708/include/mach/vmalloc.h | 20 + arch/arm/mach-bcm2708/power.c | 194 +++ - arch/arm/mach-bcm2708/vc_mem.c | 470 +++++++ - arch/arm/mach-bcm2708/vcio.c | 308 +++++ + arch/arm/mach-bcm2708/vc_mem.c | 462 +++++++ + arch/arm/mach-bcm2708/vcio.c | 474 +++++++ arch/arm/mm/Kconfig | 2 +- arch/arm/mm/proc-v6.S | 15 +- arch/arm/tools/mach-types | 1 + @@ -54,7 +55,7 @@ Signed-off-by: popcornmix drivers/mmc/host/sdhci.c | 209 +++- drivers/mmc/host/sdhci.h | 37 + include/linux/mmc/sdhci.h | 2 + - 49 files changed, 7478 insertions(+), 71 deletions(-) + 50 files changed, 7779 insertions(+), 72 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 @@ -1693,6 +1694,19 @@ index 0000000..3b40c49 +# CONFIG_CRYPTO_HW is not set +CONFIG_CRC_ITU_T=y +CONFIG_LIBCRC32C=y +diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c +index ab1fe3b..6d89fa2 100644 +--- a/arch/arm/kernel/process.c ++++ b/arch/arm/kernel/process.c +@@ -174,7 +174,7 @@ void arch_cpu_idle(void) + default_idle(); + } + +-static char reboot_mode = 'h'; ++char reboot_mode = 'h'; + + int __init reboot_setup(char *str) + { diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig new file mode 100644 index 0000000..63bb76c @@ -2005,10 +2019,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..544ed1e +index 0000000..64a2783 --- /dev/null +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -0,0 +1,638 @@ +@@ -0,0 +1,695 @@ +/* + * linux/arch/arm/mach-bcm2708/bcm2708.c + * @@ -2083,6 +2097,8 @@ index 0000000..544ed1e + +/* command line parameters */ +static unsigned boardrev, serial; ++static unsigned uart_clock; ++static unsigned reboot_part = 0; + +static void __init bcm2708_init_led(void); + @@ -2445,23 +2461,81 @@ index 0000000..544ed1e + return ret; +} + ++int calc_rsts(int partition) ++{ ++ return PM_PASSWORD | ++ ((partition & (1 << 0)) << 0) | ++ ((partition & (1 << 1)) << 1) | ++ ((partition & (1 << 2)) << 2) | ++ ((partition & (1 << 3)) << 3) | ++ ((partition & (1 << 4)) << 4) | ++ ((partition & (1 << 5)) << 5); ++} ++ ++static void bcm2708_restart(char mode, const char *cmd) ++{ ++ uint32_t pm_rstc, pm_wdog; ++ uint32_t timeout = 10; ++ uint32_t pm_rsts = 0; ++ ++ if(mode == 'q') ++ { ++ // NOOBS < 1.3 booting with reboot=q ++ pm_rsts = readl(__io_address(PM_RSTS)); ++ pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRQ_SET; ++ } ++ else if(mode == 'p') ++ { ++ // NOOBS < 1.3 halting ++ pm_rsts = readl(__io_address(PM_RSTS)); ++ pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRH_SET; ++ } ++ else ++ { ++ pm_rsts = calc_rsts(reboot_part); ++ } ++ ++ writel(pm_rsts, __io_address(PM_RSTS)); ++ ++ /* Setup watchdog for reset */ ++ 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)); ++} ++ +/* 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, ""); ++ extern char reboot_mode; ++ ++ if(reboot_mode == 'q') ++ { ++ // NOOBS < v1.3 ++ bcm2708_restart('p', ""); ++ } ++ else ++ { ++ /* partition 63 is special code for HALT the bootloader knows not to boot*/ ++ reboot_part = 63; ++ /* continue with normal reset mechanism */ ++ bcm2708_restart(0, ""); ++ } +} + +void __init bcm2708_init(void) +{ + int i; + ++ printk("bcm2708.uart_clock = %d\n", uart_clock); + pm_power_off = bcm2708_power_off; + ++ if (uart_clock) ++ lookups[0].clk->rate = uart_clock; ++ + for (i = 0; i < ARRAY_SIZE(lookups); i++) + clkdev_add(&lookups[i]); + @@ -2481,12 +2555,6 @@ index 0000000..544ed1e +#endif + bcm2708_init_led(); + -+#ifdef CONFIG_BCM2708_VCMEM -+ { -+ extern void vc_mem_connected_init(void); -+ vc_mem_connected_init(); -+ } -+#endif + for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { + struct amba_device *d = amba_devs[i]; + amba_device_register(d, &iomem_resource); @@ -2633,7 +2701,7 @@ index 0000000..544ed1e + * context. Increase size of atomic coherent pool to make sure such + * the allocations won't fail. + */ -+ init_dma_coherent_pool_size(SZ_2M); ++ init_dma_coherent_pool_size(SZ_4M); +} + +MACHINE_START(BCM2708, "BCM2708") @@ -2643,10 +2711,13 @@ index 0000000..544ed1e + .init_time = bcm2708_timer_init, + .init_machine = bcm2708_init, + .init_early = bcm2708_init_early, ++ .restart = bcm2708_restart, +MACHINE_END + +module_param(boardrev, uint, 0644); +module_param(serial, uint, 0644); ++module_param(uart_clock, uint, 0644); ++module_param(reboot_part, uint, 0644); diff --git a/arch/arm/mach-bcm2708/bcm2708.h b/arch/arm/mach-bcm2708/bcm2708.h new file mode 100644 index 0000000..dfe8700 @@ -4910,10 +4981,10 @@ index 0000000..52b3b02 +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/system.h b/arch/arm/mach-bcm2708/include/mach/system.h new file mode 100644 -index 0000000..bc9d458 +index 0000000..2d0b821 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/system.h -@@ -0,0 +1,53 @@ +@@ -0,0 +1,38 @@ +/* + * arch/arm/mach-bcm2708/include/mach/system.h + * @@ -4951,21 +5022,6 @@ index 0000000..bc9d458 + cpu_do_idle(); +} + -+static inline void arch_reset(char mode, const char *cmd) -+{ -+ uint32_t pm_rstc, pm_wdog; -+ uint32_t timeout = 10; -+ -+ /* Setup watchdog for reset */ -+ 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)); -+} -+ +#endif diff --git a/arch/arm/mach-bcm2708/include/mach/timex.h b/arch/arm/mach-bcm2708/include/mach/timex.h new file mode 100644 @@ -5089,10 +5145,10 @@ index 0000000..6ff8f94 + 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 +index 0000000..d29125b --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/vc_mem.h -@@ -0,0 +1,35 @@ +@@ -0,0 +1,36 @@ +/***************************************************************************** +* Copyright 2010 - 2011 Broadcom Corporation. All rights reserved. +* @@ -5117,6 +5173,7 @@ index 0000000..9d41c3a +#define VC_MEM_IOC_MEM_PHYS_ADDR _IOR( VC_MEM_IOC_MAGIC, 0, unsigned long ) +#define VC_MEM_IOC_MEM_SIZE _IOR( VC_MEM_IOC_MAGIC, 1, unsigned int ) +#define VC_MEM_IOC_MEM_BASE _IOR( VC_MEM_IOC_MAGIC, 2, unsigned int ) ++#define VC_MEM_IOC_MEM_LOAD _IOR( VC_MEM_IOC_MAGIC, 3, unsigned int ) + +#if defined( __KERNEL__ ) +#define VC_MEM_TO_ARM_ADDR_MASK 0x3FFFFFFF @@ -5130,10 +5187,10 @@ index 0000000..9d41c3a + diff --git a/arch/arm/mach-bcm2708/include/mach/vcio.h b/arch/arm/mach-bcm2708/include/mach/vcio.h new file mode 100644 -index 0000000..0d7f9a5 +index 0000000..b522ba9 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/vcio.h -@@ -0,0 +1,42 @@ +@@ -0,0 +1,141 @@ +/* + * arch/arm/mach-bcm2708/include/mach/vcio.h + * @@ -5163,22 +5220,121 @@ index 0000000..0d7f9a5 +#define BCM_VCIO_DRIVER_NAME "bcm2708_vcio" + +/* Constants shared with the ARM identifying separate mailbox channels */ -+#define MBOX_CHAN_POWER 0 /* for use by the power management interface */ -+#define MBOX_CHAN_FB 1 /* for use by the frame buffer */ -+#define MBOX_CHAN_VUART 2 /* for use by the virtual UART */ -+#define MBOX_CHAN_VCHIQ 3 /* for use by the VCHIQ interface */ -+#define MBOX_CHAN_LEDS 4 /* for use by the leds interface */ -+#define MBOX_CHAN_BUTTONS 5 /* for use by the buttons interface */ -+#define MBOX_CHAN_TOUCH 6 /* for use by the touchscreen interface */ -+#define MBOX_CHAN_COUNT 7 ++#define MBOX_CHAN_POWER 0 /* for use by the power management interface */ ++#define MBOX_CHAN_FB 1 /* for use by the frame buffer */ ++#define MBOX_CHAN_VCHIQ 3 /* for use by the VCHIQ interface */ ++#define MBOX_CHAN_PROPERTY 8 /* for use by the property channel */ ++#define MBOX_CHAN_COUNT 9 ++ ++/* Mailbox property tags */ ++enum { ++ VCMSG_PROPERTY_END = 0x00000000, ++ VCMSG_GET_FIRMWARE_REVISION = 0x00000001, ++ VCMSG_GET_BOARD_MODEL = 0x00010001, ++ VCMSG_GET_BOARD_REVISION = 0x00020002, ++ VCMSG_GET_BOARD_MAC_ADDRESS = 0x00020003, ++ VCMSG_GET_BOARD_SERIAL = 0x00020004, ++ VCMSG_GET_ARM_MEMORY = 0x00020005, ++ VCMSG_GET_VC_MEMORY = 0x00020006, ++ VCMSG_GET_CLOCKS = 0x00020007, ++ VCMSG_GET_COMMAND_LINE = 0x00050001, ++ VCMSG_GET_DMA_CHANNELS = 0x00060001, ++ VCMSG_GET_POWER_STATE = 0x00020001, ++ VCMSG_GET_TIMING = 0x00020002, ++ VCMSG_SET_POWER_STATE = 0x00028001, ++ VCMSG_GET_CLOCK_STATE = 0x00030001, ++ VCMSG_SET_CLOCK_STATE = 0x00038001, ++ VCMSG_GET_CLOCK_RATE = 0x00030002, ++ VCMSG_SET_CLOCK_RATE = 0x00038002, ++ VCMSG_GET_VOLTAGE = 0x00030003, ++ VCMSG_SET_VOLTAGE = 0x00038003, ++ VCMSG_GET_MAX_CLOCK = 0x00030004, ++ VCMSG_GET_MAX_VOLTAGE = 0x00030005, ++ VCMSG_GET_TEMPERATURE = 0x00030006, ++ VCMSG_GET_MIN_CLOCK = 0x00030007, ++ VCMSG_GET_MIN_VOLTAGE = 0x00030008, ++ VCMSG_GET_TURBO = 0x00030009, ++ VCMSG_SET_TURBO = 0x00038009, ++ VCMSG_SET_ALLOCATE_BUFFER = 0x00040001, ++ VCMSG_SET_RELEASE_BUFFER = 0x00048001, ++ VCMSG_SET_BLANK_SCREEN = 0x00040002, ++ VCMSG_TST_BLANK_SCREEN = 0x00044002, ++ VCMSG_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, ++ VCMSG_TST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, ++ VCMSG_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, ++ VCMSG_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, ++ VCMSG_TST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, ++ VCMSG_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, ++ VCMSG_GET_DEPTH = 0x00040005, ++ VCMSG_TST_DEPTH = 0x00044005, ++ VCMSG_SET_DEPTH = 0x00048005, ++ VCMSG_GET_PIXEL_ORDER = 0x00040006, ++ VCMSG_TST_PIXEL_ORDER = 0x00044006, ++ VCMSG_SET_PIXEL_ORDER = 0x00048006, ++ VCMSG_GET_ALPHA_MODE = 0x00040007, ++ VCMSG_TST_ALPHA_MODE = 0x00044007, ++ VCMSG_SET_ALPHA_MODE = 0x00048007, ++ VCMSG_GET_PITCH = 0x00040008, ++ VCMSG_TST_PITCH = 0x00044008, ++ VCMSG_SET_PITCH = 0x00048008, ++ VCMSG_GET_VIRTUAL_OFFSET = 0x00040009, ++ VCMSG_TST_VIRTUAL_OFFSET = 0x00044009, ++ VCMSG_SET_VIRTUAL_OFFSET = 0x00048009, ++ VCMSG_GET_OVERSCAN = 0x0004000a, ++ VCMSG_TST_OVERSCAN = 0x0004400a, ++ VCMSG_SET_OVERSCAN = 0x0004800a, ++ VCMSG_GET_PALETTE = 0x0004000b, ++ VCMSG_TST_PALETTE = 0x0004400b, ++ VCMSG_SET_PALETTE = 0x0004800b, ++ VCMSG_GET_LAYER = 0x0004000c, ++ VCMSG_TST_LAYER = 0x0004400c, ++ VCMSG_SET_LAYER = 0x0004800c, ++ VCMSG_GET_TRANSFORM = 0x0004000d, ++ VCMSG_TST_TRANSFORM = 0x0004400d, ++ VCMSG_SET_TRANSFORM = 0x0004800d, ++}; + +extern int /*rc*/ bcm_mailbox_read(unsigned chan, uint32_t *data28); +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/include/mach/vmalloc.h b/arch/arm/mach-bcm2708/include/mach/vmalloc.h new file mode 100644 -index 0000000..28ecc15 +index 0000000..502c617 --- /dev/null +++ b/arch/arm/mach-bcm2708/include/mach/vmalloc.h @@ -0,0 +1,20 @@ @@ -5201,7 +5357,7 @@ index 0000000..28ecc15 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ -+#define VMALLOC_END (0xd8000000) ++#define VMALLOC_END (0xe8000000) diff --git a/arch/arm/mach-bcm2708/power.c b/arch/arm/mach-bcm2708/power.c new file mode 100644 index 0000000..256bf1a @@ -5404,10 +5560,10 @@ index 0000000..256bf1a +MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-bcm2708/vc_mem.c b/arch/arm/mach-bcm2708/vc_mem.c new file mode 100644 -index 0000000..fd9d4be +index 0000000..aeae4d5 --- /dev/null +++ b/arch/arm/mach-bcm2708/vc_mem.c -@@ -0,0 +1,470 @@ +@@ -0,0 +1,462 @@ +/***************************************************************************** +* Copyright 2010 - 2011 Broadcom Corporation. All rights reserved. +* @@ -5431,6 +5587,7 @@ index 0000000..fd9d4be +#include +#include +#include ++#include + +#ifdef CONFIG_ARCH_KONA +#include @@ -5440,12 +5597,12 @@ index 0000000..fd9d4be +#endif + +#include "mach/vc_mem.h" -+//#include "interface/vchiq_arm/vchiq_connected.h" ++#include + +#define DRIVER_NAME "vc-mem" + +// Uncomment to enable debug logging -+//#define ENABLE_DBG ++// #define ENABLE_DBG + +#if defined(ENABLE_DBG) +#define LOG_DBG( fmt, ... ) printk( KERN_INFO fmt "\n", ##__VA_ARGS__ ) @@ -5477,23 +5634,8 @@ index 0000000..fd9d4be + * bootloader (and/or kernel). When that happens, the values of these variables + * would be calculated and assigned in the init function. + */ -+#ifdef CONFIG_ARCH_KONA -+ -+#include -+unsigned long mm_vc_mem_phys_addr = VC_EMI; -+ -+#elif CONFIG_ARCH_BCM2708 -+ +// in the 2835 VC in mapped above ARM, but ARM has full access to VC space +unsigned long mm_vc_mem_phys_addr = 0x00000000; -+ -+#else -+ -+#include -+unsigned long mm_vc_mem_phys_addr = MM_ADDR_IO_VC_EMI; -+ -+#endif -+ +unsigned int mm_vc_mem_size = 0; +unsigned int mm_vc_mem_base = 0; + @@ -5501,6 +5643,11 @@ index 0000000..fd9d4be +EXPORT_SYMBOL(mm_vc_mem_size); +EXPORT_SYMBOL(mm_vc_mem_base); + ++static uint phys_addr = 0; ++static uint mem_size = 0; ++static uint mem_base = 0; ++ ++ +/**************************************************************************** +* +* vc_mem_open @@ -5544,7 +5691,6 @@ index 0000000..fd9d4be +static void +vc_mem_get_size(void) +{ -+ mm_vc_mem_size = 256 * 1024 * 1024; // Static for now +} + +/**************************************************************************** @@ -5556,7 +5702,6 @@ index 0000000..fd9d4be +static void +vc_mem_get_base(void) +{ -+ mm_vc_mem_base = 128 * 1024 * 1024; // Static for now +} + +/**************************************************************************** @@ -5568,7 +5713,6 @@ index 0000000..fd9d4be +int +vc_mem_get_current_size(void) +{ -+ vc_mem_get_size(); + return mm_vc_mem_size; +} + @@ -5630,6 +5774,20 @@ index 0000000..fd9d4be + } + break; + } ++ case VC_MEM_IOC_MEM_LOAD: ++ { ++ // Get the videocore memory base ++ vc_mem_get_base(); ++ ++ LOG_DBG("%s: VC_MEM_IOC_MEM_LOAD=%u", __func__, ++ mm_vc_mem_base); ++ ++ if (copy_to_user((void *) arg, &mm_vc_mem_base, ++ sizeof (mm_vc_mem_base)) != 0) { ++ rc = -EFAULT; ++ } ++ break; ++ } + default: + { + return -ENOTTY; @@ -5759,25 +5917,26 @@ index 0000000..fd9d4be + +/**************************************************************************** +* -+* vc_mem_connected_init -+* -+* This function is called once the videocore has been connected. ++* vc_mem_init +* +***************************************************************************/ + -+void -+vc_mem_connected_init(void) ++static int __init ++vc_mem_init(void) +{ + int rc = -EFAULT; + struct device *dev; + + LOG_DBG("%s: called", __func__); + ++ mm_vc_mem_phys_addr = phys_addr; ++ mm_vc_mem_size = mem_size; ++ mm_vc_mem_base = mem_base; ++ + vc_mem_get_size(); + -+ printk("vc-mem: mm_vc_mem_phys_addr = 0x%08lx\n", mm_vc_mem_phys_addr); -+ printk("vc-mem: mm_vc_mem_size = 0x%08x (%u MiB)\n", -+ mm_vc_mem_size, mm_vc_mem_size / (1024 * 1024)); ++ printk("vc-mem: phys_addr:0x%08lx mem_base=0x%08x mem_size:0x%08x(%u MiB)\n", ++ mm_vc_mem_phys_addr, mm_vc_mem_base, mm_vc_mem_size, mm_vc_mem_size / (1024 * 1024)); + + if ((rc = alloc_chrdev_region(&vc_mem_devnum, 0, 1, DRIVER_NAME)) < 0) { + LOG_ERR("%s: alloc_chrdev_region failed (rc=%d)", __func__, rc); @@ -5817,7 +5976,7 @@ index 0000000..fd9d4be +#endif + + vc_mem_inited = 1; -+ return; ++ return 0; + + out_device_destroy: + device_destroy(vc_mem_class, vc_mem_devnum); @@ -5833,23 +5992,7 @@ index 0000000..fd9d4be + unregister_chrdev_region(vc_mem_devnum, 1); + + out_err: -+ return; -+} -+ -+/**************************************************************************** -+* -+* vc_mem_init -+* -+***************************************************************************/ -+ -+static int __init -+vc_mem_init(void) -+{ -+ printk(KERN_INFO "vc-mem: Videocore memory driver\n"); -+ -+ //vchiq_add_connected_callback(vc_mem_connected_init); -+ -+ return 0; ++ return -1; +} + +/**************************************************************************** @@ -5878,12 +6021,17 @@ index 0000000..fd9d4be +module_exit(vc_mem_exit); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Broadcom Corporation"); ++ ++module_param(phys_addr, uint, 0644); ++module_param(mem_size, uint, 0644); ++module_param(mem_base, uint, 0644); ++ diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c new file mode 100644 -index 0000000..799a0ac +index 0000000..599eb63 --- /dev/null +++ b/arch/arm/mach-bcm2708/vcio.c -@@ -0,0 +1,308 @@ +@@ -0,0 +1,474 @@ +/* + * linux/arch/arm/mach-bcm2708/vcio.c + * @@ -5923,6 +6071,9 @@ index 0000000..799a0ac +#include +#include + ++#include ++ ++ +#define DRIVER_NAME BCM_VCIO_DRIVER_NAME + +/* ---------------------------------------------------------------------- @@ -6005,14 +6156,10 @@ index 0000000..799a0ac + if (mbox->magic != MBOX_MAGIC) + rc = -EINVAL; + else { -+ if (down_interruptible(&mbox->sema[chan]) == 0) { -+ *data28 = MBOX_DATA28(mbox->msg[chan]); -+ mbox->msg[chan] = 0; -+ rc = 0; -+ } else { -+ /* The wait was interrupted */ -+ rc = -EINTR; -+ } ++ down(&mbox->sema[chan]); ++ *data28 = MBOX_DATA28(mbox->msg[chan]); ++ mbox->msg[chan] = 0; ++ rc = 0; + } + return rc; +} @@ -6106,10 +6253,161 @@ index 0000000..799a0ac + 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; ++ } ++} ++ ++static DEFINE_MUTEX(mailbox_lock); ++extern int bcm_mailbox_property(void *data, int size) ++{ ++ uint32_t success; ++ dma_addr_t mem_bus; /* the memory address accessed from videocore */ ++ 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) { ++ /* create the message */ ++ mbox_copy_from_user(mem_kern, data, size); ++ ++ /* send the message */ ++ wmb(); ++ s = bcm_mailbox_write(MBOX_CHAN_PROPERTY, (uint32_t)mem_bus); ++ if (s == 0) { ++ s = bcm_mailbox_read(MBOX_CHAN_PROPERTY, &success); ++ } ++ if (s == 0) { ++ /* copy the response */ ++ rmb(); ++ mbox_copy_to_user(data, mem_kern, size); ++ } ++ dma_free_coherent(NULL, PAGE_ALIGN(size), mem_kern, mem_bus); ++ } else { ++ s = -ENOMEM; ++ } ++ 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); ++ +/* ---------------------------------------------------------------------- + * 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; @@ -6142,6 +6440,22 @@ index 0000000..799a0ac + __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; +} + @@ -8259,10 +8573,10 @@ index b838ffc..f3a39c1 100644 1.8.4 -From db4804f8e3d42c9aa6534bb512f68983f8aad4bf Mon Sep 17 00:00:00 2001 +From a0b25b587dfcc4c6816b655fa452eb4b03d55e33 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 May 2013 19:46:17 +0100 -Subject: [PATCH 002/128] Add dwc_otg driver +Subject: [PATCH 002/104] Add dwc_otg driver Signed-off-by: popcornmix --- @@ -65341,10 +65655,10 @@ index 0000000..abcf284 1.8.4 -From a9b43c2cb50813ef3d031f9189416622fb9e423e Mon Sep 17 00:00:00 2001 +From 6f547e8f73eedc83fe224ef457ea55f48673776a Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 May 2013 19:54:32 +0100 -Subject: [PATCH 003/128] bcm2708 watchdog driver +Subject: [PATCH 003/104] bcm2708 watchdog driver Signed-off-by: popcornmix --- @@ -65778,18 +66092,18 @@ index 0000000..dd33c35 1.8.4 -From 2fe9e8fb06e8dc21afa02c7104cb0832288b9ddb Mon Sep 17 00:00:00 2001 +From 5ee582d3526b124b504d8dc353ced66b6c21ba00 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 May 2013 19:55:09 +0100 -Subject: [PATCH 004/128] bcm2708 framebuffer driver +Subject: [PATCH 004/104] bcm2708 framebuffer driver Signed-off-by: popcornmix --- drivers/video/Kconfig | 14 + drivers/video/Makefile | 1 + - drivers/video/bcm2708_fb.c | 487 ++++++ + drivers/video/bcm2708_fb.c | 491 ++++++ drivers/video/logo/logo_linux_clut224.ppm | 2483 ++++++++++------------------- - 4 files changed, 1383 insertions(+), 1602 deletions(-) + 4 files changed, 1387 insertions(+), 1602 deletions(-) create mode 100644 drivers/video/bcm2708_fb.c diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig @@ -65831,10 +66145,10 @@ index e8bae8d..032f386 100644 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..c82dd90 +index 0000000..08d9238 --- /dev/null +++ b/drivers/video/bcm2708_fb.c -@@ -0,0 +1,487 @@ +@@ -0,0 +1,491 @@ +/* + * linux/drivers/video/bcm2708_fb.c + * @@ -65872,6 +66186,12 @@ index 0000000..c82dd90 +#include +#include + ++#ifdef BCM2708_FB_DEBUG ++#define print_debug(fmt,...) pr_debug("%s:%s:%d: "fmt, MODULE_NAME, __func__, __LINE__, ##__VA_ARGS__) ++#else ++#define print_debug(fmt,...) ++#endif ++ +/* This is limited to 16 characters when displayed by X startup */ +static const char *bcm2708_name = "BCM2708 FB"; + @@ -65971,17 +66291,15 @@ index 0000000..c82dd90 +{ + /* info input, var output */ + int yres; -+ /* memory size in pixels */ -+ unsigned pixels = info->screen_size * 8 / var->bits_per_pixel; + + /* info input, var output */ -+ pr_info("bcm2708_fb_check_var info(%p) %dx%d (%dx%d), %d, %d\n", info, ++ print_debug("bcm2708_fb_check_var info(%p) %dx%d (%dx%d), %d, %d\n", info, + info->var.xres, info->var.yres, info->var.xres_virtual, + info->var.yres_virtual, (int)info->screen_size, + info->var.bits_per_pixel); -+ pr_info("bcm2708_fb_check_var var(%p) %dx%d (%dx%d), %d, %d\n", var, ++ print_debug("bcm2708_fb_check_var var(%p) %dx%d (%dx%d), %d\n", var, + var->xres, var->yres, var->xres_virtual, var->yres_virtual, -+ var->bits_per_pixel, pixels); ++ var->bits_per_pixel); + + if (!var->bits_per_pixel) + var->bits_per_pixel = 16; @@ -66047,7 +66365,7 @@ index 0000000..c82dd90 + fbinfo->base = 0; /* filled in by VC */ + fbinfo->pitch = 0; /* filled in by VC */ + -+ pr_info("bcm2708_fb_set_par info(%p) %dx%d (%dx%d), %d, %d\n", info, ++ print_debug("bcm2708_fb_set_par info(%p) %dx%d (%dx%d), %d, %d\n", info, + info->var.xres, info->var.yres, info->var.xres_virtual, + info->var.yres_virtual, (int)info->screen_size, + info->var.bits_per_pixel); @@ -66088,7 +66406,7 @@ index 0000000..c82dd90 + BUG(); /* what can we do here */ + } + } -+ pr_info ++ print_debug + ("BCM2708FB: start = %p,%p width=%d, height=%d, bpp=%d, pitch=%d size=%d success=%d\n", + (void *)fb->fb.screen_base, (void *)fb->fb.fix.smem_start, + fbinfo->xres, fbinfo->yres, fbinfo->bpp, @@ -66111,7 +66429,7 @@ index 0000000..c82dd90 +{ + 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);*/ ++ /*print_debug("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] */ @@ -66134,28 +66452,28 @@ index 0000000..c82dd90 + +static int bcm2708_fb_blank(int blank_mode, struct fb_info *info) +{ -+ /*pr_info("bcm2708_fb_blank\n"); */ ++ /*print_debug("bcm2708_fb_blank\n"); */ + return -1; +} + +static void bcm2708_fb_fillrect(struct fb_info *info, + const struct fb_fillrect *rect) +{ -+ /* (is called) pr_info("bcm2708_fb_fillrect\n"); */ ++ /* (is called) print_debug("bcm2708_fb_fillrect\n"); */ + cfb_fillrect(info, rect); +} + +static void bcm2708_fb_copyarea(struct fb_info *info, + const struct fb_copyarea *region) +{ -+ /*pr_info("bcm2708_fb_copyarea\n"); */ ++ /*print_debug("bcm2708_fb_copyarea\n"); */ + cfb_copyarea(info, region); +} + +static void bcm2708_fb_imageblit(struct fb_info *info, + const struct fb_image *image) +{ -+ /* (is called) pr_info("bcm2708_fb_imageblit\n"); */ ++ /* (is called) print_debug("bcm2708_fb_imageblit\n"); */ + cfb_imageblit(info, image); +} + @@ -66230,15 +66548,15 @@ index 0000000..c82dd90 + + fb_set_var(&fb->fb, &fb->fb.var); + -+ pr_info("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, ++ print_debug("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, + fbheight, fbdepth); + + ret = register_framebuffer(&fb->fb); -+ pr_info("BCM2708FB: register framebuffer (%d)\n", ret); ++ print_debug("BCM2708FB: register framebuffer (%d)\n", ret); + if (ret == 0) + goto out; + -+ pr_info("BCM2708FB: cannot register framebuffer (%d)\n", ret); ++ print_debug("BCM2708FB: cannot register framebuffer (%d)\n", ret); +out: + return ret; +} @@ -68816,10 +69134,10 @@ index 3c14e43..7626beb 100644 1.8.4 -From d83d46c2b0262e658b42e47783b9d5f6849a943c Mon Sep 17 00:00:00 2001 +From 6e071d83898b7165638d959c8732e030a83cbd60 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 2 Jul 2013 23:42:01 +0100 -Subject: [PATCH 005/128] bcm2708 vchiq driver +Subject: [PATCH 005/104] bcm2708 vchiq driver Signed-off-by: popcornmix --- @@ -68837,26 +69155,26 @@ Signed-off-by: popcornmix .../misc/vc04_services/interface/vchiq_arm/vchiq.h | 41 + .../vc04_services/interface/vchiq_arm/vchiq_2835.h | 42 + .../interface/vchiq_arm/vchiq_2835_arm.c | 538 +++ - .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 2808 ++++++++++++++ + .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 2813 ++++++++++++++ .../vc04_services/interface/vchiq_arm/vchiq_arm.h | 212 ++ .../interface/vchiq_arm/vchiq_build_info.h | 37 + .../vc04_services/interface/vchiq_arm/vchiq_cfg.h | 60 + .../interface/vchiq_arm/vchiq_connected.c | 119 + .../interface/vchiq_arm/vchiq_connected.h | 51 + - .../vc04_services/interface/vchiq_arm/vchiq_core.c | 3818 ++++++++++++++++++++ - .../vc04_services/interface/vchiq_arm/vchiq_core.h | 703 ++++ + .../vc04_services/interface/vchiq_arm/vchiq_core.c | 3824 ++++++++++++++++++++ + .../vc04_services/interface/vchiq_arm/vchiq_core.h | 706 ++++ .../interface/vchiq_arm/vchiq_genversion | 89 + .../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_kern_lib.c | 456 +++ .../interface/vchiq_arm/vchiq_memdrv.h | 71 + .../interface/vchiq_arm/vchiq_pagelist.h | 58 + .../vc04_services/interface/vchiq_arm/vchiq_proc.c | 254 ++ .../vc04_services/interface/vchiq_arm/vchiq_shim.c | 815 +++++ - .../vc04_services/interface/vchiq_arm/vchiq_util.c | 120 + + .../vc04_services/interface/vchiq_arm/vchiq_util.c | 151 + .../vc04_services/interface/vchiq_arm/vchiq_util.h | 82 + .../interface/vchiq_arm/vchiq_version.c | 59 + - 33 files changed, 12184 insertions(+) + 33 files changed, 12231 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 @@ -71037,10 +71355,10 @@ index 0000000..2b5fa56 +} diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c new file mode 100644 -index 0000000..f87bbdd +index 0000000..f44d4b4 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c -@@ -0,0 +1,2808 @@ +@@ -0,0 +1,2813 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -71402,6 +71720,17 @@ index 0000000..f87bbdd + +/**************************************************************************** +* ++* user_service_free ++* ++***************************************************************************/ ++static void ++user_service_free(void *userdata) ++{ ++ kfree(userdata); ++} ++ ++/**************************************************************************** ++* +* vchiq_ioctl +* +***************************************************************************/ @@ -71510,7 +71839,7 @@ index 0000000..f87bbdd + service = vchiq_add_service_internal( + instance->state, + &args.params, srvstate, -+ instance); ++ instance, user_service_free); + + if (service != NULL) { + user_service->service = service; @@ -71533,8 +71862,6 @@ index 0000000..f87bbdd + service = NULL; + ret = (status == VCHIQ_RETRY) ? + -EINTR : -EIO; -+ user_service->service = NULL; -+ user_service->instance = NULL; + break; + } + } @@ -71546,7 +71873,6 @@ index 0000000..f87bbdd + sizeof(service->handle)) != 0) { + ret = -EFAULT; + vchiq_remove_service(service->handle); -+ kfree(user_service); + } + + service = NULL; @@ -71839,10 +72165,8 @@ index 0000000..f87bbdd + } + + if (completion->reason == -+ VCHIQ_SERVICE_CLOSED) { ++ VCHIQ_SERVICE_CLOSED) + unlock_service(service); -+ kfree(user_service); -+ } + + if (copy_to_user((void __user *)( + (size_t)args.buf + @@ -72194,7 +72518,6 @@ index 0000000..f87bbdd + spin_unlock(&msg_queue_spinlock); + + unlock_service(service); -+ kfree(user_service); + } + + /* Release any closed services */ @@ -74360,10 +74683,10 @@ 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..2efb124 +index 0000000..f35ed4f --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -@@ -0,0 +1,3818 @@ +@@ -0,0 +1,3824 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -74639,6 +74962,9 @@ index 0000000..2efb124 + } + spin_unlock(&service_spinlock); + ++ if (service && service->userdata_term) ++ service->userdata_term(service->base.userdata); ++ + kfree(service); +} + @@ -75855,6 +76181,7 @@ index 0000000..2efb124 + version, version_min); + vchiq_loud_error_footer(); + unlock_service(service); ++ service = NULL; + goto fail_open; + } + service->peer_version = version; @@ -75920,7 +76247,8 @@ index 0000000..2efb124 + return 1; + +bail_not_ready: -+ unlock_service(service); ++ if (service) ++ unlock_service(service); + + return 0; +} @@ -76842,7 +77170,7 @@ index 0000000..2efb124 +VCHIQ_SERVICE_T * +vchiq_add_service_internal(VCHIQ_STATE_T *state, + const VCHIQ_SERVICE_PARAMS_T *params, int srvstate, -+ VCHIQ_INSTANCE_T instance) ++ VCHIQ_INSTANCE_T instance, VCHIQ_USERDATA_TERM_T userdata_term) +{ + VCHIQ_SERVICE_T *service; + @@ -76854,6 +77182,7 @@ index 0000000..2efb124 + service->handle = VCHIQ_SERVICE_HANDLE_INVALID; + service->ref_count = 1; + service->srvstate = VCHIQ_SRVSTATE_FREE; ++ service->userdata_term = userdata_term; + service->localport = VCHIQ_PORT_FREE; + service->remoteport = VCHIQ_PORT_FREE; + @@ -78184,10 +78513,10 @@ index 0000000..2efb124 +} diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h new file mode 100644 -index 0000000..bddfc6a +index 0000000..47cdf27 --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h -@@ -0,0 +1,703 @@ +@@ -0,0 +1,706 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -78427,6 +78756,8 @@ index 0000000..bddfc6a + VCHIQ_BULK_RECEIVE +} VCHIQ_BULK_DIR_T; + ++typedef void (*VCHIQ_USERDATA_TERM_T)(void *userdata); ++ +typedef struct vchiq_bulk_struct { + short mode; + short dir; @@ -78474,6 +78805,7 @@ index 0000000..bddfc6a + VCHIQ_SERVICE_HANDLE_T handle; + unsigned int ref_count; + int srvstate; ++ VCHIQ_USERDATA_TERM_T userdata_term; + unsigned int localport; + unsigned int remoteport; + int public_fourcc; @@ -78724,7 +79056,7 @@ index 0000000..bddfc6a +extern VCHIQ_SERVICE_T * +vchiq_add_service_internal(VCHIQ_STATE_T *state, + const VCHIQ_SERVICE_PARAMS_T *params, int srvstate, -+ VCHIQ_INSTANCE_T instance); ++ VCHIQ_INSTANCE_T instance, VCHIQ_USERDATA_TERM_T userdata_term); + +extern VCHIQ_STATUS_T +vchiq_open_service_internal(VCHIQ_SERVICE_T *service, int client_id); @@ -79317,10 +79649,10 @@ index 0000000..e248037 +#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..62965c6 +index 0000000..be9735f --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c -@@ -0,0 +1,454 @@ +@@ -0,0 +1,456 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -79564,7 +79896,8 @@ index 0000000..62965c6 + state, + params, + srvstate, -+ instance); ++ instance, ++ NULL); + + if (service) { + *phandle = service->handle; @@ -79605,7 +79938,8 @@ index 0000000..62965c6 + service = vchiq_add_service_internal(state, + params, + VCHIQ_SRVSTATE_OPENING, -+ instance); ++ instance, ++ NULL); + + if (service) { + status = vchiq_open_service_internal(service, current->pid); @@ -80999,10 +81333,10 @@ index 0000000..f752f8d +EXPORT_SYMBOL(vchi_service_release); diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c new file mode 100644 -index 0000000..03cece571b +index 0000000..c2eefef --- /dev/null +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c -@@ -0,0 +1,120 @@ +@@ -0,0 +1,151 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -81086,8 +81420,20 @@ index 0000000..03cece571b + } + } + ++ /* ++ * Write to queue->storage must be visible after read from ++ * queue->read ++ */ ++ smp_mb(); ++ + queue->storage[queue->write & (queue->size - 1)] = header; + ++ /* ++ * Write to queue->storage must be visible before write to ++ * queue->write ++ */ ++ smp_wmb(); ++ + queue->write++; + + up(&queue->push); @@ -81102,6 +81448,13 @@ index 0000000..03cece571b + } + + up(&queue->push); // We haven't removed anything from the queue. ++ ++ /* ++ * Read from queue->storage must be visible after read from ++ * queue->write ++ */ ++ smp_rmb(); ++ + return queue->storage[queue->read & (queue->size - 1)]; +} + @@ -81115,8 +81468,20 @@ index 0000000..03cece571b + } + } + ++ /* ++ * Read from queue->storage must be visible after read from ++ * queue->write ++ */ ++ smp_rmb(); ++ + header = queue->storage[queue->read & (queue->size - 1)]; + ++ /* ++ * Read from queue->storage must be visible before write to ++ * queue->read ++ */ ++ smp_mb(); ++ + queue->read++; + + up(&queue->pop); @@ -81280,10 +81645,10 @@ index 0000000..b6bfa21 1.8.4 -From d1b7874c2ded20c9f31a63a85ba45f0fde8a143c Mon Sep 17 00:00:00 2001 +From 1bddcfc76fc58e302c683ac837078c5ad77c6ffe Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:31:47 +0100 -Subject: [PATCH 006/128] cma: Add vc_cma driver to enable use of CMA +Subject: [PATCH 006/104] cma: Add vc_cma driver to enable use of CMA Signed-off-by: popcornmix --- @@ -81292,10 +81657,10 @@ Signed-off-by: popcornmix drivers/char/broadcom/Kconfig | 16 + drivers/char/broadcom/Makefile | 2 + drivers/char/broadcom/vc_cma/Makefile | 15 + - drivers/char/broadcom/vc_cma/vc_cma.c | 1145 +++++++++++++++++++++++++++++++++ + drivers/char/broadcom/vc_cma/vc_cma.c | 1143 +++++++++++++++++++++++++++++++++ drivers/misc/Makefile | 2 +- include/linux/broadcom/vc_cma.h | 30 + - 8 files changed, 1214 insertions(+), 1 deletion(-) + 8 files changed, 1212 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 @@ -81379,10 +81744,10 @@ 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..6d8b4df +index 0000000..fe80887 --- /dev/null +++ b/drivers/char/broadcom/vc_cma/vc_cma.c -@@ -0,0 +1,1145 @@ +@@ -0,0 +1,1143 @@ +/** + * Copyright (c) 2010-2012 Broadcom. All rights reserved. + * @@ -82470,15 +82835,13 @@ index 0000000..6d8b4df + goto out_class_destroy; + } + -+ vc_cma_proc_entry = create_proc_entry(DRIVER_NAME, 0444, NULL); ++ vc_cma_proc_entry = proc_create(DRIVER_NAME, 0444, NULL, &vc_cma_proc_fops); + if (vc_cma_proc_entry == NULL) { + rc = -EFAULT; -+ LOG_ERR("%s: create_proc_entry failed", __func__); ++ LOG_ERR("%s: proc_create failed", __func__); + goto out_device_destroy; + } -+ -+ vc_cma_proc_entry->proc_fops = &vc_cma_proc_fops; -+ ++ + vc_cma_inited = 1; + return 0; + @@ -82516,7 +82879,7 @@ index 0000000..6d8b4df + LOG_DBG("%s: called", __func__); + + if (vc_cma_inited) { -+ remove_proc_entry(vc_cma_proc_entry->name, NULL); ++ remove_proc_entry(DRIVER_NAME, NULL); + device_destroy(vc_cma_class, vc_cma_devnum); + class_destroy(vc_cma_class); + cdev_del(&vc_cma_cdev); @@ -82578,10 +82941,10 @@ index 0000000..bdc9d79 1.8.4 -From 6e6f3359f80305272ad51a3b5a6a169153501ee8 Mon Sep 17 00:00:00 2001 +From ec5998409495ec0e203e331ff2d60feb101be629 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 26 Mar 2012 22:15:50 +0100 -Subject: [PATCH 007/128] bcm2708: alsa sound driver +Subject: [PATCH 007/104] bcm2708: alsa sound driver Signed-off-by: popcornmix --- @@ -82667,10 +83030,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 544ed1e..18f6558 100644 +index 64a2783..67f3608 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -422,6 +422,16 @@ struct platform_device bcm2708_powerman_device = { +@@ -424,6 +424,16 @@ struct platform_device bcm2708_powerman_device = { .coherent_dma_mask = 0xffffffffUL}, }; @@ -82687,15 +83050,15 @@ index 544ed1e..18f6558 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -469,6 +479,8 @@ void __init bcm2708_init(void) +@@ -529,6 +539,8 @@ void __init bcm2708_init(void) bcm_register_device(&bcm2708_emmc_device); #endif bcm2708_init_led(); + for (i = 0; i < ARRAY_SIZE(bcm2708_alsa_devices); i++) + bcm_register_device(&bcm2708_alsa_devices[i]); - #ifdef CONFIG_BCM2708_VCMEM - { + for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { + struct amba_device *d = amba_devs[i]; diff --git a/sound/arm/Kconfig b/sound/arm/Kconfig index 885683a..f7ceafd 100644 --- a/sound/arm/Kconfig @@ -84904,10 +85267,10 @@ index 0000000..af3e6eb 1.8.4 -From 858979dd75a69d109764d7cd81ba3f30236b0479 Mon Sep 17 00:00:00 2001 +From 305dd66d4eea785e521d50d77b0b91bd29beb4a1 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 17:26:38 +0000 -Subject: [PATCH 008/128] Allow mac address to be set in smsc95xx +Subject: [PATCH 008/104] Allow mac address to be set in smsc95xx Signed-off-by: popcornmix --- @@ -85001,10 +85364,10 @@ index 3f38ba8..60076fe 100644 1.8.4 -From c5c5d61c9753b1dea877131ad110cd62c8001f84 Mon Sep 17 00:00:00 2001 +From 09926a8d274d91c6a6ec06acb136a6ca28ba8e12 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 8 May 2012 23:12:13 +0100 -Subject: [PATCH 009/128] possible fix for sdcard missing status. Thank naren +Subject: [PATCH 009/104] possible fix for sdcard missing status. Thank naren --- drivers/mmc/host/sdhci-bcm2708.c | 9 +++++++++ @@ -85041,10 +85404,10 @@ index e79723d..a405114 100644 1.8.4 -From 34394b748ea27a483e792c5a48e55e1370a2ce72 Mon Sep 17 00:00:00 2001 +From 7d414c7e3a83ce47986da4547878bb2441d6e1a8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 17 May 2012 14:44:19 +0100 -Subject: [PATCH 010/128] sdcard patch improvements from naren +Subject: [PATCH 010/104] sdcard patch improvements from naren --- drivers/mmc/host/sdhci-bcm2708.c | 23 +++++++---------------- @@ -85103,10 +85466,10 @@ index a405114..ae8edf7 100644 1.8.4 -From e4316be7fc5dbe3b1c6c930232754ae17619a63a Mon Sep 17 00:00:00 2001 +From f9b5de7a50d4a6ffbf3e7344d2c50828b044c4b1 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 4 Jun 2012 04:27:48 +0200 -Subject: [PATCH 011/128] sdhci-bcm2708: speed up DMA sync +Subject: [PATCH 011/104] 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. @@ -85131,10 +85494,10 @@ index ae8edf7..a6bdc25 100644 1.8.4 -From f10f8b001cc5c6dcdb703cccc65b259dbd50ecf6 Mon Sep 17 00:00:00 2001 +From 2967716086cc8aa21cfcd40b82a96b82abf3f418 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:52:04 +0200 -Subject: [PATCH 012/128] sdhci-bcm2708: remove custom clock handling +Subject: [PATCH 012/104] 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. @@ -85232,10 +85595,10 @@ index a6bdc25..0ed4d85 100644 1.8.4 -From 36841a7ba4e041ec49131d6b9b8baf6701a83dc2 Mon Sep 17 00:00:00 2001 +From 4577015e828d706fc9d48fe912b31e8760016837 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:53:59 +0200 -Subject: [PATCH 013/128] sdhci-bcm2708: add additional quirks +Subject: [PATCH 013/104] sdhci-bcm2708: add additional quirks Some additional quirks are needed for correct operation. There's no SDHCI capabilities register documented, and it always reads @@ -85265,10 +85628,10 @@ index 0ed4d85..3001836 100644 1.8.4 -From c4dbb71a1abb0cd348980cab71f09b4a813a6f77 Mon Sep 17 00:00:00 2001 +From fdc3114aea4a8c869fb3478b1b2563bf595dcb6c Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:57:13 +0200 -Subject: [PATCH 014/128] sdhci-bcm2708: add allow_highspeed parameter +Subject: [PATCH 014/104] 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. @@ -85316,10 +85679,10 @@ index 3001836..c64de21 100644 1.8.4 -From 89173a0d5f5b37c6893fd7a0ecb0c11dedf9b198 Mon Sep 17 00:00:00 2001 +From 4144c02c7b8e4f9c3d3a5be8d33d05da98a01bee Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 11 Jun 2012 18:58:40 +0200 -Subject: [PATCH 015/128] sdhci-bcm2708: assume 50 MHz eMMC clock +Subject: [PATCH 015/104] 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 @@ -85345,10 +85708,10 @@ index c64de21..d174938 100644 1.8.4 -From eb7e247f7add17580c69c39bf788a31401738b16 Mon Sep 17 00:00:00 2001 +From 819cbdd1d18f150070257737b0b20de6536eac48 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 16 Jun 2012 22:31:55 +0100 -Subject: [PATCH 016/128] Allow emmc clock to be specified as command line +Subject: [PATCH 016/104] Allow emmc clock to be specified as command line parameter --- @@ -85395,10 +85758,10 @@ index d174938..0ee983c 100644 1.8.4 -From 48108d26cebfcb376dcef29c13aad442a40e0768 Mon Sep 17 00:00:00 2001 +From 0b7e7118e70e9818bad0a71920bd53081d68030f Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 16 Jun 2012 22:35:38 +0100 -Subject: [PATCH 017/128] sdhci-bcm2708: raise DMA sync timeout +Subject: [PATCH 017/104] 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, @@ -85428,10 +85791,10 @@ index 0ee983c..b0cdd7d 100644 1.8.4 -From d29d5dcce56fbe39cdeab48d68cbdc2a0201455b Mon Sep 17 00:00:00 2001 +From e5e555972aae9453fc6c13b104b8e33f14461e71 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 22 Jun 2012 12:57:42 +0100 -Subject: [PATCH 018/128] Use ndelay rather than udelay. Thanks lb +Subject: [PATCH 018/104] Use ndelay rather than udelay. Thanks lb --- drivers/mmc/host/sdhci-bcm2708.c | 8 ++++---- @@ -85478,15 +85841,16 @@ index b0cdd7d..7bba950 100644 1.8.4 -From 090c6ec13dc4cb7f3355bf18977a3660de493db1 Mon Sep 17 00:00:00 2001 +From 399a83c5184de918ab790b47c43148313ae5e7cc Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:41:10 +0100 -Subject: [PATCH 019/128] Backport of Chris Boot's i2c and spi drivers. +Subject: [PATCH 019/104] Backport of Chris Boot's i2c and spi drivers. --- arch/arm/configs/bcmrpi_cutdown_defconfig | 10 + arch/arm/configs/bcmrpi_defconfig | 5 + - arch/arm/mach-bcm2708/bcm2708.c | 100 ++++- + arch/arm/mach-bcm2708/Kconfig | 7 + + arch/arm/mach-bcm2708/bcm2708.c | 104 ++++- arch/arm/mach-bcm2708/include/mach/platform.h | 3 + drivers/i2c/busses/Kconfig | 8 + drivers/i2c/busses/Makefile | 1 + @@ -85494,7 +85858,7 @@ Subject: [PATCH 019/128] Backport of Chris Boot's i2c and spi drivers. drivers/spi/Kconfig | 8 + drivers/spi/Makefile | 1 + drivers/spi/spi-bcm2708.c | 594 ++++++++++++++++++++++++++ - 10 files changed, 1124 insertions(+), 2 deletions(-) + 11 files changed, 1135 insertions(+), 2 deletions(-) create mode 100644 drivers/i2c/busses/i2c-bcm2708.c create mode 100644 drivers/spi/spi-bcm2708.c @@ -85532,8 +85896,24 @@ index df947e5..6219df3 100644 CONFIG_GPIO_SYSFS=y # CONFIG_HWMON is not set CONFIG_WATCHDOG=y +diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig +index 63bb76c..a35ff89 100644 +--- a/arch/arm/mach-bcm2708/Kconfig ++++ b/arch/arm/mach-bcm2708/Kconfig +@@ -31,4 +31,11 @@ config BCM2708_NOL2CACHE + help + Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt. + ++config BCM2708_SPIDEV ++ bool "Bind spidev to SPI0 master" ++ depends on MACH_BCM2708 ++ depends on SPI ++ default y ++ help ++ Binds spidev driver to the SPI0 master + endmenu diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 18f6558..510be0b 100644 +index 67f3608..03b8ec5 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -31,6 +31,7 @@ @@ -85544,7 +85924,7 @@ index 18f6558..510be0b 100644 #include #include -@@ -196,7 +197,6 @@ static void __init bcm2708_clocksource_init(void) +@@ -198,7 +199,6 @@ static void __init bcm2708_clocksource_init(void) /* warning - the USB needs a clock > 34MHz */ @@ -85552,7 +85932,7 @@ index 18f6558..510be0b 100644 static struct clk sdhost_clk = { #ifdef CONFIG_ARCH_BCM2708_CHIPIT .rate = 4000000, /* 4MHz */ -@@ -204,7 +204,6 @@ static void __init bcm2708_clocksource_init(void) +@@ -206,7 +206,6 @@ static void __init bcm2708_clocksource_init(void) .rate = 250000000, /* 250MHz */ #endif }; @@ -85560,7 +85940,7 @@ index 18f6558..510be0b 100644 static struct clk_lookup lookups[] = { { /* UART0 */ -@@ -214,6 +213,15 @@ static void __init bcm2708_clocksource_init(void) +@@ -216,6 +215,15 @@ static void __init bcm2708_clocksource_init(void) { /* USB */ .dev_id = "bcm2708_usb", .clk = &osc_clk, @@ -85576,7 +85956,7 @@ index 18f6558..510be0b 100644 } }; -@@ -432,6 +440,85 @@ struct platform_device bcm2708_powerman_device = { +@@ -434,6 +442,89 @@ struct platform_device bcm2708_powerman_device = { }, }; @@ -85593,14 +85973,18 @@ index 18f6558..510be0b 100644 +}; + + ++static u64 bcm2708_spi_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); +static struct platform_device bcm2708_spi_device = { + .name = "bcm2708_spi", + .id = 0, + .num_resources = ARRAY_SIZE(bcm2708_spi_resources), + .resource = bcm2708_spi_resources, ++ .dev = { ++ .dma_mask = &bcm2708_spi_dmamask, ++ .coherent_dma_mask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON)}, +}; + -+#ifdef CONFIG_SPI ++#ifdef CONFIG_BCM2708_SPIDEV +static struct spi_board_info bcm2708_spi_devices[] = { +#ifdef CONFIG_SPI_SPIDEV + { @@ -85662,7 +86046,7 @@ index 18f6558..510be0b 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -482,6 +569,10 @@ void __init bcm2708_init(void) +@@ -542,12 +633,21 @@ void __init bcm2708_init(void) for (i = 0; i < ARRAY_SIZE(bcm2708_alsa_devices); i++) bcm_register_device(&bcm2708_alsa_devices[i]); @@ -85670,15 +86054,14 @@ index 18f6558..510be0b 100644 + bcm_register_device(&bcm2708_bsc0_device); + bcm_register_device(&bcm2708_bsc1_device); + - #ifdef CONFIG_BCM2708_VCMEM - { - extern void vc_mem_connected_init(void); -@@ -494,6 +585,11 @@ void __init bcm2708_init(void) + for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { + struct amba_device *d = amba_devs[i]; + amba_device_register(d, &iomem_resource); } system_rev = boardrev; system_serial_low = serial; + -+#ifdef CONFIG_SPI ++#ifdef CONFIG_BCM2708_SPIDEV + spi_register_board_info(bcm2708_spi_devices, + ARRAY_SIZE(bcm2708_spi_devices)); +#endif @@ -86770,73 +87153,10 @@ index 0000000..9f1580e 1.8.4 -From 75ba279d993caca961f354805a4488deffa237dd Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 19 Jul 2012 16:00:28 +0100 -Subject: [PATCH 020/128] 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 6219df3..31f5afaa 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -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.4 - - -From 3441eaf35c791fec9435d193e72cbc2fac09e451 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 13 Jul 2012 18:34:18 +0100 -Subject: [PATCH 021/128] 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 ++++-------- - 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 ---- a/arch/arm/mach-bcm2708/vcio.c -+++ b/arch/arm/mach-bcm2708/vcio.c -@@ -119,14 +119,10 @@ static int mbox_read(struct vc_mailbox *mbox, unsigned chan, uint32_t *data28) - if (mbox->magic != MBOX_MAGIC) - rc = -EINVAL; - else { -- if (down_interruptible(&mbox->sema[chan]) == 0) { -- *data28 = MBOX_DATA28(mbox->msg[chan]); -- mbox->msg[chan] = 0; -- rc = 0; -- } else { -- /* The wait was interrupted */ -- rc = -EINTR; -- } -+ down(&mbox->sema[chan]); -+ *data28 = MBOX_DATA28(mbox->msg[chan]); -+ mbox->msg[chan] = 0; -+ rc = 0; - } - return rc; - } --- -1.8.4 - - -From 0770e591a3550322552bdd3e2c7a0637b207111d Mon Sep 17 00:00:00 2001 +From 8e39b3019b3494305d87b7489820178580369eb7 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 17 Jul 2012 00:48:27 +0100 -Subject: [PATCH 022/128] Add sync_after_dma module parameter +Subject: [PATCH 020/104] Add sync_after_dma module parameter --- drivers/mmc/host/sdhci-bcm2708.c | 60 +++++++++++++++++++++------------------- @@ -86953,10 +87273,10 @@ index 7bba950..3792b9f 100644 1.8.4 -From 1860e8ef7bedd7b8837cd100366e3bbf41e51cfa Mon Sep 17 00:00:00 2001 +From fbb8e17c5dbf231b960e260a33c9bf414c9139b8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 12 May 2013 12:25:52 +0100 -Subject: [PATCH 023/128] sdhci-bcm2708: use extension FIFO to buffer DMA +Subject: [PATCH 021/104] sdhci-bcm2708: use extension FIFO to buffer DMA transfers The additional FIFO might speed up transfers in some cases. @@ -87008,10 +87328,10 @@ index 3792b9f..326b962 100644 1.8.4 -From ee743c1003e5fa36546b4ec88e39d1c10447009a Mon Sep 17 00:00:00 2001 +From 502ff5d8c9e0f6f7242fcc964dedafb752b40f5b Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:42:49 +0100 -Subject: [PATCH 024/128] sdhci-bcm2708: use multiblock-type transfers for +Subject: [PATCH 022/104] sdhci-bcm2708: use multiblock-type transfers for single blocks There are issues with both single block reads (missed completion) @@ -87067,10 +87387,10 @@ index e326ae2..70020e3 100644 1.8.4 -From c9bb9a0e5d15e6674bf071fd717fe9055db12a1d Mon Sep 17 00:00:00 2001 +From f4d24671b71020ccd9fa742f58b7aa80fca59532 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 Aug 2012 19:02:14 +0100 -Subject: [PATCH 025/128] Add module parameter for missing_status quirk. +Subject: [PATCH 023/104] Add module parameter for missing_status quirk. sdhci-bcm2708.missing_status=0 may improve interrupt latency --- @@ -87126,10 +87446,10 @@ index c6d6bb0..8243593 100644 1.8.4 -From ef53d291b907c86a59849e6e829e994718fad1d1 Mon Sep 17 00:00:00 2001 +From 54a929faf30469caad5a94e9d5aea243e63271fd Mon Sep 17 00:00:00 2001 From: ddv2005 Date: Sun, 5 Aug 2012 10:42:12 -0400 -Subject: [PATCH 026/128] Fix spinlock recursion in sdhci-bcm2708.c +Subject: [PATCH 024/104] Fix spinlock recursion in sdhci-bcm2708.c --- drivers/mmc/host/sdhci-bcm2708.c | 14 +++++++------- @@ -87198,184 +87518,10 @@ index 8243593..7a703c2 100644 1.8.4 -From e6c4f6334b2e31fa515f08421fd0fdc6a03ddbc5 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 21 Aug 2012 18:49:44 +0100 -Subject: [PATCH 027/128] Read memory size for vc_mem through mailbox property - channel - ---- - arch/arm/mach-bcm2708/include/mach/vcio.h | 3 +- - arch/arm/mach-bcm2708/include/mach/vmalloc.h | 2 +- - arch/arm/mach-bcm2708/vc_mem.c | 82 +++++++++++++++++++++------- - 3 files changed, 66 insertions(+), 21 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/include/mach/vcio.h b/arch/arm/mach-bcm2708/include/mach/vcio.h -index 0d7f9a5..ace4ea4 100644 ---- a/arch/arm/mach-bcm2708/include/mach/vcio.h -+++ b/arch/arm/mach-bcm2708/include/mach/vcio.h -@@ -34,7 +34,8 @@ - #define MBOX_CHAN_LEDS 4 /* for use by the leds interface */ - #define MBOX_CHAN_BUTTONS 5 /* for use by the buttons interface */ - #define MBOX_CHAN_TOUCH 6 /* for use by the touchscreen interface */ --#define MBOX_CHAN_COUNT 7 -+#define MBOX_CHAN_PROPERTY 8 /* for use by the property channel */ -+#define MBOX_CHAN_COUNT 9 - - extern int /*rc*/ bcm_mailbox_read(unsigned chan, uint32_t *data28); - extern int /*rc*/ bcm_mailbox_write(unsigned chan, uint32_t data28); -diff --git a/arch/arm/mach-bcm2708/include/mach/vmalloc.h b/arch/arm/mach-bcm2708/include/mach/vmalloc.h -index 28ecc15..502c617 100644 ---- a/arch/arm/mach-bcm2708/include/mach/vmalloc.h -+++ b/arch/arm/mach-bcm2708/include/mach/vmalloc.h -@@ -17,4 +17,4 @@ - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ --#define VMALLOC_END (0xd8000000) -+#define VMALLOC_END (0xe8000000) -diff --git a/arch/arm/mach-bcm2708/vc_mem.c b/arch/arm/mach-bcm2708/vc_mem.c -index fd9d4be..7a7748e 100644 ---- a/arch/arm/mach-bcm2708/vc_mem.c -+++ b/arch/arm/mach-bcm2708/vc_mem.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - - #ifdef CONFIG_ARCH_KONA - #include -@@ -30,12 +31,12 @@ - #endif - - #include "mach/vc_mem.h" --//#include "interface/vchiq_arm/vchiq_connected.h" -+#include - - #define DRIVER_NAME "vc-mem" - - // Uncomment to enable debug logging --//#define ENABLE_DBG -+#define ENABLE_DBG - - #if defined(ENABLE_DBG) - #define LOG_DBG( fmt, ... ) printk( KERN_INFO fmt "\n", ##__VA_ARGS__ ) -@@ -67,23 +68,8 @@ - * bootloader (and/or kernel). When that happens, the values of these variables - * would be calculated and assigned in the init function. - */ --#ifdef CONFIG_ARCH_KONA -- --#include --unsigned long mm_vc_mem_phys_addr = VC_EMI; -- --#elif CONFIG_ARCH_BCM2708 -- - // in the 2835 VC in mapped above ARM, but ARM has full access to VC space - unsigned long mm_vc_mem_phys_addr = 0x00000000; -- --#else -- --#include --unsigned long mm_vc_mem_phys_addr = MM_ADDR_IO_VC_EMI; -- --#endif -- - unsigned int mm_vc_mem_size = 0; - unsigned int mm_vc_mem_base = 0; - -@@ -125,6 +111,64 @@ - return 0; - } - -+ -+/* tag part of the message */ -+struct vc_msg_tag { -+ uint32_t tag_id; /* the message id */ -+ uint32_t buffer_size; /* size of the buffer (which in this case is always 8 bytes) */ -+ uint32_t data_size; /* amount of data being sent or received */ -+ uint32_t base; /* the address of memory base */ -+ uint32_t size; /* the size of memory in bytes */ -+}; -+ -+struct vc_set_msg { -+ uint32_t msg_size; /* simply, sizeof(struct vc_msg) */ -+ uint32_t request_code; /* holds various information like the success and number of bytes returned (refer to mailboxes wiki) */ -+ struct vc_msg_tag tag[2]; /* the array of tag structures above to make */ -+ uint32_t end_tag; /* an end identifier, should be set to NULL */ -+}; -+ -+#define VCMSG_GET_ARM_MEMORY 0x00010005 -+#define VCMSG_GET_VC_MEMORY 0x00010006 -+ -+static void vc_mem_update(void) -+{ -+ uint32_t success; -+ dma_addr_t vc_mem; /* the memory address accessed from videocore */ -+ struct vc_set_msg *get_mem; /* the memory address accessed from driver */ -+ -+ /* allocate some memory for the messages to use throughout the lifetime of the driver, use the larger of the two message structures */ -+ get_mem = (struct vc_set_msg *)dma_alloc_coherent(NULL, PAGE_ALIGN(sizeof(struct vc_set_msg)), &vc_mem, GFP_ATOMIC); -+ /* clear any garbage */ -+ memset(get_mem, 0, sizeof(struct vc_set_msg)); -+ /* create the message */ -+ get_mem->msg_size = sizeof(struct vc_set_msg); -+ get_mem->tag[0].tag_id = VCMSG_GET_VC_MEMORY; -+ get_mem->tag[0].buffer_size = 8; -+ get_mem->tag[0].data_size = 0; -+ get_mem->tag[1].tag_id = VCMSG_GET_ARM_MEMORY; -+ get_mem->tag[1].buffer_size = 8; -+ get_mem->tag[1].data_size = 0; -+ -+ /* send the message */ -+ wmb(); -+ bcm_mailbox_write(MBOX_CHAN_PROPERTY,(uint32_t)vc_mem); -+ bcm_mailbox_read(MBOX_CHAN_PROPERTY, &success); -+ rmb(); -+ -+ LOG_DBG("%s: resp %x, vcbase=%x vcsize=%x armbase=%x armsize=%x", __func__, get_mem->request_code, -+ get_mem->tag[0].base, get_mem->tag[0].size, get_mem->tag[1].base, get_mem->tag[1].size); -+ -+ /* check we're all good */ -+ if (get_mem->request_code & 0x80000000) { -+ mm_vc_mem_base = get_mem->tag[0].base; -+ mm_vc_mem_size = get_mem->tag[0].size+get_mem->tag[1].size; -+ mm_vc_mem_phys_addr = get_mem->tag[1].base; -+ } -+ dma_free_coherent(NULL, PAGE_ALIGN(sizeof(struct vc_set_msg)), (void *)get_mem, vc_mem); -+} -+ -+ - /**************************************************************************** - * - * vc_mem_get_size -@@ -134,7 +178,7 @@ - static void - vc_mem_get_size(void) - { -- mm_vc_mem_size = 256 * 1024 * 1024; // Static for now -+ vc_mem_update(); - } - - /**************************************************************************** -@@ -146,7 +190,7 @@ - static void - vc_mem_get_base(void) - { -- mm_vc_mem_base = 128 * 1024 * 1024; // Static for now -+ vc_mem_update(); - } - - /**************************************************************************** --- -1.8.4 - - -From cd31f8e67a27ad2f9d2d52bb6f4f73d1608aee1d Mon Sep 17 00:00:00 2001 +From b28dffe1c84efe9d5ce554207077837b5405fd10 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 8 May 2013 11:46:50 +0100 -Subject: [PATCH 028/128] enabling the realtime clock 1-wire chip DS1307 and +Subject: [PATCH 025/104] enabling the realtime clock 1-wire chip DS1307 and 1-wire on GPIO4 (as a module) --- @@ -87383,7 +87529,7 @@ Subject: [PATCH 028/128] enabling the realtime clock 1-wire chip DS1307 and 1 file changed, 20 insertions(+) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 510be0b..d61e747 100644 +index 03b8ec5..18f7ede 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -32,6 +32,7 @@ @@ -87403,8 +87549,8 @@ index 510be0b..d61e747 100644 + /* command line parameters */ static unsigned boardrev, serial; - -@@ -249,6 +253,19 @@ static void __init bcm2708_clocksource_init(void) + static unsigned uart_clock; +@@ -251,6 +255,19 @@ static void __init bcm2708_clocksource_init(void) .num_resources = ARRAY_SIZE(bcm2708_dmaman_resources), }; @@ -87424,7 +87570,7 @@ index 510be0b..d61e747 100644 static u64 fb_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); static struct platform_device bcm2708_fb_device = { -@@ -556,6 +573,9 @@ void __init bcm2708_init(void) +@@ -620,6 +637,9 @@ void __init bcm2708_init(void) #ifdef CONFIG_BCM2708_GPIO bcm_register_device(&bcm2708_gpio_device); #endif @@ -87438,10 +87584,10 @@ index 510be0b..d61e747 100644 1.8.4 -From d5c973ae4643baa7ef6cfe5bd9bd9b7ce940d99b Mon Sep 17 00:00:00 2001 +From 77f82f9de9f88fc7ff693497dcb6b0ef5b1c5e63 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 12 May 2013 12:27:48 +0100 -Subject: [PATCH 029/128] Add low-latency mode to sdcard driver. Disable with +Subject: [PATCH 026/104] Add low-latency mode to sdcard driver. Disable with sdhci-bcm2708.enable_llm=0. Thanks ddv2005. --- @@ -87964,10 +88110,10 @@ index f3a39c1..58bfab0 100644 1.8.4 -From 598486360573b01a586e34985f2477d998987c46 Mon Sep 17 00:00:00 2001 +From 1f45d3d733d51369b3e21b3152839e24a840ec59 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:46:42 +0100 -Subject: [PATCH 030/128] Add FIQ patch to dwc_otg driver. Enable with +Subject: [PATCH 027/104] 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 @@ -88099,10 +88245,10 @@ index da18725..274aa30 100644 return 0; } diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index d61e747..f5f262c 100644 +index 18f7ede..b9aa2de 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -307,12 +307,32 @@ static void __init bcm2708_clocksource_init(void) +@@ -309,12 +309,32 @@ static void __init bcm2708_clocksource_init(void) .flags = IORESOURCE_MEM, }, [1] = { @@ -88137,7 +88283,7 @@ index d61e747..f5f262c 100644 static u64 usb_dmamask = DMA_BIT_MASK(DMA_MASK_BITS_COMMON); static struct platform_device bcm2708_usb_device = { -@@ -578,6 +598,11 @@ void __init bcm2708_init(void) +@@ -642,6 +662,11 @@ void __init bcm2708_init(void) #endif bcm_register_device(&bcm2708_systemtimer_device); bcm_register_device(&bcm2708_fb_device); @@ -89127,423 +89273,10 @@ index a7e9076..bb1c42d 100644 1.8.4 -From 6cef4263307efa0c9eacbddd9e21c67f849e49d9 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 12 Apr 2013 23:58:47 +0100 -Subject: [PATCH 033/128] 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 | 334 ++++++++++++++++++++++++++++++++++++-- - 1 file changed, 324 insertions(+), 10 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 31f5afaa..ef43466 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -1,3 +1,4 @@ -+# CONFIG_ARM_PATCH_PHYS_VIRT is not set - CONFIG_EXPERIMENTAL=y - # CONFIG_LOCALVERSION_AUTO is not set - CONFIG_SYSVIPC=y -@@ -52,12 +53,212 @@ 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_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_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 -+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 -+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_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_DEVTMPFS=y -+CONFIG_DEVTMPFS_MOUNT=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 -@@ -143,12 +347,12 @@ 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_RTL8192CU=m - CONFIG_WIMAX_I2400M_USB=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 -+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_V3_ACL=y -+CONFIG_NFSD_V4=y - CONFIG_CIFS=m - CONFIG_CIFS_WEAK_PW_HASH=y - CONFIG_CIFS_XATTR=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_HMAC=y -@@ -529,7 +844,6 @@ 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 --- -1.8.4 - - -From 3e0dc8dde7be11f4a3bedec4496db56ff789c493 Mon Sep 17 00:00:00 2001 +From 364ae653ac6dc441df61be2b9a18c25c4afb6ad4 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 8 Sep 2012 15:17:53 +0100 -Subject: [PATCH 034/128] Avoid dynamic memory allocation for channel lock in +Subject: [PATCH 030/104] Avoid dynamic memory allocation for channel lock in USB driver. Thanks ddv2005. --- @@ -89650,21 +89383,17 @@ index f1658fa..21e8f09 100644 1.8.4 -From c11b3259cc7e0193b87252ecab956242694b50cb Mon Sep 17 00:00:00 2001 +From 751e9b9efb62e1c8f77e7d2eb9767dcbcd6fafad Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Wed, 3 Jul 2013 00:49:20 +0100 -Subject: [PATCH 035/128] Add cpufreq driver +Date: Sat, 2 Nov 2013 22:44:41 +0000 +Subject: [PATCH 031/104] Add cpufreq driver --- - arch/arm/Kconfig | 1 + - arch/arm/configs/bcmrpi_defconfig | 6 + - arch/arm/mach-bcm2708/include/mach/vcio.h | 81 +++++++++- - arch/arm/mach-bcm2708/vc_mem.c | 47 +++--- - arch/arm/mach-bcm2708/vcio.c | 34 +++++ - drivers/cpufreq/Kconfig.arm | 8 + - drivers/cpufreq/Makefile | 1 + - drivers/cpufreq/bcm2835-cpufreq.c | 239 ++++++++++++++++++++++++++++++ - 8 files changed, 380 insertions(+), 37 deletions(-) + arch/arm/Kconfig | 1 + + drivers/cpufreq/Kconfig.arm | 8 ++ + drivers/cpufreq/Makefile | 1 + + drivers/cpufreq/bcm2835-cpufreq.c | 239 ++++++++++++++++++++++++++++++++++++++ + 4 files changed, 249 insertions(+) create mode 100755 drivers/cpufreq/bcm2835-cpufreq.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig @@ -89679,230 +89408,6 @@ index 5468f1f..4e36ccd 100644 select GENERIC_CLOCKEVENTS select ARM_ERRATA_411920 select MACH_BCM2708 -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index ef43466..5b0a171 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -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 -+CONFIG_CPU_FREQ=y -+CONFIG_CPU_FREQ_STAT=m -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y -+CONFIG_CPU_FREQ_GOV_POWERSAVE=y -+CONFIG_CPU_FREQ_GOV_USERSPACE=y -+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y - CONFIG_CPU_IDLE=y - CONFIG_VFP=y - CONFIG_BINFMT_MISC=m -diff --git a/arch/arm/mach-bcm2708/include/mach/vcio.h b/arch/arm/mach-bcm2708/include/mach/vcio.h -index ace4ea4..7dfd14e 100644 ---- a/arch/arm/mach-bcm2708/include/mach/vcio.h -+++ b/arch/arm/mach-bcm2708/include/mach/vcio.h -@@ -27,17 +27,82 @@ - #define BCM_VCIO_DRIVER_NAME "bcm2708_vcio" - - /* Constants shared with the ARM identifying separate mailbox channels */ --#define MBOX_CHAN_POWER 0 /* for use by the power management interface */ --#define MBOX_CHAN_FB 1 /* for use by the frame buffer */ --#define MBOX_CHAN_VUART 2 /* for use by the virtual UART */ --#define MBOX_CHAN_VCHIQ 3 /* for use by the VCHIQ interface */ --#define MBOX_CHAN_LEDS 4 /* for use by the leds interface */ --#define MBOX_CHAN_BUTTONS 5 /* for use by the buttons interface */ --#define MBOX_CHAN_TOUCH 6 /* for use by the touchscreen interface */ -+#define MBOX_CHAN_POWER 0 /* for use by the power management interface */ -+#define MBOX_CHAN_FB 1 /* for use by the frame buffer */ -+#define MBOX_CHAN_VCHIQ 3 /* for use by the VCHIQ interface */ - #define MBOX_CHAN_PROPERTY 8 /* for use by the property channel */ --#define MBOX_CHAN_COUNT 9 -+#define MBOX_CHAN_COUNT 9 -+ -+/* Mailbox property tags */ -+enum { -+ VCMSG_PROPERTY_END = 0x00000000, -+ VCMSG_GET_FIRMWARE_REVISION = 0x00000001, -+ VCMSG_GET_BOARD_MODEL = 0x00010001, -+ VCMSG_GET_BOARD_REVISION = 0x00020002, -+ VCMSG_GET_BOARD_MAC_ADDRESS = 0x00020003, -+ VCMSG_GET_BOARD_SERIAL = 0x00020004, -+ VCMSG_GET_ARM_MEMORY = 0x00020005, -+ VCMSG_GET_VC_MEMORY = 0x00020006, -+ VCMSG_GET_CLOCKS = 0x00020007, -+ VCMSG_GET_COMMAND_LINE = 0x00050001, -+ VCMSG_GET_DMA_CHANNELS = 0x00060001, -+ VCMSG_GET_POWER_STATE = 0x00020001, -+ VCMSG_GET_TIMING = 0x00020002, -+ VCMSG_SET_POWER_STATE = 0x00028001, -+ VCMSG_GET_CLOCK_STATE = 0x00030001, -+ VCMSG_SET_CLOCK_STATE = 0x00038001, -+ VCMSG_GET_CLOCK_RATE = 0x00030002, -+ VCMSG_SET_CLOCK_RATE = 0x00038002, -+ VCMSG_GET_VOLTAGE = 0x00030003, -+ VCMSG_SET_VOLTAGE = 0x00038003, -+ VCMSG_GET_MAX_CLOCK = 0x00030004, -+ VCMSG_GET_MAX_VOLTAGE = 0x00030005, -+ VCMSG_GET_TEMPERATURE = 0x00030006, -+ VCMSG_GET_MIN_CLOCK = 0x00030007, -+ VCMSG_GET_MIN_VOLTAGE = 0x00030008, -+ VCMSG_GET_TURBO = 0x00030009, -+ VCMSG_SET_TURBO = 0x00038009, -+ VCMSG_SET_ALLOCATE_BUFFER = 0x00040001, -+ VCMSG_SET_RELEASE_BUFFER = 0x00048001, -+ VCMSG_SET_BLANK_SCREEN = 0x00040002, -+ VCMSG_TST_BLANK_SCREEN = 0x00044002, -+ VCMSG_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, -+ VCMSG_TST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, -+ VCMSG_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, -+ VCMSG_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, -+ VCMSG_TST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, -+ VCMSG_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, -+ VCMSG_GET_DEPTH = 0x00040005, -+ VCMSG_TST_DEPTH = 0x00044005, -+ VCMSG_SET_DEPTH = 0x00048005, -+ VCMSG_GET_PIXEL_ORDER = 0x00040006, -+ VCMSG_TST_PIXEL_ORDER = 0x00044006, -+ VCMSG_SET_PIXEL_ORDER = 0x00048006, -+ VCMSG_GET_ALPHA_MODE = 0x00040007, -+ VCMSG_TST_ALPHA_MODE = 0x00044007, -+ VCMSG_SET_ALPHA_MODE = 0x00048007, -+ VCMSG_GET_PITCH = 0x00040008, -+ VCMSG_TST_PITCH = 0x00044008, -+ VCMSG_SET_PITCH = 0x00048008, -+ VCMSG_GET_VIRTUAL_OFFSET = 0x00040009, -+ VCMSG_TST_VIRTUAL_OFFSET = 0x00044009, -+ VCMSG_SET_VIRTUAL_OFFSET = 0x00048009, -+ VCMSG_GET_OVERSCAN = 0x0004000a, -+ VCMSG_TST_OVERSCAN = 0x0004400a, -+ VCMSG_SET_OVERSCAN = 0x0004800a, -+ VCMSG_GET_PALETTE = 0x0004000b, -+ VCMSG_TST_PALETTE = 0x0004400b, -+ VCMSG_SET_PALETTE = 0x0004800b, -+ VCMSG_GET_LAYER = 0x0004000c, -+ VCMSG_TST_LAYER = 0x0004400c, -+ VCMSG_SET_LAYER = 0x0004800c, -+ VCMSG_GET_TRANSFORM = 0x0004000d, -+ VCMSG_TST_TRANSFORM = 0x0004400d, -+ VCMSG_SET_TRANSFORM = 0x0004800d, -+}; - - extern int /*rc*/ bcm_mailbox_read(unsigned chan, uint32_t *data28); - extern int /*rc*/ bcm_mailbox_write(unsigned chan, uint32_t data28); -+extern int /*rc*/ bcm_mailbox_property(void *data, int size); - - #endif -diff --git a/arch/arm/mach-bcm2708/vc_mem.c b/arch/arm/mach-bcm2708/vc_mem.c -index 7a7748e..5ef68b3 100644 ---- a/arch/arm/mach-bcm2708/vc_mem.c -+++ b/arch/arm/mach-bcm2708/vc_mem.c -@@ -128,44 +128,33 @@ struct vc_set_msg { - uint32_t end_tag; /* an end identifier, should be set to NULL */ - }; - --#define VCMSG_GET_ARM_MEMORY 0x00010005 --#define VCMSG_GET_VC_MEMORY 0x00010006 -- - static void vc_mem_update(void) - { -- uint32_t success; -- dma_addr_t vc_mem; /* the memory address accessed from videocore */ -- struct vc_set_msg *get_mem; /* the memory address accessed from driver */ -- -- /* allocate some memory for the messages to use throughout the lifetime of the driver, use the larger of the two message structures */ -- get_mem = (struct vc_set_msg *)dma_alloc_coherent(NULL, PAGE_ALIGN(sizeof(struct vc_set_msg)), &vc_mem, GFP_ATOMIC); -- /* clear any garbage */ -- memset(get_mem, 0, sizeof(struct vc_set_msg)); -+ struct vc_set_msg msg; /* the memory address accessed from driver */ -+ uint32_t s; -+ -+ memset(&msg, 0, sizeof msg); - /* create the message */ -- get_mem->msg_size = sizeof(struct vc_set_msg); -- get_mem->tag[0].tag_id = VCMSG_GET_VC_MEMORY; -- get_mem->tag[0].buffer_size = 8; -- get_mem->tag[0].data_size = 0; -- get_mem->tag[1].tag_id = VCMSG_GET_ARM_MEMORY; -- get_mem->tag[1].buffer_size = 8; -- get_mem->tag[1].data_size = 0; -+ msg.msg_size = sizeof msg; -+ msg.tag[0].tag_id = VCMSG_GET_VC_MEMORY; -+ msg.tag[0].buffer_size = 8; -+ msg.tag[0].data_size = 0; -+ msg.tag[1].tag_id = VCMSG_GET_ARM_MEMORY; -+ msg.tag[1].buffer_size = 8; -+ msg.tag[1].data_size = 0; - - /* send the message */ -- wmb(); -- bcm_mailbox_write(MBOX_CHAN_PROPERTY,(uint32_t)vc_mem); -- bcm_mailbox_read(MBOX_CHAN_PROPERTY, &success); -- rmb(); -+ s = bcm_mailbox_property(&msg, sizeof msg); - -- LOG_DBG("%s: resp %x, vcbase=%x vcsize=%x armbase=%x armsize=%x", __func__, get_mem->request_code, -- get_mem->tag[0].base, get_mem->tag[0].size, get_mem->tag[1].base, get_mem->tag[1].size); -+ LOG_DBG("%s: success=%d resp %x, vcbase=%x vcsize=%x armbase=%x armsize=%x", __func__, s, msg.request_code, -+ msg.tag[0].base, msg.tag[0].size, msg.tag[1].base, msg.tag[1].size); - - /* check we're all good */ -- if (get_mem->request_code & 0x80000000) { -- mm_vc_mem_base = get_mem->tag[0].base; -- mm_vc_mem_size = get_mem->tag[0].size+get_mem->tag[1].size; -- mm_vc_mem_phys_addr = get_mem->tag[1].base; -+ if (s == 0 && msg.request_code & 0x80000000) { -+ mm_vc_mem_base = msg.tag[0].base; -+ mm_vc_mem_size = msg.tag[0].size+msg.tag[1].size; -+ mm_vc_mem_phys_addr = msg.tag[1].base; - } -- dma_free_coherent(NULL, PAGE_ALIGN(sizeof(struct vc_set_msg)), (void *)get_mem, vc_mem); - } - - -diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c -index 3874051..468fdef 100644 ---- a/arch/arm/mach-bcm2708/vcio.c -+++ b/arch/arm/mach-bcm2708/vcio.c -@@ -216,6 +216,40 @@ static void dev_mbox_register(const char *dev_name, struct device *dev) - mbox_dev = dev; - } - -+extern int bcm_mailbox_property(void *data, int size) -+{ -+ uint32_t success; -+ dma_addr_t mem_bus; /* the memory address accessed from videocore */ -+ void *mem_kern; /* the memory address accessed from driver */ -+ int s = 0; -+ -+ /* 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) { -+ /* create the message */ -+ memcpy(mem_kern, data, size); -+ -+ /* send the message */ -+ wmb(); -+ s = bcm_mailbox_write(MBOX_CHAN_PROPERTY, (uint32_t)mem_bus); -+ if (s == 0) { -+ s = bcm_mailbox_read(MBOX_CHAN_PROPERTY, &success); -+ } -+ if (s == 0) { -+ /* copy the response */ -+ rmb(); -+ memcpy(data, mem_kern, size); -+ } -+ dma_free_coherent(NULL, PAGE_ALIGN(size), mem_kern, mem_bus); -+ } else { -+ s = -ENOMEM; -+ } -+ if (s != 0) -+ printk(KERN_ERR DRIVER_NAME ": %s failed (%d)\n", __func__, s); -+ return s; -+} -+EXPORT_SYMBOL_GPL(bcm_mailbox_property); -+ - /* ---------------------------------------------------------------------- - * Platform Device for Mailbox - * -------------------------------------------------------------------- */ diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 6e57543..bf40783 100644 --- a/drivers/cpufreq/Kconfig.arm @@ -89933,257 +89438,257 @@ index 315b923..52bdd64 100644 # PowerPC platform drivers diff --git a/drivers/cpufreq/bcm2835-cpufreq.c b/drivers/cpufreq/bcm2835-cpufreq.c new file mode 100755 -index 0000000..aa6fc66 +index 0000000..822139a --- /dev/null +++ b/drivers/cpufreq/bcm2835-cpufreq.c @@ -0,0 +1,239 @@ -+/***************************************************************************** -+* Copyright 2011 Broadcom Corporation. All rights reserved. -+* -+* Unless you and Broadcom execute a separate written software license -+* agreement governing use of this software, this software is licensed to you -+* under the terms of the GNU General Public License version 2, available at -+* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). -+* -+* Notwithstanding the above, under no circumstances may you combine this -+* software in any way with any other Broadcom software provided under a -+* license other than the GPL, without Broadcom's express prior written -+* consent. -+*****************************************************************************/ -+ -+/***************************************************************************** -+* FILENAME: bcm2835-cpufreq.h -+* DESCRIPTION: This driver dynamically manages the CPU Frequency of the ARM -+* processor. Messages are sent to Videocore either setting or requesting the -+* frequency of the ARM in order to match an appropiate frequency to the current -+* usage of the processor. The policy which selects the frequency to use is -+* defined in the kernel .config file, but can be changed during runtime. -+*****************************************************************************/ -+ -+/* ---------- INCLUDES ---------- */ -+#include -+#include -+#include -+#include -+#include -+ -+/* ---------- DEFINES ---------- */ -+/*#define CPUFREQ_DEBUG_ENABLE*/ /* enable debugging */ -+#define MODULE_NAME "bcm2835-cpufreq" -+ -+#define VCMSG_ID_ARM_CLOCK 0x000000003 /* Clock/Voltage ID's */ -+ -+/* debug printk macros */ -+#ifdef CPUFREQ_DEBUG_ENABLE -+#define print_debug(fmt,...) pr_debug("%s:%s:%d: "fmt, MODULE_NAME, __func__, __LINE__, ##__VA_ARGS__) -+#else -+#define print_debug(fmt,...) -+#endif -+#define print_err(fmt,...) pr_err("%s:%s:%d: "fmt, MODULE_NAME, __func__,__LINE__, ##__VA_ARGS__) -+#define print_info(fmt,...) pr_info("%s: "fmt, MODULE_NAME, ##__VA_ARGS__) -+ -+/* tag part of the message */ -+struct vc_msg_tag { -+ uint32_t tag_id; /* the message id */ -+ uint32_t buffer_size; /* size of the buffer (which in this case is always 8 bytes) */ -+ uint32_t data_size; /* amount of data being sent or received */ -+ uint32_t dev_id; /* the ID of the clock/voltage to get or set */ -+ uint32_t val; /* the value (e.g. rate (in Hz)) to set */ -+}; -+ -+/* message structure to be sent to videocore */ -+struct vc_msg { -+ uint32_t msg_size; /* simply, sizeof(struct vc_msg) */ -+ uint32_t request_code; /* holds various information like the success and number of bytes returned (refer to mailboxes wiki) */ -+ struct vc_msg_tag tag; /* the tag structure above to make */ -+ uint32_t end_tag; /* an end identifier, should be set to NULL */ -+}; -+ -+/* ---------- GLOBALS ---------- */ -+static struct cpufreq_driver bcm2835_cpufreq_driver; /* the cpufreq driver global */ -+ -+/* -+ =============================================== -+ clk_rate either gets or sets the clock rates. -+ =============================================== -+*/ -+static uint32_t bcm2835_cpufreq_set_clock(int cur_rate, int arm_rate) -+{ -+ int s, actual_rate=0; -+ struct vc_msg msg; -+ -+ /* wipe all previous message data */ -+ memset(&msg, 0, sizeof msg); -+ -+ msg.msg_size = sizeof msg; -+ -+ msg.tag.tag_id = VCMSG_SET_CLOCK_RATE; -+ msg.tag.buffer_size = 8; -+ msg.tag.data_size = 8; /* we're sending the clock ID and the new rates which is a total of 2 words */ -+ msg.tag.dev_id = VCMSG_ID_ARM_CLOCK; -+ msg.tag.val = arm_rate * 1000; -+ -+ /* send the message */ -+ s = bcm_mailbox_property(&msg, sizeof msg); -+ -+ /* check if it was all ok and return the rate in KHz */ -+ 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); -+ return actual_rate; -+} -+ -+static uint32_t bcm2835_cpufreq_get_clock(int tag) -+{ -+ int s; -+ int arm_rate = 0; -+ struct vc_msg msg; -+ -+ /* wipe all previous message data */ -+ memset(&msg, 0, sizeof msg); -+ -+ msg.msg_size = sizeof msg; -+ msg.tag.tag_id = tag; -+ msg.tag.buffer_size = 8; -+ msg.tag.data_size = 4; /* we're just sending the clock ID which is one word long */ -+ msg.tag.dev_id = VCMSG_ID_ARM_CLOCK; -+ -+ /* send the message */ -+ s = bcm_mailbox_property(&msg, sizeof msg); -+ -+ /* check if it was all ok and return the rate in KHz */ -+ if (s == 0 && (msg.request_code & 0x80000000)) -+ arm_rate = msg.tag.val/1000; -+ -+ print_debug("%s frequency = %d", -+ tag == VCMSG_GET_CLOCK_RATE ? "Current": -+ tag == VCMSG_GET_MIN_CLOCK ? "Min": -+ tag == VCMSG_GET_MAX_CLOCK ? "Max": -+ "Unexpected", arm_rate); -+ -+ return arm_rate; -+} -+ -+/* -+ ==================================================== -+ Module Initialisation registers the cpufreq driver -+ ==================================================== -+*/ -+static int __init bcm2835_cpufreq_module_init(void) -+{ -+ print_debug("IN"); -+ return cpufreq_register_driver(&bcm2835_cpufreq_driver); -+} -+ -+/* -+ ============= -+ Module exit -+ ============= -+*/ -+static void __exit bcm2835_cpufreq_module_exit(void) -+{ -+ print_debug("IN"); -+ cpufreq_unregister_driver(&bcm2835_cpufreq_driver); -+ return; -+} -+ -+/* -+ ============================================================== -+ Initialisation function sets up the CPU policy for first use -+ ============================================================== -+*/ -+static int bcm2835_cpufreq_driver_init(struct cpufreq_policy *policy) -+{ -+ /* measured value of how long it takes to change frequency */ -+ policy->cpuinfo.transition_latency = 355000; /* ns */ -+ -+ /* now find out what the maximum and minimum frequencies are */ -+ policy->min = policy->cpuinfo.min_freq = bcm2835_cpufreq_get_clock(VCMSG_GET_MIN_CLOCK); -+ 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); -+ return 0; -+} -+ -+/* -+ ================================================================================= -+ Target function chooses the most appropriate frequency from the table to enable -+ ================================================================================= -+*/ -+ -+static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) -+{ -+ 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); -+ -+ /* if we are above min and using ondemand, then just use max */ -+ if (strcmp("ondemand", policy->governor->name)==0 && target > policy->min) -+ target = policy->max; -+ /* if the frequency is the same, just quit */ -+ if (target == policy->cur) -+ return 0; -+ -+ /* otherwise were good to set the clock frequency */ -+ policy->cur = bcm2835_cpufreq_set_clock(policy->cur, target); -+ -+ if (!policy->cur) -+ { -+ print_err("Error occurred setting a new frequency (%d)!", target); -+ policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); -+ return -EINVAL; -+ } -+ print_info("Freq %d->%d (min=%d max=%d target=%d request=%d)", 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); -+ return actual_rate; -+} -+ -+/* -+ ================================================================================= -+ Verify ensures that when a policy is changed, it is suitable for the CPU to use -+ ================================================================================= -+*/ -+ -+static int bcm2835_cpufreq_driver_verify(struct cpufreq_policy *policy) -+{ -+ print_info("switching to governor %s", policy->governor->name); -+ return 0; -+} -+ -+ -+/* the CPUFreq driver */ -+static struct cpufreq_driver bcm2835_cpufreq_driver = { -+ .name = "BCM2835 CPUFreq", -+ .owner = THIS_MODULE, -+ .init = bcm2835_cpufreq_driver_init, -+ .verify = bcm2835_cpufreq_driver_verify, -+ .target = bcm2835_cpufreq_driver_target, -+ .get = bcm2835_cpufreq_driver_get -+}; -+ -+MODULE_AUTHOR("Dorian Peake and Dom Cobley"); -+MODULE_DESCRIPTION("CPU frequency driver for BCM2835 chip"); -+MODULE_LICENSE("GPL"); -+ -+module_init(bcm2835_cpufreq_module_init); -+module_exit(bcm2835_cpufreq_module_exit); -+ ++/***************************************************************************** ++* Copyright 2011 Broadcom Corporation. All rights reserved. ++* ++* Unless you and Broadcom execute a separate written software license ++* agreement governing use of this software, this software is licensed to you ++* under the terms of the GNU General Public License version 2, available at ++* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). ++* ++* Notwithstanding the above, under no circumstances may you combine this ++* software in any way with any other Broadcom software provided under a ++* license other than the GPL, without Broadcom's express prior written ++* consent. ++*****************************************************************************/ ++ ++/***************************************************************************** ++* FILENAME: bcm2835-cpufreq.h ++* DESCRIPTION: This driver dynamically manages the CPU Frequency of the ARM ++* processor. Messages are sent to Videocore either setting or requesting the ++* frequency of the ARM in order to match an appropiate frequency to the current ++* usage of the processor. The policy which selects the frequency to use is ++* defined in the kernel .config file, but can be changed during runtime. ++*****************************************************************************/ ++ ++/* ---------- INCLUDES ---------- */ ++#include ++#include ++#include ++#include ++#include ++ ++/* ---------- DEFINES ---------- */ ++/*#define CPUFREQ_DEBUG_ENABLE*/ /* enable debugging */ ++#define MODULE_NAME "bcm2835-cpufreq" ++ ++#define VCMSG_ID_ARM_CLOCK 0x000000003 /* Clock/Voltage ID's */ ++ ++/* debug printk macros */ ++#ifdef CPUFREQ_DEBUG_ENABLE ++#define print_debug(fmt,...) pr_debug("%s:%s:%d: "fmt, MODULE_NAME, __func__, __LINE__, ##__VA_ARGS__) ++#else ++#define print_debug(fmt,...) ++#endif ++#define print_err(fmt,...) pr_err("%s:%s:%d: "fmt, MODULE_NAME, __func__,__LINE__, ##__VA_ARGS__) ++#define print_info(fmt,...) pr_info("%s: "fmt, MODULE_NAME, ##__VA_ARGS__) ++ ++/* tag part of the message */ ++struct vc_msg_tag { ++ uint32_t tag_id; /* the message id */ ++ uint32_t buffer_size; /* size of the buffer (which in this case is always 8 bytes) */ ++ uint32_t data_size; /* amount of data being sent or received */ ++ uint32_t dev_id; /* the ID of the clock/voltage to get or set */ ++ uint32_t val; /* the value (e.g. rate (in Hz)) to set */ ++}; ++ ++/* message structure to be sent to videocore */ ++struct vc_msg { ++ uint32_t msg_size; /* simply, sizeof(struct vc_msg) */ ++ uint32_t request_code; /* holds various information like the success and number of bytes returned (refer to mailboxes wiki) */ ++ struct vc_msg_tag tag; /* the tag structure above to make */ ++ uint32_t end_tag; /* an end identifier, should be set to NULL */ ++}; ++ ++/* ---------- GLOBALS ---------- */ ++static struct cpufreq_driver bcm2835_cpufreq_driver; /* the cpufreq driver global */ ++ ++/* ++ =============================================== ++ clk_rate either gets or sets the clock rates. ++ =============================================== ++*/ ++static uint32_t bcm2835_cpufreq_set_clock(int cur_rate, int arm_rate) ++{ ++ int s, actual_rate=0; ++ struct vc_msg msg; ++ ++ /* wipe all previous message data */ ++ memset(&msg, 0, sizeof msg); ++ ++ msg.msg_size = sizeof msg; ++ ++ msg.tag.tag_id = VCMSG_SET_CLOCK_RATE; ++ msg.tag.buffer_size = 8; ++ msg.tag.data_size = 8; /* we're sending the clock ID and the new rates which is a total of 2 words */ ++ msg.tag.dev_id = VCMSG_ID_ARM_CLOCK; ++ msg.tag.val = arm_rate * 1000; ++ ++ /* send the message */ ++ s = bcm_mailbox_property(&msg, sizeof msg); ++ ++ /* check if it was all ok and return the rate in KHz */ ++ if (s == 0 && (msg.request_code & 0x80000000)) ++ actual_rate = msg.tag.val/1000; ++ ++ print_debug("Setting new frequency = %d -> %d (actual %d)\n", cur_rate, arm_rate, actual_rate); ++ return actual_rate; ++} ++ ++static uint32_t bcm2835_cpufreq_get_clock(int tag) ++{ ++ int s; ++ int arm_rate = 0; ++ struct vc_msg msg; ++ ++ /* wipe all previous message data */ ++ memset(&msg, 0, sizeof msg); ++ ++ msg.msg_size = sizeof msg; ++ msg.tag.tag_id = tag; ++ msg.tag.buffer_size = 8; ++ msg.tag.data_size = 4; /* we're just sending the clock ID which is one word long */ ++ msg.tag.dev_id = VCMSG_ID_ARM_CLOCK; ++ ++ /* send the message */ ++ s = bcm_mailbox_property(&msg, sizeof msg); ++ ++ /* check if it was all ok and return the rate in KHz */ ++ if (s == 0 && (msg.request_code & 0x80000000)) ++ arm_rate = msg.tag.val/1000; ++ ++ print_debug("%s frequency = %d\n", ++ tag == VCMSG_GET_CLOCK_RATE ? "Current": ++ tag == VCMSG_GET_MIN_CLOCK ? "Min": ++ tag == VCMSG_GET_MAX_CLOCK ? "Max": ++ "Unexpected", arm_rate); ++ ++ return arm_rate; ++} ++ ++/* ++ ==================================================== ++ Module Initialisation registers the cpufreq driver ++ ==================================================== ++*/ ++static int __init bcm2835_cpufreq_module_init(void) ++{ ++ print_debug("IN\n"); ++ return cpufreq_register_driver(&bcm2835_cpufreq_driver); ++} ++ ++/* ++ ============= ++ Module exit ++ ============= ++*/ ++static void __exit bcm2835_cpufreq_module_exit(void) ++{ ++ print_debug("IN\n"); ++ cpufreq_unregister_driver(&bcm2835_cpufreq_driver); ++ return; ++} ++ ++/* ++ ============================================================== ++ Initialisation function sets up the CPU policy for first use ++ ============================================================== ++*/ ++static int bcm2835_cpufreq_driver_init(struct cpufreq_policy *policy) ++{ ++ /* measured value of how long it takes to change frequency */ ++ policy->cpuinfo.transition_latency = 355000; /* ns */ ++ ++ /* now find out what the maximum and minimum frequencies are */ ++ policy->min = policy->cpuinfo.min_freq = bcm2835_cpufreq_get_clock(VCMSG_GET_MIN_CLOCK); ++ 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\n", policy->min, policy->max, policy->cur); ++ return 0; ++} ++ ++/* ++ ================================================================================= ++ Target function chooses the most appropriate frequency from the table to enable ++ ================================================================================= ++*/ ++ ++static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) ++{ ++ unsigned int target = target_freq; ++ unsigned int cur = policy->cur; ++ 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) ++ target = policy->max; ++ /* if the frequency is the same, just quit */ ++ if (target == policy->cur) ++ return 0; ++ ++ /* otherwise were good to set the clock frequency */ ++ policy->cur = bcm2835_cpufreq_set_clock(policy->cur, target); ++ ++ if (!policy->cur) ++ { ++ 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)\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("cpu=%d\n", actual_rate); ++ return actual_rate; ++} ++ ++/* ++ ================================================================================= ++ Verify ensures that when a policy is changed, it is suitable for the CPU to use ++ ================================================================================= ++*/ ++ ++static int bcm2835_cpufreq_driver_verify(struct cpufreq_policy *policy) ++{ ++ print_info("switching to governor %s\n", policy->governor->name); ++ return 0; ++} ++ ++ ++/* the CPUFreq driver */ ++static struct cpufreq_driver bcm2835_cpufreq_driver = { ++ .name = "BCM2835 CPUFreq", ++ .owner = THIS_MODULE, ++ .init = bcm2835_cpufreq_driver_init, ++ .verify = bcm2835_cpufreq_driver_verify, ++ .target = bcm2835_cpufreq_driver_target, ++ .get = bcm2835_cpufreq_driver_get ++}; ++ ++MODULE_AUTHOR("Dorian Peake and Dom Cobley"); ++MODULE_DESCRIPTION("CPU frequency driver for BCM2835 chip"); ++MODULE_LICENSE("GPL"); ++ ++module_init(bcm2835_cpufreq_module_init); ++module_exit(bcm2835_cpufreq_module_exit); ++ -- 1.8.4 -From fd8ea3727c8fc6468fa54f49c57af0656fa8a10b Mon Sep 17 00:00:00 2001 +From 2506f13a0f5dfc5e52f5208ca524dc914326511a Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 8 Apr 2013 21:12:48 +0100 -Subject: [PATCH 036/128] Add NAK holdoff scheme. Enabled by default, disable +Subject: [PATCH 032/104] Add NAK holdoff scheme. Enabled by default, disable with dwc_otg.nak_holdoff_enable=0. Thanks gsh --- @@ -90393,29 +89898,29 @@ index ac10323..e6b2a7b 100644 1.8.4 -From 2ec161d5dcf86b121d5dca7c78d3a753b2cc9cb7 Mon Sep 17 00:00:00 2001 +From 17c4ebbb5f59902f30496b9678e2dfff23616f34 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 26 Mar 2013 19:24:24 +0000 -Subject: [PATCH 037/128] Added hwmon/thermal driver for reporting core +Subject: [PATCH 033/104] Added hwmon/thermal driver for reporting core temperature. Thanks Dorian --- arch/arm/mach-bcm2708/bcm2708.c | 11 ++ - drivers/hwmon/Kconfig | 9 ++ + drivers/hwmon/Kconfig | 10 ++ drivers/hwmon/Makefile | 1 + - drivers/hwmon/bcm2835-hwmon.c | 211 ++++++++++++++++++++++++++++++++++++++ + drivers/hwmon/bcm2835-hwmon.c | 219 ++++++++++++++++++++++++++++++++++++++ drivers/thermal/Kconfig | 7 ++ drivers/thermal/Makefile | 1 + - drivers/thermal/bcm2835-thermal.c | 195 +++++++++++++++++++++++++++++++++++ - 7 files changed, 435 insertions(+) + drivers/thermal/bcm2835-thermal.c | 208 ++++++++++++++++++++++++++++++++++++ + 7 files changed, 457 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 f5f262c..2875cd2 100644 +index b9aa2de..ab8bac6 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -556,6 +556,14 @@ struct platform_device bcm2708_powerman_device = { +@@ -562,6 +562,14 @@ struct platform_device bcm2708_powerman_device = { .resource = bcm2708_bsc1_resources, }; @@ -90430,25 +89935,26 @@ index f5f262c..2875cd2 100644 int __init bcm_register_device(struct platform_device *pdev) { int ret; -@@ -618,6 +626,9 @@ void __init bcm2708_init(void) +@@ -682,6 +690,9 @@ void __init bcm2708_init(void) bcm_register_device(&bcm2708_bsc0_device); bcm_register_device(&bcm2708_bsc1_device); + bcm_register_device(&bcm2835_hwmon_device); + bcm_register_device(&bcm2835_thermal_device); + - #ifdef CONFIG_BCM2708_VCMEM - { - extern void vc_mem_connected_init(void); + for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { + struct amba_device *d = amba_devs[i]; + amba_device_register(d, &iomem_resource); diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index df064e8..b1f1265 100644 +index df064e8..170bfef 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig -@@ -1528,6 +1528,15 @@ config SENSORS_MC13783_ADC +@@ -1528,6 +1528,16 @@ config SENSORS_MC13783_ADC help Support for the A/D converter on MC13783 and MC13892 PMIC. +config SENSORS_BCM2835 ++ depends on THERMAL_BCM2835=n + tristate "Broadcom BCM2835 HWMON Driver" + help + If you say yes here you get support for the hardware @@ -90474,11 +89980,23 @@ index d17d3e6..a922c03 100644 diff --git a/drivers/hwmon/bcm2835-hwmon.c b/drivers/hwmon/bcm2835-hwmon.c new file mode 100644 -index 0000000..4976387 +index 0000000..5bbed45 --- /dev/null +++ b/drivers/hwmon/bcm2835-hwmon.c -@@ -0,0 +1,211 @@ -+//bcm2835-hwmon.c +@@ -0,0 +1,219 @@ ++/***************************************************************************** ++* Copyright 2011 Broadcom Corporation. All rights reserved. ++* ++* Unless you and Broadcom execute a separate written software license ++* agreement governing use of this software, this software is licensed to you ++* under the terms of the GNU General Public License version 2, available at ++* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). ++* ++* Notwithstanding the above, under no circumstances may you combine this ++* software in any way with any other Broadcom software provided under a ++* license other than the GPL, without Broadcom's express prior written ++* consent. ++*****************************************************************************/ + +#include +#include @@ -90505,12 +90023,12 @@ index 0000000..4976387 + +#define VC_TAG_GET_TEMP 0x00030006 +#define VC_TAG_GET_MAX_TEMP 0x0003000A ++ ++/* --- STRUCTS --- */ +struct bcm2835_hwmon_data { + struct device *hwmon_dev; +}; + -+/* --- STRUCTS --- */ -+ +/* tag part of the message */ +struct vc_msg_tag { + uint32_t tag_id; /* the tag ID for the temperature */ @@ -90544,16 +90062,12 @@ index 0000000..4976387 + +static SENSOR_DEVICE_ATTR(name, S_IRUGO,bcm2835_get_name,NULL,0); +static SENSOR_DEVICE_ATTR(temp1_input,S_IRUGO,bcm2835_get_temp,NULL,TEMP); -+static SENSOR_DEVICE_ATTR(temp,S_IRUGO,bcm2835_get_temp,NULL,TEMP); +static SENSOR_DEVICE_ATTR(temp1_max,S_IRUGO,bcm2835_get_temp,NULL,MAX_TEMP); -+static SENSOR_DEVICE_ATTR(trip_point_0_temp,S_IRUGO,bcm2835_get_temp,NULL,MAX_TEMP); + +static struct attribute* bcm2835_attributes[] = { + &sensor_dev_attr_name.dev_attr.attr, + &sensor_dev_attr_temp1_input.dev_attr.attr, + &sensor_dev_attr_temp1_max.dev_attr.attr, -+ &sensor_dev_attr_temp.dev_attr.attr, -+ &sensor_dev_attr_trip_point_0_temp.dev_attr.attr, + NULL, +}; + @@ -90717,11 +90231,24 @@ index c054d41..7893ed1 100644 diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c new file mode 100644 -index 0000000..f1ecdb2 +index 0000000..3f9a733 --- /dev/null +++ b/drivers/thermal/bcm2835-thermal.c -@@ -0,0 +1,195 @@ -+//bcm2835-thermal.c +@@ -0,0 +1,208 @@ ++/***************************************************************************** ++* Copyright 2011 Broadcom Corporation. All rights reserved. ++* ++* Unless you and Broadcom execute a separate written software license ++* agreement governing use of this software, this software is licensed to you ++* under the terms of the GNU General Public License version 2, available at ++* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). ++* ++* Notwithstanding the above, under no circumstances may you combine this ++* software in any way with any other Broadcom software provided under a ++* license other than the GPL, without Broadcom's express prior written ++* consent. ++*****************************************************************************/ ++ +#include +#include +#include @@ -90920,52 +90447,820 @@ index 0000000..f1ecdb2 1.8.4 -From d27b5f42d8edf526b692d91c93d4c1dddb735d44 Mon Sep 17 00:00:00 2001 +From 2340da3adbcd1d5a0d31de7e9ba5729f156fbeb0 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Fri, 12 Apr 2013 23:59:27 +0100 -Subject: [PATCH 038/128] Add config options for thermal sensor, L2TP, - RT2800USB_UNKNOWN, and various I2C and SPI RTCs. Tidy of thermal driver. +Date: Thu, 19 Jul 2012 16:00:28 +0100 +Subject: [PATCH 034/104] config: add missing options from 3.6.y kernel --- - 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, 63 insertions(+), 8 deletions(-) + arch/arm/configs/bcmrpi_defconfig | 653 ++++++++++++++++++++++++++----- + drivers/net/wireless/ath/ath9k/hif_usb.c | 2 + + 2 files changed, 564 insertions(+), 91 deletions(-) diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 5b0a171..d11f688 100644 +index 6219df3..36fcd49 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -217,6 +217,7 @@ CONFIG_BRIDGE_EBT_SNAT=m - CONFIG_BRIDGE_EBT_LOG=m - CONFIG_BRIDGE_EBT_ULOG=m - CONFIG_BRIDGE_EBT_NFLOG=m +@@ -1,11 +1,17 @@ +-CONFIG_EXPERIMENTAL=y ++# CONFIG_ARM_PATCH_PHYS_VIRT is not set + # 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 +@@ -15,22 +21,24 @@ CONFIG_RESOURCE_COUNTERS=y + CONFIG_BLK_CGROUP=y + CONFIG_NAMESPACES=y + CONFIG_SCHED_AUTOGROUP=y ++CONFIG_RELAY=y ++CONFIG_BLK_DEV_INITRD=y + CONFIG_EMBEDDED=y + # CONFIG_COMPAT_BRK is not set +-CONFIG_SLAB=y + CONFIG_PROFILING=y + CONFIG_OPROFILE=m + CONFIG_KPROBES=y ++CONFIG_JUMP_LABEL=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_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 +@@ -38,6 +46,14 @@ 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_FREQ=y ++CONFIG_CPU_FREQ_STAT=m ++CONFIG_CPU_FREQ_STAT_DETAILS=y ++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_CPU_IDLE=y + CONFIG_VFP=y + CONFIG_BINFMT_MISC=m +@@ -52,15 +68,257 @@ 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_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_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 ++CONFIG_NF_CONNTRACK_EVENTS=y ++CONFIG_NF_CONNTRACK_TIMESTAMP=y ++CONFIG_NF_CT_PROTO_DCCP=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_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 ++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_BPF=m ++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m ++CONFIG_NETFILTER_XT_MATCH_COMMENT=m ++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m ++CONFIG_NETFILTER_XT_MATCH_CONNLABEL=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_NFACCT=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 ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_RECENT=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_IP_VS=m ++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_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_ULOG=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_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_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 ++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_SCTP_COOKIE_HMAC_SHA1=y +CONFIG_L2TP=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m - CONFIG_VLAN_8021Q_GVRP=y -@@ -353,6 +354,7 @@ CONFIG_RT2500USB=m ++CONFIG_BRIDGE=m ++CONFIG_VLAN_8021Q=m ++CONFIG_VLAN_8021Q_GVRP=y ++CONFIG_ATALK=m ++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_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 ++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_EMATCH_IPSET=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_BATMAN_ADV=m ++CONFIG_OPENVSWITCH=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 +@@ -73,8 +331,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 +@@ -89,21 +345,28 @@ CONFIG_BT_HCIVHCI=m + CONFIG_BT_MRVL=m + CONFIG_BT_MRVL_SDIO=m + CONFIG_BT_ATH3K=m ++CONFIG_BT_WILINK=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_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=m +@@ -111,13 +374,50 @@ 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_NETDEVICES=y ++CONFIG_DUMMY=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_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_RTL8152=m ++CONFIG_USB_USBNET=y ++CONFIG_USB_NET_AX8817X=m ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_CDC_MBIM=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_EPSON2888=y ++CONFIG_USB_KC2190=y ++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 ++CONFIG_USB_VL600=m + CONFIG_LIBERTAS_THINFIRM=m + CONFIG_LIBERTAS_THINFIRM_USB=m + CONFIG_AT76C50X_USB=m +@@ -125,14 +425,16 @@ CONFIG_USB_ZD1201=m + CONFIG_USB_NET_RNDIS_WLAN=m + CONFIG_RTL8187=m + CONFIG_MAC80211_HWSIM=m +-CONFIG_ATH_COMMON=m ++CONFIG_ATH_CARDS=m + CONFIG_ATH9K=m + CONFIG_ATH9K_HTC=m + CONFIG_CARL9170=m ++CONFIG_ATH6KL=m ++CONFIG_ATH6KL_USB=m ++CONFIG_AR5523=m + CONFIG_B43=m + CONFIG_B43LEGACY=m + CONFIG_HOSTAP=m +-CONFIG_IWM=m + CONFIG_LIBERTAS=m + CONFIG_LIBERTAS_USB=m + CONFIG_LIBERTAS_SDIO=m +@@ -143,56 +445,25 @@ CONFIG_RT2500USB=m CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT53XX=y +-CONFIG_RTL8192CU=m +-CONFIG_WL1251=m +-CONFIG_WL12XX_MENU=m +CONFIG_RT2800USB_UNKNOWN=y - CONFIG_WL1251=m - CONFIG_WL12XX_MENU=m CONFIG_ZD1211RW=m -@@ -432,6 +434,8 @@ CONFIG_SPI_BCM2708=m - CONFIG_SPI_SPIDEV=m + CONFIG_MWIFIEX=m + CONFIG_MWIFIEX_SDIO=m ++CONFIG_RTL8192CU=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_JOYSTICK=y ++CONFIG_JOYSTICK_IFORCE=m ++CONFIG_JOYSTICK_IFORCE_USB=y ++CONFIG_JOYSTICK_XPAD=y ++CONFIG_JOYSTICK_XPAD_FF=y + 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 +@@ -202,28 +473,188 @@ 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_SERIO is not set + 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_HW_RANDOM=y ++CONFIG_HW_RANDOM_BCM2708=y + 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 + 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_DS2413=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_DS2781=m ++CONFIG_W1_SLAVE_DS28E04=m ++CONFIG_W1_SLAVE_BQ27000=m ++CONFIG_BATTERY_DS2760=m # CONFIG_HWMON is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_BCM2835=y CONFIG_WATCHDOG=y CONFIG_BCM2708_WDT=m - CONFIG_MEDIA_SUPPORT=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_MFD_SUPPORT is not set ++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_IR_TTUSBIR=m ++CONFIG_RC_LOOPBACK=m ++CONFIG_IR_GPIO_CIR=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_PVRUSB2=m ++CONFIG_VIDEO_HDPVR=m ++CONFIG_VIDEO_TLG2300=m ++CONFIG_VIDEO_USBVISION=m ++CONFIG_VIDEO_STK1160=m ++CONFIG_VIDEO_STK1160_AC97=y ++CONFIG_VIDEO_AU0828=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_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_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_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_EC168=m ++CONFIG_DVB_USB_GL861=m ++CONFIG_DVB_USB_IT913X=m ++CONFIG_DVB_USB_LME2510=m ++CONFIG_DVB_USB_MXL111SF=m ++CONFIG_DVB_USB_RTL28XXU=m ++CONFIG_SMS_USB_DRV=m ++CONFIG_DVB_B2C2_FLEXCOP_USB=m ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_EM28XX_DVB=m ++CONFIG_RADIO_SI470X=y ++CONFIG_USB_SI470X=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_USB_MA901=m ++CONFIG_RADIO_SAA7706H=m ++CONFIG_RADIO_TEF6862=m ++CONFIG_RADIO_WL128X=m + CONFIG_FB=y + CONFIG_FB_BCM2708=y + CONFIG_FRAMEBUFFER_CONSOLE=y +@@ -250,8 +681,7 @@ 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_HIDRAW=y + CONFIG_HID_A4TECH=m + CONFIG_HID_ACRUX=m + CONFIG_HID_APPLE=m +@@ -282,7 +712,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 +@@ -291,15 +720,18 @@ CONFIG_HID_SUNPLUS=m + CONFIG_HID_GREENASIA=m + CONFIG_HID_SMARTJOYPLUS=m + CONFIG_HID_TOPSEED=m ++CONFIG_HID_THINGM=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_HID_PID=y ++CONFIG_USB_HIDDEV=y + CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + CONFIG_USB_MON=m + CONFIG_USB_DWCOTG=y ++CONFIG_USB_PRINTER=m + CONFIG_USB_STORAGE=y + CONFIG_USB_STORAGE_REALTEK=m + CONFIG_USB_STORAGE_DATAFAB=m +@@ -314,8 +746,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 +@@ -336,6 +766,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 +@@ -344,6 +775,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 +@@ -365,8 +797,12 @@ CONFIG_USB_SERIAL_OPTION=m + CONFIG_USB_SERIAL_OMNINET=m + CONFIG_USB_SERIAL_OPTICON=m + CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m ++CONFIG_USB_SERIAL_XSENS_MT=m + CONFIG_USB_SERIAL_ZIO=m ++CONFIG_USB_SERIAL_WISHBONE=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 +@@ -388,17 +824,59 @@ CONFIG_USB_TEST=m + CONFIG_USB_ISIGHTFW=m + CONFIG_USB_YUREX=m + CONFIG_MMC=y ++CONFIG_MMC_BLOCK_MINORS=32 + 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_LEDS_GPIO=m ++CONFIG_LEDS_TRIGGER_TIMER=y ++CONFIG_LEDS_TRIGGER_ONESHOT=y ++CONFIG_LEDS_TRIGGER_HEARTBEAT=y ++CONFIG_LEDS_TRIGGER_BACKLIGHT=y ++CONFIG_LEDS_TRIGGER_CPU=y ++CONFIG_LEDS_TRIGGER_GPIO=y ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=y ++CONFIG_LEDS_TRIGGER_TRANSIENT=m ++CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m @@ -90976,6 +91271,7 @@ index 5b0a171..d11f688 100644 +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_X1205=m ++CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m @@ -90995,303 +91291,111 @@ index 5b0a171..d11f688 100644 +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_PCF2123=m ++CONFIG_RTC_DRV_RX4581=m CONFIG_UIO=m CONFIG_UIO_PDRV=m CONFIG_UIO_PDRV_GENIRQ=m -diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index b1f1265..170bfef 100644 ---- a/drivers/hwmon/Kconfig -+++ b/drivers/hwmon/Kconfig -@@ -1529,6 +1529,7 @@ config SENSORS_MC13783_ADC - Support for the A/D converter on MC13783 and MC13892 PMIC. - - config SENSORS_BCM2835 -+ depends on THERMAL_BCM2835=n - tristate "Broadcom BCM2835 HWMON Driver" - help - If you say yes here you get support for the hardware -diff --git a/drivers/hwmon/bcm2835-hwmon.c b/drivers/hwmon/bcm2835-hwmon.c -index 4976387..5bbed45 100644 ---- a/drivers/hwmon/bcm2835-hwmon.c -+++ b/drivers/hwmon/bcm2835-hwmon.c -@@ -1,4 +1,16 @@ --//bcm2835-hwmon.c -+/***************************************************************************** -+* Copyright 2011 Broadcom Corporation. All rights reserved. -+* -+* Unless you and Broadcom execute a separate written software license -+* agreement governing use of this software, this software is licensed to you -+* under the terms of the GNU General Public License version 2, available at -+* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). -+* -+* Notwithstanding the above, under no circumstances may you combine this -+* software in any way with any other Broadcom software provided under a -+* license other than the GPL, without Broadcom's express prior written -+* consent. -+*****************************************************************************/ - - #include - #include -@@ -25,12 +37,12 @@ - - #define VC_TAG_GET_TEMP 0x00030006 - #define VC_TAG_GET_MAX_TEMP 0x0003000A -+ -+/* --- STRUCTS --- */ - struct bcm2835_hwmon_data { - struct device *hwmon_dev; - }; - --/* --- STRUCTS --- */ -- - /* tag part of the message */ - struct vc_msg_tag { - uint32_t tag_id; /* the tag ID for the temperature */ -@@ -64,16 +76,12 @@ struct vc_msg { - - static SENSOR_DEVICE_ATTR(name, S_IRUGO,bcm2835_get_name,NULL,0); - static SENSOR_DEVICE_ATTR(temp1_input,S_IRUGO,bcm2835_get_temp,NULL,TEMP); --static SENSOR_DEVICE_ATTR(temp,S_IRUGO,bcm2835_get_temp,NULL,TEMP); - static SENSOR_DEVICE_ATTR(temp1_max,S_IRUGO,bcm2835_get_temp,NULL,MAX_TEMP); --static SENSOR_DEVICE_ATTR(trip_point_0_temp,S_IRUGO,bcm2835_get_temp,NULL,MAX_TEMP); - - static struct attribute* bcm2835_attributes[] = { - &sensor_dev_attr_name.dev_attr.attr, - &sensor_dev_attr_temp1_input.dev_attr.attr, - &sensor_dev_attr_temp1_max.dev_attr.attr, -- &sensor_dev_attr_temp.dev_attr.attr, -- &sensor_dev_attr_trip_point_0_temp.dev_attr.attr, - NULL, - }; - -diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c -index f1ecdb2..3f9a733 100644 ---- a/drivers/thermal/bcm2835-thermal.c -+++ b/drivers/thermal/bcm2835-thermal.c -@@ -1,4 +1,17 @@ --//bcm2835-thermal.c -+/***************************************************************************** -+* Copyright 2011 Broadcom Corporation. All rights reserved. -+* -+* Unless you and Broadcom execute a separate written software license -+* agreement governing use of this software, this software is licensed to you -+* under the terms of the GNU General Public License version 2, available at -+* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). -+* -+* Notwithstanding the above, under no circumstances may you combine this -+* software in any way with any other Broadcom software provided under a -+* license other than the GPL, without Broadcom's express prior written -+* consent. -+*****************************************************************************/ -+ - #include - #include - #include ++CONFIG_STAGING=y ++CONFIG_STAGING_MEDIA=y ++CONFIG_LIRC_STAGING=y ++CONFIG_LIRC_RPI=m + # CONFIG_IOMMU_SUPPORT is not set + CONFIG_EXT4_FS=y + CONFIG_EXT4_FS_POSIX_ACL=y +@@ -421,6 +899,8 @@ CONFIG_BTRFS_FS=m + CONFIG_BTRFS_FS_POSIX_ACL=y + CONFIG_NILFS2_FS=m + CONFIG_FANOTIFY=y ++CONFIG_QFMT_V1=m ++CONFIG_QFMT_V2=m + CONFIG_AUTOFS4_FS=y + CONFIG_FUSE_FS=m + CONFIG_CUSE=m +@@ -443,21 +923,22 @@ 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 + 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_CIFS_DEBUG is not set + 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 +@@ -497,38 +978,28 @@ 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_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 -- 1.8.4 -From f8f6c907799be25fec99e670237c4ac52f5b1a11 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 28 Mar 2013 01:19:54 +0000 -Subject: [PATCH 039/128] 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 c82dd90..08d9238 100644 ---- a/drivers/video/bcm2708_fb.c -+++ b/drivers/video/bcm2708_fb.c -@@ -35,6 +35,12 @@ - #include - #include - -+#ifdef BCM2708_FB_DEBUG -+#define print_debug(fmt,...) pr_debug("%s:%s:%d: "fmt, MODULE_NAME, __func__, __LINE__, ##__VA_ARGS__) -+#else -+#define print_debug(fmt,...) -+#endif -+ - /* This is limited to 16 characters when displayed by X startup */ - static const char *bcm2708_name = "BCM2708 FB"; - -@@ -134,17 +140,15 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var, - { - /* info input, var output */ - int yres; -- /* memory size in pixels */ -- unsigned pixels = info->screen_size * 8 / var->bits_per_pixel; - - /* info input, var output */ -- pr_info("bcm2708_fb_check_var info(%p) %dx%d (%dx%d), %d, %d\n", info, -+ print_debug("bcm2708_fb_check_var info(%p) %dx%d (%dx%d), %d, %d\n", info, - info->var.xres, info->var.yres, info->var.xres_virtual, - info->var.yres_virtual, (int)info->screen_size, - info->var.bits_per_pixel); -- pr_info("bcm2708_fb_check_var var(%p) %dx%d (%dx%d), %d, %d\n", var, -+ print_debug("bcm2708_fb_check_var var(%p) %dx%d (%dx%d), %d\n", var, - var->xres, var->yres, var->xres_virtual, var->yres_virtual, -- var->bits_per_pixel, pixels); -+ var->bits_per_pixel); - - if (!var->bits_per_pixel) - var->bits_per_pixel = 16; -@@ -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 */ - -- pr_info("bcm2708_fb_set_par info(%p) %dx%d (%dx%d), %d, %d\n", info, -+ print_debug("bcm2708_fb_set_par info(%p) %dx%d (%dx%d), %d, %d\n", info, - info->var.xres, info->var.yres, info->var.xres_virtual, - info->var.yres_virtual, (int)info->screen_size, - info->var.bits_per_pixel); -@@ -251,7 +255,7 @@ static int bcm2708_fb_set_par(struct fb_info *info) - BUG(); /* what can we do here */ - } - } -- pr_info -+ print_debug - ("BCM2708FB: start = %p,%p width=%d, height=%d, bpp=%d, pitch=%d size=%d success=%d\n", - (void *)fb->fb.screen_base, (void *)fb->fb.fix.smem_start, - fbinfo->xres, fbinfo->yres, fbinfo->bpp, -@@ -274,7 +278,7 @@ 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);*/ -+ /*print_debug("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] */ -@@ -297,28 +301,28 @@ static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red, - - static int bcm2708_fb_blank(int blank_mode, struct fb_info *info) - { -- /*pr_info("bcm2708_fb_blank\n"); */ -+ /*print_debug("bcm2708_fb_blank\n"); */ - return -1; - } - - static void bcm2708_fb_fillrect(struct fb_info *info, - const struct fb_fillrect *rect) - { -- /* (is called) pr_info("bcm2708_fb_fillrect\n"); */ -+ /* (is called) print_debug("bcm2708_fb_fillrect\n"); */ - cfb_fillrect(info, rect); - } - - static void bcm2708_fb_copyarea(struct fb_info *info, - const struct fb_copyarea *region) - { -- /*pr_info("bcm2708_fb_copyarea\n"); */ -+ /*print_debug("bcm2708_fb_copyarea\n"); */ - cfb_copyarea(info, region); - } - - static void bcm2708_fb_imageblit(struct fb_info *info, - const struct fb_image *image) - { -- /* (is called) pr_info("bcm2708_fb_imageblit\n"); */ -+ /* (is called) print_debug("bcm2708_fb_imageblit\n"); */ - cfb_imageblit(info, image); - } - -@@ -393,15 +397,15 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb) - - fb_set_var(&fb->fb, &fb->fb.var); - -- pr_info("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, -+ print_debug("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth, - fbheight, fbdepth); - - ret = register_framebuffer(&fb->fb); -- pr_info("BCM2708FB: register framebuffer (%d)\n", ret); -+ print_debug("BCM2708FB: register framebuffer (%d)\n", ret); - if (ret == 0) - goto out; - -- pr_info("BCM2708FB: cannot register framebuffer (%d)\n", ret); -+ print_debug("BCM2708FB: cannot register framebuffer (%d)\n", ret); - out: - return ret; - } --- -1.8.4 - - -From 2b01170bdf76fb30a4a6df15398a66121897cab8 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 28 Mar 2013 01:20:34 +0000 -Subject: [PATCH 040/128] cpufreq: Remove some unnecessary dmesg output. - ---- - drivers/cpufreq/bcm2835-cpufreq.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/cpufreq/bcm2835-cpufreq.c b/drivers/cpufreq/bcm2835-cpufreq.c -index aa6fc66..6ff1edb 100755 ---- a/drivers/cpufreq/bcm2835-cpufreq.c -+++ b/drivers/cpufreq/bcm2835-cpufreq.c -@@ -196,7 +196,7 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned - policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE); - return -EINVAL; - } -- print_info("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)", cur, policy->cur, policy->min, policy->max, target_freq, target); - return 0; - } - --- -1.8.4 - - -From 52485729188509d5c59b9074ec3cd3bafcf19998 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 17 Sep 2012 22:57:29 +0100 -Subject: [PATCH 041/128] 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 d11f688..c1afa47 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -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 --CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y --CONFIG_CPU_FREQ_GOV_POWERSAVE=y -+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_CPU_IDLE=y - CONFIG_VFP=y --- -1.8.4 - - -From e30dc2536a36a65e4dcc9176546bdc3e175bef31 Mon Sep 17 00:00:00 2001 +From b76c3a8614fcd2df00260ad6d61d1d2dda22f848 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 17 Apr 2013 12:16:36 +0100 -Subject: [PATCH 042/128] Enable multiple ALSA channels +Subject: [PATCH 035/104] Enable multiple ALSA channels --- 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 2875cd2..27e9553 100644 +index ab8bac6..5a7437b 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -469,12 +469,54 @@ struct platform_device bcm2708_powerman_device = { +@@ -471,12 +471,54 @@ struct platform_device bcm2708_powerman_device = { static struct platform_device bcm2708_alsa_devices[] = { @@ -91356,10 +91460,10 @@ index 2875cd2..27e9553 100644 1.8.4 -From a92be80af3068c59b2495d7a9be21d2d8e999cba Mon Sep 17 00:00:00 2001 +From e5c5956ed7aa509187515a1acfe4ec2ca6d63433 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Oct 2012 20:08:19 +0100 -Subject: [PATCH 043/128] set i2c speed via module-parameter or menuconfig. +Subject: [PATCH 036/104] set i2c speed via module-parameter or menuconfig. Thanks FrankBoesing --- @@ -91434,10 +91538,10 @@ index 7cae615..3391889 100644 1.8.4 -From c790505f131471383130755cd6bb9cc433f9a46a Mon Sep 17 00:00:00 2001 +From f8b33cb3ea1be1072ac6b9bd897ef346d42567ae Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Oct 2012 21:31:48 +0100 -Subject: [PATCH 044/128] Allow the number of cycles delay between sdcard +Subject: [PATCH 037/104] Allow the number of cycles delay between sdcard peripheral writes to be specified on command line with sdhci-bcm2708.cycle_delay @@ -91479,299 +91583,10 @@ index 7ce2829..ffd7310 100644 1.8.4 -From 7796269504aab5ba9bb97e192f70046aa087de02 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 17 Apr 2013 14:37:25 +0100 -Subject: [PATCH 045/128] Fix vc-mem by using module parameters - ---- - arch/arm/mach-bcm2708/bcm2708.c | 12 ++--- - arch/arm/mach-bcm2708/vc_mem.c | 99 +++++++++-------------------------------- - 2 files changed, 28 insertions(+), 83 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 27e9553..e010515 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -77,6 +77,7 @@ - - /* command line parameters */ - static unsigned boardrev, serial; -+static unsigned uart_clock; - - static void __init bcm2708_init_led(void); - -@@ -633,8 +634,12 @@ void __init bcm2708_init(void) - { - int i; - -+ printk("bcm2708.uart_clock = %d\n", uart_clock); - pm_power_off = bcm2708_power_off; - -+ if (uart_clock) -+ lookups[0].clk->rate = uart_clock; -+ - for (i = 0; i < ARRAY_SIZE(lookups); i++) - clkdev_add(&lookups[i]); - -@@ -671,12 +676,6 @@ void __init bcm2708_init(void) - bcm_register_device(&bcm2835_hwmon_device); - bcm_register_device(&bcm2835_thermal_device); - --#ifdef CONFIG_BCM2708_VCMEM -- { -- extern void vc_mem_connected_init(void); -- vc_mem_connected_init(); -- } --#endif - for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { - struct amba_device *d = amba_devs[i]; - amba_device_register(d, &iomem_resource); -@@ -842,3 +841,4 @@ void __init bcm2708_init_early(void) - - 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 -index 5ef68b3..057f74f 100644 ---- a/arch/arm/mach-bcm2708/vc_mem.c -+++ b/arch/arm/mach-bcm2708/vc_mem.c -@@ -36,7 +36,7 @@ - #define DRIVER_NAME "vc-mem" - - // Uncomment to enable debug logging --#define ENABLE_DBG -+// #define ENABLE_DBG - - #if defined(ENABLE_DBG) - #define LOG_DBG( fmt, ... ) printk( KERN_INFO fmt "\n", ##__VA_ARGS__ ) -@@ -77,6 +77,11 @@ - EXPORT_SYMBOL(mm_vc_mem_size); - EXPORT_SYMBOL(mm_vc_mem_base); - -+static uint phys_addr = 0; -+static uint mem_size = 0; -+static uint mem_base = 0; -+ -+ - /**************************************************************************** - * - * vc_mem_open -@@ -111,53 +116,6 @@ - return 0; - } - -- --/* tag part of the message */ --struct vc_msg_tag { -- uint32_t tag_id; /* the message id */ -- uint32_t buffer_size; /* size of the buffer (which in this case is always 8 bytes) */ -- uint32_t data_size; /* amount of data being sent or received */ -- uint32_t base; /* the address of memory base */ -- uint32_t size; /* the size of memory in bytes */ --}; -- --struct vc_set_msg { -- uint32_t msg_size; /* simply, sizeof(struct vc_msg) */ -- uint32_t request_code; /* holds various information like the success and number of bytes returned (refer to mailboxes wiki) */ -- struct vc_msg_tag tag[2]; /* the array of tag structures above to make */ -- uint32_t end_tag; /* an end identifier, should be set to NULL */ --}; -- --static void vc_mem_update(void) --{ -- struct vc_set_msg msg; /* the memory address accessed from driver */ -- uint32_t s; -- -- memset(&msg, 0, sizeof msg); -- /* create the message */ -- msg.msg_size = sizeof msg; -- msg.tag[0].tag_id = VCMSG_GET_VC_MEMORY; -- msg.tag[0].buffer_size = 8; -- msg.tag[0].data_size = 0; -- msg.tag[1].tag_id = VCMSG_GET_ARM_MEMORY; -- msg.tag[1].buffer_size = 8; -- msg.tag[1].data_size = 0; -- -- /* send the message */ -- s = bcm_mailbox_property(&msg, sizeof msg); -- -- LOG_DBG("%s: success=%d resp %x, vcbase=%x vcsize=%x armbase=%x armsize=%x", __func__, s, msg.request_code, -- msg.tag[0].base, msg.tag[0].size, msg.tag[1].base, msg.tag[1].size); -- -- /* check we're all good */ -- if (s == 0 && msg.request_code & 0x80000000) { -- mm_vc_mem_base = msg.tag[0].base; -- mm_vc_mem_size = msg.tag[0].size+msg.tag[1].size; -- mm_vc_mem_phys_addr = msg.tag[1].base; -- } --} -- -- - /**************************************************************************** - * - * vc_mem_get_size -@@ -167,7 +125,6 @@ static void vc_mem_update(void) - static void - vc_mem_get_size(void) - { -- vc_mem_update(); - } - - /**************************************************************************** -@@ -179,7 +136,6 @@ static void vc_mem_update(void) - static void - vc_mem_get_base(void) - { -- vc_mem_update(); - } - - /**************************************************************************** -@@ -191,7 +147,6 @@ static void vc_mem_update(void) - int - vc_mem_get_current_size(void) - { -- vc_mem_get_size(); - return mm_vc_mem_size; - } - -@@ -382,25 +337,26 @@ static void vc_mem_update(void) - - /**************************************************************************** - * --* vc_mem_connected_init --* --* This function is called once the videocore has been connected. -+* vc_mem_init - * - ***************************************************************************/ - --void --vc_mem_connected_init(void) -+static int __init -+vc_mem_init(void) - { - int rc = -EFAULT; - struct device *dev; - - LOG_DBG("%s: called", __func__); - -+ mm_vc_mem_phys_addr = phys_addr; -+ mm_vc_mem_size = mem_size; -+ mm_vc_mem_base = mem_base; -+ - vc_mem_get_size(); - -- printk("vc-mem: mm_vc_mem_phys_addr = 0x%08lx\n", mm_vc_mem_phys_addr); -- printk("vc-mem: mm_vc_mem_size = 0x%08x (%u MiB)\n", -- mm_vc_mem_size, mm_vc_mem_size / (1024 * 1024)); -+ printk("vc-mem: phys_addr:0x%08lx mem_base=0x%08x mem_size:0x%08x(%u MiB)\n", -+ mm_vc_mem_phys_addr, mm_vc_mem_base, mm_vc_mem_size, mm_vc_mem_size / (1024 * 1024)); - - if ((rc = alloc_chrdev_region(&vc_mem_devnum, 0, 1, DRIVER_NAME)) < 0) { - LOG_ERR("%s: alloc_chrdev_region failed (rc=%d)", __func__, rc); -@@ -440,7 +396,7 @@ static void vc_mem_update(void) - #endif - - vc_mem_inited = 1; -- return; -+ return 0; - - out_device_destroy: - device_destroy(vc_mem_class, vc_mem_devnum); -@@ -456,23 +412,7 @@ static void vc_mem_update(void) - unregister_chrdev_region(vc_mem_devnum, 1); - - out_err: -- return; --} -- --/**************************************************************************** --* --* vc_mem_init --* --***************************************************************************/ -- --static int __init --vc_mem_init(void) --{ -- printk(KERN_INFO "vc-mem: Videocore memory driver\n"); -- -- //vchiq_add_connected_callback(vc_mem_connected_init); -- -- return 0; -+ return -1; - } - - /**************************************************************************** -@@ -501,3 +441,8 @@ static void vc_mem_update(void) - module_exit(vc_mem_exit); - MODULE_LICENSE("GPL"); - MODULE_AUTHOR("Broadcom Corporation"); -+ -+module_param(phys_addr, uint, 0644); -+module_param(mem_size, uint, 0644); -+module_param(mem_base, uint, 0644); -+ --- -1.8.4 - - -From c08bb320f3a9d877dee7e5bf20e19494f0da7e8b Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 5 Oct 2012 22:44:47 +0100 -Subject: [PATCH 046/128] Support dummy vc-mem ioctl used by vcdbg - ---- - arch/arm/mach-bcm2708/include/mach/vc_mem.h | 1 + - arch/arm/mach-bcm2708/vc_mem.c | 14 ++++++++++++++ - 2 files changed, 15 insertions(+) - -diff --git a/arch/arm/mach-bcm2708/include/mach/vc_mem.h b/arch/arm/mach-bcm2708/include/mach/vc_mem.h -index 9d41c3a..d29125b 100644 ---- a/arch/arm/mach-bcm2708/include/mach/vc_mem.h -+++ b/arch/arm/mach-bcm2708/include/mach/vc_mem.h -@@ -22,6 +22,7 @@ - #define VC_MEM_IOC_MEM_PHYS_ADDR _IOR( VC_MEM_IOC_MAGIC, 0, unsigned long ) - #define VC_MEM_IOC_MEM_SIZE _IOR( VC_MEM_IOC_MAGIC, 1, unsigned int ) - #define VC_MEM_IOC_MEM_BASE _IOR( VC_MEM_IOC_MAGIC, 2, unsigned int ) -+#define VC_MEM_IOC_MEM_LOAD _IOR( VC_MEM_IOC_MAGIC, 3, unsigned int ) - - #if defined( __KERNEL__ ) - #define VC_MEM_TO_ARM_ADDR_MASK 0x3FFFFFFF -diff --git a/arch/arm/mach-bcm2708/vc_mem.c b/arch/arm/mach-bcm2708/vc_mem.c -index 057f74f..aeae4d5 100644 ---- a/arch/arm/mach-bcm2708/vc_mem.c -+++ b/arch/arm/mach-bcm2708/vc_mem.c -@@ -208,6 +208,20 @@ - } - break; - } -+ case VC_MEM_IOC_MEM_LOAD: -+ { -+ // Get the videocore memory base -+ vc_mem_get_base(); -+ -+ LOG_DBG("%s: VC_MEM_IOC_MEM_LOAD=%u", __func__, -+ mm_vc_mem_base); -+ -+ if (copy_to_user((void *) arg, &mm_vc_mem_base, -+ sizeof (mm_vc_mem_base)) != 0) { -+ rc = -EFAULT; -+ } -+ break; -+ } - default: - { - return -ENOTTY; --- -1.8.4 - - -From 476b7cf40b4034f008d73968edd08221b4a8c122 Mon Sep 17 00:00:00 2001 +From 280e59db6f9b9bc9f55dd0f651c667f05591c0de Mon Sep 17 00:00:00 2001 From: dero Date: Mon, 19 Nov 2012 12:46:06 +0100 -Subject: [PATCH 047/128] Lazy CRC quirk: Implemented retrying mechanisms for +Subject: [PATCH 038/104] 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) @@ -92003,17 +91818,17 @@ index ffd7310..3556ed3 100644 1.8.4 -From 33cd60ac5e4f022666a2a3d2de5f78527e89b9b0 Mon Sep 17 00:00:00 2001 +From 7f31c743d40ec1185db2b57707d3bcde6f7531fe Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 28 Mar 2013 00:10:32 +0000 -Subject: [PATCH 048/128] bcm2708: Add vc_cma driver to enable use of CMA +Subject: [PATCH 039/104] bcm2708: Add vc_cma driver to enable use of CMA --- - arch/arm/mach-bcm2708/bcm2708.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) + arch/arm/mach-bcm2708/bcm2708.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index e010515..9d38d40 100644 +index 5a7437b..13b91de 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -60,6 +60,11 @@ @@ -92028,7 +91843,7 @@ index e010515..9d38d40 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 -@@ -634,6 +639,9 @@ void __init bcm2708_init(void) +@@ -693,6 +698,9 @@ void __init bcm2708_init(void) { int i; @@ -92038,27 +91853,24 @@ index e010515..9d38d40 100644 printk("bcm2708.uart_clock = %d\n", uart_clock); pm_power_off = bcm2708_power_off; -@@ -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. - */ -+#if !defined(CONFIG_BCM_VC_CMA) - init_dma_coherent_pool_size(SZ_2M); -+#endif -+} -+ +@@ -889,6 +897,13 @@ void __init bcm2708_init_early(void) + init_dma_coherent_pool_size(SZ_4M); + } + +static void __init board_reserve(void) +{ +#if defined(CONFIG_BCM_VC_CMA) + vc_cma_reserve(); +#endif - } - ++} ++ MACHINE_START(BCM2708, "BCM2708") -@@ -837,6 +854,7 @@ void __init bcm2708_init_early(void) - .init_time = bcm2708_timer_init, + /* Maintainer: Broadcom Europe Ltd. */ + .map_io = bcm2708_map_io, +@@ -897,6 +912,7 @@ void __init bcm2708_init_early(void) .init_machine = bcm2708_init, .init_early = bcm2708_init_early, + .restart = bcm2708_restart, + .reserve = board_reserve, MACHINE_END @@ -92067,91 +91879,10 @@ index e010515..9d38d40 100644 1.8.4 -From 172d9d6cdfe39e39480e2347f8ded3e6781b79a4 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Wed, 24 Oct 2012 22:00:43 +0100 -Subject: [PATCH 049/128] Fix reboot with new restart method of machine driver - ---- - arch/arm/mach-bcm2708/bcm2708.c | 18 +++++++++++++++++- - arch/arm/mach-bcm2708/include/mach/system.h | 15 --------------- - 2 files changed, 17 insertions(+), 16 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 9d38d40..9f456e9 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -624,6 +624,21 @@ int __init bcm_register_device(struct platform_device *pdev) - return ret; - } - -+static void bcm2708_restart(char mode, const char *cmd) -+{ -+ uint32_t pm_rstc, pm_wdog; -+ uint32_t timeout = 10; -+ -+ /* Setup watchdog for reset */ -+ 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)); -+} -+ - /* 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) - { -@@ -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)); - /* continue with normal reset mechanism */ -- arch_reset(0, ""); -+ bcm2708_restart(0, ""); - } - - void __init bcm2708_init(void) -@@ -855,6 +870,7 @@ static void __init board_reserve(void) - .init_machine = bcm2708_init, - .init_early = bcm2708_init_early, - .reserve = board_reserve, -+ .restart = bcm2708_restart, - MACHINE_END - - module_param(boardrev, uint, 0644); -diff --git a/arch/arm/mach-bcm2708/include/mach/system.h b/arch/arm/mach-bcm2708/include/mach/system.h -index bc9d458..2d0b821 100644 ---- a/arch/arm/mach-bcm2708/include/mach/system.h -+++ b/arch/arm/mach-bcm2708/include/mach/system.h -@@ -35,19 +35,4 @@ static inline void arch_idle(void) - cpu_do_idle(); - } - --static inline void arch_reset(char mode, const char *cmd) --{ -- uint32_t pm_rstc, pm_wdog; -- uint32_t timeout = 10; -- -- /* Setup watchdog for reset */ -- 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)); --} -- - #endif --- -1.8.4 - - -From 07a0dddea2d5ef264a9876097212416dcce628d4 Mon Sep 17 00:00:00 2001 +From b6d5536d19f217c75ba95957ea208e64e4994d03 Mon Sep 17 00:00:00 2001 From: Gordon Hollingworth Date: Sun, 4 Nov 2012 15:55:01 +0000 -Subject: [PATCH 050/128] Make sure we wait for the reset to finish +Subject: [PATCH 040/104] Make sure we wait for the reset to finish --- drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 2 ++ @@ -92174,31 +91905,32 @@ index 3e762e2..e8c91e7 100644 1.8.4 -From 9cbb6489bafdf573a88a66fb5088b43ee14dbd91 Mon Sep 17 00:00:00 2001 +From baf31097e790a22884aa4d40eb61bfa6207e4304 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 19 Nov 2012 18:27:05 +0000 -Subject: [PATCH 051/128] Add Simon Hall's dma helper module, useful in future +Subject: [PATCH 041/104] Add Simon Hall's dma helper module, useful in future for X acceleration --- - arch/arm/mach-bcm2708/Kconfig | 7 + + arch/arm/mach-bcm2708/Kconfig | 8 + 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(+) + 5 files changed, 1286 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 +index a35ff89..b85bb8d 100644 --- a/arch/arm/mach-bcm2708/Kconfig +++ b/arch/arm/mach-bcm2708/Kconfig -@@ -31,4 +31,11 @@ config BCM2708_NOL2CACHE +@@ -38,4 +38,12 @@ config BCM2708_SPIDEV + default y help - Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt. - + Binds spidev driver to the SPI0 master ++ +config BCM2708_DMAER + tristate "BCM2708 DMA helper" + depends on MACH_BCM2708 @@ -93515,10 +93247,10 @@ index 0000000..5cb1335 1.8.4 -From eb2dadf3845bde75b1b711ffc21b4658eea0136f Mon Sep 17 00:00:00 2001 +From 8998330a2562f6e80efbf680f51ba05e538fb8d7 Mon Sep 17 00:00:00 2001 From: Aron Szabo Date: Sat, 16 Jun 2012 12:15:55 +0200 -Subject: [PATCH 052/128] lirc: added support for RaspberryPi GPIO +Subject: [PATCH 042/104] lirc: added support for RaspberryPi GPIO --- drivers/staging/media/lirc/Kconfig | 6 + @@ -94253,250 +93985,10 @@ index 0000000..96acab0 1.8.4 -From 37a02ecdf5e5a31204a2d60851159ec8502ca113 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 25 Nov 2012 18:28:09 +0000 -Subject: [PATCH 053/128] Allow mailbox driver to be called from user code - though ioctl - ---- - 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.4 - - -From 423194f123a48ac7ea9701953a628819a945bb4a Mon Sep 17 00:00:00 2001 +From 9025bc52c25cf7526ef8b204e9a6dbd620d31529 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 11 Dec 2012 18:23:03 +0000 -Subject: [PATCH 054/128] Default to dwc_otp.lpm_enable=0 +Subject: [PATCH 043/104] Default to dwc_otp.lpm_enable=0 --- drivers/usb/host/dwc_otg/dwc_otg_driver.c | 2 +- @@ -94519,81 +94011,10 @@ index d353a9a..cea8fcb 100644 1.8.4 -From 0e8edaeb2cf8026e315d601e290fd21e2dd90d14 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 11 Dec 2012 19:04:27 +0000 -Subject: [PATCH 055/128] 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.4 - - -From 9bc57848e675e1f4a2fd27c89da6b6a51be0b778 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 7 Jan 2013 21:34:59 +0000 -Subject: [PATCH 056/128] 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.4 - - -From 10196c12386830dba0daa29901bdf0e5d3b705ea Mon Sep 17 00:00:00 2001 +From 6fc2bf7f9e2ec3d6b85176c32963119f23f1e614 Mon Sep 17 00:00:00 2001 From: P33M Date: Wed, 9 Jan 2013 16:12:04 +0000 -Subject: [PATCH 057/128] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent +Subject: [PATCH 044/104] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent kernel memory corruption, escalating to OOPS under high USB load. --- @@ -94630,10 +94051,10 @@ index e6b2a7b..b337e1b 100644 1.8.4 -From d34a02ffaa10eabc39a2e580432392a9c9099151 Mon Sep 17 00:00:00 2001 +From 99a55d02892d5ab84fb914f23a7140e67ea7c605 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 21 Jan 2013 23:03:53 +0000 -Subject: [PATCH 058/128] Return error value from bcm2708_setup_state. Thanks +Subject: [PATCH 045/104] Return error value from bcm2708_setup_state. Thanks notro --- @@ -94656,10 +94077,10 @@ index 9f1580e..8513704 100644 1.8.4 -From 72ac84c037e216d7dc7937f9050406f0652f851c Mon Sep 17 00:00:00 2001 +From 5d5e954ae142026c62eb50f558700624b6f09dce Mon Sep 17 00:00:00 2001 From: Kamal Mostafa Date: Mon, 22 Oct 2012 15:52:44 -0700 -Subject: [PATCH 059/128] spi/spi-bcm2708: respect per-transfer SPI clock +Subject: [PATCH 046/104] spi/spi-bcm2708: respect per-transfer SPI clock speed_hz value The bcm2708 SPI driver's bcm2708_process_transfer() was ignoring the @@ -94704,10 +94125,10 @@ index 8513704..b74aa32 100644 1.8.4 -From af51f2066bd56018573772ebcdf9c81b8cf4cb00 Mon Sep 17 00:00:00 2001 +From 95020b63fdbaaa3a48402957a8cfde8ef5130490 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 00:51:55 +0100 -Subject: [PATCH 060/128] Add hwrng (hardware random number generator) driver +Subject: [PATCH 047/104] Add hwrng (hardware random number generator) driver --- arch/arm/mach-bcm2708/include/mach/platform.h | 1 + @@ -94885,112 +94306,10 @@ index 0000000..1ffa7d7 1.8.4 -From 60e83e4751f39809ec72e0a6093552dcf1022c14 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 7 Feb 2013 17:04:13 +0000 -Subject: [PATCH 061/128] 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.4 - - -From 99f1db0e193e8521dcba362d4f5e15ef1e71addc Mon Sep 17 00:00:00 2001 +From 024a3f13cd86b82618538b202cf260b2a218be97 Mon Sep 17 00:00:00 2001 From: Technion Date: Mon, 11 Feb 2013 22:08:53 +1100 -Subject: [PATCH 062/128] Changed wording on logging. Previously, we received +Subject: [PATCH 048/104] 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. @@ -95025,10 +94344,10 @@ index 1ee6cf3..90228f9 100644 1.8.4 -From 6d346c3c67eb647633a4dbfd65ffb44b0382367d Mon Sep 17 00:00:00 2001 +From 90baf0433bfc52f92b8db0c49fc29382684fe9e1 Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 15 Feb 2013 22:36:47 +0000 -Subject: [PATCH 063/128] dwc_otg: Fix unsafe access of QTD during URB enqueue +Subject: [PATCH 049/104] 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 @@ -95115,10 +94434,10 @@ index b337e1b..b3e6e52 100644 1.8.4 -From 118880c3f9a8803a81a3ba8d0f66807f446d3a36 Mon Sep 17 00:00:00 2001 +From b74f706eb8624818db4cc9e19296bd3dc029950f Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 15 Feb 2013 22:38:40 +0000 -Subject: [PATCH 064/128] dwc_otg: Fix incorrect URB allocation error handling +Subject: [PATCH 050/104] 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 @@ -95159,10 +94478,10 @@ index e653d84..fcec97f 100644 1.8.4 -From bb5c96ecd67b7aacd070e8254e63735f354763e6 Mon Sep 17 00:00:00 2001 +From 50115992c8c3e8e4a334ea37368eecb57106f11a Mon Sep 17 00:00:00 2001 From: pjennings Date: Wed, 20 Feb 2013 17:51:43 -0600 -Subject: [PATCH 065/128] Added inverted transmitter support +Subject: [PATCH 051/104] Added inverted transmitter support --- drivers/staging/media/lirc/lirc_rpi.c | 17 +++++++++++------ @@ -95243,10 +94562,10 @@ index 96acab0..5bb0dfe 100644 1.8.4 -From d78d43172cb5d0eb6a7d233a00c006d0fe3e3c74 Mon Sep 17 00:00:00 2001 +From 3f634523c9cb7ab3dad0a53a5b64c75102cd7b96 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 24 Feb 2013 16:30:57 +0000 -Subject: [PATCH 066/128] Add retry on error and tidy of temperature driver +Subject: [PATCH 052/104] Add retry on error and tidy of temperature driver --- drivers/thermal/bcm2835-thermal.c | 78 ++++++++++++++------------------------- @@ -95373,10 +94692,10 @@ index 3f9a733..85fceb5 100644 1.8.4 -From 1395c5d0d6c2a4fff08d664d942fd05c0eafd2b0 Mon Sep 17 00:00:00 2001 +From 920093eb87ec2f0e490a5fab13b2e13d135a2daa Mon Sep 17 00:00:00 2001 From: P33M Date: Thu, 28 Feb 2013 16:52:51 +0000 -Subject: [PATCH 067/128] dwc_otg: fix potential use-after-free case in +Subject: [PATCH 053/104] dwc_otg: fix potential use-after-free case in interrupt handler If a transaction had previously aborted, certain interrupts are @@ -95408,10 +94727,10 @@ index e8c91e7..0c81a64 100644 1.8.4 -From 0b2cb544dfbe4b06d881316ae40bbe2cc3297d35 Mon Sep 17 00:00:00 2001 +From ae8185e36b5b474de6a8f053b494432b693ced7a Mon Sep 17 00:00:00 2001 From: P33M Date: Sun, 3 Mar 2013 14:45:53 +0000 -Subject: [PATCH 068/128] dwc_otg: add handling of SPLIT transaction data +Subject: [PATCH 054/104] dwc_otg: add handling of SPLIT transaction data toggle errors Previously a data toggle error on packets from a USB1.1 device behind @@ -95466,10 +94785,10 @@ index 0c81a64..16e8c6c 100644 1.8.4 -From 012513add8c0926fbbb9de805364d602fd4c5cf7 Mon Sep 17 00:00:00 2001 +From 36a1ff9b3debcd596f531feaeb0ee92879cba31c Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 1 May 2013 21:14:28 +0100 -Subject: [PATCH 069/128] Add bitbanging pullups, use them for w1-gpio +Subject: [PATCH 055/104] Add bitbanging pullups, use them for w1-gpio Allows parasite power to work, uses module option pullup=1 --- @@ -95608,10 +94927,10 @@ index e10acc2..667fdd5 100644 1.8.4 -From 3edb4047c910bf24cf99a5341534559dced5b820 Mon Sep 17 00:00:00 2001 +From e3126c88f65577ebb667c943c1257a8147474fa5 Mon Sep 17 00:00:00 2001 From: notro Date: Sat, 26 Jan 2013 20:38:03 +0100 -Subject: [PATCH 070/128] spi-bcm2708: add 9-bit support using LoSSI mode +Subject: [PATCH 056/104] spi-bcm2708: add 9-bit support using LoSSI mode --- drivers/spi/spi-bcm2708.c | 30 ++++++++++++++++++++++++++++-- @@ -95681,10 +95000,10 @@ index b74aa32..abaa5a6 100644 1.8.4 -From 5ff5001e59884f57e24b0a8f524ab414a5511c60 Mon Sep 17 00:00:00 2001 +From 2bb563ade7d8343bd29ec55f350d6e4cca0a1b4f Mon Sep 17 00:00:00 2001 From: P33M Date: Thu, 21 Mar 2013 19:36:17 +0000 -Subject: [PATCH 071/128] dwc_otg: implement tasklet for returning URBs to +Subject: [PATCH 057/104] dwc_otg: implement tasklet for returning URBs to usbcore hcd layer The dwc_otg driver interrupt handler for transfer completion will spend @@ -95926,10 +95245,10 @@ index 9702f81..7bb133a 100644 1.8.4 -From 303fd33442fce3a754a030fe986e3876b00b464d Mon Sep 17 00:00:00 2001 +From f971c63abf1f3cf07b53b135908326201c208afd Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 16 Apr 2013 15:36:01 +0100 -Subject: [PATCH 073/128] Add v6wbi_flush_kern_tlb_range to allow zsmalloc to +Subject: [PATCH 059/104] Add v6wbi_flush_kern_tlb_range to allow zsmalloc to be built as a module --- @@ -95952,10 +95271,10 @@ index 60d3b73..cba4d28 100644 1.8.4 -From df0d2dc0b7d2bb0d80643c3f467d3b9315d692ed Mon Sep 17 00:00:00 2001 +From 16cc4b289ed75acd033eae582a561e20a254650f Mon Sep 17 00:00:00 2001 From: P33M Date: Mon, 22 Apr 2013 00:08:36 +0100 -Subject: [PATCH 074/128] dwc_otg: fix NAK holdoff and allow on split +Subject: [PATCH 060/104] dwc_otg: fix NAK holdoff and allow on split transactions only This corrects a bug where if a single active non-periodic endpoint @@ -96025,10 +95344,10 @@ index 91eefecd..eaa8f38 100644 1.8.4 -From 52bfaf7c54333b859d776007bb23be8afaac3643 Mon Sep 17 00:00:00 2001 +From da7e5ae895349c513b4cb78432114e528f942be5 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 26 Apr 2013 10:08:31 -0700 -Subject: [PATCH 075/128] Merge pull request #286 from +Subject: [PATCH 061/104] Merge pull request #286 from martinezjavier/rpi-3.6.y-dev add mmap support and some cleanups to bcm2835 ALSA driver @@ -96509,10 +95828,10 @@ index b966e28..08c763d 100755 1.8.4 -From 240b3c10d19371f6c3fb0963133ef82620e21978 Mon Sep 17 00:00:00 2001 +From 0fb5f97e8545da135182d9a2d71e4da42c5b2b87 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 7 May 2013 22:20:24 +0100 -Subject: [PATCH 076/128] Add quick config. +Subject: [PATCH 062/104] Add quick config. This is designed for quick compiling when developing. No modules are needed and it includes all Pi specific drivers @@ -96728,10 +96047,10 @@ index 0000000..e5efe75 1.8.4 -From afb00d461e0fa47b8d28fbc8fb5193b367b69255 Mon Sep 17 00:00:00 2001 +From bae4d6a1aa171a2c3ca2ced6a9bfd2242e876af8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 10 May 2013 19:42:38 +0100 -Subject: [PATCH 077/128] mmc: suppress sdcard warnings we are happy about by +Subject: [PATCH 063/104] mmc: suppress sdcard warnings we are happy about by default --- @@ -96797,97 +96116,10 @@ index 3556ed3..c2409b9 100644 1.8.4 -From cfe5734cc5f1f0b4f5d30ab7bdd0ba127cb3b80b Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 14 May 2013 11:42:25 +0100 -Subject: [PATCH 078/128] Allow reboot=q on command line to set a flag that - bootcode.bin can use to boot from alternate partition - ---- - arch/arm/mach-bcm2708/bcm2708.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 87fd348..1ed4d73 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -629,6 +629,15 @@ static void bcm2708_restart(char mode, const char *cmd) - uint32_t pm_rstc, pm_wdog; - uint32_t timeout = 10; - -+ /* For quick reset notification add reboot=q to cmdline -+ */ -+ if(mode == 'q') -+ { -+ uint32_t pm_rsts = readl(__io_address(PM_RSTS)); -+ pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRQ_SET; -+ writel(pm_rsts, __io_address(PM_RSTS)); -+ } -+ - /* Setup watchdog for reset */ - pm_rstc = readl(__io_address(PM_RSTC)); - --- -1.8.4 - - -From a0ceb43be3719e12c1e4dbde8e889d809ef8a16f Mon Sep 17 00:00:00 2001 -From: hutorny -Date: Mon, 13 May 2013 10:26:14 +0300 -Subject: [PATCH 080/128] Update bcm2708.c to use CONFIG_BCM2708_SPIDEV rather - than CONFIG_SPI - ---- - arch/arm/mach-bcm2708/Kconfig | 7 +++++++ - arch/arm/mach-bcm2708/bcm2708.c | 4 ++-- - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/mach-bcm2708/Kconfig b/arch/arm/mach-bcm2708/Kconfig -index 2a24db6..1dfd0a4 100644 ---- a/arch/arm/mach-bcm2708/Kconfig -+++ b/arch/arm/mach-bcm2708/Kconfig -@@ -38,4 +38,11 @@ config BCM2708_DMAER - help - Enable DMA helper for accelerating X composition - -+config BCM2708_SPIDEV -+ bool "Bind spidev to SPI0 master" -+ depends on MACH_BCM2708 -+ depends on SPI -+ default y -+ help -+ Binds spidev driver to the SPI0 master - endmenu -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 1ed4d73..68c577a 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -545,7 +545,7 @@ struct platform_device bcm2708_powerman_device = { - .resource = bcm2708_spi_resources, - }; - --#ifdef CONFIG_SPI -+#ifdef CONFIG_BCM2708_SPIDEV - static struct spi_board_info bcm2708_spi_devices[] = { - #ifdef CONFIG_SPI_SPIDEV - { -@@ -715,7 +715,7 @@ void __init bcm2708_init(void) - system_rev = boardrev; - system_serial_low = serial; - --#ifdef CONFIG_SPI -+#ifdef CONFIG_BCM2708_SPIDEV - spi_register_board_info(bcm2708_spi_devices, - ARRAY_SIZE(bcm2708_spi_devices)); - #endif --- -1.8.4 - - -From 3a899ed28793f1283f4235c6faf4466b48a1d98e Mon Sep 17 00:00:00 2001 +From d7ed51f5d768158ca7eb4dee423ed7f797d38f81 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 8 Jun 2013 22:14:13 +0100 -Subject: [PATCH 082/128] Only init gpio pins of selected i2c bus +Subject: [PATCH 066/104] Only init gpio pins of selected i2c bus --- drivers/i2c/busses/i2c-bcm2708.c | 8 +++++--- @@ -96931,10 +96163,10 @@ index 3391889..edc90c0 100644 1.8.4 -From 59c74bb0786fbdd6d545f7527078aa31a9c1b4b0 Mon Sep 17 00:00:00 2001 +From f2a51534c533eb1198cb6c76d409ef0eb8442807 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Thu, 13 Jun 2013 16:46:54 +0100 -Subject: [PATCH 083/128] Avoid responding to unexpected I2C interrupts +Subject: [PATCH 067/104] Avoid responding to unexpected I2C interrupts --- drivers/i2c/busses/i2c-bcm2708.c | 6 ++++++ @@ -96968,10 +96200,10 @@ index edc90c0..33f4e7d 100644 1.8.4 -From 7882509ec4ef466e5d5a16bc3864a43e1077aa6d Mon Sep 17 00:00:00 2001 +From b4879875090a00ea0df948608ddcd7cf8ce81ba5 Mon Sep 17 00:00:00 2001 From: Harm Hanemaaijer Date: Thu, 20 Jun 2013 20:21:39 +0200 -Subject: [PATCH 084/128] Speed up console framebuffer imageblit function +Subject: [PATCH 068/104] Speed up console framebuffer imageblit function Especially on platforms with a slower CPU but a relatively high framebuffer fill bandwidth, like current ARM devices, the existing @@ -97183,10 +96415,10 @@ index baed57d..ce91bf2 100644 1.8.4 -From de2d6715c08e6a23622dc412c484908edb5c709e Mon Sep 17 00:00:00 2001 +From f8d31723061c62e5b1021b9eeebc8ec9e36cb5cf Mon Sep 17 00:00:00 2001 From: Siarhei Siamashka Date: Mon, 17 Jun 2013 13:32:11 +0300 -Subject: [PATCH 085/128] fbdev: add FBIOCOPYAREA ioctl +Subject: [PATCH 069/104] fbdev: add FBIOCOPYAREA ioctl Based on the patch authored by Ali Gholami Rudi at https://lkml.org/lkml/2009/7/13/153 @@ -97282,10 +96514,10 @@ index fb795c3..fa72af0 100644 1.8.4 -From 4cdd1750de037d1c743f66959a8455fe20fd46da Mon Sep 17 00:00:00 2001 +From 9790ebeef4e67feee2364b6c6e6241e5270a23ab Mon Sep 17 00:00:00 2001 From: Siarhei Siamashka Date: Mon, 17 Jun 2013 16:00:25 +0300 -Subject: [PATCH 086/128] bcm2708_fb: DMA acceleration for fb_copyarea +Subject: [PATCH 070/104] bcm2708_fb: DMA acceleration for fb_copyarea Based on http://www.raspberrypi.org/phpBB3/viewtopic.php?p=62425#p62425 Also used Simon's dmaer_master module as a reference for tweaking DMA @@ -97529,10 +96761,10 @@ index 08d9238..c10c5ee 100644 1.8.4 -From 5f723a2cc4caa97d4de4092fc329692733483547 Mon Sep 17 00:00:00 2001 +From 87f7101032e62f17eea0b2ba2b8f6c13dc0b444a Mon Sep 17 00:00:00 2001 From: Mike Bradley Date: Mon, 17 Jun 2013 11:31:42 -0700 -Subject: [PATCH 087/128] dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock +Subject: [PATCH 071/104] dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock held in completion handler usb_hcd_unlink_urb_from_ep must be called with the HCD lock held. Calling it @@ -97619,10 +96851,10 @@ index 7bb133a..fef557d 100644 1.8.4 -From 62db107c49f571e7d76424cb335ca3432bd9834c Mon Sep 17 00:00:00 2001 +From c033ecd660e08776a2bdd1b72eef166ee2cecf75 Mon Sep 17 00:00:00 2001 From: Gordon Hollingworth Date: Thu, 4 Apr 2013 11:05:21 +0100 -Subject: [PATCH 088/128] USB fix using a FIQ to implement split transactions +Subject: [PATCH 072/104] USB fix using a FIQ to implement split transactions This commit adds a FIQ implementaion that schedules the split transactions using a FIQ so we don't get @@ -99041,10 +98273,10 @@ index 27061d3..9720937 100644 1.8.4 -From 0df58aa896f5745ba477f022e4457f32b8811b28 Mon Sep 17 00:00:00 2001 +From 86e8d677baae77a45a6cc491ce8927561e134b85 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 11:39:46 +0100 -Subject: [PATCH 089/128] dwc_otg: fix device attributes and avoid kernel +Subject: [PATCH 073/104] dwc_otg: fix device attributes and avoid kernel warnings on boot --- @@ -99113,10 +98345,10 @@ index 95eb7f8..9602fda 100644 1.8.4 -From 76254ae1589e718f3af4180838f545c829569036 Mon Sep 17 00:00:00 2001 +From ac04ff8fad23b4d173a669cc4dd15274f64115a8 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 3 Jul 2013 13:55:00 +0100 -Subject: [PATCH 090/128] hack: fix for incorrect uart fifo size detection +Subject: [PATCH 074/104] hack: fix for incorrect uart fifo size detection --- drivers/tty/serial/amba-pl011.c | 2 +- @@ -99139,409 +98371,10 @@ index e2774f9..5254f10 100644 1.8.4 -From 583d7cdfc7390d6c9774581c848f0e080c39a4fd Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sat, 6 Jul 2013 15:25:50 +0100 -Subject: [PATCH 091/128] Re-enable RTL8192CU driver - ---- - arch/arm/configs/bcmrpi_defconfig | 230 +++++++------------------------------- - 1 file changed, 42 insertions(+), 188 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index c1afa47..f488d9e 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -1,12 +1,13 @@ - # CONFIG_ARM_PATCH_PHYS_VIRT is not set --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_IKCONFIG=y - CONFIG_IKCONFIG_PROC=y - CONFIG_CGROUP_FREEZER=y -@@ -28,10 +29,10 @@ 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_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 -@@ -98,10 +99,8 @@ 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 -@@ -167,12 +166,7 @@ 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 -@@ -191,7 +185,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 -@@ -282,8 +275,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 -@@ -315,7 +306,6 @@ 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=m -@@ -324,45 +314,16 @@ CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set - CONFIG_MD=y - 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_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_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 -@@ -389,14 +350,32 @@ 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_B43=m -+CONFIG_B43LEGACY=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 +384,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 -@@ -440,115 +418,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_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 -@@ -575,8 +444,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 -@@ -607,7 +474,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,10 +483,10 @@ 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 -@@ -639,8 +505,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 -@@ -717,10 +581,6 @@ 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_RTC_CLASS=y - CONFIG_RTC_DRV_DS1307=m - CONFIG_RTC_DRV_DS1374=m -@@ -798,7 +658,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 -@@ -812,9 +671,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 -@@ -862,7 +718,6 @@ 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 -@@ -878,7 +733,6 @@ 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 --- -1.8.4 - - -From 0a228f7270f081824e1400dd25be0b4d3fa2fa48 Mon Sep 17 00:00:00 2001 +From 53011c10f7477d80dbae40b1be6dfad150e6c7eb Mon Sep 17 00:00:00 2001 From: popcornmix Date: Wed, 10 Jul 2013 23:53:31 +0100 -Subject: [PATCH 093/128] sdhci-bcm2807: Increase sync_after_dma timeout +Subject: [PATCH 076/104] sdhci-bcm2807: Increase sync_after_dma timeout The current timeout is being hit with some cards that complete successfully with a longer timeout. The timeout is not handled well, and is believed to be a code path that causes corruption. @@ -99567,10 +98400,10 @@ index c2409b9..4770680 100644 1.8.4 -From a469185a8896b36264a4d8dfc5e7e2bf1ba825bf Mon Sep 17 00:00:00 2001 +From b78d6b0c22e37b261d97bb85355c25212900472a Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 15 Jul 2013 23:55:52 +0100 -Subject: [PATCH 094/128] dcw_otg: avoid logging function that can cause panics +Subject: [PATCH 077/104] dcw_otg: avoid logging function that can cause panics See: https://github.com/raspberrypi/firmware/issues/21 Thanks to cleverca22 for fix @@ -99595,10 +98428,10 @@ index 9602fda..c6966af 100644 1.8.4 -From e1565528271c4aaca022d070f4a5f2ecf3452855 Mon Sep 17 00:00:00 2001 +From 4b7a326bf945f1a53acdc63a687bc0bd3c08cc32 Mon Sep 17 00:00:00 2001 From: P33M Date: Sat, 13 Jul 2013 20:41:26 +0100 -Subject: [PATCH 095/128] dwc_otg: mask correct interrupts after transaction +Subject: [PATCH 078/104] dwc_otg: mask correct interrupts after transaction error recovery The dwc_otg driver will unmask certain interrupts on a transaction @@ -99665,10 +98498,10 @@ index e8b4d35..27b673f 100644 1.8.4 -From b335be503756e3e832925c30a073f6b5b807e551 Mon Sep 17 00:00:00 2001 +From 7a6c7797d2c83808199eaf6df48ce5367d126a1a Mon Sep 17 00:00:00 2001 From: P33M Date: Sat, 13 Jul 2013 21:48:41 +0100 -Subject: [PATCH 096/128] dwc_otg: fiq: prevent FIQ thrash and incorrect state +Subject: [PATCH 079/104] dwc_otg: fiq: prevent FIQ thrash and incorrect state passing to IRQ In the case of a transaction to a device that had previously aborted @@ -99725,10 +98558,10 @@ index 27b673f..d655363 100644 1.8.4 -From 0524826321cc74ddbe24fa478694d16134904667 Mon Sep 17 00:00:00 2001 +From b37d750ea3959712cafb9302372661a7a5bd8186 Mon Sep 17 00:00:00 2001 From: Gordon Hollingworth Date: Mon, 8 Jul 2013 04:12:19 +0100 -Subject: [PATCH 097/128] Fix function tracing +Subject: [PATCH 080/104] Fix function tracing --- drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 12 ++++++------ @@ -99793,10 +98626,10 @@ index d655363..765451b 100644 1.8.4 -From e992ede634f83714d59578f5014c338e06bfd50d Mon Sep 17 00:00:00 2001 +From 8847e6bbe4fc6d862ae29b39df4dd956008edae2 Mon Sep 17 00:00:00 2001 From: P33M Date: Thu, 18 Jul 2013 16:32:41 +0100 -Subject: [PATCH 098/128] dwc_otg: whitespace cleanup in dwc_otg_urb_enqueue +Subject: [PATCH 081/104] dwc_otg: whitespace cleanup in dwc_otg_urb_enqueue --- drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 59 ++++++++++++++-------------- @@ -99887,10 +98720,10 @@ index 0d6f5f4..0f72bd5 100644 1.8.4 -From 3feda0de172d9e3702c876fa6b977be65ae7f982 Mon Sep 17 00:00:00 2001 +From 38753ce72d4f10d5d0f1ed27fa691a2ba8910941 Mon Sep 17 00:00:00 2001 From: P33M Date: Thu, 18 Jul 2013 17:07:26 +0100 -Subject: [PATCH 099/128] dwc_otg: prevent OOPSes during device disconnects +Subject: [PATCH 082/104] dwc_otg: prevent OOPSes during device disconnects The dwc_otg_urb_enqueue function is thread-unsafe. In particular the access of urb->hcpriv, usb_hcd_link_urb_to_ep, dwc_otg_urb->qtd and @@ -100031,10 +98864,10 @@ index 8125307..5aed416 100644 1.8.4 -From 9b17d64a7a3c1fc6f4fc23d4ea261cf097779d7e Mon Sep 17 00:00:00 2001 +From 1dd563aff4b4740f2999447c545aaee1720d8844 Mon Sep 17 00:00:00 2001 From: P33M Date: Mon, 22 Jul 2013 14:08:26 +0100 -Subject: [PATCH 100/128] dwc_otg: prevent BUG() in TT allocation if hub +Subject: [PATCH 083/104] dwc_otg: prevent BUG() in TT allocation if hub address is > 16 A fixed-size array is used to track TT allocation. This was @@ -100124,98 +98957,10 @@ index 765451b..dbff763 100644 1.8.4 -From de05f7fa5664054adf7fe2285356a1a3f2f07036 Mon Sep 17 00:00:00 2001 -From: Alexander Kolesen -Date: Mon, 22 Jul 2013 15:23:32 +0300 -Subject: [PATCH 101/128] bcm_vc_cma: create_proc_entry replaced by proc_create - -Commit 80e928f7 kills create_proc_entry, so need to get rid if it and replace by proc_create - -drivers/char/broadcom/vc_cma/vc_cma.c: In function 'vc_cma_init': -drivers/char/broadcom/vc_cma/vc_cma.c:1088:2: error: implicit declaration of function 'create_proc_entry' [-Werror=implicit-function-declaration] -drivers/char/broadcom/vc_cma/vc_cma.c:1088:20: error: assignment makes pointer from integer without a cast [-Werror] -drivers/char/broadcom/vc_cma/vc_cma.c:1095:19: error: dereferencing pointer to incomplete type -drivers/char/broadcom/vc_cma/vc_cma.c: In function 'vc_cma_exit': -drivers/char/broadcom/vc_cma/vc_cma.c:1134:38: error: dereferencing pointer to incomplete type -cc1: all warnings being treated as errors -distcc[13074] ERROR: compile drivers/char/broadcom/vc_cma/vc_cma.c on localhost failed -make[4]: *** [drivers/char/broadcom/vc_cma/vc_cma.o] Error 1 -make[3]: *** [drivers/char/broadcom/vc_cma] Error 2 -make[2]: *** [drivers/char/broadcom] Error 2 -make[1]: *** [drivers/char] Error 2 -make: *** [drivers] Error 2 ---- - drivers/char/broadcom/vc_cma/vc_cma.c | 10 ++++------ - 1 file changed, 4 insertions(+), 6 deletions(-) - -diff --git a/drivers/char/broadcom/vc_cma/vc_cma.c b/drivers/char/broadcom/vc_cma/vc_cma.c -index 6d8b4df..fe80887 100644 ---- a/drivers/char/broadcom/vc_cma/vc_cma.c -+++ b/drivers/char/broadcom/vc_cma/vc_cma.c -@@ -1085,15 +1085,13 @@ static int vc_cma_init(void) - goto out_class_destroy; - } - -- vc_cma_proc_entry = create_proc_entry(DRIVER_NAME, 0444, NULL); -+ vc_cma_proc_entry = proc_create(DRIVER_NAME, 0444, NULL, &vc_cma_proc_fops); - if (vc_cma_proc_entry == NULL) { - rc = -EFAULT; -- LOG_ERR("%s: create_proc_entry failed", __func__); -+ LOG_ERR("%s: proc_create failed", __func__); - goto out_device_destroy; - } -- -- vc_cma_proc_entry->proc_fops = &vc_cma_proc_fops; -- -+ - vc_cma_inited = 1; - return 0; - -@@ -1131,7 +1129,7 @@ static void __exit vc_cma_exit(void) - LOG_DBG("%s: called", __func__); - - if (vc_cma_inited) { -- remove_proc_entry(vc_cma_proc_entry->name, NULL); -+ remove_proc_entry(DRIVER_NAME, NULL); - device_destroy(vc_cma_class, vc_cma_devnum); - class_destroy(vc_cma_class); - cdev_del(&vc_cma_cdev); --- -1.8.4 - - -From c5a259faa4154eb6d9bfb5884daa9893906077c1 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Tue, 23 Jul 2013 12:29:27 +0100 -Subject: [PATCH 102/128] config: Add back in CONFIG_TASKSTATS - ---- - 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 f488d9e..194c0d6 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -8,6 +8,10 @@ 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 --- -1.8.4 - - -From 986c5b6fdfea538af6c98c62f9321b0d4043bb06 Mon Sep 17 00:00:00 2001 +From 665e5df8c7f88f04e76caa71d92654edfcc99492 Mon Sep 17 00:00:00 2001 From: P33M Date: Tue, 23 Jul 2013 14:15:32 +0100 -Subject: [PATCH 103/128] dwc_otg: make channel halts with unknown state less +Subject: [PATCH 084/104] dwc_otg: make channel halts with unknown state less damaging If the IRQ received a channel halt interrupt through the FIQ @@ -100260,10 +99005,10 @@ index dbff763..488defb 100644 1.8.4 -From f39c3d8f41ac1787794412b3547cd2859fc11e27 Mon Sep 17 00:00:00 2001 +From 3cdf1108ca4ce83737dbadd774023650218914c6 Mon Sep 17 00:00:00 2001 From: P33M Date: Tue, 30 Jul 2013 09:58:48 +0100 -Subject: [PATCH 104/128] dwc_otg: fiq_split: use TTs with more granularity +Subject: [PATCH 085/104] dwc_otg: fiq_split: use TTs with more granularity This fixes certain issues with split transaction scheduling. @@ -100383,264 +99128,10 @@ index 488defb..7d521d9 100644 1.8.4 -From 98aab1108ba5b066e214d15774ba784e00f95f3c Mon Sep 17 00:00:00 2001 -From: Matthew Hails -Date: Mon, 13 May 2013 14:22:48 +0100 -Subject: [PATCH 105/128] VCHIQ: Fix mem leak of USER_SERVICE_T objects. - -The userdata for VCHIQ services created through the ioctl API is -a kmalloced structure. These objects were getting leaked, most -notably in vchiq_release(), where the service could be closed, -freed and removed from the service list before the wait-to-die -loop was entered. - -This change adds a userdata termination callback, and implements -it in the case where USER_SERVICE_T is used for the service -userdata. ---- - .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 21 +++++++++++++-------- - .../vc04_services/interface/vchiq_arm/vchiq_core.c | 6 +++++- - .../vc04_services/interface/vchiq_arm/vchiq_core.h | 5 ++++- - .../interface/vchiq_arm/vchiq_kern_lib.c | 6 ++++-- - 4 files changed, 26 insertions(+), 12 deletions(-) - -diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c -index f87bbdd..f44d4b4 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c -@@ -359,6 +359,17 @@ struct vchiq_instance_struct { - - /**************************************************************************** - * -+* user_service_free -+* -+***************************************************************************/ -+static void -+user_service_free(void *userdata) -+{ -+ kfree(userdata); -+} -+ -+/**************************************************************************** -+* - * vchiq_ioctl - * - ***************************************************************************/ -@@ -467,7 +478,7 @@ struct vchiq_instance_struct { - service = vchiq_add_service_internal( - instance->state, - &args.params, srvstate, -- instance); -+ instance, user_service_free); - - if (service != NULL) { - user_service->service = service; -@@ -490,8 +501,6 @@ struct vchiq_instance_struct { - service = NULL; - ret = (status == VCHIQ_RETRY) ? - -EINTR : -EIO; -- user_service->service = NULL; -- user_service->instance = NULL; - break; - } - } -@@ -503,7 +512,6 @@ struct vchiq_instance_struct { - sizeof(service->handle)) != 0) { - ret = -EFAULT; - vchiq_remove_service(service->handle); -- kfree(user_service); - } - - service = NULL; -@@ -796,10 +804,8 @@ struct vchiq_instance_struct { - } - - if (completion->reason == -- VCHIQ_SERVICE_CLOSED) { -+ VCHIQ_SERVICE_CLOSED) - unlock_service(service); -- kfree(user_service); -- } - - if (copy_to_user((void __user *)( - (size_t)args.buf + -@@ -1151,7 +1157,6 @@ struct vchiq_instance_struct { - spin_unlock(&msg_queue_spinlock); - - unlock_service(service); -- kfree(user_service); - } - - /* Release any closed services */ -diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -index 2efb124..9f66704 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -@@ -273,6 +273,9 @@ static const char *msg_type_str(unsigned int msg_type) - } - spin_unlock(&service_spinlock); - -+ if (service && service->userdata_term) -+ service->userdata_term(service->base.userdata); -+ - kfree(service); - } - -@@ -2476,7 +2479,7 @@ static const char *msg_type_str(unsigned int msg_type) - VCHIQ_SERVICE_T * - vchiq_add_service_internal(VCHIQ_STATE_T *state, - const VCHIQ_SERVICE_PARAMS_T *params, int srvstate, -- VCHIQ_INSTANCE_T instance) -+ VCHIQ_INSTANCE_T instance, VCHIQ_USERDATA_TERM_T userdata_term) - { - VCHIQ_SERVICE_T *service; - -@@ -2488,6 +2491,7 @@ static const char *msg_type_str(unsigned int msg_type) - service->handle = VCHIQ_SERVICE_HANDLE_INVALID; - service->ref_count = 1; - service->srvstate = VCHIQ_SRVSTATE_FREE; -+ service->userdata_term = userdata_term; - service->localport = VCHIQ_PORT_FREE; - service->remoteport = VCHIQ_PORT_FREE; - -diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h -index bddfc6a..47cdf27 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h -@@ -237,6 +237,8 @@ enum { - VCHIQ_BULK_RECEIVE - } VCHIQ_BULK_DIR_T; - -+typedef void (*VCHIQ_USERDATA_TERM_T)(void *userdata); -+ - typedef struct vchiq_bulk_struct { - short mode; - short dir; -@@ -284,6 +286,7 @@ enum { - VCHIQ_SERVICE_HANDLE_T handle; - unsigned int ref_count; - int srvstate; -+ VCHIQ_USERDATA_TERM_T userdata_term; - unsigned int localport; - unsigned int remoteport; - int public_fourcc; -@@ -534,7 +537,7 @@ struct bulk_waiter { - extern VCHIQ_SERVICE_T * - vchiq_add_service_internal(VCHIQ_STATE_T *state, - const VCHIQ_SERVICE_PARAMS_T *params, int srvstate, -- VCHIQ_INSTANCE_T instance); -+ VCHIQ_INSTANCE_T instance, VCHIQ_USERDATA_TERM_T userdata_term); - - extern VCHIQ_STATUS_T - vchiq_open_service_internal(VCHIQ_SERVICE_T *service, int client_id); -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 -index 62965c6..be9735f 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c -@@ -241,7 +241,8 @@ VCHIQ_STATUS_T vchiq_add_service( - state, - params, - srvstate, -- instance); -+ instance, -+ NULL); - - if (service) { - *phandle = service->handle; -@@ -282,7 +283,8 @@ VCHIQ_STATUS_T vchiq_open_service( - service = vchiq_add_service_internal(state, - params, - VCHIQ_SRVSTATE_OPENING, -- instance); -+ instance, -+ NULL); - - if (service) { - status = vchiq_open_service_internal(service, current->pid); --- -1.8.4 - - -From 2d3ce591bbcb9a3110768f8caef2e2465499ba4e Mon Sep 17 00:00:00 2001 -From: Philip Taylor -Date: Tue, 28 May 2013 17:20:49 +0100 -Subject: [PATCH 106/128] vchiq_util: Fix race condition in push/pop - -The lack of memory barriers could (very rarely) result in -vchiu_queue_pop reading the next value before it had been written -(getting either NULL, or a value that had been popped once already). ---- - .../vc04_services/interface/vchiq_arm/vchiq_util.c | 31 ++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - -diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c -index 03cece571b..c2eefef 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c -@@ -81,8 +81,20 @@ void vchiu_queue_push(VCHIU_QUEUE_T *queue, VCHIQ_HEADER_T *header) - } - } - -+ /* -+ * Write to queue->storage must be visible after read from -+ * queue->read -+ */ -+ smp_mb(); -+ - queue->storage[queue->write & (queue->size - 1)] = header; - -+ /* -+ * Write to queue->storage must be visible before write to -+ * queue->write -+ */ -+ smp_wmb(); -+ - queue->write++; - - up(&queue->push); -@@ -97,6 +109,13 @@ VCHIQ_HEADER_T *vchiu_queue_peek(VCHIU_QUEUE_T *queue) - } - - up(&queue->push); // We haven't removed anything from the queue. -+ -+ /* -+ * Read from queue->storage must be visible after read from -+ * queue->write -+ */ -+ smp_rmb(); -+ - return queue->storage[queue->read & (queue->size - 1)]; - } - -@@ -110,8 +129,20 @@ VCHIQ_HEADER_T *vchiu_queue_pop(VCHIU_QUEUE_T *queue) - } - } - -+ /* -+ * Read from queue->storage must be visible after read from -+ * queue->write -+ */ -+ smp_rmb(); -+ - header = queue->storage[queue->read & (queue->size - 1)]; - -+ /* -+ * Read from queue->storage must be visible before write to -+ * queue->read -+ */ -+ smp_mb(); -+ - queue->read++; - - up(&queue->pop); --- -1.8.4 - - -From 79c2b405a53a397e28d398ae2c8073bae570064a Mon Sep 17 00:00:00 2001 +From f63076e0daf170ca1ab08c99d189b2953c6a4d3f Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 2 Aug 2013 10:04:18 +0100 -Subject: [PATCH 107/128] dwc_otg: fix potential sleep while atomic during urb +Subject: [PATCH 086/104] dwc_otg: fix potential sleep while atomic during urb enqueue Fixes a regression introduced with eb1b482a. Kmalloc called from @@ -100669,10 +99160,10 @@ index ad03ff1..80690f9 100644 1.8.4 -From c7403475695a6a63f05cfa420d04fe433f354795 Mon Sep 17 00:00:00 2001 +From e36721d4652bf4330c46badb75236156812af919 Mon Sep 17 00:00:00 2001 From: P33M Date: Mon, 5 Aug 2013 11:42:12 +0100 -Subject: [PATCH 108/128] dwc_otg: make fiq_split_enable imply fiq_fix_enable +Subject: [PATCH 087/104] dwc_otg: make fiq_split_enable imply fiq_fix_enable Failing to set up the FIQ correctly would result in "IRQ 32: nobody cared" errors in dmesg. @@ -100701,10 +99192,10 @@ index 6c89a69..4735f51 100644 1.8.4 -From a6983b2d1b994b36eacb85f913132f4da923b774 Mon Sep 17 00:00:00 2001 +From 59be8006a1657e436f1091a7057f8b924fd32f54 Mon Sep 17 00:00:00 2001 From: P33M Date: Mon, 5 Aug 2013 11:47:12 +0100 -Subject: [PATCH 109/128] dwc_otg: prevent crashes on host port disconnects +Subject: [PATCH 088/104] dwc_otg: prevent crashes on host port disconnects Fix several issues resulting in crashes or inconsistent state if a Model A root port was disconnected. @@ -100862,10 +99353,10 @@ index 80690f9..0d49b50 100644 1.8.4 -From 21755f267848dd05af889357780631614fff8901 Mon Sep 17 00:00:00 2001 +From d4bcc8aabcdb460029cd1a2f9f9311f2a4e0ea18 Mon Sep 17 00:00:00 2001 From: P33M Date: Mon, 5 Aug 2013 13:17:58 +0100 -Subject: [PATCH 110/128] dwc_otg: prevent leaking URBs during enqueue +Subject: [PATCH 089/104] dwc_otg: prevent leaking URBs during enqueue A dwc_otg_urb would get leaked if the HCD enqueue function failed for any reason. Free the URB at the appropriate points. @@ -100901,44 +99392,10 @@ index 0d49b50..d3949da 100644 1.8.4 -From f8305c8cac54bbb44930e155fd5f2749f27d3e9c Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Thu, 15 Aug 2013 15:24:40 +0100 -Subject: [PATCH 111/128] Increase to CONFIG_MMC_BLOCK_MINORS=32 and enable - CONFIG_JUMP_LABEL See: https://github.com/raspberrypi/linux/pull/348 - ---- - 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 194c0d6..1a97514 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -27,6 +27,7 @@ CONFIG_SLAB=y - CONFIG_PROFILING=y - CONFIG_OPROFILE=m - CONFIG_KPROBES=y -+CONFIG_JUMP_LABEL=y - CONFIG_MODULES=y - CONFIG_MODULE_UNLOAD=y - CONFIG_MODVERSIONS=y -@@ -581,6 +582,7 @@ CONFIG_USB_TEST=m - CONFIG_USB_ISIGHTFW=m - CONFIG_USB_YUREX=m - CONFIG_MMC=y -+CONFIG_MMC_BLOCK_MINORS=32 - CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y - CONFIG_MMC_SDHCI_BCM2708=y --- -1.8.4 - - -From 903411913bead480d9ea310aa33d2f4d495b61d3 Mon Sep 17 00:00:00 2001 +From f11b0cb4931ffec56a452e46ac13f81efcfb7863 Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 8 Aug 2013 11:51:21 +0100 -Subject: [PATCH 112/128] ARM: Fix FIQ code on VIVT CPUs +Subject: [PATCH 090/104] ARM: Fix FIQ code on VIVT CPUs Aaro Koskinen reports the following oops: Installing fiq handler from c001b110, length 0x164 @@ -100992,193 +99449,10 @@ index 74ff4ba..9ac7935 100644 1.8.4 -From aa092e8a957235f6d53bf601cf2a2361e56fc51a Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 19 Aug 2013 15:21:22 +0100 -Subject: [PATCH 113/128] Changes for new NOOBS multi partition booting from - gsh - ---- - arch/arm/kernel/process.c | 2 +- - arch/arm/mach-bcm2708/bcm2708.c | 52 +++++++++++++++++++++++++++++++++-------- - 2 files changed, 43 insertions(+), 11 deletions(-) - -diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c -index 5bc2615..1b06c55 100644 ---- a/arch/arm/kernel/process.c -+++ b/arch/arm/kernel/process.c -@@ -174,7 +174,7 @@ void arch_cpu_idle(void) - default_idle(); - } - --static char reboot_mode = 'h'; -+char reboot_mode = 'h'; - - int __init reboot_setup(char *str) - { -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 68c577a..5662c1a 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -83,6 +83,7 @@ - /* command line parameters */ - static unsigned boardrev, serial; - static unsigned uart_clock; -+static unsigned reboot_part = 0; - - static void __init bcm2708_init_led(void); - -@@ -624,20 +625,42 @@ int __init bcm_register_device(struct platform_device *pdev) - return ret; - } - -+int calc_rsts(int partition) -+{ -+ return PM_PASSWORD | -+ ((partition & (1 << 0)) << 0) | -+ ((partition & (1 << 1)) << 1) | -+ ((partition & (1 << 2)) << 2) | -+ ((partition & (1 << 3)) << 3) | -+ ((partition & (1 << 4)) << 4) | -+ ((partition & (1 << 5)) << 5); -+} -+ - static void bcm2708_restart(char mode, const char *cmd) - { - uint32_t pm_rstc, pm_wdog; - uint32_t timeout = 10; -+ uint32_t pm_rsts = 0; - -- /* For quick reset notification add reboot=q to cmdline -- */ - if(mode == 'q') - { -- uint32_t pm_rsts = readl(__io_address(PM_RSTS)); -+ // NOOBS < 1.3 booting with reboot=q -+ pm_rsts = readl(__io_address(PM_RSTS)); - pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRQ_SET; -- writel(pm_rsts, __io_address(PM_RSTS)); -+ } -+ else if(mode == 'p') -+ { -+ // NOOBS < 1.3 halting -+ pm_rsts = readl(__io_address(PM_RSTS)); -+ pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRH_SET; -+ } -+ else -+ { -+ pm_rsts = calc_rsts(reboot_part); - } - -+ writel(pm_rsts, __io_address(PM_RSTS)); -+ - /* Setup watchdog for reset */ - pm_rstc = readl(__io_address(PM_RSTC)); - -@@ -651,12 +674,20 @@ static void bcm2708_restart(char mode, const char *cmd) - /* 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 */ -- bcm2708_restart(0, ""); -+ extern char reboot_mode; -+ -+ if(reboot_mode == 'q') -+ { -+ // NOOBS < v1.3 -+ bcm2708_restart('p', ""); -+ } -+ else -+ { -+ /* partition 63 is special code for HALT the bootloader knows not to boot*/ -+ reboot_part = 63; -+ /* continue with normal reset mechanism */ -+ bcm2708_restart(0, ""); -+ } - } - - void __init bcm2708_init(void) -@@ -883,3 +914,4 @@ static void __init board_reserve(void) - module_param(boardrev, uint, 0644); - module_param(serial, uint, 0644); - module_param(uart_clock, uint, 0644); -+module_param(reboot_part, uint, 0644); --- -1.8.4 - - -From 7b185a7e4e9aa2bc819758ec4bbf0392d6449734 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 30 Aug 2013 19:06:56 +0100 -Subject: [PATCH 114/128] Move to SLUB memory allocator. See: - https://github.com/raspberrypi/linux/pull/349 - ---- - arch/arm/configs/bcmrpi_defconfig | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 1a97514..fdda50b 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -23,7 +23,6 @@ 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 --- -1.8.4 - - -From e099a765c34c16b2dc74c6f9e44abba9730e9ffe Mon Sep 17 00:00:00 2001 -From: Phil Elwell -Date: Wed, 20 Mar 2013 09:58:21 +0000 -Subject: [PATCH 115/128] SW-11786: Fix USE_AFTER_FREE defect (61220) - -In the error paths of parse_open, only unlock the service if it is not -NULL. In the fail path, NULL the service after it is unlocked to -prevent a double unlock. ---- - drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -index 9f66704..f35ed4f 100644 ---- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -+++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c -@@ -1492,6 +1492,7 @@ static const char *msg_type_str(unsigned int msg_type) - version, version_min); - vchiq_loud_error_footer(); - unlock_service(service); -+ service = NULL; - goto fail_open; - } - service->peer_version = version; -@@ -1557,7 +1558,8 @@ static const char *msg_type_str(unsigned int msg_type) - return 1; - - bail_not_ready: -- unlock_service(service); -+ if (service) -+ unlock_service(service); - - return 0; - } --- -1.8.4 - - -From 4ab0bbf7267eac1b9a87173b3c81675b7a9985d0 Mon Sep 17 00:00:00 2001 +From cd3842e8500681729d236313433297143bc6f1ff Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Fri, 16 Aug 2013 12:55:56 +0100 -Subject: [PATCH 116/128] ARM: 7819/1: fiq: Cast the first argument of +Subject: [PATCH 091/104] ARM: 7819/1: fiq: Cast the first argument of flush_icache_range() Commit 2ba85e7af4 (ARM: Fix FIQ code on VIVT CPUs) causes the following build warning: @@ -101211,630 +99485,10 @@ index 9ac7935..aac11f8 100644 1.8.4 -From a8a121dad3459d8b9ee30d23b6019d2e042adecb Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Sun, 15 Sep 2013 13:48:43 +0100 -Subject: [PATCH 117/128] config: add missing options from 3.6.y kernel - ---- - arch/arm/configs/bcmrpi_defconfig | 228 +++++++++++++++++++++++++++++++++++++- - 1 file changed, 225 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index fdda50b..b41feb2 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -46,6 +46,7 @@ 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 -+CONFIG_CPU_FREQ_STAT_DETAILS=y - CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y - CONFIG_CPU_FREQ_GOV_PERFORMANCE=y - CONFIG_CPU_FREQ_GOV_USERSPACE=y -@@ -84,7 +85,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 -@@ -104,7 +104,10 @@ CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m - CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m - CONFIG_NETFILTER_XT_TARGET_CONNMARK=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 -@@ -115,9 +118,11 @@ 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_BPF=m - CONFIG_NETFILTER_XT_MATCH_CLUSTER=m - CONFIG_NETFILTER_XT_MATCH_COMMENT=m - CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -+CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m - CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m - CONFIG_NETFILTER_XT_MATCH_CONNMARK=m - CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -@@ -134,6 +139,7 @@ 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 -@@ -143,7 +149,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 -@@ -163,6 +168,24 @@ 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_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_NFCT=y -+CONFIG_IP_VS_PE_SIP=m - CONFIG_NF_CONNTRACK_IPV4=m - CONFIG_IP_NF_IPTABLES=m - CONFIG_IP_NF_MATCH_AH=m -@@ -215,6 +238,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_COOKIE_HMAC_SHA1=y - CONFIG_L2TP=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m -@@ -237,6 +262,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 -@@ -253,6 +282,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 -@@ -265,8 +295,19 @@ 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 - CONFIG_IRCOMM=m - CONFIG_IRDA_ULTRA=y - CONFIG_IRDA_CACHE_LAST_LSAP=y -@@ -293,17 +334,22 @@ CONFIG_BT_HCIVHCI=m - CONFIG_BT_MRVL=m - CONFIG_BT_MRVL_SDIO=m - CONFIG_BT_ATH3K=m -+CONFIG_BT_WILINK=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_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_CRYPTOLOOP=m - CONFIG_BLK_DEV_DRBD=m -@@ -332,10 +378,12 @@ CONFIG_USB_CATC=m - CONFIG_USB_KAWETH=m - CONFIG_USB_PEGASUS=m - CONFIG_USB_RTL8150=m -+CONFIG_USB_RTL8152=m - CONFIG_USB_USBNET=y - CONFIG_USB_NET_AX8817X=m - CONFIG_USB_NET_CDCETHER=m - CONFIG_USB_NET_CDC_EEM=m -+CONFIG_USB_NET_CDC_MBIM=m - CONFIG_USB_NET_DM9601=m - CONFIG_USB_NET_SMSC75XX=m - CONFIG_USB_NET_SMSC95XX=y -@@ -346,10 +394,12 @@ CONFIG_USB_NET_MCS7830=m - CONFIG_USB_NET_CDC_SUBSET=m - CONFIG_USB_ALI_M5632=y - CONFIG_USB_AN2720=y -+CONFIG_USB_EPSON2888=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 -@@ -361,6 +411,13 @@ CONFIG_USB_ZD1201=m - CONFIG_USB_NET_RNDIS_WLAN=m - CONFIG_RTL8187=m - CONFIG_MAC80211_HWSIM=m -+CONFIG_ATH_CARDS=m -+CONFIG_ATH9K=m -+CONFIG_ATH9K_HTC=m -+CONFIG_CARL9170=m -+CONFIG_ATH6KL=m -+CONFIG_ATH6KL_USB=m -+CONFIG_AR5523=m - CONFIG_B43=m - CONFIG_B43LEGACY=m - CONFIG_HOSTAP=m -@@ -409,6 +466,8 @@ CONFIG_SERIAL_AMBA_PL011=y - CONFIG_SERIAL_AMBA_PL011_CONSOLE=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 -@@ -422,6 +481,146 @@ 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_IR_TTUSBIR=m -+CONFIG_RC_LOOPBACK=m -+CONFIG_IR_GPIO_CIR=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_PVRUSB2=m -+CONFIG_VIDEO_HDPVR=m -+CONFIG_VIDEO_TLG2300=m -+CONFIG_VIDEO_USBVISION=m -+CONFIG_VIDEO_STK1160=m -+CONFIG_VIDEO_STK1160_AC97=y -+CONFIG_VIDEO_AU0828=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_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_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_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_EC168=m -+CONFIG_DVB_USB_GL861=m -+CONFIG_DVB_USB_IT913X=m -+CONFIG_DVB_USB_LME2510=m -+CONFIG_DVB_USB_MXL111SF=m -+CONFIG_DVB_USB_RTL28XXU=m -+CONFIG_SMS_USB_DRV=m -+CONFIG_DVB_B2C2_FLEXCOP_USB=m -+CONFIG_VIDEO_EM28XX=m -+CONFIG_VIDEO_EM28XX_ALSA=m -+CONFIG_VIDEO_EM28XX_DVB=m -+CONFIG_RADIO_SI470X=y -+CONFIG_USB_SI470X=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_USB_MA901=m -+CONFIG_RADIO_SAA7706H=m -+CONFIG_RADIO_TEF6862=m -+CONFIG_RADIO_WL128X=m - CONFIG_FB=y - CONFIG_FB_BCM2708=y - CONFIG_FRAMEBUFFER_CONSOLE=y -@@ -448,6 +647,7 @@ CONFIG_SND_USB_UA101=m - CONFIG_SND_USB_CAIAQ=m - CONFIG_SND_USB_6FIRE=m - CONFIG_SOUND_PRIME=m -+CONFIG_HIDRAW=y - CONFIG_HID_A4TECH=m - CONFIG_HID_ACRUX=m - CONFIG_HID_APPLE=m -@@ -486,7 +686,10 @@ CONFIG_HID_SUNPLUS=m - CONFIG_HID_GREENASIA=m - CONFIG_HID_SMARTJOYPLUS=m - CONFIG_HID_TOPSEED=m -+CONFIG_HID_THINGM=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 -@@ -495,6 +698,7 @@ CONFIG_USB=y - CONFIG_USB_ANNOUNCE_NEW_DEVICES=y - CONFIG_USB_MON=m - CONFIG_USB_DWCOTG=y -+CONFIG_USB_PRINTER=m - CONFIG_USB_STORAGE=y - CONFIG_USB_STORAGE_REALTEK=m - CONFIG_USB_STORAGE_DATAFAB=m -@@ -529,6 +733,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 -@@ -537,6 +742,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 -@@ -558,8 +764,12 @@ CONFIG_USB_SERIAL_OPTION=m - CONFIG_USB_SERIAL_OMNINET=m - CONFIG_USB_SERIAL_OPTICON=m - CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m -+CONFIG_USB_SERIAL_XSENS_MT=m - CONFIG_USB_SERIAL_ZIO=m -+CONFIG_USB_SERIAL_WISHBONE=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 -@@ -586,6 +796,16 @@ CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_PLTFM=y - CONFIG_MMC_SDHCI_BCM2708=y - CONFIG_MMC_SDHCI_BCM2708_DMA=y -+CONFIG_LEDS_GPIO=m -+CONFIG_LEDS_TRIGGER_TIMER=y -+CONFIG_LEDS_TRIGGER_ONESHOT=y -+CONFIG_LEDS_TRIGGER_HEARTBEAT=y -+CONFIG_LEDS_TRIGGER_BACKLIGHT=y -+CONFIG_LEDS_TRIGGER_CPU=y -+CONFIG_LEDS_TRIGGER_GPIO=y -+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -+CONFIG_LEDS_TRIGGER_TRANSIENT=m -+CONFIG_LEDS_TRIGGER_CAMERA=m - CONFIG_RTC_CLASS=y - CONFIG_RTC_DRV_DS1307=m - CONFIG_RTC_DRV_DS1374=m -@@ -596,6 +816,7 @@ CONFIG_RTC_DRV_RS5C372=m - CONFIG_RTC_DRV_ISL1208=m - CONFIG_RTC_DRV_ISL12022=m - CONFIG_RTC_DRV_X1205=m -+CONFIG_RTC_DRV_PCF8523=m - CONFIG_RTC_DRV_PCF8563=m - CONFIG_RTC_DRV_PCF8583=m - CONFIG_RTC_DRV_M41T80=m -@@ -615,6 +836,7 @@ CONFIG_RTC_DRV_R9701=m - CONFIG_RTC_DRV_RS5C348=m - CONFIG_RTC_DRV_DS3234=m - CONFIG_RTC_DRV_PCF2123=m -+CONFIG_RTC_DRV_RX4581=m - CONFIG_UIO=m - CONFIG_UIO_PDRV=m - CONFIG_UIO_PDRV_GENIRQ=m --- -1.8.4 - - -From 182a6f416caac8cf1de3ed393c6386208a18d29e Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 23 Sep 2013 17:14:19 +0100 -Subject: [PATCH 118/128] config: Add missing F2FS, BATMAN_ADV, OPENVSWITCH, - NF_NAT options - ---- - arch/arm/configs/bcmrpi_defconfig | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index b41feb2..3294a27 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -184,7 +184,7 @@ CONFIG_IP_VS_DH=m - CONFIG_IP_VS_SH=m - CONFIG_IP_VS_SED=m - CONFIG_IP_VS_NQ=m --CONFIG_IP_VS_NFCT=y -+CONFIG_IP_VS_FTP=m - CONFIG_IP_VS_PE_SIP=m - CONFIG_NF_CONNTRACK_IPV4=m - CONFIG_IP_NF_IPTABLES=m -@@ -194,6 +194,10 @@ 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_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_ECN=m - CONFIG_IP_NF_TARGET_TTL=m -@@ -216,6 +220,9 @@ 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 -@@ -294,6 +301,8 @@ 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_OPENVSWITCH=m - CONFIG_NET_PKTGEN=m - CONFIG_HAMRADIO=y - CONFIG_AX25=m -@@ -884,6 +893,7 @@ 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_ACL=y - CONFIG_NFS_V4=y --- -1.8.4 - - -From af84da4808f0c8a630d2c1ed3c47fcaf5349b0f2 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 23 Sep 2013 19:38:00 +0100 -Subject: [PATCH 119/128] config: Add some joystick support - ---- - arch/arm/configs/bcmrpi_defconfig | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index 3294a27..91c0dfa 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -452,6 +452,11 @@ CONFIG_INPUT_JOYDEV=m - CONFIG_INPUT_EVDEV=m - # CONFIG_INPUT_KEYBOARD is not set - # CONFIG_INPUT_MOUSE is not set -+CONFIG_INPUT_JOYSTICK=y -+CONFIG_JOYSTICK_IFORCE=m -+CONFIG_JOYSTICK_IFORCE_USB=y -+CONFIG_JOYSTICK_XPAD=y -+CONFIG_JOYSTICK_XPAD_FF=y - CONFIG_INPUT_MISC=y - CONFIG_INPUT_AD714X=m - CONFIG_INPUT_ATI_REMOTE2=m -@@ -463,11 +468,7 @@ 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_SERIO is not set - CONFIG_VT_HW_CONSOLE_BINDING=y - # CONFIG_LEGACY_PTYS is not set - # CONFIG_DEVKMEM is not set -@@ -703,7 +704,6 @@ 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 --- -1.8.4 - - -From 6c78524d31a173a26667ed2e49f7dcce8823e1ac Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 23 Sep 2013 23:56:15 +0100 -Subject: [PATCH 120/128] config: Add new config options: DUMMY, QFMT_V1, - QFMT_V2, DLM - ---- - 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 91c0dfa..5621ab1 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -245,7 +245,6 @@ 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_COOKIE_HMAC_SHA1=y - CONFIG_L2TP=m - CONFIG_BRIDGE=m -@@ -373,6 +372,7 @@ CONFIG_SCSI_MULTI_LUN=y - # CONFIG_SCSI_LOWLEVEL is not set - CONFIG_MD=y - CONFIG_NETDEVICES=y -+CONFIG_DUMMY=m - CONFIG_NETCONSOLE=m - CONFIG_TUN=m - CONFIG_MDIO_BITBANG=m -@@ -871,6 +871,8 @@ CONFIG_BTRFS_FS=m - CONFIG_BTRFS_FS_POSIX_ACL=y - CONFIG_NILFS2_FS=m - CONFIG_FANOTIFY=y -+CONFIG_QFMT_V1=m -+CONFIG_QFMT_V2=m - CONFIG_AUTOFS4_FS=y - CONFIG_FUSE_FS=m - CONFIG_CUSE=m -@@ -947,6 +949,7 @@ 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_DETECT_HUNG_TASK=y - CONFIG_TIMER_STATS=y --- -1.8.4 - - -From 1411c112df1be1a1975bce10c96b410030582507 Mon Sep 17 00:00:00 2001 +From 747a619132d144e8d33961121c1ba7f685eff3e4 Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 20 Sep 2013 16:08:27 +0100 -Subject: [PATCH 123/128] dwc_otg: Enable NAK holdoff for control split +Subject: [PATCH 093/104] dwc_otg: Enable NAK holdoff for control split transactions Certain low-speed devices take a very long time to complete a @@ -101867,10 +99521,10 @@ index 19abea0..509b629 100644 1.8.4 -From e7f6405022570437363ff340f656922078b634c5 Mon Sep 17 00:00:00 2001 +From bb8efd4841329bc3aa4468e5c613c872046c25f9 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Fri, 20 Sep 2013 19:07:56 +0100 -Subject: [PATCH 124/128] dwc_otg: Fix for occasional lockup on boot when doing +Subject: [PATCH 094/104] dwc_otg: Fix for occasional lockup on boot when doing a USB reset --- @@ -101896,69 +99550,10 @@ index 509b629..57092d2 100644 1.8.4 -From 18bdabe21d4ca62cc46b0adfe19af44d1cefd4d5 Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Fri, 27 Sep 2013 11:09:52 +0100 -Subject: [PATCH 125/128] Add AppleTalk module See #386 - ---- - 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 5621ab1..04811fc 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -250,6 +250,7 @@ CONFIG_L2TP=m - CONFIG_BRIDGE=m - CONFIG_VLAN_8021Q=m - CONFIG_VLAN_8021Q_GVRP=y -+CONFIG_ATALK=m - CONFIG_NET_SCHED=y - CONFIG_NET_SCH_CBQ=m - CONFIG_NET_SCH_HTB=m --- -1.8.4 - - -From fae17df35c310b9d60292ffbba3a9bb574bc047b Mon Sep 17 00:00:00 2001 -From: popcornmix -Date: Mon, 7 Oct 2013 17:02:14 +0100 -Subject: [PATCH 126/128] Add INITRD, BLK_DEV_DM and DM_CRYPT kernel options - ---- - 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 04811fc..b19a382 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -21,6 +21,7 @@ CONFIG_RESOURCE_COUNTERS=y - CONFIG_BLK_CGROUP=y - CONFIG_NAMESPACES=y - CONFIG_SCHED_AUTOGROUP=y -+CONFIG_BLK_DEV_INITRD=y - CONFIG_EMBEDDED=y - # CONFIG_COMPAT_BRK is not set - CONFIG_PROFILING=y -@@ -372,6 +373,8 @@ 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_NETDEVICES=y - CONFIG_DUMMY=m - CONFIG_NETCONSOLE=m --- -1.8.4 - - -From 875cc485ce236117295a1363dd3ebbf3c8fadbf9 Mon Sep 17 00:00:00 2001 +From 19b1dd5236fb99e9f9fa8926cbc32b1603db4bb9 Mon Sep 17 00:00:00 2001 From: P33M Date: Fri, 27 Sep 2013 14:42:24 +0100 -Subject: [PATCH 127/128] dwc_otg: Don't issue traffic to LS devices in FS mode +Subject: [PATCH 095/104] dwc_otg: Don't issue traffic to LS devices in FS mode Issuing low-speed packets when the root port is in full-speed mode causes the root port to stop responding. Explicitly fail when @@ -102000,29 +99595,903 @@ index be1d25b..b3e1944 100644 1.8.4 -From c5fd68b6335439e9596f4c63466314ac373aeb9c Mon Sep 17 00:00:00 2001 +From 5cadf3dceca8262f2388f9ba9ec86ad088a78f92 Mon Sep 17 00:00:00 2001 From: popcornmix -Date: Wed, 9 Oct 2013 22:00:36 +0100 -Subject: [PATCH 128/128] Add bcm2708-rng module +Date: Wed, 6 Nov 2013 12:08:46 +0000 +Subject: [PATCH 096/104] config: enable BLK_DEV_SD statically. Add some + DM_MIRROR raid options. Add ISCSI_TCP. Add R8712U +kernel: config: add missing PPP config options + +kernel: config: Add MMC_SPI and DM_LOG_USERSPACE + +kernel: config: Add crypto modules + +config: Enable NET_IPIP, IP_ADVANCED_ROUTER, IP_MULTIPLE_TABLES, IP_ROUTE_MULTIPATH, NETFILTER_MATCH_IPVS + +config: Enable MROUTE options + +config: enable CONFIG_CRYPTO_AES_ARM + +config: Add more config options from 3.6 tree including PREEMPT, SPEAKUP, NTFS_RW, HFS + +config: Set CONFIG_SPI_SPIDEV=y --- - arch/arm/configs/bcmrpi_defconfig | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + arch/arm/configs/bcmrpi_defconfig | 93 +++++++++++++++++++++++++++++++++------ + 1 file changed, 80 insertions(+), 13 deletions(-) diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig -index b19a382..04c76f4 100644 +index 36fcd49..20c1c4f 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig -@@ -478,7 +478,8 @@ CONFIG_VT_HW_CONSOLE_BINDING=y +@@ -33,18 +33,21 @@ 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_CFQ_GROUP_IOSCHED=y + CONFIG_ARCH_BCM2708=y ++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 +-CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait" ++CONFIG_CMDLINE="console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" + CONFIG_KEXEC=y + CONFIG_CPU_FREQ=y + CONFIG_CPU_FREQ_STAT=m +@@ -64,9 +67,20 @@ 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_IP_MROUTE=y ++CONFIG_IP_MROUTE_MULTIPLE_TABLES=y ++CONFIG_IP_PIMSM_V1=y ++CONFIG_IP_PIMSM_V2=y + CONFIG_SYN_COOKIES=y + CONFIG_INET_AH=m + CONFIG_INET_ESP=m +@@ -81,6 +95,9 @@ CONFIG_INET6_AH=m + CONFIG_INET6_ESP=m + CONFIG_INET6_IPCOMP=m + CONFIG_IPV6_MULTIPLE_TABLES=y ++CONFIG_IPV6_MROUTE=y ++CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y ++CONFIG_IPV6_PIMSM_V2=y + CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_ZONES=y +@@ -136,6 +153,7 @@ 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 +@@ -357,7 +375,6 @@ 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 +@@ -369,25 +386,44 @@ CONFIG_BLK_DEV_RAM=y + CONFIG_CDROM_PKTCDVD=m + 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_ISCSI_BOOT_SYSFS=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_DUMMY=m ++CONFIG_MACVLAN=m + CONFIG_NETCONSOLE=m + CONFIG_TUN=m + CONFIG_MDIO_BITBANG=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_PPPOL2TP=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 +@@ -397,6 +433,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_CDC_MBIM=m + CONFIG_USB_NET_DM9601=m + CONFIG_USB_NET_SMSC75XX=m +@@ -473,14 +510,19 @@ CONFIG_INPUT_UINPUT=m + CONFIG_INPUT_GPIO_ROTARY_ENCODER=m + CONFIG_INPUT_ADXL34X=m + CONFIG_INPUT_CMA3000=m +-# CONFIG_SERIO is not set ++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_HW_RANDOM=y -+CONFIG_HW_RANDOM_BCM2708=y ++CONFIG_TTY_PRINTK=y + CONFIG_HW_RANDOM=y +-CONFIG_HW_RANDOM_BCM2708=y ++CONFIG_HW_RANDOM_BCM2708=m CONFIG_RAW_DRIVER=y CONFIG_BRCM_CHAR_DRIVERS=y CONFIG_BCM_VC_CMA=y +@@ -489,7 +531,7 @@ CONFIG_I2C_CHARDEV=m + CONFIG_I2C_BCM2708=m + CONFIG_SPI=y + CONFIG_SPI_BCM2708=m +-CONFIG_SPI_SPIDEV=m ++CONFIG_SPI_SPIDEV=y + CONFIG_GPIO_SYSFS=y + CONFIG_W1=m + CONFIG_W1_MASTER_DS2490=m +@@ -645,6 +687,7 @@ CONFIG_VIDEO_EM28XX_ALSA=m + CONFIG_VIDEO_EM28XX_DVB=m + CONFIG_RADIO_SI470X=y + CONFIG_USB_SI470X=m ++CONFIG_I2C_SI470X=m + CONFIG_USB_MR800=m + CONFIG_USB_DSBR=m + CONFIG_RADIO_SHARK=m +@@ -652,11 +695,14 @@ CONFIG_RADIO_SHARK2=m + CONFIG_RADIO_SI4713=m + CONFIG_USB_KEENE=m + CONFIG_USB_MA901=m ++CONFIG_RADIO_TEA5764=m + CONFIG_RADIO_SAA7706H=m + CONFIG_RADIO_TEF6862=m ++CONFIG_RADIO_WL1273=m + CONFIG_RADIO_WL128X=m + 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 +@@ -679,6 +725,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_HIDRAW=y +@@ -829,6 +876,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=y + CONFIG_LEDS_TRIGGER_ONESHOT=y +@@ -874,9 +922,20 @@ 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_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 +@@ -916,9 +975,13 @@ 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 +@@ -936,7 +999,6 @@ CONFIG_CIFS=m + CONFIG_CIFS_WEAK_PW_HASH=y + CONFIG_CIFS_XATTR=y + CONFIG_CIFS_POSIX=y +-# CONFIG_CIFS_DEBUG is not set + CONFIG_9P_FS=m + CONFIG_9P_FS_POSIX_ACL=y + CONFIG_NLS_DEFAULT="utf8" +@@ -977,27 +1039,32 @@ 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_PREEMPT is not set + CONFIG_DEBUG_MEMORY_INIT=y + CONFIG_BOOT_PRINTK_DELAY=y + CONFIG_LATENCYTOP=y ++# CONFIG_KPROBE_EVENT is not set + CONFIG_KGDB=y + CONFIG_KGDB_KDB=y + CONFIG_KDB_KEYBOARD=y + CONFIG_STRICT_DEVMEM=y ++CONFIG_CRYPTO_USER=m ++CONFIG_CRYPTO_NULL=m ++CONFIG_CRYPTO_CRYPTD=m + CONFIG_CRYPTO_SEQIV=m + CONFIG_CRYPTO_CBC=y +-CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_XTS=m + CONFIG_CRYPTO_XCBC=m +-CONFIG_CRYPTO_MD5=y +-CONFIG_CRYPTO_SHA1=y ++CONFIG_CRYPTO_SHA1_ARM=m + CONFIG_CRYPTO_SHA512=m + CONFIG_CRYPTO_TGR192=m + CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_AES_ARM=m + CONFIG_CRYPTO_CAST5=m + CONFIG_CRYPTO_DES=y + # CONFIG_CRYPTO_ANSI_CPRNG is not set +-- +1.8.4 + + + +From aacc73404a552c7fe0d99a4e8c6aafe233516b4f Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Sat, 9 Nov 2013 17:42:58 +0000 +Subject: [PATCH 099/104] mmc: Report 3.3V support in caps + +sdhci: Use macros for out spin lock/unlock functions to reduce diffs with upstream code +--- + drivers/mmc/host/sdhci-bcm2708.c | 2 + + drivers/mmc/host/sdhci.c | 82 ++++++++++++++++++++++------------------ + 2 files changed, 47 insertions(+), 37 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c +index 4770680..7fdd815 100644 +--- a/drivers/mmc/host/sdhci-bcm2708.c ++++ b/drivers/mmc/host/sdhci-bcm2708.c +@@ -1282,6 +1282,8 @@ static int sdhci_bcm2708_probe(struct platform_device *pdev) + host_priv->dma_chan, host_priv->dma_chan_base, + host_priv->dma_irq); + ++ // we support 3.3V ++ host->caps |= SDHCI_CAN_VDD_330; + if (allow_highspeed) + host->mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; + +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index 470860b..13e4e11 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -210,6 +210,14 @@ static void sdhci_spin_disable_schedule(struct sdhci_host *host) + #endif + } + ++ ++#undef spin_lock_irqsave ++#define spin_lock_irqsave(host_lock, flags) sdhci_spin_lock_irqsave(container_of(host_lock, struct sdhci_host, lock), &flags) ++#define spin_unlock_irqrestore(host_lock, flags) sdhci_spin_unlock_irqrestore(container_of(host_lock, struct sdhci_host, lock), flags) ++ ++#define spin_lock(host_lock) sdhci_spin_lock(container_of(host_lock, struct sdhci_host, lock)) ++#define spin_unlock(host_lock) sdhci_spin_unlock(container_of(host_lock, struct sdhci_host, lock)) ++ + static void sdhci_clear_set_irqs(struct sdhci_host *host, u32 clear, u32 set) + { + u32 ier; +@@ -374,7 +382,7 @@ static void sdhci_led_control(struct led_classdev *led, + struct sdhci_host *host = container_of(led, struct sdhci_host, led); + unsigned long flags; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + if (host->runtime_suspended) + goto out; +@@ -384,7 +392,7 @@ static void sdhci_led_control(struct led_classdev *led, + else + sdhci_activate_led(host); + out: +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + #endif + +@@ -1419,7 +1427,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) + + sdhci_runtime_pm_get(host); + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + WARN_ON(host->mrq != NULL); + +@@ -1477,9 +1485,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; +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + sdhci_execute_tuning(mmc, tuning_opcode); +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + /* Restore original mmc_request structure */ + host->mrq = mrq; +@@ -1493,7 +1501,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) + } + + mmiowb(); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) +@@ -1502,10 +1510,10 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios) + int vdd_bit = -1; + u8 ctrl; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + if (host->flags & SDHCI_DEVICE_DEAD) { +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + if (host->vmmc && ios->power_mode == MMC_POWER_OFF) + mmc_regulator_set_ocr(host->mmc, host->vmmc, 0); + return; +@@ -1532,9 +1540,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) { +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + mmc_regulator_set_ocr(host->mmc, host->vmmc, vdd_bit); +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + } + + if (host->ops->platform_send_init_74_clocks) +@@ -1672,7 +1680,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(); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) +@@ -1720,7 +1728,7 @@ static int sdhci_check_ro(struct sdhci_host *host) + unsigned long flags; + int is_readonly; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + if (host->flags & SDHCI_DEVICE_DEAD) + is_readonly = 0; +@@ -1730,7 +1738,7 @@ static int sdhci_check_ro(struct sdhci_host *host) + is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE) + & SDHCI_WRITE_PROTECT); + +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + + /* This quirk needs to be replaced by a callback-function later */ + return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ? +@@ -1803,9 +1811,9 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) + struct sdhci_host *host = mmc_priv(mmc); + unsigned long flags; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + sdhci_enable_sdio_irq_nolock(host, enable); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host, +@@ -2149,7 +2157,7 @@ static void sdhci_card_event(struct mmc_host *mmc) + struct sdhci_host *host = mmc_priv(mmc); + unsigned long flags; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + /* Check host->mrq first in case we are runtime suspended */ + if (host->mrq && +@@ -2166,7 +2174,7 @@ static void sdhci_card_event(struct mmc_host *mmc) + tasklet_schedule(&host->finish_tasklet); + } + +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + static const struct mmc_host_ops sdhci_ops = { +@@ -2205,14 +2213,14 @@ static void sdhci_tasklet_finish(unsigned long param) + + host = (struct sdhci_host*)param; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + /* + * If this tasklet gets rescheduled while running, it will + * be run again afterwards but without any active request. + */ + if (!host->mrq) { +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + return; + } + +@@ -2250,7 +2258,7 @@ static void sdhci_tasklet_finish(unsigned long param) + #endif + + mmiowb(); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + + mmc_request_done(host->mmc, mrq); + sdhci_runtime_pm_put(host); +@@ -2263,7 +2271,7 @@ static void sdhci_timeout_timer(unsigned long data) + + host = (struct sdhci_host*)data; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + if (host->mrq) { + pr_err("%s: Timeout waiting for hardware " +@@ -2284,7 +2292,7 @@ static void sdhci_timeout_timer(unsigned long data) + } + + mmiowb(); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + static void sdhci_tuning_timer(unsigned long data) +@@ -2294,11 +2302,11 @@ static void sdhci_tuning_timer(unsigned long data) + + host = (struct sdhci_host *)data; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + host->flags |= SDHCI_NEEDS_RETUNING; + +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + /*****************************************************************************\ +@@ -2522,10 +2530,10 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) + u32 intmask, unexpected = 0; + int cardint = 0, max_loops = 16; + +- sdhci_spin_lock(host); ++ spin_lock(&host->lock); + + if (host->runtime_suspended) { +- sdhci_spin_unlock(host); ++ spin_unlock(&host->lock); + pr_warning("%s: got irq while runtime suspended\n", + mmc_hostname(host->mmc)); + return IRQ_HANDLED; +@@ -2629,7 +2637,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) + if (intmask && --max_loops) + goto again; + out: +- sdhci_spin_unlock(host); ++ spin_unlock(&host->lock); + + if (unexpected) { + pr_err("%s: Unexpected interrupt 0x%08x.\n", +@@ -2791,15 +2799,15 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host) + host->flags &= ~SDHCI_NEEDS_RETUNING; + } + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + sdhci_mask_irqs(host, SDHCI_INT_ALL_MASK); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + + synchronize_irq(host->irq); + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + host->runtime_suspended = true; +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + + return ret; + } +@@ -2825,16 +2833,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)) { +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + sdhci_enable_preset_value(host, true); +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + /* Set the re-tuning expiration flag */ + if (host->flags & SDHCI_USING_RETUNING_TIMER) + host->flags |= SDHCI_NEEDS_RETUNING; + +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + host->runtime_suspended = false; + +@@ -2845,7 +2853,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host) + /* Enable Card Detection */ + sdhci_enable_card_detection(host); + +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + + return ret; + } +@@ -3401,7 +3409,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) + unsigned long flags; + + if (dead) { +- sdhci_spin_lock_irqsave(host, &flags); ++ spin_lock_irqsave(&host->lock, flags); + + host->flags |= SDHCI_DEVICE_DEAD; + +@@ -3413,7 +3421,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead) + tasklet_schedule(&host->finish_tasklet); + } + +- sdhci_spin_unlock_irqrestore(host, flags); ++ spin_unlock_irqrestore(&host->lock, flags); + } + + sdhci_disable_card_detection(host); +-- +1.8.4 + + +From 2de7aa472f873e6e47cd4d9f757f43cf61834301 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Tue, 12 Nov 2013 23:01:30 +0000 +Subject: [PATCH 100/104] sdhci: sdhci_bcm2708_quirk_voltage_broken appears to + be a no-op + +--- + drivers/mmc/host/sdhci-bcm2708.c | 6 ------ + drivers/mmc/host/sdhci.c | 6 ------ + drivers/mmc/host/sdhci.h | 1 - + 3 files changed, 13 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c +index 7fdd815..c775666 100644 +--- a/drivers/mmc/host/sdhci-bcm2708.c ++++ b/drivers/mmc/host/sdhci-bcm2708.c +@@ -1114,11 +1114,6 @@ static unsigned int sdhci_bcm2708_quirk_spurious_crc_acmd51(struct sdhci_host *h + return 1; + } + +-static unsigned int sdhci_bcm2708_quirk_voltage_broken(struct sdhci_host *host) +-{ +- return 1; +-} +- + static unsigned int sdhci_bcm2708_uhs_broken(struct sdhci_host *host) + { + return 1; +@@ -1155,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, +- .voltage_broken = sdhci_bcm2708_quirk_voltage_broken, + .uhs_broken = sdhci_bcm2708_uhs_broken, + }; + +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index 13e4e11..237158c 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -3245,12 +3245,6 @@ int sdhci_add_host(struct sdhci_host *host) + SDHCI_MAX_CURRENT_MULTIPLIER; + } + +- if(host->ops->voltage_broken) { +- ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34; +- // 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); +- } +- + mmc->ocr_avail = ocr_avail; + mmc->ocr_avail_sdio = ocr_avail; + if (host->ocr_avail_sdio) +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index cc393af..fc6fcf3 100644 +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -299,7 +299,6 @@ struct sdhci_ops { + struct mmc_data *data); + unsigned int (*extra_ints)(struct sdhci_host *host); + unsigned int (*spurious_crc_acmd51)(struct sdhci_host *host); +- unsigned int (*voltage_broken)(struct sdhci_host *host); + unsigned int (*uhs_broken)(struct sdhci_host *host); + unsigned int (*missing_status)(struct sdhci_host *host); + +-- +1.8.4 + + +From 19cf9e95383fa052d4984e2ca92a25e7967dfebb Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Wed, 13 Nov 2013 11:40:56 +0000 +Subject: [PATCH 101/104] sdhci: sdhci_bcm2708_uhs_broken should be handled + through caps reported + +--- + drivers/mmc/host/sdhci-bcm2708.c | 6 ------ + drivers/mmc/host/sdhci.c | 2 +- + drivers/mmc/host/sdhci.h | 1 - + 3 files changed, 1 insertion(+), 8 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-bcm2708.c b/drivers/mmc/host/sdhci-bcm2708.c +index c775666..2797ae6 100644 +--- a/drivers/mmc/host/sdhci-bcm2708.c ++++ b/drivers/mmc/host/sdhci-bcm2708.c +@@ -1114,11 +1114,6 @@ static unsigned int sdhci_bcm2708_quirk_spurious_crc_acmd51(struct sdhci_host *h + return 1; + } + +-static unsigned int sdhci_bcm2708_uhs_broken(struct sdhci_host *host) +-{ +- return 1; +-} +- + static unsigned int sdhci_bcm2708_missing_status(struct sdhci_host *host) + { + return 1; +@@ -1150,7 +1145,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, +- .uhs_broken = sdhci_bcm2708_uhs_broken, + }; + + /*****************************************************************************\ +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index 237158c..9c93e00 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -1581,7 +1581,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 && !(host->ops->uhs_broken)) { ++ if (host->version >= SDHCI_SPEC_300) { + u16 clk, ctrl_2; + + /* In case of UHS-I modes, set High Speed Enable */ +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index fc6fcf3..9c3970b 100644 +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -299,7 +299,6 @@ struct sdhci_ops { + struct mmc_data *data); + unsigned int (*extra_ints)(struct sdhci_host *host); + unsigned int (*spurious_crc_acmd51)(struct sdhci_host *host); +- unsigned int (*uhs_broken)(struct sdhci_host *host); + unsigned int (*missing_status)(struct sdhci_host *host); + + void (*hw_reset)(struct sdhci_host *host); +-- +1.8.4 + + +From 1dcb5fd30ef1f098d22bf592e5128666e21e882a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Du=C5=A1an=20Dragi=C4=87?= +Date: Wed, 25 Sep 2013 18:20:09 +0200 +Subject: [PATCH 102/104] lirc_rpi: Fix return from incompatible pointer type + warnings + +--- + drivers/staging/media/lirc/lirc_rpi.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c +index 5bb0dfe..cb32042 100644 +--- a/drivers/staging/media/lirc/lirc_rpi.c ++++ b/drivers/staging/media/lirc/lirc_rpi.c +@@ -63,13 +63,13 @@ + /* set the default GPIO output pin */ + static int gpio_out_pin = 17; + /* enable debugging messages */ +-static int debug; ++static bool debug; + /* -1 = auto, 0 = active high, 1 = active low */ + static int sense = -1; + /* use softcarrier by default */ +-static int softcarrier = 1; ++static bool softcarrier = 1; + /* 0 = do not invert output, 1 = invert output */ +-static int invert = 0; ++static bool invert = 0; + + struct gpio_chip *gpiochip; + struct irq_chip *irqchip; +@@ -678,7 +678,7 @@ static void __exit lirc_rpi_exit_module(void) + " Valid pin numbers are: 0, 1, 4, 8, 7, 9, 10, 11, 14, 15," + " 17, 18, 21, 22, 23, 24, 25, default 18"); + +-module_param(sense, bool, S_IRUGO); ++module_param(sense, int, S_IRUGO); + MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit" + " (0 = active high, 1 = active low )"); + +-- +1.8.4 + + +From ffd228fde93d65674c3751f5f4bd8672a3eb16dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Du=C5=A1an=20Dragi=C4=87?= +Date: Wed, 25 Sep 2013 18:44:05 +0200 +Subject: [PATCH 103/104] lirc_rpi: Don't register with lirc_dev if we can't + claim gpio pins + +Currently the lirc_rpi module always registers a new lirc device. +In case the gpio pins can't be claimed it exits without unregistering. + +Skip registering with lirc_dev if pins can't be claimed. +Also, don't free gpio pins that we haven't claimed. +--- + drivers/staging/media/lirc/lirc_rpi.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c +index cb32042..c76f696 100644 +--- a/drivers/staging/media/lirc/lirc_rpi.c ++++ b/drivers/staging/media/lirc/lirc_rpi.c +@@ -590,8 +590,6 @@ static int __init lirc_rpi_init(void) + + static void lirc_rpi_exit(void) + { +- gpio_free(gpio_out_pin); +- gpio_free(gpio_in_pin); + platform_device_unregister(lirc_rpi_dev); + platform_driver_unregister(&lirc_rpi_driver); + lirc_buffer_free(&rbuf); +@@ -623,6 +621,10 @@ static int __init lirc_rpi_init_module(void) + goto exit_rpi; + } + ++ result = init_port(); ++ if (result < 0) ++ goto exit_rpi; ++ + driver.features = LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_SEND_PULSE | +@@ -640,10 +642,6 @@ static int __init lirc_rpi_init_module(void) + + printk(KERN_INFO LIRC_DRIVER_NAME ": driver registered!\n"); + +- result = init_port(); +- if (result < 0) +- goto exit_rpi; +- + return 0; + + exit_rpi: +@@ -654,6 +652,9 @@ static int __init lirc_rpi_init_module(void) + + static void __exit lirc_rpi_exit_module(void) + { ++ gpio_free(gpio_out_pin); ++ gpio_free(gpio_in_pin); ++ + lirc_rpi_exit(); + + lirc_unregister_driver(driver.minor); +-- +1.8.4 + + +From b49aafd02fa7572d387acd34550beea5b4c3d239 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Sat, 16 Nov 2013 18:38:33 +0000 +Subject: [PATCH 104/104] config: Add CONFIG_MD_LINEAR + +--- + 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 20c1c4f..905cd2e 100644 +--- a/arch/arm/configs/bcmrpi_defconfig ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -395,6 +395,7 @@ CONFIG_SCSI_ISCSI_ATTRS=y + CONFIG_ISCSI_TCP=m + CONFIG_ISCSI_BOOT_SYSFS=m + CONFIG_MD=y ++CONFIG_MD_LINEAR=m + CONFIG_MD_RAID0=m + CONFIG_BLK_DEV_DM=m + CONFIG_DM_CRYPT=m -- 1.8.4