diff options
Diffstat (limited to 'target/linux')
81 files changed, 0 insertions, 8115 deletions
diff --git a/target/linux/brcm47xx/config-3.10 b/target/linux/brcm47xx/config-3.10 deleted file mode 100644 index d159cd8f1b..0000000000 --- a/target/linux/brcm47xx/config-3.10 +++ /dev/null @@ -1,161 +0,0 @@ -CONFIG_ADM6996_PHY=y -CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y -CONFIG_ARCH_DISCARD_MEMBLOCK=y -CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y -CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y -CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -CONFIG_B53=y -# CONFIG_B53_MMAP_DRIVER is not set -CONFIG_B53_PHY_DRIVER=y -CONFIG_B53_PHY_FIXUP=y -# CONFIG_B53_SRAB_DRIVER is not set -CONFIG_BCM47XX=y -CONFIG_BCM47XX_BCMA=y -CONFIG_BCM47XX_SSB=y -CONFIG_BCM47XX_WDT=y -CONFIG_BCMA=y -CONFIG_BCMA_BLOCKIO=y -CONFIG_BCMA_DEBUG=y -CONFIG_BCMA_DRIVER_GMAC_CMN=y -CONFIG_BCMA_DRIVER_GPIO=y -CONFIG_BCMA_DRIVER_MIPS=y -CONFIG_BCMA_DRIVER_PCI_HOSTMODE=y -CONFIG_BCMA_HOST_PCI=y -CONFIG_BCMA_HOST_PCI_POSSIBLE=y -CONFIG_BCMA_HOST_SOC=y -CONFIG_BCMA_NFLASH=y -CONFIG_BCMA_SFLASH=y -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_CEVT_R4K=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_CMDLINE="noinitrd console=ttyS0,115200" -CONFIG_CMDLINE_BOOL=y -# CONFIG_CMDLINE_OVERRIDE is not set -CONFIG_CPU_GENERIC_DUMP_TLB=y -CONFIG_CPU_HAS_PREFETCH=y -CONFIG_CPU_HAS_SYNC=y -CONFIG_CPU_LITTLE_ENDIAN=y -CONFIG_CPU_MIPS32=y -CONFIG_CPU_MIPS32_R1=y -# CONFIG_CPU_MIPS32_R2 is not set -CONFIG_CPU_MIPSR1=y -CONFIG_CPU_MIPSR2_IRQ_VI=y -CONFIG_CPU_R4K_CACHE_TLB=y -CONFIG_CPU_R4K_FPU=y -CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y -CONFIG_CPU_SUPPORTS_HIGHMEM=y -CONFIG_CSRC_R4K=y -CONFIG_DMA_NONCOHERENT=y -# CONFIG_EARLY_PRINTK is not set -CONFIG_FIXED_PHY=y -CONFIG_GENERIC_ATOMIC64=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_GENERIC_IO=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GPIOLIB=y -CONFIG_GPIO_DEVRES=y -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_WDT=y -CONFIG_HARDWARE_WATCHPOINTS=y -CONFIG_HAS_DMA=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set -CONFIG_HAVE_C_RECORDMCOUNT=y -CONFIG_HAVE_DEBUG_KMEMLEAK=y -CONFIG_HAVE_DMA_API_DEBUG=y -CONFIG_HAVE_DMA_ATTRS=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y -CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_HAVE_GENERIC_HARDIRQS=y -CONFIG_HAVE_IDE=y -CONFIG_HAVE_MEMBLOCK=y -CONFIG_HAVE_MEMBLOCK_NODE_MAP=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_HAVE_NET_DSA=y -CONFIG_HAVE_OPROFILE=y -CONFIG_HAVE_PERF_EVENTS=y -CONFIG_HW_HAS_PCI=y -CONFIG_HW_RANDOM=y -CONFIG_HZ_PERIODIC=y -CONFIG_IMAGE_CMDLINE_HACK=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_IRQ_CPU=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_IRQ_WORK=y -CONFIG_LEDS_GPIO_REGISTER=y -CONFIG_MDIO_BOARDINFO=y -CONFIG_MIPS=y -# CONFIG_MIPS_HUGE_TLB_SUPPORT is not set -CONFIG_MIPS_L1_CACHE_SHIFT=5 -# CONFIG_MIPS_MACHINE is not set -CONFIG_MIPS_MT_DISABLED=y -CONFIG_MODULES_USE_ELF_REL=y -CONFIG_MTD_BCM47XXSFLASH=y -CONFIG_MTD_BCM47XX_PARTS=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_BCM47XXNFLASH=y -CONFIG_MTD_NAND_ECC=y -CONFIG_MTD_PHYSMAP=y -# CONFIG_MTD_SM_COMMON is not set -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_NEED_PER_CPU_KM=y -CONFIG_NO_EXCEPT_FILL=y -CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y -CONFIG_PAGEFLAGS_EXTENDED=y -CONFIG_PCI=y -CONFIG_PCI_DISABLE_COMMON_QUIRKS=y -CONFIG_PCI_DOMAINS=y -CONFIG_PERF_USE_VMALLOC=y -CONFIG_PHYLIB=y -# CONFIG_PREEMPT_RCU is not set -# CONFIG_RCU_STALL_COMMON is not set -# CONFIG_SCSI_DMA is not set -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_SHARE_IRQ=y -CONFIG_SSB=y -CONFIG_SSB_B43_PCI_BRIDGE=y -CONFIG_SSB_BLOCKIO=y -CONFIG_SSB_DEBUG=y -CONFIG_SSB_DRIVER_EXTIF=y -CONFIG_SSB_DRIVER_GIGE=y -CONFIG_SSB_DRIVER_GPIO=y -CONFIG_SSB_DRIVER_MIPS=y -CONFIG_SSB_DRIVER_PCICORE=y -CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y -CONFIG_SSB_EMBEDDED=y -CONFIG_SSB_PCICORE_HOSTMODE=y -CONFIG_SSB_PCIHOST=y -CONFIG_SSB_PCIHOST_POSSIBLE=y -CONFIG_SSB_SERIAL=y -CONFIG_SSB_SFLASH=y -CONFIG_SSB_SPROM=y -CONFIG_SWCONFIG=y -CONFIG_SYS_HAS_CPU_MIPS32_R1=y -CONFIG_SYS_HAS_CPU_MIPS32_R2=y -CONFIG_SYS_HAS_EARLY_PRINTK=y -CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y -CONFIG_SYS_SUPPORTS_ARBIT_HZ=y -CONFIG_SYS_SUPPORTS_HIGHMEM=y -CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y -CONFIG_TICK_CPU_ACCOUNTING=y -CONFIG_UIDGID_CONVERTED=y -CONFIG_USB_ARCH_HAS_XHCI=y -CONFIG_USB_SUPPORT=y -CONFIG_WATCHDOG_CORE=y -CONFIG_ZONE_DMA_FLAG=0 diff --git a/target/linux/brcm47xx/patches-3.10/020-mtd-bcm47xxpart-handle-malloc-failures.patch b/target/linux/brcm47xx/patches-3.10/020-mtd-bcm47xxpart-handle-malloc-failures.patch deleted file mode 100644 index ad24b5993d..0000000000 --- a/target/linux/brcm47xx/patches-3.10/020-mtd-bcm47xxpart-handle-malloc-failures.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 99b1d1887fee36ef9ff5d2ee24f0cf3e8c172104 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sun, 13 Oct 2013 22:53:49 +0200 -Subject: [PATCH] mtd: bcm47xxpart: handle malloc failures - -Handle return NULL in malloc. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: Brian Norris <computersforpeace@gmail.com> ---- - drivers/mtd/bcm47xxpart.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -71,7 +71,14 @@ static int bcm47xxpart_parse(struct mtd_ - /* Alloc */ - parts = kzalloc(sizeof(struct mtd_partition) * BCM47XXPART_MAX_PARTS, - GFP_KERNEL); -+ if (!parts) -+ return -ENOMEM; -+ - buf = kzalloc(BCM47XXPART_BYTES_TO_READ, GFP_KERNEL); -+ if (!buf) { -+ kfree(parts); -+ return -ENOMEM; -+ } - - /* Parse block by block looking for magics */ - for (offset = 0; offset <= master->size - blocksize; diff --git a/target/linux/brcm47xx/patches-3.10/021-mtd-bcm47xxpart-detect-block-aligned-Squashfs-partit.patch b/target/linux/brcm47xx/patches-3.10/021-mtd-bcm47xxpart-detect-block-aligned-Squashfs-partit.patch deleted file mode 100644 index 72891b2c6a..0000000000 --- a/target/linux/brcm47xx/patches-3.10/021-mtd-bcm47xxpart-detect-block-aligned-Squashfs-partit.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 020c6bcfbeabee72c18d862769d72cf9241b9004 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Mon, 21 Oct 2013 22:34:37 +0200 -Subject: [PATCH] mtd: bcm47xxpart: detect block aligned Squashfs partition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Most of the bcm47xx devices use TRX format for storing kernel and some -partition like Squashfs or JFFS2. This is pretty flexible solution, CFE -(the bootloader) just writes (and later boots) TRX at some hardcoded -place and paritions can vary in the size. - -However some devices don't use TRX format. Very recently we have -discovered ZTE H218N that has kernel and rootfs partitions at some -"random" places. - -This patch allows Linux find a rootfs partition after installing custom -image with a CFE bootloader. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: Brian Norris <computersforpeace@gmail.com> ---- - drivers/mtd/bcm47xxpart.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -32,6 +32,7 @@ - #define ML_MAGIC1 0x39685a42 - #define ML_MAGIC2 0x26594131 - #define TRX_MAGIC 0x30524448 -+#define SQSH_MAGIC 0x71736873 /* shsq */ - - struct trx_header { - uint32_t magic; -@@ -174,6 +175,13 @@ static int bcm47xxpart_parse(struct mtd_ - offset = rounddown(offset + trx->length, blocksize); - continue; - } -+ -+ /* Squashfs on devices not using TRX */ -+ if (buf[0x000 / 4] == SQSH_MAGIC) { -+ bcm47xxpart_add_part(&parts[curr_part++], "rootfs", -+ offset, 0); -+ continue; -+ } - } - - /* Look for NVRAM at the end of the last block. */ diff --git a/target/linux/brcm47xx/patches-3.10/022-mtd-bcm47xxpart-detect-factory-partition.patch b/target/linux/brcm47xx/patches-3.10/022-mtd-bcm47xxpart-detect-factory-partition.patch deleted file mode 100644 index 389976cb85..0000000000 --- a/target/linux/brcm47xx/patches-3.10/022-mtd-bcm47xxpart-detect-factory-partition.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 33094c736cd36a6cecadae6bce4daba89dabc326 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Mon, 21 Oct 2013 22:35:34 +0200 -Subject: [PATCH] mtd: bcm47xxpart: detect "factory" partition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -A new type of partition with magic FCTY was found on Huawei E970: -46 43 54 59 4b 51 37 4e 41 42 31 38 41 32 39 30 |FCTYKQ7NAB18A290| - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: Brian Norris <computersforpeace@gmail.com> ---- - drivers/mtd/bcm47xxpart.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -27,6 +27,7 @@ - - /* Magics */ - #define BOARD_DATA_MAGIC 0x5246504D /* MPFR */ -+#define FACTORY_MAGIC 0x59544346 /* FCTY */ - #define POT_MAGIC1 0x54544f50 /* POTT */ - #define POT_MAGIC2 0x504f /* OP */ - #define ML_MAGIC1 0x39685a42 -@@ -117,6 +118,13 @@ static int bcm47xxpart_parse(struct mtd_ - offset, MTD_WRITEABLE); - continue; - } -+ -+ /* Found on Huawei E970 */ -+ if (buf[0x000 / 4] == FACTORY_MAGIC) { -+ bcm47xxpart_add_part(&parts[curr_part++], "factory", -+ offset, MTD_WRITEABLE); -+ continue; -+ } - - /* POT(TOP) */ - if (buf[0x000 / 4] == POT_MAGIC1 && diff --git a/target/linux/brcm47xx/patches-3.10/023-mtd-bcm47xxpart-find-boot-partition-by-CFE-magic.patch b/target/linux/brcm47xx/patches-3.10/023-mtd-bcm47xxpart-find-boot-partition-by-CFE-magic.patch deleted file mode 100644 index 599114bf52..0000000000 --- a/target/linux/brcm47xx/patches-3.10/023-mtd-bcm47xxpart-find-boot-partition-by-CFE-magic.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 4f8aaf72287578c846ed7ac8c6114aacbf416e45 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Sat, 21 Dec 2013 19:39:11 +0100 -Subject: [PATCH] mtd: bcm47xxpart: find boot partition by CFE magic -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Some devices have even nicer-to-recognize CFE thanks to the magic. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: Brian Norris <computersforpeace@gmail.com> ---- - drivers/mtd/bcm47xxpart.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -23,10 +23,11 @@ - * Amount of bytes we read when analyzing each block of flash memory. - * Set it big enough to allow detecting partition and reading important data. - */ --#define BCM47XXPART_BYTES_TO_READ 0x404 -+#define BCM47XXPART_BYTES_TO_READ 0x4e8 - - /* Magics */ - #define BOARD_DATA_MAGIC 0x5246504D /* MPFR */ -+#define CFE_MAGIC 0x43464531 /* 1EFC */ - #define FACTORY_MAGIC 0x59544346 /* FCTY */ - #define POT_MAGIC1 0x54544f50 /* POTT */ - #define POT_MAGIC2 0x504f /* OP */ -@@ -102,8 +103,9 @@ static int bcm47xxpart_parse(struct mtd_ - continue; - } - -- /* CFE has small NVRAM at 0x400 */ -- if (buf[0x400 / 4] == NVRAM_HEADER) { -+ /* Magic or small NVRAM at 0x400 */ -+ if ((buf[0x4e0 / 4] == CFE_MAGIC && buf[0x4e4 / 4] == CFE_MAGIC) || -+ (buf[0x400 / 4] == NVRAM_HEADER)) { - bcm47xxpart_add_part(&parts[curr_part++], "boot", - offset, MTD_WRITEABLE); - continue; diff --git a/target/linux/brcm47xx/patches-3.10/024-mtd-bcm47xxpart-alternative-MAGIC-for-board_data-par.patch b/target/linux/brcm47xx/patches-3.10/024-mtd-bcm47xxpart-alternative-MAGIC-for-board_data-par.patch deleted file mode 100644 index 5f9a5b9078..0000000000 --- a/target/linux/brcm47xx/patches-3.10/024-mtd-bcm47xxpart-alternative-MAGIC-for-board_data-par.patch +++ /dev/null @@ -1,52 +0,0 @@ -From f0501e81fbaa51cfc8c28c60bc3fc7965fde94f4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Sat, 21 Dec 2013 19:39:12 +0100 -Subject: [PATCH] mtd: bcm47xxpart: alternative MAGIC for board_data partition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Some devices (like WNDR3700v3) have board_data without MPFR magic, some -extra header or extra NVRAM around 0x100. In such case we have to look -for another magic which is BD 0B 0D BD (BD probably stands for Board -Data). It's located "far far away", so instead of extending buffer add -another mtd_read. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: Brian Norris <computersforpeace@gmail.com> ---- - drivers/mtd/bcm47xxpart.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -27,6 +27,7 @@ - - /* Magics */ - #define BOARD_DATA_MAGIC 0x5246504D /* MPFR */ -+#define BOARD_DATA_MAGIC2 0xBD0D0BBD - #define CFE_MAGIC 0x43464531 /* 1EFC */ - #define FACTORY_MAGIC 0x59544346 /* FCTY */ - #define POT_MAGIC1 0x54544f50 /* POTT */ -@@ -192,6 +193,21 @@ static int bcm47xxpart_parse(struct mtd_ - offset, 0); - continue; - } -+ -+ /* Read middle of the block */ -+ if (mtd_read(master, offset + 0x8000, 0x4, -+ &bytes_read, (uint8_t *)buf) < 0) { -+ pr_err("mtd_read error while parsing (offset: 0x%X)!\n", -+ offset); -+ continue; -+ } -+ -+ /* Some devices (ex. WNDR3700v3) don't have a standard 'MPFR' */ -+ if (buf[0x000 / 4] == BOARD_DATA_MAGIC2) { -+ bcm47xxpart_add_part(&parts[curr_part++], "board_data", -+ offset, MTD_WRITEABLE); -+ continue; -+ } - } - - /* Look for NVRAM at the end of the last block. */ diff --git a/target/linux/brcm47xx/patches-3.10/027-mtd-bcm47xxpart-get-nvram.patch b/target/linux/brcm47xx/patches-3.10/027-mtd-bcm47xxpart-get-nvram.patch deleted file mode 100644 index 086d7b3a4d..0000000000 --- a/target/linux/brcm47xx/patches-3.10/027-mtd-bcm47xxpart-get-nvram.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/drivers/mtd/bcm47xxpart.c -+++ b/drivers/mtd/bcm47xxpart.c -@@ -68,6 +68,7 @@ static int bcm47xxpart_parse(struct mtd_ - int trx_part = -1; - int last_trx_part = -1; - int possible_nvram_sizes[] = { 0x8000, 0xF000, 0x10000, }; -+ bool found_nvram = false; - - if (blocksize <= 0x10000) - blocksize = 0x10000; -@@ -229,12 +230,23 @@ static int bcm47xxpart_parse(struct mtd_ - if (buf[0] == NVRAM_HEADER) { - bcm47xxpart_add_part(&parts[curr_part++], "nvram", - master->size - blocksize, 0); -+ found_nvram = true; - break; - } - } - - kfree(buf); - -+ if (!found_nvram) { -+ pr_err("can not find a nvram partition reserve last block\n"); -+ bcm47xxpart_add_part(&parts[curr_part++], "nvram_guess", -+ master->size - blocksize * 2, MTD_WRITEABLE); -+ for (i = 0; i < curr_part; i++) { -+ if (parts[i].size + parts[i].offset == master->size) -+ parts[i].offset -= blocksize * 2; -+ } -+ } -+ - /* - * Assume that partitions end at the beginning of the one they are - * followed by. diff --git a/target/linux/brcm47xx/patches-3.10/050-mtd_bcm47xxsflash_implement_ChipCommon_RW_ops.patch b/target/linux/brcm47xx/patches-3.10/050-mtd_bcm47xxsflash_implement_ChipCommon_RW_ops.patch deleted file mode 100644 index 8f43ebb5d5..0000000000 --- a/target/linux/brcm47xx/patches-3.10/050-mtd_bcm47xxsflash_implement_ChipCommon_RW_ops.patch +++ /dev/null @@ -1,53 +0,0 @@ -commit c8a1de474f49bd928f84e7a99b6f3d23a65b5637 -Author: Rafał Miłecki <zajec5@gmail.com> -Date: Sun Mar 24 21:53:24 2013 +0100 - - mtd: bcm47xxsflash: implement ChipCommon R/W ops - - They are needed for erasing/writing. Use a magic pointers and small - functions to preapre code for adding other buses support in the future - (like SSB). - - Signed-off-by: Rafał Miłecki <zajec5@gmail.com> - Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -48,6 +48,17 @@ static void bcm47xxsflash_fill_mtd(struc - * BCMA - **************************************************/ - -+static int bcm47xxsflash_bcma_cc_read(struct bcm47xxsflash *b47s, u16 offset) -+{ -+ return bcma_cc_read32(b47s->bcma_cc, offset); -+} -+ -+static void bcm47xxsflash_bcma_cc_write(struct bcm47xxsflash *b47s, u16 offset, -+ u32 value) -+{ -+ bcma_cc_write32(b47s->bcma_cc, offset, value); -+} -+ - static int bcm47xxsflash_bcma_probe(struct platform_device *pdev) - { - struct bcma_sflash *sflash = dev_get_platdata(&pdev->dev); -@@ -62,6 +73,8 @@ static int bcm47xxsflash_bcma_probe(stru - sflash->priv = b47s; - - b47s->bcma_cc = container_of(sflash, struct bcma_drv_cc, sflash); -+ b47s->cc_read = bcm47xxsflash_bcma_cc_read; -+ b47s->cc_write = bcm47xxsflash_bcma_cc_write; - - switch (b47s->bcma_cc->capabilities & BCMA_CC_CAP_FLASHT) { - case BCMA_CC_FLASHT_STSER: ---- a/drivers/mtd/devices/bcm47xxsflash.h -+++ b/drivers/mtd/devices/bcm47xxsflash.h -@@ -60,6 +60,8 @@ enum bcm47xxsflash_type { - - struct bcm47xxsflash { - struct bcma_drv_cc *bcma_cc; -+ int (*cc_read)(struct bcm47xxsflash *b47s, u16 offset); -+ void (*cc_write)(struct bcm47xxsflash *b47s, u16 offset, u32 value); - - enum bcm47xxsflash_type type; - diff --git a/target/linux/brcm47xx/patches-3.10/051-mtd_bcm47xxsflash_implement_polling_chip_status.patch b/target/linux/brcm47xx/patches-3.10/051-mtd_bcm47xxsflash_implement_polling_chip_status.patch deleted file mode 100644 index 3b452342a9..0000000000 --- a/target/linux/brcm47xx/patches-3.10/051-mtd_bcm47xxsflash_implement_polling_chip_status.patch +++ /dev/null @@ -1,87 +0,0 @@ -commit 7026e9844112fa33e5ffcd562daf0c919b16a9d1 -Author: Rafał Miłecki <zajec5@gmail.com> -Date: Sun Mar 24 21:51:31 2013 +0100 - - mtd: bcm47xxsflash: implement polling chip status - - Signed-off-by: Rafał Miłecki <zajec5@gmail.com> - Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -1,6 +1,7 @@ - #include <linux/kernel.h> - #include <linux/module.h> - #include <linux/slab.h> -+#include <linux/delay.h> - #include <linux/mtd/mtd.h> - #include <linux/platform_device.h> - #include <linux/bcma/bcma.h> -@@ -12,6 +13,57 @@ MODULE_DESCRIPTION("Serial flash driver - - static const char * const probes[] = { "bcm47xxpart", NULL }; - -+/************************************************** -+ * Various helpers -+ **************************************************/ -+ -+static void bcm47xxsflash_cmd(struct bcm47xxsflash *b47s, u32 opcode) -+{ -+ int i; -+ -+ b47s->cc_write(b47s, BCMA_CC_FLASHCTL, BCMA_CC_FLASHCTL_START | opcode); -+ for (i = 0; i < 1000; i++) { -+ if (!(b47s->cc_read(b47s, BCMA_CC_FLASHCTL) & -+ BCMA_CC_FLASHCTL_BUSY)) -+ return; -+ cpu_relax(); -+ } -+ pr_err("Control command failed (timeout)!\n"); -+} -+ -+static int bcm47xxsflash_poll(struct bcm47xxsflash *b47s, int timeout) -+{ -+ unsigned long deadline = jiffies + timeout; -+ -+ do { -+ switch (b47s->type) { -+ case BCM47XXSFLASH_TYPE_ST: -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_RDSR); -+ if (!(b47s->cc_read(b47s, BCMA_CC_FLASHDATA) & -+ SR_ST_WIP)) -+ return 0; -+ break; -+ case BCM47XXSFLASH_TYPE_ATMEL: -+ bcm47xxsflash_cmd(b47s, OPCODE_AT_STATUS); -+ if (b47s->cc_read(b47s, BCMA_CC_FLASHDATA) & -+ SR_AT_READY) -+ return 0; -+ break; -+ } -+ -+ cpu_relax(); -+ udelay(1); -+ } while (!time_after_eq(jiffies, deadline)); -+ -+ pr_err("Timeout waiting for flash to be ready!\n"); -+ -+ return -EBUSY; -+} -+ -+/************************************************** -+ * MTD ops -+ **************************************************/ -+ - static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf) - { -@@ -97,6 +149,9 @@ static int bcm47xxsflash_bcma_probe(stru - goto err_dev_reg; - } - -+ if (bcm47xxsflash_poll(b47s, HZ / 10)) -+ pr_warn("Serial flash busy\n"); -+ - return 0; - - err_dev_reg: diff --git a/target/linux/brcm47xx/patches-3.10/052-mtd_bcm47xxsflash_implement_erasing_support.patch b/target/linux/brcm47xx/patches-3.10/052-mtd_bcm47xxsflash_implement_erasing_support.patch deleted file mode 100644 index 3446a9f935..0000000000 --- a/target/linux/brcm47xx/patches-3.10/052-mtd_bcm47xxsflash_implement_erasing_support.patch +++ /dev/null @@ -1,74 +0,0 @@ -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Subject: [PATCH] mtd: bcm47xxsflash: implement erasing support -Date: Tue, 21 May 2013 21:03:46 +0200 - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> ---- -This has been succesfully tested on BCM4706. ---- - drivers/mtd/devices/bcm47xxsflash.c | 43 +++++++++++++++++++++++++++++++++-- - 1 file changed, 41 insertions(+), 2 deletions(-) - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -64,6 +64,42 @@ static int bcm47xxsflash_poll(struct bcm - * MTD ops - **************************************************/ - -+static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase) -+{ -+ struct bcm47xxsflash *b47s = mtd->priv; -+ int err; -+ -+ switch (b47s->type) { -+ case BCM47XXSFLASH_TYPE_ST: -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_WREN); -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, erase->addr); -+ /* Newer flashes have "sub-sectors" which can be erased -+ * independently with a new command: ST_SSE. The ST_SE command -+ * erases 64KB just as before. -+ */ -+ if (b47s->blocksize < (64 * 1024)) -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_SSE); -+ else -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_SE); -+ break; -+ case BCM47XXSFLASH_TYPE_ATMEL: -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, erase->addr << 1); -+ bcm47xxsflash_cmd(b47s, OPCODE_AT_PAGE_ERASE); -+ break; -+ } -+ -+ err = bcm47xxsflash_poll(b47s, HZ); -+ if (err) -+ erase->state = MTD_ERASE_FAILED; -+ else -+ erase->state = MTD_ERASE_DONE; -+ -+ if (erase->callback) -+ erase->callback(erase); -+ -+ return err; -+} -+ - static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf) - { -@@ -88,12 +124,15 @@ static void bcm47xxsflash_fill_mtd(struc - mtd->name = "bcm47xxsflash"; - mtd->owner = THIS_MODULE; - mtd->type = MTD_ROM; -- mtd->size = b47s->size; -- mtd->_read = bcm47xxsflash_read; - - /* TODO: implement writing support and verify/change following code */ - mtd->flags = MTD_CAP_ROM; -+ mtd->size = b47s->size; -+ mtd->erasesize = b47s->blocksize; - mtd->writebufsize = mtd->writesize = 1; -+ -+ mtd->_erase = bcm47xxsflash_erase; -+ mtd->_read = bcm47xxsflash_read; - } - - /************************************************** diff --git a/target/linux/brcm47xx/patches-3.10/053-mtd_bcm47xxsflash_writing_support.patch b/target/linux/brcm47xx/patches-3.10/053-mtd_bcm47xxsflash_writing_support.patch deleted file mode 100644 index 1938a4177f..0000000000 --- a/target/linux/brcm47xx/patches-3.10/053-mtd_bcm47xxsflash_writing_support.patch +++ /dev/null @@ -1,160 +0,0 @@ -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Subject: [RFC][PATCH] mtd: bcm47xxsflash: writing support -Date: Wed, 22 May 2013 14:39:02 +0200 - ---- - drivers/mtd/devices/bcm47xxsflash.c | 130 +++++++++++++++++++++++++++++++++-- - 1 file changed, 126 insertions(+), 4 deletions(-) - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -116,6 +116,127 @@ static int bcm47xxsflash_read(struct mtd - return len; - } - -+static int bcm47xxsflash_write_st(struct mtd_info *mtd, u32 offset, size_t len, -+ const u_char *buf) -+{ -+ struct bcm47xxsflash *b47s = mtd->priv; -+ int written = 0; -+ -+ /* Enable writes */ -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_WREN); -+ -+ /* Write first byte */ -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, offset); -+ b47s->cc_write(b47s, BCMA_CC_FLASHDATA, *buf++); -+ -+ /* Program page */ -+ if (b47s->bcma_cc->core->id.rev < 20) { -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_PP); -+ return 1; /* 1B written */ -+ } -+ -+ /* Program page and set CSA (on newer chips we can continue writing) */ -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_CSA | OPCODE_ST_PP); -+ offset++; -+ len--; -+ written++; -+ -+ while (len > 0) { -+ /* Page boundary, another function call is needed */ -+ if ((offset & 0xFF) == 0) -+ break; -+ -+ bcm47xxsflash_cmd(b47s, OPCODE_ST_CSA | *buf++); -+ offset++; -+ len--; -+ written++; -+ } -+ -+ /* All done, drop CSA & poll */ -+ b47s->cc_write(b47s, BCMA_CC_FLASHCTL, 0); -+ udelay(1); -+ if (bcm47xxsflash_poll(b47s, HZ / 10)) -+ pr_err("Flash rejected dropping CSA\n"); -+ -+ return written; -+} -+ -+static int bcm47xxsflash_write_at(struct mtd_info *mtd, u32 offset, size_t len, -+ const u_char *buf) -+{ -+ struct bcm47xxsflash *b47s = mtd->priv; -+ u32 mask = b47s->blocksize - 1; -+ u32 page = (offset & ~mask) << 1; -+ u32 byte = offset & mask; -+ int written = 0; -+ -+ /* If we don't overwrite whole page, read it to the buffer first */ -+ if (byte || (len < b47s->blocksize)) { -+ int err; -+ -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, page); -+ bcm47xxsflash_cmd(b47s, OPCODE_AT_BUF1_LOAD); -+ /* 250 us for AT45DB321B */ -+ err = bcm47xxsflash_poll(b47s, HZ / 1000); -+ if (err) { -+ pr_err("Timeout reading page 0x%X info buffer\n", page); -+ return err; -+ } -+ } -+ -+ /* Change buffer content with our data */ -+ while (len > 0) { -+ /* Page boundary, another function call is needed */ -+ if (byte == b47s->blocksize) -+ break; -+ -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, byte++); -+ b47s->cc_write(b47s, BCMA_CC_FLASHDATA, *buf++); -+ bcm47xxsflash_cmd(b47s, OPCODE_AT_BUF1_WRITE); -+ len--; -+ written++; -+ } -+ -+ /* Program page with the buffer content */ -+ b47s->cc_write(b47s, BCMA_CC_FLASHADDR, page); -+ bcm47xxsflash_cmd(b47s, OPCODE_AT_BUF1_PROGRAM); -+ -+ return written; -+} -+ -+static int bcm47xxsflash_write(struct mtd_info *mtd, loff_t to, size_t len, -+ size_t *retlen, const u_char *buf) -+{ -+ struct bcm47xxsflash *b47s = mtd->priv; -+ int written; -+ -+ /* Writing functions can return without writing all passed data, for -+ * example when the hardware is too old or when we git page boundary. -+ */ -+ while (len > 0) { -+ switch (b47s->type) { -+ case BCM47XXSFLASH_TYPE_ST: -+ written = bcm47xxsflash_write_st(mtd, to, len, buf); -+ break; -+ case BCM47XXSFLASH_TYPE_ATMEL: -+ written = bcm47xxsflash_write_at(mtd, to, len, buf); -+ break; -+ default: -+ BUG_ON(1); -+ } -+ if (written < 0) { -+ pr_err("Error writing at offset 0x%llX\n", to); -+ return written; -+ } -+ to += (loff_t)written; -+ len -= written; -+ *retlen += written; -+ buf += written; -+ } -+ -+ return 0; -+} -+ - static void bcm47xxsflash_fill_mtd(struct bcm47xxsflash *b47s) - { - struct mtd_info *mtd = &b47s->mtd; -@@ -123,16 +244,17 @@ static void bcm47xxsflash_fill_mtd(struc - mtd->priv = b47s; - mtd->name = "bcm47xxsflash"; - mtd->owner = THIS_MODULE; -- mtd->type = MTD_ROM; - -- /* TODO: implement writing support and verify/change following code */ -- mtd->flags = MTD_CAP_ROM; -+ mtd->type = MTD_NORFLASH; -+ mtd->flags = MTD_CAP_NORFLASH; - mtd->size = b47s->size; - mtd->erasesize = b47s->blocksize; -- mtd->writebufsize = mtd->writesize = 1; -+ mtd->writesize = 1; -+ mtd->writebufsize = 1; - - mtd->_erase = bcm47xxsflash_erase; - mtd->_read = bcm47xxsflash_read; -+ mtd->_write = bcm47xxsflash_write; - } - - /************************************************** diff --git a/target/linux/brcm47xx/patches-3.10/054-mtd_bcm47xxsflash_convert_kzalloc_to_avoid_invalid_access.patch b/target/linux/brcm47xx/patches-3.10/054-mtd_bcm47xxsflash_convert_kzalloc_to_avoid_invalid_access.patch deleted file mode 100644 index 3e8a44c079..0000000000 --- a/target/linux/brcm47xx/patches-3.10/054-mtd_bcm47xxsflash_convert_kzalloc_to_avoid_invalid_access.patch +++ /dev/null @@ -1,62 +0,0 @@ -Date: Thu, 30 May 2013 10:22:12 +0800 -From: Libo Chen <clbchenlibo.chen@huawei.com> -Subject: [PATCH RESEND 1/2] mtd: bcm47: convert kzalloc to avoid invalid access - - -mtd is just member of bcm47xxsflash, so we should free bcm47xxsflash not its member. -So I use devm_kazlloc instead of kazlloc to avoid it. - -* Changelog: - convert to devm_kzalloc - -Signed-off-by: Libo chen <libo.chen@huawei.com> -Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com> ---- - drivers/mtd/devices/bcm47xxsflash.c | 16 ++++------------ - 1 files changed, 4 insertions(+), 12 deletions(-) - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -278,11 +278,9 @@ static int bcm47xxsflash_bcma_probe(stru - struct bcm47xxsflash *b47s; - int err; - -- b47s = kzalloc(sizeof(*b47s), GFP_KERNEL); -- if (!b47s) { -- err = -ENOMEM; -- goto out; -- } -+ b47s = devm_kzalloc(&pdev->dev, sizeof(*b47s), GFP_KERNEL); -+ if (!b47s) -+ return -ENOMEM; - sflash->priv = b47s; - - b47s->bcma_cc = container_of(sflash, struct bcma_drv_cc, sflash); -@@ -307,18 +305,13 @@ static int bcm47xxsflash_bcma_probe(stru - err = mtd_device_parse_register(&b47s->mtd, probes, NULL, NULL, 0); - if (err) { - pr_err("Failed to register MTD device: %d\n", err); -- goto err_dev_reg; -+ return err; - } - - if (bcm47xxsflash_poll(b47s, HZ / 10)) - pr_warn("Serial flash busy\n"); - - return 0; -- --err_dev_reg: -- kfree(&b47s->mtd); --out: -- return err; - } - - static int bcm47xxsflash_bcma_remove(struct platform_device *pdev) -@@ -327,7 +320,6 @@ static int bcm47xxsflash_bcma_remove(str - struct bcm47xxsflash *b47s = sflash->priv; - - mtd_device_unregister(&b47s->mtd); -- kfree(b47s); - - return 0; - } diff --git a/target/linux/brcm47xx/patches-3.10/055-mtd_bcm47xxsflash_convert_to_module_platform_driver.patch b/target/linux/brcm47xx/patches-3.10/055-mtd_bcm47xxsflash_convert_to_module_platform_driver.patch deleted file mode 100644 index 5ef087b46d..0000000000 --- a/target/linux/brcm47xx/patches-3.10/055-mtd_bcm47xxsflash_convert_to_module_platform_driver.patch +++ /dev/null @@ -1,39 +0,0 @@ -Date: Thu, 30 May 2013 10:22:16 +0800 -From: Libo Chen <clbchenlibo.chen@huawei.com> -Subject: [PATCH RESEND 2/2] mtd: bcm47: convert to module_platform_driver - instead of init/exit - -convert to module_platform_driver instead of init/exit - -Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com> -Signed-off-by: Libo chen <libo.chen@huawei.com> ---- - drivers/mtd/devices/bcm47xxsflash.c | 20 +------------------- - 1 files changed, 1 insertions(+), 19 deletions(-) - ---- a/drivers/mtd/devices/bcm47xxsflash.c -+++ b/drivers/mtd/devices/bcm47xxsflash.c -@@ -337,22 +337,4 @@ static struct platform_driver bcma_sflas - * Init - **************************************************/ - --static int __init bcm47xxsflash_init(void) --{ -- int err; -- -- err = platform_driver_register(&bcma_sflash_driver); -- if (err) -- pr_err("Failed to register BCMA serial flash driver: %d\n", -- err); -- -- return err; --} -- --static void __exit bcm47xxsflash_exit(void) --{ -- platform_driver_unregister(&bcma_sflash_driver); --} -- --module_init(bcm47xxsflash_init); --module_exit(bcm47xxsflash_exit); -+module_platform_driver(bcma_sflash_driver); diff --git a/target/linux/brcm47xx/patches-3.10/070-MIPS-BCM47XX-add-board-detection.patch b/target/linux/brcm47xx/patches-3.10/070-MIPS-BCM47XX-add-board-detection.patch deleted file mode 100644 index ae519b69d6..0000000000 --- a/target/linux/brcm47xx/patches-3.10/070-MIPS-BCM47XX-add-board-detection.patch +++ /dev/null @@ -1,469 +0,0 @@ -commit 74370cf83baefceb83f5f4b7ff5c8e19e7056632 -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed Sep 18 13:29:57 2013 +0200 - - MIPS: BCM47XX: Add board detection - - Detect on which board this code is running based on some nvram - settings. This is needed to start board specific workarounds and - configure the leds and buttons which are on different gpios on every board. - - This patches add some boards we have seen, but there are many more. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - Cc: linux-mips@linux-mips.org - Patchwork: https://patchwork.linux-mips.org/patch/5840 - Patchwork: https://patchwork.linux-mips.org/patch/5855/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -4,4 +4,5 @@ - # - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o -+obj-y += board.o - obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o ---- /dev/null -+++ b/arch/mips/bcm47xx/board.c -@@ -0,0 +1,309 @@ -+#include <linux/export.h> -+#include <linux/string.h> -+#include <bcm47xx_board.h> -+#include <bcm47xx_nvram.h> -+ -+struct bcm47xx_board_type { -+ const enum bcm47xx_board board; -+ const char *name; -+}; -+ -+struct bcm47xx_board_type_list1 { -+ struct bcm47xx_board_type board; -+ const char *value1; -+}; -+ -+struct bcm47xx_board_type_list2 { -+ struct bcm47xx_board_type board; -+ const char *value1; -+ const char *value2; -+}; -+ -+struct bcm47xx_board_type_list3 { -+ struct bcm47xx_board_type board; -+ const char *value1; -+ const char *value2; -+ const char *value3; -+}; -+ -+struct bcm47xx_board_store { -+ enum bcm47xx_board board; -+ char name[BCM47XX_BOARD_MAX_NAME]; -+}; -+ -+/* model_name */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_model_name[] __initconst = { -+ {{BCM47XX_BOARD_DLINK_DIR130, "D-Link DIR-130"}, "DIR-130"}, -+ {{BCM47XX_BOARD_DLINK_DIR330, "D-Link DIR-330"}, "DIR-330"}, -+ { {0}, 0}, -+}; -+ -+/* model_no */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_model_no[] __initconst = { -+ {{BCM47XX_BOARD_ASUS_WL700GE, "Asus WL700"}, "WL700"}, -+ { {0}, 0}, -+}; -+ -+/* machine_name */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_machine_name[] __initconst = { -+ {{BCM47XX_BOARD_LINKSYS_WRTSL54GS, "Linksys WRTSL54GS"}, "WRTSL54GS"}, -+ { {0}, 0}, -+}; -+ -+/* hardware_version */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_hardware_version[] __initconst = { -+ {{BCM47XX_BOARD_ASUS_RTN16, "Asus RT-N16"}, "RT-N16-"}, -+ {{BCM47XX_BOARD_ASUS_WL320GE, "Asus WL320GE"}, "WL320G-"}, -+ {{BCM47XX_BOARD_ASUS_WL330GE, "Asus WL330GE"}, "WL330GE-"}, -+ {{BCM47XX_BOARD_ASUS_WL500GD, "Asus WL500GD"}, "WL500gd-"}, -+ {{BCM47XX_BOARD_ASUS_WL500GPV1, "Asus WL500GP V1"}, "WL500gp-"}, -+ {{BCM47XX_BOARD_ASUS_WL500GPV2, "Asus WL500GP V2"}, "WL500GPV2-"}, -+ {{BCM47XX_BOARD_ASUS_WL500W, "Asus WL500W"}, "WL500gW-"}, -+ {{BCM47XX_BOARD_ASUS_WL520GC, "Asus WL520GC"}, "WL520GC-"}, -+ {{BCM47XX_BOARD_ASUS_WL520GU, "Asus WL520GU"}, "WL520GU-"}, -+ {{BCM47XX_BOARD_BELKIN_F7D4301, "Belkin F7D4301"}, "F7D4301"}, -+ { {0}, 0}, -+}; -+ -+/* productid */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_productid[] __initconst = { -+ {{BCM47XX_BOARD_ASUS_RTAC66U, "Asus RT-AC66U"}, "RT-AC66U"}, -+ {{BCM47XX_BOARD_ASUS_RTN10, "Asus RT-N10"}, "RT-N10"}, -+ {{BCM47XX_BOARD_ASUS_RTN10D, "Asus RT-N10D"}, "RT-N10D"}, -+ {{BCM47XX_BOARD_ASUS_RTN10U, "Asus RT-N10U"}, "RT-N10U"}, -+ {{BCM47XX_BOARD_ASUS_RTN12, "Asus RT-N12"}, "RT-N12"}, -+ {{BCM47XX_BOARD_ASUS_RTN12B1, "Asus RT-N12B1"}, "RT-N12B1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12C1, "Asus RT-N12C1"}, "RT-N12C1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12D1, "Asus RT-N12D1"}, "RT-N12D1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12HP, "Asus RT-N12HP"}, "RT-N12HP"}, -+ {{BCM47XX_BOARD_ASUS_RTN15U, "Asus RT-N15U"}, "RT-N15U"}, -+ {{BCM47XX_BOARD_ASUS_RTN16, "Asus RT-N16"}, "RT-N16"}, -+ {{BCM47XX_BOARD_ASUS_RTN53, "Asus RT-N53"}, "RT-N53"}, -+ {{BCM47XX_BOARD_ASUS_RTN66U, "Asus RT-N66U"}, "RT-N66U"}, -+ {{BCM47XX_BOARD_ASUS_WL300G, "Asus WL300G"}, "WL300g"}, -+ {{BCM47XX_BOARD_ASUS_WLHDD, "Asus WLHDD"}, "WLHDD"}, -+ { {0}, 0}, -+}; -+ -+/* ModelId */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_ModelId[] __initconst = { -+ {{BCM47XX_BOARD_DELL_TM2300, "Dell WX-5565"}, "WX-5565"}, -+ {{BCM47XX_BOARD_MOTOROLA_WE800G, "Motorola WE800G"}, "WE800G"}, -+ {{BCM47XX_BOARD_MOTOROLA_WR850GP, "Motorola WR850GP"}, "WR850GP"}, -+ {{BCM47XX_BOARD_MOTOROLA_WR850GV2V3, "Motorola WR850G"}, "WR850G"}, -+ { {0}, 0}, -+}; -+ -+/* melco_id or buf1falo_id */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_melco_id[] __initconst = { -+ {{BCM47XX_BOARD_BUFFALO_WBR2_G54, "Buffalo WBR2-G54"}, "29bb0332"}, -+ {{BCM47XX_BOARD_BUFFALO_WHR2_A54G54, "Buffalo WHR2-A54G54"}, "290441dd"}, -+ {{BCM47XX_BOARD_BUFFALO_WHR_G125, "Buffalo WHR-G125"}, "32093"}, -+ {{BCM47XX_BOARD_BUFFALO_WHR_G54S, "Buffalo WHR-G54S"}, "30182"}, -+ {{BCM47XX_BOARD_BUFFALO_WHR_HP_G54, "Buffalo WHR-HP-G54"}, "30189"}, -+ {{BCM47XX_BOARD_BUFFALO_WLA2_G54L, "Buffalo WLA2-G54L"}, "29129"}, -+ {{BCM47XX_BOARD_BUFFALO_WZR_G300N, "Buffalo WZR-G300N"}, "31120"}, -+ {{BCM47XX_BOARD_BUFFALO_WZR_RS_G54, "Buffalo WZR-RS-G54"}, "30083"}, -+ {{BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP, "Buffalo WZR-RS-G54HP"}, "30103"}, -+ { {0}, 0}, -+}; -+ -+/* boot_hw_model, boot_hw_ver */ -+static const -+struct bcm47xx_board_type_list2 bcm47xx_board_list_boot_hw[] __initconst = { -+ /* like WRT160N v3.0 */ -+ {{BCM47XX_BOARD_CISCO_M10V1, "Cisco M10"}, "M10", "1.0"}, -+ /* like WRT310N v2.0 */ -+ {{BCM47XX_BOARD_CISCO_M20V1, "Cisco M20"}, "M20", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E900V1, "Linksys E900 V1"}, "E900", "1.0"}, -+ /* like WRT160N v3.0 */ -+ {{BCM47XX_BOARD_LINKSYS_E1000V1, "Linksys E1000 V1"}, "E100", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E1000V2, "Linksys E1000 V2"}, "E1000", "2.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E1000V21, "Linksys E1000 V2.1"}, "E1000", "2.1"}, -+ {{BCM47XX_BOARD_LINKSYS_E1200V2, "Linksys E1200 V2"}, "E1200", "2.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E2000V1, "Linksys E2000 V1"}, "Linksys E2000", "1.0"}, -+ /* like WRT610N v2.0 */ -+ {{BCM47XX_BOARD_LINKSYS_E3000V1, "Linksys E3000 V1"}, "E300", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E3200V1, "Linksys E3200 V1"}, "E3200", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_E4200V1, "Linksys E4200 V1"}, "E4200", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT150NV11, "Linksys WRT150N V1.1"}, "WRT150N", "1.1"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT150NV1, "Linksys WRT150N V1"}, "WRT150N", "1"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT160NV1, "Linksys WRT160N V1"}, "WRT160N", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT160NV3, "Linksys WRT160N V3"}, "WRT160N", "3.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT300NV11, "Linksys WRT300N V1.1"}, "WRT300N", "1.1"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT310NV1, "Linksys WRT310N V1"}, "WRT310N", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT310NV2, "Linksys WRT310N V2"}, "WRT310N", "2.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G3GV2, "Linksys WRT54G3GV2-VF"}, "WRT54G3GV2-VF", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT610NV1, "Linksys WRT610N V1"}, "WRT610N", "1.0"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"}, -+ { {0}, 0}, -+}; -+ -+/* board_id */ -+static const -+struct bcm47xx_board_type_list1 bcm47xx_board_list_board_id[] __initconst = { -+ {{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614 V8"}, "U12H072T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WGR614V9, "Netgear WGR614 V9"}, "U12H094T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR3400VCNA, "Netgear WNDR3400 Vcna"}, "U12H155T01_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR3700V3, "Netgear WNDR3700 V3"}, "U12H194T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR2000, "Netgear WNR2000"}, "U12H114T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "U12H136T99_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR3500U, "Netgear WNR3500U"}, "U12H136T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR3500V2, "Netgear WNR3500 V2"}, "U12H127T00_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR3500V2VC, "Netgear WNR3500 V2vc"}, "U12H127T70_NETGEAR"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR834BV2, "Netgear WNR834B V2"}, "U12H081T00_NETGEAR"}, -+ { {0}, 0}, -+}; -+ -+/* boardtype, boardnum, boardrev */ -+static const -+struct bcm47xx_board_type_list3 bcm47xx_board_list_board[] __initconst = { -+ {{BCM47XX_BOARD_HUAWEI_E970, "Huawei E970"}, "0x048e", "0x5347", "0x11"}, -+ {{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"}, -+ {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, -+ { {0}, 0}, -+}; -+ -+static const -+struct bcm47xx_board_type bcm47xx_board_unknown[] __initconst = { -+ {BCM47XX_BOARD_UNKNOWN, "Unknown Board"}, -+}; -+ -+static struct bcm47xx_board_store bcm47xx_board = {BCM47XX_BOARD_NO, "Unknown Board"}; -+ -+static __init const struct bcm47xx_board_type *bcm47xx_board_get_nvram(void) -+{ -+ char buf1[30]; -+ char buf2[30]; -+ char buf3[30]; -+ const struct bcm47xx_board_type_list1 *e1; -+ const struct bcm47xx_board_type_list2 *e2; -+ const struct bcm47xx_board_type_list3 *e3; -+ -+ if (bcm47xx_nvram_getenv("model_name", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_model_name; e1->value1; e1++) { -+ if (!strcmp(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("model_no", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_model_no; e1->value1; e1++) { -+ if (strstarts(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("machine_name", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_machine_name; e1->value1; e1++) { -+ if (strstarts(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_hardware_version; e1->value1; e1++) { -+ if (strstarts(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("productid", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_productid; e1->value1; e1++) { -+ if (!strcmp(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("ModelId", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_ModelId; e1->value1; e1++) { -+ if (!strcmp(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("melco_id", buf1, sizeof(buf1)) >= 0 || -+ bcm47xx_nvram_getenv("buf1falo_id", buf1, sizeof(buf1)) >= 0) { -+ /* buffalo hardware, check id for specific hardware matches */ -+ for (e1 = bcm47xx_board_list_melco_id; e1->value1; e1++) { -+ if (!strcmp(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("boot_hw_model", buf1, sizeof(buf1)) >= 0 && -+ bcm47xx_nvram_getenv("boot_hw_ver", buf2, sizeof(buf2)) >= 0) { -+ for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) { -+ if (!strcmp(buf1, e2->value1) && -+ !strcmp(buf2, e2->value2)) -+ return &e2->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("board_id", buf1, sizeof(buf1)) >= 0) { -+ for (e1 = bcm47xx_board_list_board_id; e1->value1; e1++) { -+ if (!strcmp(buf1, e1->value1)) -+ return &e1->board; -+ } -+ } -+ -+ if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 && -+ bcm47xx_nvram_getenv("boardnum", buf2, sizeof(buf2)) >= 0 && -+ bcm47xx_nvram_getenv("boardrev", buf3, sizeof(buf3)) >= 0) { -+ for (e3 = bcm47xx_board_list_board; e3->value1; e3++) { -+ if (!strcmp(buf1, e3->value1) && -+ !strcmp(buf2, e3->value2) && -+ !strcmp(buf3, e3->value3)) -+ return &e3->board; -+ } -+ } -+ return bcm47xx_board_unknown; -+} -+ -+void __init bcm47xx_board_detect(void) -+{ -+ int err; -+ char buf[10]; -+ const struct bcm47xx_board_type *board_detected; -+ -+ if (bcm47xx_board.board != BCM47XX_BOARD_NO) -+ return; -+ -+ /* check if the nvram is available */ -+ err = bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf)); -+ -+ /* init of nvram failed, probably too early now */ -+ if (err == -ENXIO) { -+ return; -+ } -+ -+ board_detected = bcm47xx_board_get_nvram(); -+ bcm47xx_board.board = board_detected->board; -+ strlcpy(bcm47xx_board.name, board_detected->name, -+ BCM47XX_BOARD_MAX_NAME); -+} -+ -+enum bcm47xx_board bcm47xx_board_get(void) -+{ -+ return bcm47xx_board.board; -+} -+EXPORT_SYMBOL(bcm47xx_board_get); -+ -+const char *bcm47xx_board_get_name(void) -+{ -+ return bcm47xx_board.name; -+} -+EXPORT_SYMBOL(bcm47xx_board_get_name); ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -36,6 +36,7 @@ - #include <asm/time.h> - #include <bcm47xx.h> - #include <bcm47xx_nvram.h> -+#include <bcm47xx_board.h> - - union bcm47xx_bus bcm47xx_bus; - EXPORT_SYMBOL(bcm47xx_bus); -@@ -221,6 +222,7 @@ void __init plat_mem_setup(void) - _machine_restart = bcm47xx_machine_restart; - _machine_halt = bcm47xx_machine_halt; - pm_power_off = bcm47xx_machine_halt; -+ bcm47xx_board_detect(); - } - - static int __init bcm47xx_register_bus_complete(void) ---- /dev/null -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -0,0 +1,110 @@ -+#ifndef __BCM47XX_BOARD_H -+#define __BCM47XX_BOARD_H -+ -+enum bcm47xx_board { -+ BCM47XX_BOARD_ASUS_RTAC66U, -+ BCM47XX_BOARD_ASUS_RTN10, -+ BCM47XX_BOARD_ASUS_RTN10D, -+ BCM47XX_BOARD_ASUS_RTN10U, -+ BCM47XX_BOARD_ASUS_RTN12, -+ BCM47XX_BOARD_ASUS_RTN12B1, -+ BCM47XX_BOARD_ASUS_RTN12C1, -+ BCM47XX_BOARD_ASUS_RTN12D1, -+ BCM47XX_BOARD_ASUS_RTN12HP, -+ BCM47XX_BOARD_ASUS_RTN15U, -+ BCM47XX_BOARD_ASUS_RTN16, -+ BCM47XX_BOARD_ASUS_RTN53, -+ BCM47XX_BOARD_ASUS_RTN66U, -+ BCM47XX_BOARD_ASUS_WL300G, -+ BCM47XX_BOARD_ASUS_WL320GE, -+ BCM47XX_BOARD_ASUS_WL330GE, -+ BCM47XX_BOARD_ASUS_WL500GD, -+ BCM47XX_BOARD_ASUS_WL500GPV1, -+ BCM47XX_BOARD_ASUS_WL500GPV2, -+ BCM47XX_BOARD_ASUS_WL500W, -+ BCM47XX_BOARD_ASUS_WL520GC, -+ BCM47XX_BOARD_ASUS_WL520GU, -+ BCM47XX_BOARD_ASUS_WL700GE, -+ BCM47XX_BOARD_ASUS_WLHDD, -+ -+ BCM47XX_BOARD_BELKIN_F7D4301, -+ -+ BCM47XX_BOARD_BUFFALO_WBR2_G54, -+ BCM47XX_BOARD_BUFFALO_WHR2_A54G54, -+ BCM47XX_BOARD_BUFFALO_WHR_G125, -+ BCM47XX_BOARD_BUFFALO_WHR_G54S, -+ BCM47XX_BOARD_BUFFALO_WHR_HP_G54, -+ BCM47XX_BOARD_BUFFALO_WLA2_G54L, -+ BCM47XX_BOARD_BUFFALO_WZR_G300N, -+ BCM47XX_BOARD_BUFFALO_WZR_RS_G54, -+ BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP, -+ -+ BCM47XX_BOARD_CISCO_M10V1, -+ BCM47XX_BOARD_CISCO_M20V1, -+ -+ BCM47XX_BOARD_DELL_TM2300, -+ -+ BCM47XX_BOARD_DLINK_DIR130, -+ BCM47XX_BOARD_DLINK_DIR330, -+ -+ BCM47XX_BOARD_HUAWEI_E970, -+ -+ BCM47XX_BOARD_LINKSYS_E900V1, -+ BCM47XX_BOARD_LINKSYS_E1000V1, -+ BCM47XX_BOARD_LINKSYS_E1000V2, -+ BCM47XX_BOARD_LINKSYS_E1000V21, -+ BCM47XX_BOARD_LINKSYS_E1200V2, -+ BCM47XX_BOARD_LINKSYS_E2000V1, -+ BCM47XX_BOARD_LINKSYS_E3000V1, -+ BCM47XX_BOARD_LINKSYS_E3200V1, -+ BCM47XX_BOARD_LINKSYS_E4200V1, -+ BCM47XX_BOARD_LINKSYS_WRT150NV1, -+ BCM47XX_BOARD_LINKSYS_WRT150NV11, -+ BCM47XX_BOARD_LINKSYS_WRT160NV1, -+ BCM47XX_BOARD_LINKSYS_WRT160NV3, -+ BCM47XX_BOARD_LINKSYS_WRT300NV11, -+ BCM47XX_BOARD_LINKSYS_WRT310NV1, -+ BCM47XX_BOARD_LINKSYS_WRT310NV2, -+ BCM47XX_BOARD_LINKSYS_WRT54G3GV2, -+ BCM47XX_BOARD_LINKSYS_WRT610NV1, -+ BCM47XX_BOARD_LINKSYS_WRT610NV2, -+ BCM47XX_BOARD_LINKSYS_WRTSL54GS, -+ -+ BCM47XX_BOARD_MOTOROLA_WE800G, -+ BCM47XX_BOARD_MOTOROLA_WR850GP, -+ BCM47XX_BOARD_MOTOROLA_WR850GV2V3, -+ -+ BCM47XX_BOARD_NETGEAR_WGR614V8, -+ BCM47XX_BOARD_NETGEAR_WGR614V9, -+ BCM47XX_BOARD_NETGEAR_WNDR3300, -+ BCM47XX_BOARD_NETGEAR_WNDR3400V1, -+ BCM47XX_BOARD_NETGEAR_WNDR3400V2, -+ BCM47XX_BOARD_NETGEAR_WNDR3400VCNA, -+ BCM47XX_BOARD_NETGEAR_WNDR3700V3, -+ BCM47XX_BOARD_NETGEAR_WNDR4000, -+ BCM47XX_BOARD_NETGEAR_WNDR4500V1, -+ BCM47XX_BOARD_NETGEAR_WNDR4500V2, -+ BCM47XX_BOARD_NETGEAR_WNR2000, -+ BCM47XX_BOARD_NETGEAR_WNR3500L, -+ BCM47XX_BOARD_NETGEAR_WNR3500U, -+ BCM47XX_BOARD_NETGEAR_WNR3500V2, -+ BCM47XX_BOARD_NETGEAR_WNR3500V2VC, -+ BCM47XX_BOARD_NETGEAR_WNR834BV2, -+ -+ BCM47XX_BOARD_PHICOMM_M1, -+ -+ BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE, -+ -+ BCM47XX_BOARD_ZTE_H218N, -+ -+ BCM47XX_BOARD_UNKNOWN, -+ BCM47XX_BOARD_NO, -+}; -+ -+#define BCM47XX_BOARD_MAX_NAME 30 -+ -+void bcm47xx_board_detect(void); -+enum bcm47xx_board bcm47xx_board_get(void); -+const char *bcm47xx_board_get_name(void); -+ -+#endif /* __BCM47XX_BOARD_H */ diff --git a/target/linux/brcm47xx/patches-3.10/071-MIPS-BCM47XX-print-board-name-in-proc-cpuinfo.patch b/target/linux/brcm47xx/patches-3.10/071-MIPS-BCM47XX-print-board-name-in-proc-cpuinfo.patch deleted file mode 100644 index c746279dc2..0000000000 --- a/target/linux/brcm47xx/patches-3.10/071-MIPS-BCM47XX-print-board-name-in-proc-cpuinfo.patch +++ /dev/null @@ -1,55 +0,0 @@ -commit 7ad3b82f9d80ef8919dcfdfe7561e1a83e09c6bd -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed Sep 18 13:29:58 2013 +0200 - - MIPS: BCM47XX: Print board name in /proc/cpuinfo - - Do not print the constant system type "Broadcom BCM47XX" but print the - name of the actual SoC in use and the detected board. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - Cc: linux-mips@linux-mips.org - Patchwork: https://patchwork.linux-mips.org/patch/5839/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/prom.c -+++ b/arch/mips/bcm47xx/prom.c -@@ -32,12 +32,37 @@ - #include <asm/bootinfo.h> - #include <asm/fw/cfe/cfe_api.h> - #include <asm/fw/cfe/cfe_error.h> -+#include <bcm47xx.h> -+#include <bcm47xx_board.h> - - static int cfe_cons_handle; - -+static u16 get_chip_id(void) -+{ -+ switch (bcm47xx_bus_type) { -+#ifdef CONFIG_BCM47XX_SSB -+ case BCM47XX_BUS_TYPE_SSB: -+ return bcm47xx_bus.ssb.chip_id; -+#endif -+#ifdef CONFIG_BCM47XX_BCMA -+ case BCM47XX_BUS_TYPE_BCMA: -+ return bcm47xx_bus.bcma.bus.chipinfo.id; -+#endif -+ } -+ return 0; -+} -+ - const char *get_system_type(void) - { -- return "Broadcom BCM47XX"; -+ static char buf[50]; -+ u16 chip_id = get_chip_id(); -+ -+ snprintf(buf, sizeof(buf), -+ (chip_id > 0x9999) ? "Broadcom BCM%d (%s)" : -+ "Broadcom BCM%04X (%s)", -+ chip_id, bcm47xx_board_get_name()); -+ -+ return buf; - } - - void prom_putchar(char c) diff --git a/target/linux/brcm47xx/patches-3.10/072-MIPS-BCM47XX-only-print-SoC-name-in-system-type-in-c.patch b/target/linux/brcm47xx/patches-3.10/072-MIPS-BCM47XX-only-print-SoC-name-in-system-type-in-c.patch deleted file mode 100644 index 4dcd380aea..0000000000 --- a/target/linux/brcm47xx/patches-3.10/072-MIPS-BCM47XX-only-print-SoC-name-in-system-type-in-c.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 17e0ca5d6e08a83eed8dada75af4c0107f162051 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Thu, 19 Sep 2013 23:40:09 +0200 -Subject: [PATCH 018/110] MIPS: BCM47XX: only print SoC name in system type in - cpuinfo - -Recently the output of "system type" in /proc/cpuinfo was changed to -Broadcom BCM4730 (Some sample board), but it is better to just print -the SoC name in the "system type" entry. The board name will be added -in the machine entry later. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/5865/ ---- - arch/mips/bcm47xx/prom.c | 31 ++++++++------------------ - arch/mips/bcm47xx/setup.c | 2 ++ - arch/mips/include/asm/mach-bcm47xx/bcm47xx.h | 2 ++ - 3 files changed, 13 insertions(+), 22 deletions(-) - ---- a/arch/mips/bcm47xx/prom.c -+++ b/arch/mips/bcm47xx/prom.c -@@ -37,32 +37,19 @@ - - static int cfe_cons_handle; - --static u16 get_chip_id(void) --{ -- switch (bcm47xx_bus_type) { --#ifdef CONFIG_BCM47XX_SSB -- case BCM47XX_BUS_TYPE_SSB: -- return bcm47xx_bus.ssb.chip_id; --#endif --#ifdef CONFIG_BCM47XX_BCMA -- case BCM47XX_BUS_TYPE_BCMA: -- return bcm47xx_bus.bcma.bus.chipinfo.id; --#endif -- } -- return 0; --} -+static char bcm47xx_system_type[20] = "Broadcom BCM47XX"; - - const char *get_system_type(void) - { -- static char buf[50]; -- u16 chip_id = get_chip_id(); -- -- snprintf(buf, sizeof(buf), -- (chip_id > 0x9999) ? "Broadcom BCM%d (%s)" : -- "Broadcom BCM%04X (%s)", -- chip_id, bcm47xx_board_get_name()); -+ return bcm47xx_system_type; -+} - -- return buf; -+__init void bcm47xx_set_system_type(u16 chip_id) -+{ -+ snprintf(bcm47xx_system_type, sizeof(bcm47xx_system_type), -+ (chip_id > 0x9999) ? "Broadcom BCM%d" : -+ "Broadcom BCM%04X", -+ chip_id); - } - - void prom_putchar(char c) ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -210,12 +210,14 @@ void __init plat_mem_setup(void) - #ifdef CONFIG_BCM47XX_BCMA - bcm47xx_bus_type = BCM47XX_BUS_TYPE_BCMA; - bcm47xx_register_bcma(); -+ bcm47xx_set_system_type(bcm47xx_bus.bcma.bus.chipinfo.id); - #endif - } else { - printk(KERN_INFO "bcm47xx: using ssb bus\n"); - #ifdef CONFIG_BCM47XX_SSB - bcm47xx_bus_type = BCM47XX_BUS_TYPE_SSB; - bcm47xx_register_ssb(); -+ bcm47xx_set_system_type(bcm47xx_bus.ssb.chip_id); - #endif - } - ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx.h -@@ -56,4 +56,6 @@ void bcm47xx_fill_bcma_boardinfo(struct - const char *prefix); - #endif - -+void bcm47xx_set_system_type(u16 chip_id); -+ - #endif /* __ASM_BCM47XX_H */ diff --git a/target/linux/brcm47xx/patches-3.10/073-MIPS-BCM47XX-print-board-name-in-machine-entry-in-cp.patch b/target/linux/brcm47xx/patches-3.10/073-MIPS-BCM47XX-print-board-name-in-machine-entry-in-cp.patch deleted file mode 100644 index 8a786429ed..0000000000 --- a/target/linux/brcm47xx/patches-3.10/073-MIPS-BCM47XX-print-board-name-in-machine-entry-in-cp.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 6d683038f2155bf0d6f486a1f11a10bbc455da8a Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Thu, 19 Sep 2013 23:40:10 +0200 -Subject: [PATCH 019/110] MIPS: BCM47XX: print board name in machine entry in - cpuinfo - -This will add the board name to the machine entry in /proc/cpuinfo. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/5864/ ---- - arch/mips/bcm47xx/setup.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -32,6 +32,7 @@ - #include <linux/ssb/ssb_embedded.h> - #include <linux/bcma/bcma_soc.h> - #include <asm/bootinfo.h> -+#include <asm/prom.h> - #include <asm/reboot.h> - #include <asm/time.h> - #include <bcm47xx.h> -@@ -225,6 +226,7 @@ void __init plat_mem_setup(void) - _machine_halt = bcm47xx_machine_halt; - pm_power_off = bcm47xx_machine_halt; - bcm47xx_board_detect(); -+ mips_set_machine_name(bcm47xx_board_get_name()); - } - - static int __init bcm47xx_register_bus_complete(void) diff --git a/target/linux/brcm47xx/patches-3.10/075-MIPS-BCM47XX-fix-detection-for-some-boards.patch b/target/linux/brcm47xx/patches-3.10/075-MIPS-BCM47XX-fix-detection-for-some-boards.patch deleted file mode 100644 index cfa45bc874..0000000000 --- a/target/linux/brcm47xx/patches-3.10/075-MIPS-BCM47XX-fix-detection-for-some-boards.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 255842a25bf36b7ba585e6cf81d856fa9df66cf2 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 3 Jan 2014 20:41:58 +0100 -Subject: [PATCH] MIPS: BCM47XX: fix detection for some boards - -When a nvram reset was performed from CFE, it sometimes does not -contain the productid value in nvram, but it still contains -hardware_version. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/board.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -56,6 +56,12 @@ struct bcm47xx_board_type_list1 bcm47xx_ - /* hardware_version */ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_hardware_version[] __initconst = { -+ {{BCM47XX_BOARD_ASUS_RTN10U, "Asus RT-N10U"}, "RTN10U"}, -+ {{BCM47XX_BOARD_ASUS_RTN12, "Asus RT-N12"}, "RT-N12"}, -+ {{BCM47XX_BOARD_ASUS_RTN12B1, "Asus RT-N12B1"}, "RTN12B1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12C1, "Asus RT-N12C1"}, "RTN12C1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12D1, "Asus RT-N12D1"}, "RTN12D1"}, -+ {{BCM47XX_BOARD_ASUS_RTN12HP, "Asus RT-N12HP"}, "RTN12HP"}, - {{BCM47XX_BOARD_ASUS_RTN16, "Asus RT-N16"}, "RT-N16-"}, - {{BCM47XX_BOARD_ASUS_WL320GE, "Asus WL320GE"}, "WL320G-"}, - {{BCM47XX_BOARD_ASUS_WL330GE, "Asus WL330GE"}, "WL330GE-"}, -@@ -75,12 +81,6 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_ASUS_RTAC66U, "Asus RT-AC66U"}, "RT-AC66U"}, - {{BCM47XX_BOARD_ASUS_RTN10, "Asus RT-N10"}, "RT-N10"}, - {{BCM47XX_BOARD_ASUS_RTN10D, "Asus RT-N10D"}, "RT-N10D"}, -- {{BCM47XX_BOARD_ASUS_RTN10U, "Asus RT-N10U"}, "RT-N10U"}, -- {{BCM47XX_BOARD_ASUS_RTN12, "Asus RT-N12"}, "RT-N12"}, -- {{BCM47XX_BOARD_ASUS_RTN12B1, "Asus RT-N12B1"}, "RT-N12B1"}, -- {{BCM47XX_BOARD_ASUS_RTN12C1, "Asus RT-N12C1"}, "RT-N12C1"}, -- {{BCM47XX_BOARD_ASUS_RTN12D1, "Asus RT-N12D1"}, "RT-N12D1"}, -- {{BCM47XX_BOARD_ASUS_RTN12HP, "Asus RT-N12HP"}, "RT-N12HP"}, - {{BCM47XX_BOARD_ASUS_RTN15U, "Asus RT-N15U"}, "RT-N15U"}, - {{BCM47XX_BOARD_ASUS_RTN16, "Asus RT-N16"}, "RT-N16"}, - {{BCM47XX_BOARD_ASUS_RTN53, "Asus RT-N53"}, "RT-N53"}, -@@ -174,6 +174,7 @@ struct bcm47xx_board_type_list3 bcm47xx_ - {{BCM47XX_BOARD_HUAWEI_E970, "Huawei E970"}, "0x048e", "0x5347", "0x11"}, - {{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"}, - {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, -+ {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "0x04CF", "3500", "02"}, - { {0}, 0}, - }; - diff --git a/target/linux/brcm47xx/patches-3.10/076-MIPS-BCM47XX-add-board-detection-for-Linksys-WRT54GS.patch b/target/linux/brcm47xx/patches-3.10/076-MIPS-BCM47XX-add-board-detection-for-Linksys-WRT54GS.patch deleted file mode 100644 index 098cf119cb..0000000000 --- a/target/linux/brcm47xx/patches-3.10/076-MIPS-BCM47XX-add-board-detection-for-Linksys-WRT54GS.patch +++ /dev/null @@ -1,34 +0,0 @@ -From a2da7b7a2cb8319b6383e93d99905cb027252584 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 3 Jan 2014 20:41:59 +0100 -Subject: [PATCH] MIPS: BCM47XX: add board detection for Linksys WRT54GS V1 - -This adds board detection for Linksys WRT54GS V1. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/board.c | 1 + - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 1 + - 2 files changed, 2 insertions(+) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -175,6 +175,7 @@ struct bcm47xx_board_type_list3 bcm47xx_ - {{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"}, - {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, - {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "0x04CF", "3500", "02"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54GSV1, "Linksys WRT54GS V1"}, "0x0101", "42", "0x10"}, - { {0}, 0}, - }; - ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -66,6 +66,7 @@ enum bcm47xx_board { - BCM47XX_BOARD_LINKSYS_WRT310NV1, - BCM47XX_BOARD_LINKSYS_WRT310NV2, - BCM47XX_BOARD_LINKSYS_WRT54G3GV2, -+ BCM47XX_BOARD_LINKSYS_WRT54GSV1, - BCM47XX_BOARD_LINKSYS_WRT610NV1, - BCM47XX_BOARD_LINKSYS_WRT610NV2, - BCM47XX_BOARD_LINKSYS_WRTSL54GS, diff --git a/target/linux/brcm47xx/patches-3.10/077-MIPS-BCM47XX-fix-sparse-warnings-in-board.c.patch b/target/linux/brcm47xx/patches-3.10/077-MIPS-BCM47XX-fix-sparse-warnings-in-board.c.patch deleted file mode 100644 index b7ce90a213..0000000000 --- a/target/linux/brcm47xx/patches-3.10/077-MIPS-BCM47XX-fix-sparse-warnings-in-board.c.patch +++ /dev/null @@ -1,113 +0,0 @@ -From ab76ce5c01293f518db823c7089d52586fc1d899 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 3 Jan 2014 20:42:00 +0100 -Subject: [PATCH] MIPS: BCM47XX: fix sparse warnings in board.c - -This fixes the following sparse warnings: -arch/mips/bcm47xx/board.c:39:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:46:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:53:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:78:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:99:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:109:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:124:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:155:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:177:16: warning: Using plain integer as NULL pointer -arch/mips/bcm47xx/board.c:189:16: warning: Using plain integer as NULL pointer - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/board.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -36,21 +36,21 @@ static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_model_name[] __initconst = { - {{BCM47XX_BOARD_DLINK_DIR130, "D-Link DIR-130"}, "DIR-130"}, - {{BCM47XX_BOARD_DLINK_DIR330, "D-Link DIR-330"}, "DIR-330"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* model_no */ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_model_no[] __initconst = { - {{BCM47XX_BOARD_ASUS_WL700GE, "Asus WL700"}, "WL700"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* machine_name */ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_machine_name[] __initconst = { - {{BCM47XX_BOARD_LINKSYS_WRTSL54GS, "Linksys WRTSL54GS"}, "WRTSL54GS"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* hardware_version */ -@@ -72,7 +72,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_ASUS_WL520GC, "Asus WL520GC"}, "WL520GC-"}, - {{BCM47XX_BOARD_ASUS_WL520GU, "Asus WL520GU"}, "WL520GU-"}, - {{BCM47XX_BOARD_BELKIN_F7D4301, "Belkin F7D4301"}, "F7D4301"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* productid */ -@@ -87,7 +87,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_ASUS_RTN66U, "Asus RT-N66U"}, "RT-N66U"}, - {{BCM47XX_BOARD_ASUS_WL300G, "Asus WL300G"}, "WL300g"}, - {{BCM47XX_BOARD_ASUS_WLHDD, "Asus WLHDD"}, "WLHDD"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* ModelId */ -@@ -97,7 +97,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_MOTOROLA_WE800G, "Motorola WE800G"}, "WE800G"}, - {{BCM47XX_BOARD_MOTOROLA_WR850GP, "Motorola WR850GP"}, "WR850GP"}, - {{BCM47XX_BOARD_MOTOROLA_WR850GV2V3, "Motorola WR850G"}, "WR850G"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* melco_id or buf1falo_id */ -@@ -112,7 +112,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_BUFFALO_WZR_G300N, "Buffalo WZR-G300N"}, "31120"}, - {{BCM47XX_BOARD_BUFFALO_WZR_RS_G54, "Buffalo WZR-RS-G54"}, "30083"}, - {{BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP, "Buffalo WZR-RS-G54HP"}, "30103"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* boot_hw_model, boot_hw_ver */ -@@ -143,7 +143,7 @@ struct bcm47xx_board_type_list2 bcm47xx_ - {{BCM47XX_BOARD_LINKSYS_WRT54G3GV2, "Linksys WRT54G3GV2-VF"}, "WRT54G3GV2-VF", "1.0"}, - {{BCM47XX_BOARD_LINKSYS_WRT610NV1, "Linksys WRT610N V1"}, "WRT610N", "1.0"}, - {{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* board_id */ -@@ -165,7 +165,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_NETGEAR_WNR3500V2, "Netgear WNR3500 V2"}, "U12H127T00_NETGEAR"}, - {{BCM47XX_BOARD_NETGEAR_WNR3500V2VC, "Netgear WNR3500 V2vc"}, "U12H127T70_NETGEAR"}, - {{BCM47XX_BOARD_NETGEAR_WNR834BV2, "Netgear WNR834B V2"}, "U12H081T00_NETGEAR"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - /* boardtype, boardnum, boardrev */ -@@ -176,7 +176,7 @@ struct bcm47xx_board_type_list3 bcm47xx_ - {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, - {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "0x04CF", "3500", "02"}, - {{BCM47XX_BOARD_LINKSYS_WRT54GSV1, "Linksys WRT54GS V1"}, "0x0101", "42", "0x10"}, -- { {0}, 0}, -+ { {0}, NULL}, - }; - - static const diff --git a/target/linux/brcm47xx/patches-3.10/080-MIPS-Add-8250-16550-serial-early-printk-driver.patch b/target/linux/brcm47xx/patches-3.10/080-MIPS-Add-8250-16550-serial-early-printk-driver.patch deleted file mode 100644 index bfbe43be5b..0000000000 --- a/target/linux/brcm47xx/patches-3.10/080-MIPS-Add-8250-16550-serial-early-printk-driver.patch +++ /dev/null @@ -1,124 +0,0 @@ -commit 0a76092a63809a0e72e3e9552acadf42869c0293 -Author: Yoichi Yuasa <yuasa@linux-mips.org> -Date: Mon Feb 8 20:59:39 2010 +0900 - - MIPS: Add 8250/16550 serial early printk driver - - Signed-off-by: Yoichi Yuasa <yuasa@linux-mips.org> - Cc: linux-mips <linux-mips@linux-mips.org> - Patchwork: https://patchwork.linux-mips.org/patch/947/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/Kconfig.debug -+++ b/arch/mips/Kconfig.debug -@@ -20,6 +20,14 @@ config EARLY_PRINTK - doesn't cooperate with an X server. You should normally say N here, - unless you want to debug such a crash. - -+config EARLY_PRINTK_8250 -+ bool "8250/16550 and compatible serial early printk driver" -+ depends on EARLY_PRINTK -+ default n -+ help -+ If you say Y here, it will be possible to use a 8250/16550 serial -+ port as the boot console. -+ - config CMDLINE_BOOL - bool "Built-in kernel command line" - default n ---- a/arch/mips/include/asm/setup.h -+++ b/arch/mips/include/asm/setup.h -@@ -5,6 +5,14 @@ - - extern void setup_early_printk(void); - -+#ifdef CONFIG_EARLY_PRINTK_8250 -+extern void setup_8250_early_printk_port(unsigned long base, -+ unsigned int reg_shift, unsigned int timeout); -+#else -+static inline void setup_8250_early_printk_port(unsigned long base, -+ unsigned int reg_shift, unsigned int timeout) {} -+#endif -+ - extern void set_handler(unsigned long offset, void *addr, unsigned long len); - extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); - ---- a/arch/mips/kernel/Makefile -+++ b/arch/mips/kernel/Makefile -@@ -84,6 +84,7 @@ obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o - obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o - obj-$(CONFIG_CRASH_DUMP) += crash_dump.o - obj-$(CONFIG_EARLY_PRINTK) += early_printk.o -+obj-$(CONFIG_EARLY_PRINTK_8250) += early_printk_8250.o - obj-$(CONFIG_SPINLOCK_TEST) += spinlock_test.o - obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o - ---- /dev/null -+++ b/arch/mips/kernel/early_printk_8250.c -@@ -0,0 +1,66 @@ -+/* -+ * 8250/16550-type serial ports prom_putchar() -+ * -+ * Copyright (C) 2010 Yoichi Yuasa <yuasa@linux-mips.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+#include <linux/io.h> -+#include <linux/serial_core.h> -+#include <linux/serial_reg.h> -+ -+static void __iomem *serial8250_base; -+static unsigned int serial8250_reg_shift; -+static unsigned int serial8250_tx_timeout; -+ -+void setup_8250_early_printk_port(unsigned long base, unsigned int reg_shift, -+ unsigned int timeout) -+{ -+ serial8250_base = (void __iomem *)base; -+ serial8250_reg_shift = reg_shift; -+ serial8250_tx_timeout = timeout; -+} -+ -+static inline u8 serial_in(int offset) -+{ -+ return readb(serial8250_base + (offset << serial8250_reg_shift)); -+} -+ -+static inline void serial_out(int offset, char value) -+{ -+ writeb(value, serial8250_base + (offset << serial8250_reg_shift)); -+} -+ -+void prom_putchar(char c) -+{ -+ unsigned int timeout; -+ int status, bits; -+ -+ if (!serial8250_base) -+ return; -+ -+ timeout = serial8250_tx_timeout; -+ bits = UART_LSR_TEMT | UART_LSR_THRE; -+ -+ do { -+ status = serial_in(UART_LSR); -+ -+ if (--timeout == 0) -+ break; -+ } while ((status & bits) != bits); -+ -+ if (timeout) -+ serial_out(UART_TX, c); -+} diff --git a/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch b/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch deleted file mode 100644 index 1537db5158..0000000000 --- a/target/linux/brcm47xx/patches-3.10/081-MIPS-BCM47XX-Remove-CFE-support.patch +++ /dev/null @@ -1,151 +0,0 @@ -commit 808fe9c2fa81a6b3e20fe813d5410e7fd6606efa -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sun Jul 18 15:11:26 2010 +0200 - - MIPS: BCM47XX: Remove CFE support - - bcm47xx only uses the CFE code for early print to a console, but that - is also possible with a early print serial 8250 driver. - - The CFE api init causes hangs somewhere in prom_init_cfe() on some - devices like the Buffalo WHR-HP-G54 and the Asus WL-520GU. - This was reported in https://dev.openwrt.org/ticket/4061 and - https://forum.openwrt.org/viewtopic.php?id=17063 - - This will remove all the CFE handling code from bcm47xx. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -112,13 +112,11 @@ config BCM47XX - select CEVT_R4K - select CSRC_R4K - select DMA_NONCOHERENT -- select FW_CFE - select HW_HAS_PCI - select IRQ_CPU - select NO_EXCEPT_FILL - select SYS_SUPPORTS_32BIT_KERNEL - select SYS_SUPPORTS_LITTLE_ENDIAN -- select SYS_HAS_EARLY_PRINTK - help - Support for BCM47XX based boards - ---- a/arch/mips/bcm47xx/prom.c -+++ b/arch/mips/bcm47xx/prom.c -@@ -30,12 +30,9 @@ - #include <linux/spinlock.h> - #include <linux/smp.h> - #include <asm/bootinfo.h> --#include <asm/fw/cfe/cfe_api.h> --#include <asm/fw/cfe/cfe_error.h> - #include <bcm47xx.h> - #include <bcm47xx_board.h> - --static int cfe_cons_handle; - - static char bcm47xx_system_type[20] = "Broadcom BCM47XX"; - -@@ -52,91 +49,6 @@ __init void bcm47xx_set_system_type(u16 - chip_id); - } - --void prom_putchar(char c) --{ -- while (cfe_write(cfe_cons_handle, &c, 1) == 0) -- ; --} -- --static __init void prom_init_cfe(void) --{ -- uint32_t cfe_ept; -- uint32_t cfe_handle; -- uint32_t cfe_eptseal; -- int argc = fw_arg0; -- char **envp = (char **) fw_arg2; -- int *prom_vec = (int *) fw_arg3; -- -- /* -- * Check if a loader was used; if NOT, the 4 arguments are -- * what CFE gives us (handle, 0, EPT and EPTSEAL) -- */ -- if (argc < 0) { -- cfe_handle = (uint32_t)argc; -- cfe_ept = (uint32_t)envp; -- cfe_eptseal = (uint32_t)prom_vec; -- } else { -- if ((int)prom_vec < 0) { -- /* -- * Old loader; all it gives us is the handle, -- * so use the "known" entrypoint and assume -- * the seal. -- */ -- cfe_handle = (uint32_t)prom_vec; -- cfe_ept = 0xBFC00500; -- cfe_eptseal = CFE_EPTSEAL; -- } else { -- /* -- * Newer loaders bundle the handle/ept/eptseal -- * Note: prom_vec is in the loader's useg -- * which is still alive in the TLB. -- */ -- cfe_handle = prom_vec[0]; -- cfe_ept = prom_vec[2]; -- cfe_eptseal = prom_vec[3]; -- } -- } -- -- if (cfe_eptseal != CFE_EPTSEAL) { -- /* too early for panic to do any good */ -- printk(KERN_ERR "CFE's entrypoint seal doesn't match."); -- while (1) ; -- } -- -- cfe_init(cfe_handle, cfe_ept); --} -- --static __init void prom_init_console(void) --{ -- /* Initialize CFE console */ -- cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE); --} -- --static __init void prom_init_cmdline(void) --{ -- static char buf[COMMAND_LINE_SIZE] __initdata; -- -- /* Get the kernel command line from CFE */ -- if (cfe_getenv("LINUX_CMDLINE", buf, COMMAND_LINE_SIZE) >= 0) { -- buf[COMMAND_LINE_SIZE - 1] = 0; -- strcpy(arcs_cmdline, buf); -- } -- -- /* Force a console handover by adding a console= argument if needed, -- * as CFE is not available anymore later in the boot process. */ -- if ((strstr(arcs_cmdline, "console=")) == NULL) { -- /* Try to read the default serial port used by CFE */ -- if ((cfe_getenv("BOOT_CONSOLE", buf, COMMAND_LINE_SIZE) < 0) -- || (strncmp("uart", buf, 4))) -- /* Default to uart0 */ -- strcpy(buf, "uart0"); -- -- /* Compute the new command line */ -- snprintf(arcs_cmdline, COMMAND_LINE_SIZE, "%s console=ttyS%c,115200", -- arcs_cmdline, buf[4]); -- } --} -- - static __init void prom_init_mem(void) - { - unsigned long mem; -@@ -184,9 +96,6 @@ static __init void prom_init_mem(void) - - void __init prom_init(void) - { -- prom_init_cfe(); -- prom_init_console(); -- prom_init_cmdline(); - prom_init_mem(); - } - diff --git a/target/linux/brcm47xx/patches-3.10/082-MIPS-BCM47XX-add-EARLY_PRINTK_8250-support.patch b/target/linux/brcm47xx/patches-3.10/082-MIPS-BCM47XX-add-EARLY_PRINTK_8250-support.patch deleted file mode 100644 index 744e35985e..0000000000 --- a/target/linux/brcm47xx/patches-3.10/082-MIPS-BCM47XX-add-EARLY_PRINTK_8250-support.patch +++ /dev/null @@ -1,53 +0,0 @@ -commit 22250a38f970c173acb1b3fb30e6dce1430f697b -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Thu Sep 19 22:48:35 2013 +0200 - - MIPS: BCM47XX: add EARLY_PRINTK_8250 support - - The BCM47xx SoCs have a 8250 serial compatible console at address - 0x18000300 and an other at 0x18000400. On most devices 0x18000300 is - wired to some pins on the board, we should use that. - This is the smae for the AI (bcma) and the SB (ssb) bus, this is some - offset on the chip common core. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -117,6 +117,8 @@ config BCM47XX - select NO_EXCEPT_FILL - select SYS_SUPPORTS_32BIT_KERNEL - select SYS_SUPPORTS_LITTLE_ENDIAN -+ select SYS_HAS_EARLY_PRINTK -+ select EARLY_PRINTK_8250 if EARLY_PRINTK - help - Support for BCM47XX based boards - ---- a/arch/mips/bcm47xx/prom.c -+++ b/arch/mips/bcm47xx/prom.c -@@ -28,6 +28,8 @@ - #include <linux/types.h> - #include <linux/kernel.h> - #include <linux/spinlock.h> -+#include <linux/ssb/ssb_driver_chipcommon.h> -+#include <linux/ssb/ssb_regs.h> - #include <linux/smp.h> - #include <asm/bootinfo.h> - #include <bcm47xx.h> -@@ -94,9 +96,16 @@ static __init void prom_init_mem(void) - add_memory_region(0, mem, BOOT_MEM_RAM); - } - -+/* -+ * This is the first serial on the chip common core, it is at this position -+ * for sb (ssb) and ai (bcma) bus. -+ */ -+#define BCM47XX_SERIAL_ADDR (SSB_ENUM_BASE + SSB_CHIPCO_UART0_DATA) -+ - void __init prom_init(void) - { - prom_init_mem(); -+ setup_8250_early_printk_port(CKSEG1ADDR(BCM47XX_SERIAL_ADDR), 0, 0); - } - - void __init prom_free_prom_memory(void) diff --git a/target/linux/brcm47xx/patches-3.10/085-MIPS-BCM47XX-Get-GPIO-pin-from-nvram-configuration.patch b/target/linux/brcm47xx/patches-3.10/085-MIPS-BCM47XX-Get-GPIO-pin-from-nvram-configuration.patch deleted file mode 100644 index a0f91a48ad..0000000000 --- a/target/linux/brcm47xx/patches-3.10/085-MIPS-BCM47XX-Get-GPIO-pin-from-nvram-configuration.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit e49ec29e2da1fd7cdd6d966f389add031a1027a9 -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed Sep 18 13:31:15 2013 +0200 - - MIPS: BCM47XX: Get GPIO pin from nvram configuration - - The nvram contains some gpio configuration for boards. It is stored in - a gpio<number>=name format e.g. - gpio8=wps_button - gpio4=robo_reset - - This patches adds a function to parse these entries, so other driver - can use it. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - Cc: linux-mips@linux-mips.org - Patchwork: https://patchwork.linux-mips.org/patch/5841/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/nvram.c -+++ b/arch/mips/bcm47xx/nvram.c -@@ -190,3 +190,23 @@ int bcm47xx_nvram_getenv(char *name, cha - return -ENOENT; - } - EXPORT_SYMBOL(bcm47xx_nvram_getenv); -+ -+int bcm47xx_nvram_gpio_pin(const char *name) -+{ -+ int i, err; -+ char nvram_var[10]; -+ char buf[30]; -+ -+ for (i = 0; i < 16; i++) { -+ err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i); -+ if (err <= 0) -+ continue; -+ err = bcm47xx_nvram_getenv(nvram_var, buf, sizeof(buf)); -+ if (err <= 0) -+ continue; -+ if (!strcmp(name, buf)) -+ return i; -+ } -+ return -ENOENT; -+} -+EXPORT_SYMBOL(bcm47xx_nvram_gpio_pin); ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h -@@ -48,4 +48,6 @@ static inline void bcm47xx_nvram_parse_m - printk(KERN_WARNING "Can not parse mac address: %s\n", buf); - } - -+int bcm47xx_nvram_gpio_pin(const char *name); -+ - #endif /* __BCM47XX_NVRAM_H */ diff --git a/target/linux/brcm47xx/patches-3.10/090-MIPS-BCM47XX-fix-clock-detection-for-BCM5354-with-20.patch b/target/linux/brcm47xx/patches-3.10/090-MIPS-BCM47XX-fix-clock-detection-for-BCM5354-with-20.patch deleted file mode 100644 index ec595342c0..0000000000 --- a/target/linux/brcm47xx/patches-3.10/090-MIPS-BCM47XX-fix-clock-detection-for-BCM5354-with-20.patch +++ /dev/null @@ -1,57 +0,0 @@ -commit 0388a0410d590a6c239c1cfaa7d49bffd4ed1101 -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed Sep 18 13:32:59 2013 +0200 - - MIPS: BCM47XX: Fix clock detection for BCM5354 with 200MHz clock - - Some BCM5354 SoCs are running at 200MHz, but it is not possible to read - the clock from a register like it is done on some other SoC in ssb and - bcma. These devices should have a clkfreq nvram configuration value set - to 200, read it and set the clock to the correct value. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - Cc: linux-mips@linux-mips.org - Patchwork: https://patchwork.linux-mips.org/patch/5842/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/time.c -+++ b/arch/mips/bcm47xx/time.c -@@ -27,10 +27,14 @@ - #include <linux/ssb/ssb.h> - #include <asm/time.h> - #include <bcm47xx.h> -+#include <bcm47xx_nvram.h> - - void __init plat_time_init(void) - { - unsigned long hz = 0; -+ u16 chip_id = 0; -+ char buf[10]; -+ int len; - - /* - * Use deterministic values for initial counter interrupt -@@ -43,15 +47,23 @@ void __init plat_time_init(void) - #ifdef CONFIG_BCM47XX_SSB - case BCM47XX_BUS_TYPE_SSB: - hz = ssb_cpu_clock(&bcm47xx_bus.ssb.mipscore) / 2; -+ chip_id = bcm47xx_bus.ssb.chip_id; - break; - #endif - #ifdef CONFIG_BCM47XX_BCMA - case BCM47XX_BUS_TYPE_BCMA: - hz = bcma_cpu_clock(&bcm47xx_bus.bcma.bus.drv_mips) / 2; -+ chip_id = bcm47xx_bus.bcma.bus.chipinfo.id; - break; - #endif - } - -+ if (chip_id == 0x5354) { -+ len = bcm47xx_nvram_getenv("clkfreq", buf, sizeof(buf)); -+ if (len >= 0 && !strncmp(buf, "200", 4)) -+ hz = 100000000; -+ } -+ - if (!hz) - hz = 100000000; - diff --git a/target/linux/brcm47xx/patches-3.10/091-MIPS-BCM47XX-fix-detected-clock-on-Asus-WL520GC-and-.patch b/target/linux/brcm47xx/patches-3.10/091-MIPS-BCM47XX-fix-detected-clock-on-Asus-WL520GC-and-.patch deleted file mode 100644 index 460c0e42d6..0000000000 --- a/target/linux/brcm47xx/patches-3.10/091-MIPS-BCM47XX-fix-detected-clock-on-Asus-WL520GC-and-.patch +++ /dev/null @@ -1,49 +0,0 @@ -commit 935e93fcc022ff7be7046d2435ce6441e260abfb -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed Sep 18 13:33:00 2013 +0200 - - MIPS: BCM47XX: Fix detected clock on Asus WL520GC and WL520GU - - The Asus WL520GC and WL520GU are based on the BCM5354 and clocked at - 200MHz, but they do not have a clkfreq nvram variable set to the - correct value. This adds a workaround for these devices. - - Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> - Cc: linux-mips@linux-mips.org - Patchwork: https://patchwork.linux-mips.org/patch/5843/ - Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/time.c -+++ b/arch/mips/bcm47xx/time.c -@@ -28,6 +28,7 @@ - #include <asm/time.h> - #include <bcm47xx.h> - #include <bcm47xx_nvram.h> -+#include <bcm47xx_board.h> - - void __init plat_time_init(void) - { -@@ -35,6 +36,7 @@ void __init plat_time_init(void) - u16 chip_id = 0; - char buf[10]; - int len; -+ enum bcm47xx_board board = bcm47xx_board_get(); - - /* - * Use deterministic values for initial counter interrupt -@@ -64,6 +66,15 @@ void __init plat_time_init(void) - hz = 100000000; - } - -+ switch (board) { -+ case BCM47XX_BOARD_ASUS_WL520GC: -+ case BCM47XX_BOARD_ASUS_WL520GU: -+ hz = 100000000; -+ break; -+ default: -+ break; -+ } -+ - if (!hz) - hz = 100000000; - diff --git a/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch b/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch deleted file mode 100644 index 038e6a0b77..0000000000 --- a/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 855094d7e46eb14c597ca09631cf95a92909982d Mon Sep 17 00:00:00 2001 -From: Ilia Mirkin <imirkin@alum.mit.edu> -Date: Fri, 6 Dec 2013 18:56:53 -0500 -Subject: [PATCH] MIPS: BCM47XX: Fix some very confused types and data - corruption - -Fix nvram_read_alpha2 copying too many bytes over the ssb_sprom -structure. Also fix the arguments of the read_macaddr, although the code -was technically not wrong before due to an extra dereference. - -Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6211/ ---- - arch/mips/bcm47xx/sprom.c | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - ---- a/arch/mips/bcm47xx/sprom.c -+++ b/arch/mips/bcm47xx/sprom.c -@@ -135,7 +135,7 @@ static void nvram_read_leddc(const char - } - - static void nvram_read_macaddr(const char *prefix, const char *name, -- u8 (*val)[6], bool fallback) -+ u8 val[6], bool fallback) - { - char buf[100]; - int err; -@@ -144,11 +144,11 @@ static void nvram_read_macaddr(const cha - if (err < 0) - return; - -- bcm47xx_nvram_parse_macaddr(buf, *val); -+ bcm47xx_nvram_parse_macaddr(buf, val); - } - - static void nvram_read_alpha2(const char *prefix, const char *name, -- char (*val)[2], bool fallback) -+ char val[2], bool fallback) - { - char buf[10]; - int err; -@@ -162,7 +162,7 @@ static void nvram_read_alpha2(const char - pr_warn("alpha2 is too long %s\n", buf); - return; - } -- memcpy(val, buf, sizeof(val)); -+ memcpy(val, buf, 2); - } - - static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, -@@ -181,7 +181,7 @@ static void bcm47xx_fill_sprom_r1234589( - fallback); - nvram_read_s8(prefix, NULL, "ag1", &sprom->antenna_gain.a1, 0, - fallback); -- nvram_read_alpha2(prefix, "ccode", &sprom->alpha2, fallback); -+ nvram_read_alpha2(prefix, "ccode", sprom->alpha2, fallback); - } - - static void bcm47xx_fill_sprom_r12389(struct ssb_sprom *sprom, -@@ -634,20 +634,20 @@ static void bcm47xx_fill_sprom_path_r45( - static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, - const char *prefix, bool fallback) - { -- nvram_read_macaddr(prefix, "et0macaddr", &sprom->et0mac, fallback); -+ nvram_read_macaddr(prefix, "et0macaddr", sprom->et0mac, fallback); - nvram_read_u8(prefix, NULL, "et0mdcport", &sprom->et0mdcport, 0, - fallback); - nvram_read_u8(prefix, NULL, "et0phyaddr", &sprom->et0phyaddr, 0, - fallback); - -- nvram_read_macaddr(prefix, "et1macaddr", &sprom->et1mac, fallback); -+ nvram_read_macaddr(prefix, "et1macaddr", sprom->et1mac, fallback); - nvram_read_u8(prefix, NULL, "et1mdcport", &sprom->et1mdcport, 0, - fallback); - nvram_read_u8(prefix, NULL, "et1phyaddr", &sprom->et1phyaddr, 0, - fallback); - -- nvram_read_macaddr(prefix, "macaddr", &sprom->il0mac, fallback); -- nvram_read_macaddr(prefix, "il0macaddr", &sprom->il0mac, fallback); -+ nvram_read_macaddr(prefix, "macaddr", sprom->il0mac, fallback); -+ nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback); - } - - static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix, diff --git a/target/linux/brcm47xx/patches-3.10/110-MIPS-BCM47XX-add-vint-irq.patch b/target/linux/brcm47xx/patches-3.10/110-MIPS-BCM47XX-add-vint-irq.patch deleted file mode 100644 index e77f5d9173..0000000000 --- a/target/linux/brcm47xx/patches-3.10/110-MIPS-BCM47XX-add-vint-irq.patch +++ /dev/null @@ -1,64 +0,0 @@ -From d9e8fd334d85fc8e4a2867655309a60c8de80883 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed, 20 Nov 2013 23:03:35 +0100 -Subject: [PATCH 18/18] bcm47xx: add cpu_has_vint - ---- - arch/mips/bcm47xx/Kconfig | 1 + - arch/mips/bcm47xx/irq.c | 24 ++++++++++++++++++++++++ - 2 files changed, 25 insertions(+) - ---- a/arch/mips/bcm47xx/Kconfig -+++ b/arch/mips/bcm47xx/Kconfig -@@ -21,6 +21,7 @@ config BCM47XX_SSB - config BCM47XX_BCMA - bool "BCMA Support for Broadcom BCM47XX" - select SYS_HAS_CPU_MIPS32_R2 -+ select CPU_MIPSR2_IRQ_VI - select BCMA - select BCMA_HOST_SOC - select BCMA_DRIVER_MIPS ---- a/arch/mips/bcm47xx/irq.c -+++ b/arch/mips/bcm47xx/irq.c -@@ -25,6 +25,7 @@ - #include <linux/types.h> - #include <linux/interrupt.h> - #include <linux/irq.h> -+#include <asm/setup.h> - #include <asm/irq_cpu.h> - #include <bcm47xx.h> - -@@ -50,6 +51,18 @@ void plat_irq_dispatch(void) - do_IRQ(6); - } - -+#define DEFINE_HWx_IRQDISPATCH(x) \ -+ static void bcm47xx_hw ## x ## _irqdispatch(void) \ -+ { \ -+ do_IRQ(x); \ -+ } -+DEFINE_HWx_IRQDISPATCH(2) -+DEFINE_HWx_IRQDISPATCH(3) -+DEFINE_HWx_IRQDISPATCH(4) -+DEFINE_HWx_IRQDISPATCH(5) -+DEFINE_HWx_IRQDISPATCH(6) -+DEFINE_HWx_IRQDISPATCH(7) -+ - void __init arch_init_irq(void) - { - #ifdef CONFIG_BCM47XX_BCMA -@@ -64,4 +77,14 @@ void __init arch_init_irq(void) - } - #endif - mips_cpu_irq_init(); -+ -+ if (cpu_has_vint) { -+ pr_info("Setting up vectored interrupts\n"); -+ set_vi_handler(2, bcm47xx_hw2_irqdispatch); -+ set_vi_handler(3, bcm47xx_hw3_irqdispatch); -+ set_vi_handler(4, bcm47xx_hw4_irqdispatch); -+ set_vi_handler(5, bcm47xx_hw5_irqdispatch); -+ set_vi_handler(6, bcm47xx_hw6_irqdispatch); -+ set_vi_handler(7, bcm47xx_hw7_irqdispatch); -+ } - } diff --git a/target/linux/brcm47xx/patches-3.10/111-MIPS-BCM47XX-add-cpu-overwrite.patch b/target/linux/brcm47xx/patches-3.10/111-MIPS-BCM47XX-add-cpu-overwrite.patch deleted file mode 100644 index 00e8217a97..0000000000 --- a/target/linux/brcm47xx/patches-3.10/111-MIPS-BCM47XX-add-cpu-overwrite.patch +++ /dev/null @@ -1,95 +0,0 @@ -From b27da7f1ee034d32e410faf5ab32fc96424a0c62 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Wed, 20 Nov 2013 22:16:43 +0100 -Subject: [PATCH 17/18] add overwrite - ---- - .../asm/mach-bcm47xx/cpu-feature-overrides.h | 82 ++++++++++++++++++++ - 1 file changed, 82 insertions(+) - create mode 100644 arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h - ---- /dev/null -+++ b/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h -@@ -0,0 +1,82 @@ -+#ifndef __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H -+#define __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H -+ -+#define cpu_has_tlb 1 -+#define cpu_has_4kex 1 -+#define cpu_has_3k_cache 0 -+#define cpu_has_4k_cache 1 -+#define cpu_has_tx39_cache 0 -+#define cpu_has_fpu 0 -+#define cpu_has_32fpr 0 -+#define cpu_has_counter 1 -+#if defined(CONFIG_BCM47XX_BCMA) && !defined(CONFIG_BCM47XX_SSB) -+#define cpu_has_watch 1 -+#elif defined(CONFIG_BCM47XX_SSB) && !defined(CONFIG_BCM47XX_BCMA) -+#define cpu_has_watch 0 -+#endif -+#define cpu_has_divec 1 -+#define cpu_has_vce 0 -+#define cpu_has_cache_cdex_p 0 -+#define cpu_has_cache_cdex_s 0 -+#define cpu_has_prefetch 1 -+#define cpu_has_mcheck 1 -+#define cpu_has_ejtag 1 -+#define cpu_has_llsc 1 -+ -+/* cpu_has_mips16 */ -+#define cpu_has_mdmx 0 -+#define cpu_has_mips3d 0 -+#define cpu_has_rixi 0 -+#define cpu_has_mmips 0 -+#define cpu_has_smartmips 0 -+#define cpu_has_vtag_icache 0 -+/* cpu_has_dc_aliases */ -+#define cpu_has_ic_fills_f_dc 0 -+#define cpu_has_pindexed_dcache 0 -+#define cpu_icache_snoops_remote_store 0 -+ -+#define cpu_has_mips_2 1 -+#define cpu_has_mips_3 0 -+#define cpu_has_mips32r1 1 -+#if defined(CONFIG_BCM47XX_BCMA) && !defined(CONFIG_BCM47XX_SSB) -+#define cpu_has_mips32r2 1 -+#elif defined(CONFIG_BCM47XX_SSB) && !defined(CONFIG_BCM47XX_BCMA) -+#define cpu_has_mips32r2 0 -+#endif -+#define cpu_has_mips64r1 0 -+#define cpu_has_mips64r2 0 -+ -+#if defined(CONFIG_BCM47XX_BCMA) && !defined(CONFIG_BCM47XX_SSB) -+#define cpu_has_dsp 1 -+#define cpu_has_dsp2 1 -+#elif defined(CONFIG_BCM47XX_SSB) && !defined(CONFIG_BCM47XX_BCMA) -+#define cpu_has_dsp 0 -+#define cpu_has_dsp2 0 -+#endif -+#define cpu_has_mipsmt 0 -+/* cpu_has_userlocal */ -+ -+#define cpu_has_nofpuex 0 -+#define cpu_has_64bits 0 -+#define cpu_has_64bit_zero_reg 0 -+#if defined(CONFIG_BCM47XX_BCMA) && !defined(CONFIG_BCM47XX_SSB) -+#define cpu_has_vint 1 -+#elif defined(CONFIG_BCM47XX_SSB) && !defined(CONFIG_BCM47XX_BCMA) -+#define cpu_has_vint 0 -+#endif -+#define cpu_has_veic 0 -+#define cpu_has_inclusive_pcaches 0 -+ -+#if defined(CONFIG_BCM47XX_BCMA) && !defined(CONFIG_BCM47XX_SSB) -+#define cpu_dcache_line_size() 32 -+#define cpu_icache_line_size() 32 -+#define cpu_has_perf_cntr_intr_bit 1 -+#elif defined(CONFIG_BCM47XX_SSB) && !defined(CONFIG_BCM47XX_BCMA) -+#define cpu_dcache_line_size() 16 -+#define cpu_icache_line_size() 16 -+#define cpu_has_perf_cntr_intr_bit 0 -+#endif -+#define cpu_scache_line_size() 0 -+#define cpu_has_vz 0 -+ -+#endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */ diff --git a/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch b/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch deleted file mode 100644 index 424d1f0a76..0000000000 --- a/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 98e54a60a7346ef31cb851b670a238ad428b58fe Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 13:27:15 +0100 -Subject: [PATCH 029/110] MIPS: BCM47XX: Prepare support for LEDs - -So far this is mostly just a proof of concept, database consists of a -single device. Creating a nice iterateable array wasn't an option -because devices have different amount of LEDs. And we don't want to -waste memory just because of support for a device with dozens on LEDs. - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6299/ ---- - arch/mips/bcm47xx/Kconfig | 2 + - arch/mips/bcm47xx/Makefile | 2 +- - arch/mips/bcm47xx/bcm47xx_private.h | 9 +++++ - arch/mips/bcm47xx/leds.c | 73 +++++++++++++++++++++++++++++++++++ - arch/mips/bcm47xx/setup.c | 6 +++ - 5 files changed, 91 insertions(+), 1 deletion(-) - create mode 100644 arch/mips/bcm47xx/bcm47xx_private.h - create mode 100644 arch/mips/bcm47xx/leds.c - ---- a/arch/mips/bcm47xx/Kconfig -+++ b/arch/mips/bcm47xx/Kconfig -@@ -12,6 +12,7 @@ config BCM47XX_SSB - select SSB_PCICORE_HOSTMODE if PCI - select SSB_DRIVER_GPIO - select GPIOLIB -+ select LEDS_GPIO_REGISTER - default y - help - Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support. -@@ -29,6 +30,7 @@ config BCM47XX_BCMA - select BCMA_DRIVER_PCI_HOSTMODE if PCI - select BCMA_DRIVER_GPIO - select GPIOLIB -+ select LEDS_GPIO_REGISTER - default y - help - Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus. ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -4,5 +4,5 @@ - # - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o --obj-y += board.o -+obj-y += board.o leds.o - obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o ---- /dev/null -+++ b/arch/mips/bcm47xx/bcm47xx_private.h -@@ -0,0 +1,9 @@ -+#ifndef LINUX_BCM47XX_PRIVATE_H_ -+#define LINUX_BCM47XX_PRIVATE_H_ -+ -+#include <linux/kernel.h> -+ -+/* leds.c */ -+void __init bcm47xx_leds_register(void); -+ -+#endif ---- /dev/null -+++ b/arch/mips/bcm47xx/leds.c -@@ -0,0 +1,73 @@ -+#include "bcm47xx_private.h" -+ -+#include <linux/leds.h> -+#include <bcm47xx_board.h> -+ -+static const struct gpio_led -+bcm47xx_leds_netgear_wndr4500_v1_leds[] __initconst = { -+ { -+ .name = "bcm47xx:green:wps", -+ .gpio = 1, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:green:power", -+ .gpio = 2, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:orange:power", -+ .gpio = 3, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:green:usb1", -+ .gpio = 8, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:green:2ghz", -+ .gpio = 9, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:blue:5ghz", -+ .gpio = 11, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+ { -+ .name = "bcm47xx:green:usb2", -+ .gpio = 14, -+ .active_low = 1, -+ .default_state = LEDS_GPIO_DEFSTATE_KEEP, -+ }, -+}; -+ -+static struct gpio_led_platform_data bcm47xx_leds_pdata; -+ -+#define bcm47xx_set_pdata(dev_leds) do { \ -+ bcm47xx_leds_pdata.leds = dev_leds; \ -+ bcm47xx_leds_pdata.num_leds = ARRAY_SIZE(dev_leds); \ -+} while (0) -+ -+void __init bcm47xx_leds_register(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ -+ switch (board) { -+ case BCM47XX_BOARD_NETGEAR_WNDR4500V1: -+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500_v1_leds); -+ break; -+ default: -+ pr_debug("No LEDs configuration found for this device\n"); -+ return; -+ } -+ -+ gpio_led_register_device(-1, &bcm47xx_leds_pdata); -+} ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -26,6 +26,8 @@ - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -+#include "bcm47xx_private.h" -+ - #include <linux/export.h> - #include <linux/types.h> - #include <linux/ssb/ssb.h> -@@ -243,6 +245,9 @@ static int __init bcm47xx_register_bus_c - break; - #endif - } -+ -+ bcm47xx_leds_register(); -+ - return 0; - } - device_initcall(bcm47xx_register_bus_complete); diff --git a/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch b/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch deleted file mode 100644 index 627ea70b88..0000000000 --- a/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch +++ /dev/null @@ -1,152 +0,0 @@ -From e352ec3c581df40f159771b30c262c2bc7fb802e Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 13:31:32 +0100 -Subject: [PATCH 030/110] MIPS: BCM47XX: Prepare support for GPIO buttons - -So far this adds support for one Netgear model only, but it's designed -and ready to add many more device. We could hopefully import database -from OpenWrt. -Support for SSB is currently disabled, because SSB doesn't implement IRQ -domain yet. - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6300/ ---- - arch/mips/bcm47xx/Makefile | 2 +- - arch/mips/bcm47xx/bcm47xx_private.h | 3 ++ - arch/mips/bcm47xx/buttons.c | 95 +++++++++++++++++++++++++++++++++++ - arch/mips/bcm47xx/setup.c | 1 + - 4 files changed, 100 insertions(+), 1 deletion(-) - create mode 100644 arch/mips/bcm47xx/buttons.c - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -4,5 +4,5 @@ - # - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o --obj-y += board.o leds.o -+obj-y += board.o buttons.o leds.o - obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o ---- a/arch/mips/bcm47xx/bcm47xx_private.h -+++ b/arch/mips/bcm47xx/bcm47xx_private.h -@@ -3,6 +3,9 @@ - - #include <linux/kernel.h> - -+/* buttons.c */ -+int __init bcm47xx_buttons_register(void); -+ - /* leds.c */ - void __init bcm47xx_leds_register(void); - ---- /dev/null -+++ b/arch/mips/bcm47xx/buttons.c -@@ -0,0 +1,95 @@ -+#include "bcm47xx_private.h" -+ -+#include <linux/input.h> -+#include <linux/gpio_keys.h> -+#include <linux/interrupt.h> -+#include <linux/ssb/ssb_embedded.h> -+#include <bcm47xx_board.h> -+#include <bcm47xx.h> -+ -+/************************************************** -+ * Database -+ **************************************************/ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wndr4500_v1[] __initconst = { -+ { -+ .code = KEY_WPS_BUTTON, -+ .gpio = 4, -+ .active_low = 1, -+ }, -+ { -+ .code = KEY_RFKILL, -+ .gpio = 5, -+ .active_low = 1, -+ }, -+ { -+ .code = KEY_RESTART, -+ .gpio = 6, -+ .active_low = 1, -+ }, -+}; -+ -+/************************************************** -+ * Init -+ **************************************************/ -+ -+static struct gpio_keys_platform_data bcm47xx_button_pdata; -+ -+static struct platform_device bcm47xx_buttons_gpio_keys = { -+ .name = "gpio-keys", -+ .dev = { -+ .platform_data = &bcm47xx_button_pdata, -+ } -+}; -+ -+/* Copy data from __initconst */ -+static int __init bcm47xx_buttons_copy(const struct gpio_keys_button *buttons, -+ size_t nbuttons) -+{ -+ size_t size = nbuttons * sizeof(*buttons); -+ -+ bcm47xx_button_pdata.buttons = kmalloc(size, GFP_KERNEL); -+ if (!bcm47xx_button_pdata.buttons) -+ return -ENOMEM; -+ memcpy(bcm47xx_button_pdata.buttons, buttons, size); -+ bcm47xx_button_pdata.nbuttons = nbuttons; -+ -+ return 0; -+} -+ -+#define bcm47xx_copy_bdata(dev_buttons) \ -+ bcm47xx_buttons_copy(dev_buttons, ARRAY_SIZE(dev_buttons)); -+ -+int __init bcm47xx_buttons_register(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ int err; -+ -+#ifdef CONFIG_BCM47XX_SSB -+ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_SSB) { -+ pr_debug("Buttons on SSB are not supported yet.\n"); -+ return -ENOTSUPP; -+ } -+#endif -+ -+ switch (board) { -+ case BCM47XX_BOARD_NETGEAR_WNDR4500V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500_v1); -+ break; -+ default: -+ pr_debug("No buttons configuration found for this device\n"); -+ return -ENOTSUPP; -+ } -+ -+ if (err) -+ return -ENOMEM; -+ -+ err = platform_device_register(&bcm47xx_buttons_gpio_keys); -+ if (err) { -+ pr_err("Failed to register platform device: %d\n", err); -+ return err; -+ } -+ -+ return 0; -+} ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -246,6 +246,7 @@ static int __init bcm47xx_register_bus_c - #endif - } - -+ bcm47xx_buttons_register(); - bcm47xx_leds_register(); - - return 0; diff --git a/target/linux/brcm47xx/patches-3.10/122-MIPS-BCM47XX-Import-buttons-database-from-OpenWrt.patch b/target/linux/brcm47xx/patches-3.10/122-MIPS-BCM47XX-Import-buttons-database-from-OpenWrt.patch deleted file mode 100644 index e445a0cc14..0000000000 --- a/target/linux/brcm47xx/patches-3.10/122-MIPS-BCM47XX-Import-buttons-database-from-OpenWrt.patch +++ /dev/null @@ -1,497 +0,0 @@ -From 12dacbcfa86048cc0810fc6b91b3d7329722e59b Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 13:37:56 +0100 -Subject: [PATCH 031/110] MIPS: BCM47XX: Import buttons database from OpenWrt - -This includes all devices from OpenWrt's "diag" that we support in arch -code (we have entries for in enum bcm47xx_board). - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6301/ ---- - arch/mips/bcm47xx/buttons.c | 456 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 456 insertions(+) - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -11,6 +11,299 @@ - * Database - **************************************************/ - -+#define BCM47XX_GPIO_KEY(_gpio, _code) \ -+ { \ -+ .code = _code, \ -+ .gpio = _gpio, \ -+ .active_low = 1, \ -+ } -+ -+/* Asus */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_rtn12[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(1, KEY_RESTART), -+ BCM47XX_GPIO_KEY(4, BTN_0), /* Router mode */ -+ BCM47XX_GPIO_KEY(5, BTN_1), /* Repeater mode */ -+ BCM47XX_GPIO_KEY(6, BTN_2), /* AP mode */ -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_rtn16[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(8, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_rtn66u[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(9, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl300g[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl320ge[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl330ge[] __initconst = { -+ BCM47XX_GPIO_KEY(2, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl500gd[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl500gpv1[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_RESTART), -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl500gpv2[] __initconst = { -+ BCM47XX_GPIO_KEY(2, KEY_RESTART), -+ BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl500w[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+ BCM47XX_GPIO_KEY(7, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl520gc[] __initconst = { -+ BCM47XX_GPIO_KEY(2, KEY_RESTART), -+ BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl520gu[] __initconst = { -+ BCM47XX_GPIO_KEY(2, KEY_RESTART), -+ BCM47XX_GPIO_KEY(3, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl700ge[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_POWER), /* Hard disk power switch */ -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), /* EZSetup */ -+ BCM47XX_GPIO_KEY(6, KEY_COPY), /* Copy data from USB to internal disk */ -+ BCM47XX_GPIO_KEY(7, KEY_RESTART), /* Hard reset */ -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_asus_wlhdd[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+/* Huawei */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_huawei_e970[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+/* Belkin */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_belkin_f7d4301[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+ BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON), -+}; -+ -+/* Buffalo */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_whr2_a54g54[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_whr_g125[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+ BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */ -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_whr_g54s[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+ BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */ -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_whr_hp_g54[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+ BCM47XX_GPIO_KEY(5, BTN_0), /* Router / AP mode swtich */ -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_wzr_g300n[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_wzr_rs_g54[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_buffalo_wzr_rs_g54hp[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+}; -+ -+/* Dell */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_dell_tm2300[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_RESTART), -+}; -+ -+/* D-Link */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_dlink_dir130[] __initconst = { -+ BCM47XX_GPIO_KEY(3, KEY_RESTART), -+ BCM47XX_GPIO_KEY(7, KEY_UNKNOWN), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_dlink_dir330[] __initconst = { -+ BCM47XX_GPIO_KEY(3, KEY_RESTART), -+ BCM47XX_GPIO_KEY(7, KEY_UNKNOWN), -+}; -+ -+/* Linksys */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e1000v1[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e1000v21[] __initconst = { -+ BCM47XX_GPIO_KEY(9, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(10, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e2000v1[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(8, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e3000v1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e3200v1[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_RESTART), -+ BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_e4200v1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt150nv1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt150nv11[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt160nv1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt160nv3[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt300nv11[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_UNKNOWN), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt310nv1[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+ BCM47XX_GPIO_KEY(8, KEY_UNKNOWN), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt610nv1[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+ BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt610nv2[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+/* Motorola */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_motorola_we800g[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_motorola_wr850gp[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_motorola_wr850gv2v3[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_RESTART), -+}; -+ -+/* Netgear */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wndr3400v1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+ BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(8, KEY_RFKILL), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wndr3700v3[] __initconst = { -+ BCM47XX_GPIO_KEY(2, KEY_RFKILL), -+ BCM47XX_GPIO_KEY(3, KEY_RESTART), -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+}; -+ - static const struct gpio_keys_button - bcm47xx_buttons_netgear_wndr4500_v1[] __initconst = { - { -@@ -30,6 +323,18 @@ bcm47xx_buttons_netgear_wndr4500_v1[] __ - }, - }; - -+static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wnr834bv2[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+/* SimpleTech */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_simpletech_simpleshare[] __initconst = { -+ BCM47XX_GPIO_KEY(0, KEY_RESTART), -+}; -+ - /************************************************** - * Init - **************************************************/ -@@ -74,9 +379,160 @@ int __init bcm47xx_buttons_register(void - #endif - - switch (board) { -+ case BCM47XX_BOARD_ASUS_RTN12: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12); -+ break; -+ case BCM47XX_BOARD_ASUS_RTN16: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn16); -+ break; -+ case BCM47XX_BOARD_ASUS_RTN66U: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn66u); -+ break; -+ case BCM47XX_BOARD_ASUS_WL300G: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl300g); -+ break; -+ case BCM47XX_BOARD_ASUS_WL320GE: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl320ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WL330GE: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl330ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GD: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gd); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GPV1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv1); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GPV2: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gpv2); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500W: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500w); -+ break; -+ case BCM47XX_BOARD_ASUS_WL520GC: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gc); -+ break; -+ case BCM47XX_BOARD_ASUS_WL520GU: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl520gu); -+ break; -+ case BCM47XX_BOARD_ASUS_WL700GE: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl700ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WLHDD: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wlhdd); -+ break; -+ -+ case BCM47XX_BOARD_BELKIN_F7D4301: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_belkin_f7d4301); -+ break; -+ -+ case BCM47XX_BOARD_BUFFALO_WHR2_A54G54: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr2_a54g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_G125: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g125); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_G54S: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_g54s); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_HP_G54: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_whr_hp_g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_G300N: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_g300n); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_RS_G54: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_buffalo_wzr_rs_g54hp); -+ break; -+ -+ case BCM47XX_BOARD_DELL_TM2300: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_dell_tm2300); -+ break; -+ -+ case BCM47XX_BOARD_DLINK_DIR130: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir130); -+ break; -+ case BCM47XX_BOARD_DLINK_DIR330: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_dlink_dir330); -+ break; -+ -+ case BCM47XX_BOARD_HUAWEI_E970: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_huawei_e970); -+ break; -+ -+ case BCM47XX_BOARD_LINKSYS_E1000V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E1000V21: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e1000v21); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E2000V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e2000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E3000V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E3200V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e3200v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E4200V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_e4200v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT150NV1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT150NV11: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt150nv11); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT160NV1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT160NV3: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt160nv3); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT300NV11: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt300nv11); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT310NV1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT610NV1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT610NV2: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv2); -+ break; -+ -+ case BCM47XX_BOARD_MOTOROLA_WE800G: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g); -+ break; -+ case BCM47XX_BOARD_MOTOROLA_WR850GP: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gp); -+ break; -+ case BCM47XX_BOARD_MOTOROLA_WR850GV2V3: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3); -+ break; -+ -+ case BCM47XX_BOARD_NETGEAR_WNDR3400V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1); -+ break; -+ case BCM47XX_BOARD_NETGEAR_WNDR3700V3: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3700v3); -+ break; - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500_v1); - break; -+ case BCM47XX_BOARD_NETGEAR_WNR834BV2: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2); -+ break; -+ -+ case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_simpletech_simpleshare); -+ break; -+ - default: - pr_debug("No buttons configuration found for this device\n"); - return -ENOTSUPP; diff --git a/target/linux/brcm47xx/patches-3.10/123-MIPS-BCM47XX-Import-LEDs-database-from-OpenWrt.patch b/target/linux/brcm47xx/patches-3.10/123-MIPS-BCM47XX-Import-LEDs-database-from-OpenWrt.patch deleted file mode 100644 index 2c7b5b7e4e..0000000000 --- a/target/linux/brcm47xx/patches-3.10/123-MIPS-BCM47XX-Import-LEDs-database-from-OpenWrt.patch +++ /dev/null @@ -1,532 +0,0 @@ -From 6d4b22bc843c9de0f6acdbdcfb9b91b897a39e9c Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 12:32:57 +0100 -Subject: [PATCH 032/110] MIPS: BCM47XX: Import LEDs database from OpenWrt - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6298/ ---- - arch/mips/bcm47xx/leds.c | 494 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 494 insertions(+) - ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -3,6 +3,334 @@ - #include <linux/leds.h> - #include <bcm47xx_board.h> - -+/************************************************** -+ * Database -+ **************************************************/ -+ -+#define BCM47XX_GPIO_LED(_gpio, _color, _function, _active_low, \ -+ _default_state) \ -+ { \ -+ .name = "bcm47xx:" _color ":" _function, \ -+ .gpio = _gpio, \ -+ .active_low = _active_low, \ -+ .default_state = _default_state, \ -+ } -+ -+/* Asus */ -+ -+static const struct gpio_led -+bcm47xx_leds_asus_rtn12[] __initconst = { -+ BCM47XX_GPIO_LED(2, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_rtn16[] __initconst = { -+ BCM47XX_GPIO_LED(1, "blue", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_rtn66u[] __initconst = { -+ BCM47XX_GPIO_LED(12, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(15, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl300g[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl320ge[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(11, "unk", "link", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl330ge[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl500gd[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl500gpv1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl500gpv2[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(1, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl500w[] __initconst = { -+ BCM47XX_GPIO_LED(5, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl520gc[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(1, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl520gu[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(1, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wl700ge[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), /* Labeled "READY" (there is no "power" LED). Originally ON, flashing on USB activity. */ -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_asus_wlhdd[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Belkin */ -+ -+static const struct gpio_led -+bcm47xx_leds_belkin_f7d4301[] __initconst = { -+ BCM47XX_GPIO_LED(10, "green", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(11, "amber", "power", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(12, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(13, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(14, "unk", "usb0", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(15, "unk", "usb1", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Buffalo */ -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_whr2_a54g54[] __initconst = { -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_whr_g125[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "bridge", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "unk", "internal", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_whr_g54s[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "bridge", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "unk", "internal", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_whr_hp_g54[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "bridge", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "unk", "internal", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_wzr_g300n[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "bridge", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_wzr_rs_g54[] __initconst = { -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "vpn", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_buffalo_wzr_rs_g54hp[] __initconst = { -+ BCM47XX_GPIO_LED(6, "unk", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "vpn", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Dell */ -+ -+static const struct gpio_led -+bcm47xx_leds_dell_tm2300[] __initconst = { -+ BCM47XX_GPIO_LED(6, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+/* D-Link */ -+ -+static const struct gpio_led -+bcm47xx_leds_dlink_dir130[] __initconst = { -+ BCM47XX_GPIO_LED(0, "green", "status", 1, LEDS_GPIO_DEFSTATE_OFF), /* Originally blinking when device is ready, separated from "power" LED */ -+ BCM47XX_GPIO_LED(6, "blue", "unk", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_dlink_dir330[] __initconst = { -+ BCM47XX_GPIO_LED(0, "green", "status", 1, LEDS_GPIO_DEFSTATE_OFF), /* Originally blinking when device is ready, separated from "power" LED */ -+ BCM47XX_GPIO_LED(4, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "blue", "unk", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Huawei */ -+ -+static const struct gpio_led -+bcm47xx_leds_huawei_e970[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Linksys */ -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e1000v1[] __initconst = { -+ BCM47XX_GPIO_LED(0, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "blue", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(4, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e1000v21[] __initconst = { -+ BCM47XX_GPIO_LED(5, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "amber", "wps", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(8, "blue", "wps", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e2000v1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "blue", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(4, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e3000v1[] __initconst = { -+ BCM47XX_GPIO_LED(0, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "unk", "usb", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e3200v1[] __initconst = { -+ BCM47XX_GPIO_LED(3, "green", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_e4200v1[] __initconst = { -+ BCM47XX_GPIO_LED(5, "white", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt150nv1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt150nv11[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt160nv1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt160nv3[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(4, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt300nv11[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt310nv1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "blue", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(9, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt610nv1[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(9, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt610nv2[] __initconst = { -+ BCM47XX_GPIO_LED(0, "amber", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "blue", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "unk", "usb", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Motorola */ -+ -+static const struct gpio_led -+bcm47xx_leds_motorola_we800g[] __initconst = { -+ BCM47XX_GPIO_LED(1, "amber", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "unk", "unk", 1, LEDS_GPIO_DEFSTATE_OFF), /* There are only 3 LEDs: Power, Wireless and Device (ethernet) */ -+ BCM47XX_GPIO_LED(4, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_motorola_wr850gp[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(6, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_motorola_wr850gv2v3[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "unk", "diag", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* Netgear */ -+ -+static const struct gpio_led -+bcm47xx_leds_netgear_wndr3400v1[] __initconst = { -+ BCM47XX_GPIO_LED(2, "green", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ - static const struct gpio_led - bcm47xx_leds_netgear_wndr4500_v1_leds[] __initconst = { - { -@@ -49,6 +377,24 @@ bcm47xx_leds_netgear_wndr4500_v1_leds[] - }, - }; - -+static const struct gpio_led -+bcm47xx_leds_netgear_wnr834bv2[] __initconst = { -+ BCM47XX_GPIO_LED(2, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "connected", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+/* SimpleTech */ -+ -+static const struct gpio_led -+bcm47xx_leds_simpletech_simpleshare[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "status", 1, LEDS_GPIO_DEFSTATE_OFF), /* "Ready" LED */ -+}; -+ -+/************************************************** -+ * Init -+ **************************************************/ -+ - static struct gpio_led_platform_data bcm47xx_leds_pdata; - - #define bcm47xx_set_pdata(dev_leds) do { \ -@@ -61,9 +407,157 @@ void __init bcm47xx_leds_register(void) - enum bcm47xx_board board = bcm47xx_board_get(); - - switch (board) { -+ case BCM47XX_BOARD_ASUS_RTN12: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12); -+ break; -+ case BCM47XX_BOARD_ASUS_RTN16: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_rtn16); -+ break; -+ case BCM47XX_BOARD_ASUS_RTN66U: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_rtn66u); -+ break; -+ case BCM47XX_BOARD_ASUS_WL300G: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl300g); -+ break; -+ case BCM47XX_BOARD_ASUS_WL320GE: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl320ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WL330GE: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl330ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GD: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl500gd); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GPV1: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl500gpv1); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500GPV2: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl500gpv2); -+ break; -+ case BCM47XX_BOARD_ASUS_WL500W: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl500w); -+ break; -+ case BCM47XX_BOARD_ASUS_WL520GC: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl520gc); -+ break; -+ case BCM47XX_BOARD_ASUS_WL520GU: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl520gu); -+ break; -+ case BCM47XX_BOARD_ASUS_WL700GE: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl700ge); -+ break; -+ case BCM47XX_BOARD_ASUS_WLHDD: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wlhdd); -+ break; -+ -+ case BCM47XX_BOARD_BELKIN_F7D4301: -+ bcm47xx_set_pdata(bcm47xx_leds_belkin_f7d4301); -+ break; -+ -+ case BCM47XX_BOARD_BUFFALO_WHR2_A54G54: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_whr2_a54g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_G125: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_whr_g125); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_G54S: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_whr_g54s); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WHR_HP_G54: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_whr_hp_g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_G300N: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_wzr_g300n); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_RS_G54: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_wzr_rs_g54); -+ break; -+ case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP: -+ bcm47xx_set_pdata(bcm47xx_leds_buffalo_wzr_rs_g54hp); -+ break; -+ -+ case BCM47XX_BOARD_DELL_TM2300: -+ bcm47xx_set_pdata(bcm47xx_leds_dell_tm2300); -+ break; -+ -+ case BCM47XX_BOARD_DLINK_DIR130: -+ bcm47xx_set_pdata(bcm47xx_leds_dlink_dir130); -+ break; -+ case BCM47XX_BOARD_DLINK_DIR330: -+ bcm47xx_set_pdata(bcm47xx_leds_dlink_dir330); -+ break; -+ -+ case BCM47XX_BOARD_HUAWEI_E970: -+ bcm47xx_set_pdata(bcm47xx_leds_huawei_e970); -+ break; -+ -+ case BCM47XX_BOARD_LINKSYS_E1000V1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e1000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E1000V21: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e1000v21); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E2000V1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e2000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E3000V1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e3000v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E3200V1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e3200v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_E4200V1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_e4200v1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT150NV1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt150nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT150NV11: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt150nv11); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT160NV1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt160nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT160NV3: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt160nv3); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT300NV11: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt300nv11); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT310NV1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT610NV1: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt610nv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT610NV2: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt610nv2); -+ break; -+ -+ case BCM47XX_BOARD_MOTOROLA_WE800G: -+ bcm47xx_set_pdata(bcm47xx_leds_motorola_we800g); -+ break; -+ case BCM47XX_BOARD_MOTOROLA_WR850GP: -+ bcm47xx_set_pdata(bcm47xx_leds_motorola_wr850gp); -+ break; -+ case BCM47XX_BOARD_MOTOROLA_WR850GV2V3: -+ bcm47xx_set_pdata(bcm47xx_leds_motorola_wr850gv2v3); -+ break; -+ -+ case BCM47XX_BOARD_NETGEAR_WNDR3400V1: -+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr3400v1); -+ break; - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: - bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500_v1_leds); - break; -+ case BCM47XX_BOARD_NETGEAR_WNR834BV2: -+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr834bv2); -+ break; -+ -+ case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE: -+ bcm47xx_set_pdata(bcm47xx_leds_simpletech_simpleshare); -+ break; -+ - default: - pr_debug("No LEDs configuration found for this device\n"); - return; diff --git a/target/linux/brcm47xx/patches-3.10/124-MIPS-BCM47XX-Enable-buttons-support-on-SSB.patch b/target/linux/brcm47xx/patches-3.10/124-MIPS-BCM47XX-Enable-buttons-support-on-SSB.patch deleted file mode 100644 index 7d599553c4..0000000000 --- a/target/linux/brcm47xx/patches-3.10/124-MIPS-BCM47XX-Enable-buttons-support-on-SSB.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 6dac092b12755ccbc00412871cd9535b687d16d7 Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Fri, 3 Jan 2014 09:55:30 +0100 -Subject: [PATCH] MIPS: BCM47XX: Enable buttons support on SSB - -This is supported since implementing IRQ domain in ssb. - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/buttons.c | 8 -------- - 1 file changed, 8 deletions(-) - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -3,7 +3,6 @@ - #include <linux/input.h> - #include <linux/gpio_keys.h> - #include <linux/interrupt.h> --#include <linux/ssb/ssb_embedded.h> - #include <bcm47xx_board.h> - #include <bcm47xx.h> - -@@ -371,13 +370,6 @@ int __init bcm47xx_buttons_register(void - enum bcm47xx_board board = bcm47xx_board_get(); - int err; - --#ifdef CONFIG_BCM47XX_SSB -- if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_SSB) { -- pr_debug("Buttons on SSB are not supported yet.\n"); -- return -ENOTSUPP; -- } --#endif -- - switch (board) { - case BCM47XX_BOARD_ASUS_RTN12: - err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12); diff --git a/target/linux/brcm47xx/patches-3.10/125-MIPS-BCM47XX-Convert-WNDR4500-to-new-syntax.patch b/target/linux/brcm47xx/patches-3.10/125-MIPS-BCM47XX-Convert-WNDR4500-to-new-syntax.patch deleted file mode 100644 index 00f962aa85..0000000000 --- a/target/linux/brcm47xx/patches-3.10/125-MIPS-BCM47XX-Convert-WNDR4500-to-new-syntax.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 2d842783d4aaa25803e92f663869ea64a4eddd00 Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Fri, 3 Jan 2014 09:37:42 +0100 -Subject: [PATCH] MIPS: BCM47XX: Convert WNDR4500 to new syntax - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/buttons.c | 22 ++++-------------- - arch/mips/bcm47xx/leds.c | 53 ++++++++----------------------------------- - 2 files changed, 14 insertions(+), 61 deletions(-) - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -304,22 +304,10 @@ bcm47xx_buttons_netgear_wndr3700v3[] __i - }; - - static const struct gpio_keys_button --bcm47xx_buttons_netgear_wndr4500_v1[] __initconst = { -- { -- .code = KEY_WPS_BUTTON, -- .gpio = 4, -- .active_low = 1, -- }, -- { -- .code = KEY_RFKILL, -- .gpio = 5, -- .active_low = 1, -- }, -- { -- .code = KEY_RESTART, -- .gpio = 6, -- .active_low = 1, -- }, -+bcm47xx_buttons_netgear_wndr4500v1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(5, KEY_RFKILL), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; - - static const struct gpio_keys_button -@@ -515,7 +503,7 @@ int __init bcm47xx_buttons_register(void - err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3700v3); - break; - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: -- err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500_v1); -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1); - break; - case BCM47XX_BOARD_NETGEAR_WNR834BV2: - err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2); ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -332,49 +332,14 @@ bcm47xx_leds_netgear_wndr3400v1[] __init - }; - - static const struct gpio_led --bcm47xx_leds_netgear_wndr4500_v1_leds[] __initconst = { -- { -- .name = "bcm47xx:green:wps", -- .gpio = 1, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:green:power", -- .gpio = 2, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:orange:power", -- .gpio = 3, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:green:usb1", -- .gpio = 8, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:green:2ghz", -- .gpio = 9, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:blue:5ghz", -- .gpio = 11, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -- { -- .name = "bcm47xx:green:usb2", -- .gpio = 14, -- .active_low = 1, -- .default_state = LEDS_GPIO_DEFSTATE_KEEP, -- }, -+bcm47xx_leds_netgear_wndr4500v1[] __initconst = { -+ BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "green", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(3, "amber", "power", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(8, "green", "usb1", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(9, "green", "2ghz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(11, "blue", "5ghz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(14, "green", "usb2", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - - static const struct gpio_led -@@ -548,7 +513,7 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr3400v1); - break; - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: -- bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500_v1_leds); -+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1); - break; - case BCM47XX_BOARD_NETGEAR_WNR834BV2: - bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr834bv2); diff --git a/target/linux/brcm47xx/patches-3.10/126-MIPS-BCM47XX-Use-timer-trigger-for-status-LEDs.patch b/target/linux/brcm47xx/patches-3.10/126-MIPS-BCM47XX-Use-timer-trigger-for-status-LEDs.patch deleted file mode 100644 index e14bea94d1..0000000000 --- a/target/linux/brcm47xx/patches-3.10/126-MIPS-BCM47XX-Use-timer-trigger-for-status-LEDs.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 5c985c2a17ae0bdbc95fd8246631e00a35746396 Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Fri, 3 Jan 2014 09:04:39 +0100 -Subject: [PATCH] MIPS: BCM47XX: Use "timer" trigger for status LEDs - -Some devices have power LED as well as status LED. The second one is -used to show the firmware is up and running. Set "timer" trigger for -such LEDs. - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/leds.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -16,6 +16,16 @@ - .default_state = _default_state, \ - } - -+#define BCM47XX_GPIO_LED_TRIGGER(_gpio, _color, _function, _active_low, \ -+ _default_trigger) \ -+ { \ -+ .name = "bcm47xx:" _color ":" _function, \ -+ .gpio = _gpio, \ -+ .active_low = _active_low, \ -+ .default_state = LEDS_GPIO_DEFSTATE_OFF, \ -+ .default_trigger = _default_trigger, \ -+ } -+ - /* Asus */ - - static const struct gpio_led -@@ -176,13 +186,13 @@ bcm47xx_leds_dell_tm2300[] __initconst = - - static const struct gpio_led - bcm47xx_leds_dlink_dir130[] __initconst = { -- BCM47XX_GPIO_LED(0, "green", "status", 1, LEDS_GPIO_DEFSTATE_OFF), /* Originally blinking when device is ready, separated from "power" LED */ -+ BCM47XX_GPIO_LED_TRIGGER(0, "green", "status", 1, "timer"), /* Originally blinking when device is ready, separated from "power" LED */ - BCM47XX_GPIO_LED(6, "blue", "unk", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - - static const struct gpio_led - bcm47xx_leds_dlink_dir330[] __initconst = { -- BCM47XX_GPIO_LED(0, "green", "status", 1, LEDS_GPIO_DEFSTATE_OFF), /* Originally blinking when device is ready, separated from "power" LED */ -+ BCM47XX_GPIO_LED_TRIGGER(0, "green", "status", 1, "timer"), /* Originally blinking when device is ready, separated from "power" LED */ - BCM47XX_GPIO_LED(4, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), - BCM47XX_GPIO_LED(6, "blue", "unk", 1, LEDS_GPIO_DEFSTATE_OFF), - }; diff --git a/target/linux/brcm47xx/patches-3.10/127-MIPS-BCM47XX-Drop-WGT634U-hacks.patch b/target/linux/brcm47xx/patches-3.10/127-MIPS-BCM47XX-Drop-WGT634U-hacks.patch deleted file mode 100644 index 5a091e6894..0000000000 --- a/target/linux/brcm47xx/patches-3.10/127-MIPS-BCM47XX-Drop-WGT634U-hacks.patch +++ /dev/null @@ -1,207 +0,0 @@ -From 68e30f30875d4e4608cebec27ca8bd07be0d0f64 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 13:53:15 +0100 -Subject: [PATCH] MIPS: BCM47XX: Drop WGT634U hacks -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This old wgt634u.c was trying to implement a bit ugly support for -Netgear WGT634U. It provided info about LED, flash mapping & layout and -was trying to handle reset button. - -This is not needed anymore as we have replacement for all this stuff. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6302/ ---- - arch/mips/bcm47xx/Makefile | 1 - - arch/mips/bcm47xx/wgt634u.c | 174 -------------------------------------------- - 2 files changed, 175 deletions(-) - delete mode 100644 arch/mips/bcm47xx/wgt634u.c - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -5,4 +5,3 @@ - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o - obj-y += board.o buttons.o leds.o --obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o ---- a/arch/mips/bcm47xx/wgt634u.c -+++ /dev/null -@@ -1,174 +0,0 @@ --/* -- * This file is subject to the terms and conditions of the GNU General Public -- * License. See the file "COPYING" in the main directory of this archive -- * for more details. -- * -- * Copyright (C) 2007 Aurelien Jarno <aurelien@aurel32.net> -- */ -- --#include <linux/platform_device.h> --#include <linux/module.h> --#include <linux/leds.h> --#include <linux/mtd/physmap.h> --#include <linux/ssb/ssb.h> --#include <linux/ssb/ssb_embedded.h> --#include <linux/interrupt.h> --#include <linux/reboot.h> --#include <linux/gpio.h> --#include <asm/mach-bcm47xx/bcm47xx.h> -- --/* GPIO definitions for the WGT634U */ --#define WGT634U_GPIO_LED 3 --#define WGT634U_GPIO_RESET 2 --#define WGT634U_GPIO_TP1 7 --#define WGT634U_GPIO_TP2 6 --#define WGT634U_GPIO_TP3 5 --#define WGT634U_GPIO_TP4 4 --#define WGT634U_GPIO_TP5 1 -- --static struct gpio_led wgt634u_leds[] = { -- { -- .name = "power", -- .gpio = WGT634U_GPIO_LED, -- .active_low = 1, -- .default_trigger = "heartbeat", -- }, --}; -- --static struct gpio_led_platform_data wgt634u_led_data = { -- .num_leds = ARRAY_SIZE(wgt634u_leds), -- .leds = wgt634u_leds, --}; -- --static struct platform_device wgt634u_gpio_leds = { -- .name = "leds-gpio", -- .id = -1, -- .dev = { -- .platform_data = &wgt634u_led_data, -- } --}; -- -- --/* 8MiB flash. The struct mtd_partition matches original Netgear WGT634U -- firmware. */ --static struct mtd_partition wgt634u_partitions[] = { -- { -- .name = "cfe", -- .offset = 0, -- .size = 0x60000, /* 384k */ -- .mask_flags = MTD_WRITEABLE /* force read-only */ -- }, -- { -- .name = "config", -- .offset = 0x60000, -- .size = 0x20000 /* 128k */ -- }, -- { -- .name = "linux", -- .offset = 0x80000, -- .size = 0x140000 /* 1280k */ -- }, -- { -- .name = "jffs", -- .offset = 0x1c0000, -- .size = 0x620000 /* 6272k */ -- }, -- { -- .name = "nvram", -- .offset = 0x7e0000, -- .size = 0x20000 /* 128k */ -- }, --}; -- --static struct physmap_flash_data wgt634u_flash_data = { -- .parts = wgt634u_partitions, -- .nr_parts = ARRAY_SIZE(wgt634u_partitions) --}; -- --static struct resource wgt634u_flash_resource = { -- .flags = IORESOURCE_MEM, --}; -- --static struct platform_device wgt634u_flash = { -- .name = "physmap-flash", -- .id = 0, -- .dev = { .platform_data = &wgt634u_flash_data, }, -- .resource = &wgt634u_flash_resource, -- .num_resources = 1, --}; -- --/* Platform devices */ --static struct platform_device *wgt634u_devices[] __initdata = { -- &wgt634u_flash, -- &wgt634u_gpio_leds, --}; -- --static irqreturn_t gpio_interrupt(int irq, void *ignored) --{ -- int state; -- -- /* Interrupts are shared, check if the current one is -- a GPIO interrupt. */ -- if (!ssb_chipco_irq_status(&bcm47xx_bus.ssb.chipco, -- SSB_CHIPCO_IRQ_GPIO)) -- return IRQ_NONE; -- -- state = gpio_get_value(WGT634U_GPIO_RESET); -- -- /* Interrupt are level triggered, revert the interrupt polarity -- to clear the interrupt. */ -- ssb_gpio_polarity(&bcm47xx_bus.ssb, 1 << WGT634U_GPIO_RESET, -- state ? 1 << WGT634U_GPIO_RESET : 0); -- -- if (!state) { -- printk(KERN_INFO "Reset button pressed"); -- ctrl_alt_del(); -- } -- -- return IRQ_HANDLED; --} -- --static int __init wgt634u_init(void) --{ -- /* There is no easy way to detect that we are running on a WGT634U -- * machine. Use the MAC address as an heuristic. Netgear Inc. has -- * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx. -- */ -- u8 *et0mac; -- -- if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB) -- return -ENODEV; -- -- et0mac = bcm47xx_bus.ssb.sprom.et0mac; -- -- if (et0mac[0] == 0x00 && -- ((et0mac[1] == 0x09 && et0mac[2] == 0x5b) || -- (et0mac[1] == 0x0f && et0mac[2] == 0xb5))) { -- struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore; -- -- printk(KERN_INFO "WGT634U machine detected.\n"); -- -- if (!request_irq(gpio_to_irq(WGT634U_GPIO_RESET), -- gpio_interrupt, IRQF_SHARED, -- "WGT634U GPIO", &bcm47xx_bus.ssb.chipco)) { -- gpio_direction_input(WGT634U_GPIO_RESET); -- ssb_gpio_intmask(&bcm47xx_bus.ssb, -- 1 << WGT634U_GPIO_RESET, -- 1 << WGT634U_GPIO_RESET); -- ssb_chipco_irq_mask(&bcm47xx_bus.ssb.chipco, -- SSB_CHIPCO_IRQ_GPIO, -- SSB_CHIPCO_IRQ_GPIO); -- } -- -- wgt634u_flash_data.width = mcore->pflash.buswidth; -- wgt634u_flash_resource.start = mcore->pflash.window; -- wgt634u_flash_resource.end = mcore->pflash.window -- + mcore->pflash.window_size -- - 1; -- return platform_add_devices(wgt634u_devices, -- ARRAY_SIZE(wgt634u_devices)); -- } else -- return -ENODEV; --} -- --module_init(wgt634u_init); diff --git a/target/linux/brcm47xx/patches-3.10/128-MIPS-BCM47XX-Add-new-file-for-device-specific-workar.patch b/target/linux/brcm47xx/patches-3.10/128-MIPS-BCM47XX-Add-new-file-for-device-specific-workar.patch deleted file mode 100644 index 5603a536d8..0000000000 --- a/target/linux/brcm47xx/patches-3.10/128-MIPS-BCM47XX-Add-new-file-for-device-specific-workar.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 1f3e1c682a0b5273e3ee8799b54319971f426e6a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Wed, 29 Jan 2014 18:06:52 +0100 -Subject: [RFC V2][PATCH] MIPS: BCM47XX: Add new file for device specific workarounds - ---- -V2: Drop pr_debug for devices we don't need workarounds for. It was too - load and not useful at all. ---- - arch/mips/bcm47xx/Makefile | 2 +- - arch/mips/bcm47xx/bcm47xx_private.h | 3 +++ - arch/mips/bcm47xx/setup.c | 1 + - arch/mips/bcm47xx/workarounds.c | 25 +++++++++++++++++++++++++ - 4 files changed, 30 insertions(+), 1 deletion(-) - create mode 100644 arch/mips/bcm47xx/workarounds.c - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -4,4 +4,4 @@ - # - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o --obj-y += board.o buttons.o leds.o -+obj-y += board.o buttons.o leds.o workarounds.o ---- a/arch/mips/bcm47xx/bcm47xx_private.h -+++ b/arch/mips/bcm47xx/bcm47xx_private.h -@@ -9,4 +9,7 @@ int __init bcm47xx_buttons_register(void - /* leds.c */ - void __init bcm47xx_leds_register(void); - -+/* workarounds.c */ -+void __init bcm47xx_workarounds(void); -+ - #endif ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -248,6 +248,7 @@ static int __init bcm47xx_register_bus_c - - bcm47xx_buttons_register(); - bcm47xx_leds_register(); -+ bcm47xx_workarounds(); - - return 0; - } ---- /dev/null -+++ b/arch/mips/bcm47xx/workarounds.c -@@ -0,0 +1,31 @@ -+#include "bcm47xx_private.h" -+ -+#include <linux/gpio.h> -+#include <bcm47xx_board.h> -+#include <bcm47xx.h> -+ -+static void __init bcm47xx_workarounds_netgear_wnr3500l(void) -+{ -+ const int usb_power = 12; -+ int err; -+ -+ err = gpio_request_one(usb_power, GPIOF_OUT_INIT_HIGH, "usb_power"); -+ if (err) -+ pr_err("Failed to request USB power gpio: %d\n", err); -+ else -+ gpio_free(usb_power); -+} -+ -+void __init bcm47xx_workarounds(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ -+ switch (board) { -+ case BCM47XX_BOARD_NETGEAR_WNR3500L: -+ bcm47xx_workarounds_netgear_wnr3500l(); -+ break; -+ default: -+ /* No workaround(s) needed */ -+ break; -+ } -+} diff --git a/target/linux/brcm47xx/patches-3.10/139-MIPS-BCM47XX-detect-more-linksys-devices.patch b/target/linux/brcm47xx/patches-3.10/139-MIPS-BCM47XX-detect-more-linksys-devices.patch deleted file mode 100644 index ecb6316b76..0000000000 --- a/target/linux/brcm47xx/patches-3.10/139-MIPS-BCM47XX-detect-more-linksys-devices.patch +++ /dev/null @@ -1,39 +0,0 @@ -From b09189336f6d974c554aed03b4651e9f68ce0abd Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sun, 23 Feb 2014 16:38:29 +0100 -Subject: [PATCH 3/6] MIPS: BCM47XX: detect some more Linksys devices - -The Linksys WRT54G/GS/GL family uses the same boardtype numbers, and -the same gpio configuration. The boardtype numbers are changing with -the hardware versions, but these hardware numbers are different or each -model. -Detect them all as one device, this also worked in OpenWrt. ---- - arch/mips/bcm47xx/board.c | 4 +++- - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 2 +- - 2 files changed, 4 insertions(+), 2 deletions(-) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -175,7 +175,9 @@ struct bcm47xx_board_type_list3 bcm47xx_ - {{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"}, - {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, - {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "0x04CF", "3500", "02"}, -- {{BCM47XX_BOARD_LINKSYS_WRT54GSV1, "Linksys WRT54GS V1"}, "0x0101", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0101", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0467", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0708", "42", "0x10"}, - { {0}, NULL}, - }; - ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -66,7 +66,7 @@ enum bcm47xx_board { - BCM47XX_BOARD_LINKSYS_WRT310NV1, - BCM47XX_BOARD_LINKSYS_WRT310NV2, - BCM47XX_BOARD_LINKSYS_WRT54G3GV2, -- BCM47XX_BOARD_LINKSYS_WRT54GSV1, -+ BCM47XX_BOARD_LINKSYS_WRT54G, - BCM47XX_BOARD_LINKSYS_WRT610NV1, - BCM47XX_BOARD_LINKSYS_WRT610NV2, - BCM47XX_BOARD_LINKSYS_WRTSL54GS, diff --git a/target/linux/brcm47xx/patches-3.10/140-MIPS-BCM47XX-add-button-and-led-configuration-for-so.patch b/target/linux/brcm47xx/patches-3.10/140-MIPS-BCM47XX-add-button-and-led-configuration-for-so.patch deleted file mode 100644 index 94ead79896..0000000000 --- a/target/linux/brcm47xx/patches-3.10/140-MIPS-BCM47XX-add-button-and-led-configuration-for-so.patch +++ /dev/null @@ -1,133 +0,0 @@ -From e3d15471f1be2bd2fd4db82907ad4b2d74ec2636 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 10 Jan 2014 23:55:28 +0100 -Subject: [PATCH 4/6] MIPS: BCM47XX: add button and led configuration for some - Linksys devices - -This adds led and button GPIO configuration for Linksys wrt54g3gv2, -wrt54gsv1 and wrtsl54gs. This is based on OpenWrt broadcom-diag code. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- - arch/mips/bcm47xx/buttons.c | 27 +++++++++++++++++++++++++++ - arch/mips/bcm47xx/leds.c | 33 +++++++++++++++++++++++++++++++++ - 2 files changed, 60 insertions(+) - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -259,6 +259,18 @@ bcm47xx_buttons_linksys_wrt310nv1[] __in - }; - - static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = { -+ BCM47XX_GPIO_KEY(5, KEY_WIMAX), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrt54gsv1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button - bcm47xx_buttons_linksys_wrt610nv1[] __initconst = { - BCM47XX_GPIO_KEY(6, KEY_RESTART), - BCM47XX_GPIO_KEY(8, KEY_WPS_BUTTON), -@@ -270,6 +282,12 @@ bcm47xx_buttons_linksys_wrt610nv2[] __in - BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; - -+static const struct gpio_keys_button -+bcm47xx_buttons_linksys_wrtsl54gs[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ - /* Motorola */ - - static const struct gpio_keys_button -@@ -479,12 +497,21 @@ int __init bcm47xx_buttons_register(void - case BCM47XX_BOARD_LINKSYS_WRT310NV1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1); - break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54gsv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G3GV2: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT610NV1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1); - break; - case BCM47XX_BOARD_LINKSYS_WRT610NV2: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv2); - break; -+ case BCM47XX_BOARD_LINKSYS_WRTSL54GS: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs); -+ break; - - case BCM47XX_BOARD_MOTOROLA_WE800G: - err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g); ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -292,6 +292,21 @@ bcm47xx_leds_linksys_wrt310nv1[] __initc - }; - - static const struct gpio_led -+bcm47xx_leds_linksys_wrt54gsv1[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(5, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt54g3gv2[] __initconst = { -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "green", "3g", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "blue", "3g", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led - bcm47xx_leds_linksys_wrt610nv1[] __initconst = { - BCM47XX_GPIO_LED(0, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), - BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -@@ -308,6 +323,15 @@ bcm47xx_leds_linksys_wrt610nv2[] __initc - BCM47XX_GPIO_LED(7, "unk", "usb", 0, LEDS_GPIO_DEFSTATE_OFF), - }; - -+static const struct gpio_led -+bcm47xx_leds_linksys_wrtsl54gs[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ - /* Motorola */ - - static const struct gpio_led -@@ -502,12 +526,21 @@ void __init bcm47xx_leds_register(void) - case BCM47XX_BOARD_LINKSYS_WRT310NV1: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1); - break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54gsv1); -+ break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G3GV2: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g3gv2); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT610NV1: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt610nv1); - break; - case BCM47XX_BOARD_LINKSYS_WRT610NV2: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt610nv2); - break; -+ case BCM47XX_BOARD_LINKSYS_WRTSL54GS: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrtsl54gs); -+ break; - - case BCM47XX_BOARD_MOTOROLA_WE800G: - bcm47xx_set_pdata(bcm47xx_leds_motorola_we800g); diff --git a/target/linux/brcm47xx/patches-3.10/141-MIPS-BCM47XX-add-detection-and-GPIO-config-for-Sieme.patch b/target/linux/brcm47xx/patches-3.10/141-MIPS-BCM47XX-add-detection-and-GPIO-config-for-Sieme.patch deleted file mode 100644 index 9d19d41c36..0000000000 --- a/target/linux/brcm47xx/patches-3.10/141-MIPS-BCM47XX-add-detection-and-GPIO-config-for-Sieme.patch +++ /dev/null @@ -1,89 +0,0 @@ -From c546fa49901252cbc1e4046d7188858b2f9e130f Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 10 Jan 2014 23:55:43 +0100 -Subject: [PATCH 2/2] MIPS: BCM47XX: add detection and GPIO config for Siemens - SE505v2 - -This adds board detection for the Siemens SE505v2 and the led gpio -configuration. This board does not have any buttons. -This is based on OpenWrt broadcom-diag and Manuel Munz's nvram dump. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- - arch/mips/bcm47xx/board.c | 17 +++++++++++++++++ - arch/mips/bcm47xx/leds.c | 12 ++++++++++++ - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 2 ++ - 3 files changed, 31 insertions(+) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -181,6 +181,13 @@ struct bcm47xx_board_type_list3 bcm47xx_ - { {0}, NULL}, - }; - -+/* boardtype, boardrev */ -+static const -+struct bcm47xx_board_type_list2 bcm47xx_board_list_board_type_rev[] __initconst = { -+ {{BCM47XX_BOARD_SIEMENS_SE505V2, "Siemens SE505 V2"}, "0x0101", "0x10"}, -+ { {0}, NULL}, -+}; -+ - static const - struct bcm47xx_board_type bcm47xx_board_unknown[] __initconst = { - {BCM47XX_BOARD_UNKNOWN, "Unknown Board"}, -@@ -274,6 +281,16 @@ static __init const struct bcm47xx_board - return &e3->board; - } - } -+ -+ if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 && -+ bcm47xx_nvram_getenv("boardrev", buf2, sizeof(buf2)) >= 0 && -+ bcm47xx_nvram_getenv("boardnum", buf3, sizeof(buf3)) == -ENOENT) { -+ for (e2 = bcm47xx_board_list_board_type_rev; e2->value1; e2++) { -+ if (!strcmp(buf1, e2->value1) && -+ !strcmp(buf2, e2->value2)) -+ return &e2->board; -+ } -+ } - return bcm47xx_board_unknown; - } - ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -383,6 +383,14 @@ bcm47xx_leds_netgear_wnr834bv2[] __initc - BCM47XX_GPIO_LED(7, "unk", "connected", 0, LEDS_GPIO_DEFSTATE_OFF), - }; - -+/* Siemens */ -+static const struct gpio_led -+bcm47xx_leds_siemens_se505v2[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(5, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ - /* SimpleTech */ - - static const struct gpio_led -@@ -562,6 +570,10 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr834bv2); - break; - -+ case BCM47XX_BOARD_SIEMENS_SE505V2: -+ bcm47xx_set_pdata(bcm47xx_leds_siemens_se505v2); -+ break; -+ - case BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE: - bcm47xx_set_pdata(bcm47xx_leds_simpletech_simpleshare); - break; ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -94,6 +94,8 @@ enum bcm47xx_board { - - BCM47XX_BOARD_PHICOMM_M1, - -+ BCM47XX_BOARD_SIEMENS_SE505V2, -+ - BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE, - - BCM47XX_BOARD_ZTE_H218N, diff --git a/target/linux/brcm47xx/patches-3.10/142-MIPS-BCM47XX-add-Belkin-F7Dxxxx-board-detection.patch b/target/linux/brcm47xx/patches-3.10/142-MIPS-BCM47XX-add-Belkin-F7Dxxxx-board-detection.patch deleted file mode 100644 index ff6c388fb1..0000000000 --- a/target/linux/brcm47xx/patches-3.10/142-MIPS-BCM47XX-add-Belkin-F7Dxxxx-board-detection.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 44927df87162ae9beb6e7b934b0e75818b88e350 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Thu, 2 Jan 2014 19:10:05 +0100 -Subject: [PATCH] MIPS: BCM47XX: add Belkin F7Dxxxx board detection - -From: Cody P Schafer <devel@codyps.com> - -Add a few Belkin F7Dxxxx entries, with F7D4401 sourced from online -documentation and the "F7D7302" being observed. F7D3301, F7D3302, and -F7D4302 are reasonable guesses which are unlikely to cause -mis-detection. - -Signed-off-by: Cody P Schafer <devel@codyps.com> -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- - arch/mips/bcm47xx/board.c | 4 ++++ - arch/mips/bcm47xx/buttons.c | 4 ++++ - arch/mips/bcm47xx/leds.c | 4 ++++ - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 4 ++++ - 4 files changed, 16 insertions(+) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -71,7 +71,11 @@ struct bcm47xx_board_type_list1 bcm47xx_ - {{BCM47XX_BOARD_ASUS_WL500W, "Asus WL500W"}, "WL500gW-"}, - {{BCM47XX_BOARD_ASUS_WL520GC, "Asus WL520GC"}, "WL520GC-"}, - {{BCM47XX_BOARD_ASUS_WL520GU, "Asus WL520GU"}, "WL520GU-"}, -+ {{BCM47XX_BOARD_BELKIN_F7D3301, "Belkin F7D3301"}, "F7D3301"}, -+ {{BCM47XX_BOARD_BELKIN_F7D3302, "Belkin F7D3302"}, "F7D3302"}, - {{BCM47XX_BOARD_BELKIN_F7D4301, "Belkin F7D4301"}, "F7D4301"}, -+ {{BCM47XX_BOARD_BELKIN_F7D4302, "Belkin F7D4302"}, "F7D4302"}, -+ {{BCM47XX_BOARD_BELKIN_F7D4401, "Belkin F7D4401"}, "F7D4401"}, - { {0}, NULL}, - }; - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -420,7 +420,11 @@ int __init bcm47xx_buttons_register(void - err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wlhdd); - break; - -+ case BCM47XX_BOARD_BELKIN_F7D3301: -+ case BCM47XX_BOARD_BELKIN_F7D3302: - case BCM47XX_BOARD_BELKIN_F7D4301: -+ case BCM47XX_BOARD_BELKIN_F7D4302: -+ case BCM47XX_BOARD_BELKIN_F7D4401: - err = bcm47xx_copy_bdata(bcm47xx_buttons_belkin_f7d4301); - break; - ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -457,7 +457,11 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_asus_wlhdd); - break; - -+ case BCM47XX_BOARD_BELKIN_F7D3301: -+ case BCM47XX_BOARD_BELKIN_F7D3302: - case BCM47XX_BOARD_BELKIN_F7D4301: -+ case BCM47XX_BOARD_BELKIN_F7D4302: -+ case BCM47XX_BOARD_BELKIN_F7D4401: - bcm47xx_set_pdata(bcm47xx_leds_belkin_f7d4301); - break; - ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -27,7 +27,11 @@ enum bcm47xx_board { - BCM47XX_BOARD_ASUS_WL700GE, - BCM47XX_BOARD_ASUS_WLHDD, - -+ BCM47XX_BOARD_BELKIN_F7D3301, -+ BCM47XX_BOARD_BELKIN_F7D3302, - BCM47XX_BOARD_BELKIN_F7D4301, -+ BCM47XX_BOARD_BELKIN_F7D4302, -+ BCM47XX_BOARD_BELKIN_F7D4401, - - BCM47XX_BOARD_BUFFALO_WBR2_G54, - BCM47XX_BOARD_BUFFALO_WHR2_A54G54, diff --git a/target/linux/brcm47xx/patches-3.10/143-MIPS-BCM47XX-Check-all-32-GPIOs-when-looking-for-a-p.patch b/target/linux/brcm47xx/patches-3.10/143-MIPS-BCM47XX-Check-all-32-GPIOs-when-looking-for-a-p.patch deleted file mode 100644 index 42ce9feaee..0000000000 --- a/target/linux/brcm47xx/patches-3.10/143-MIPS-BCM47XX-Check-all-32-GPIOs-when-looking-for-a-p.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 4fe2169acecb6e62821dfe14bc5c5852870b516f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Thu, 13 Feb 2014 17:48:12 +0100 -Subject: MIPS: BCM47XX: Check all (32) GPIOs when looking for a pin -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Broadcom boards support 32 GPIOs and NVRAM may have entires for higher -ones too. Example: -gpio23=wombo_reset - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: linux-mips@linux-mips.org -Cc: Rafał Miłecki <zajec5@gmail.com> -Patchwork: https://patchwork.linux-mips.org/patch/6547/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> - ---- a/arch/mips/bcm47xx/nvram.c -+++ b/arch/mips/bcm47xx/nvram.c -@@ -197,7 +197,7 @@ int bcm47xx_nvram_gpio_pin(const char *n - char nvram_var[10]; - char buf[30]; - -- for (i = 0; i < 16; i++) { -+ for (i = 0; i < 32; i++) { - err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i); - if (err <= 0) - continue; diff --git a/target/linux/brcm47xx/patches-3.10/144-make-reboot-more-reliable.patch b/target/linux/brcm47xx/patches-3.10/144-make-reboot-more-reliable.patch deleted file mode 100644 index 50431de040..0000000000 --- a/target/linux/brcm47xx/patches-3.10/144-make-reboot-more-reliable.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 26db431400c336c4cc658cb4888bab18d254c64a Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sat, 9 Aug 2014 00:00:09 +0200 -Subject: [PATCH] MIPS: BCM47XX: fix reboot problem on BCM4705/BCM4785 - -This adds some code based on code from the Broadcom GPL tar to fix the -reboot problems on BCM4705/BCM4785. I tried rebooting my device for ~10 -times and have never seen a problem. This reverts the changes in the -previous commit and adds the real fix as suggested by Rafał. - -Setting bit 22 in Reg 22, sel 4 puts the BIU (Bus Interface Unit) into -async mode. - -The previous try was this: -commit 316cad5c1d4daee998cd1f83ccdb437f6f20d45c -Author: Hauke Mehrtens <hauke@hauke-m.de> -Date: Mon Jul 28 23:53:57 2014 +0200 - - MIPS: BCM47XX: make reboot more relaiable - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -55,7 +55,16 @@ static void bcm47xx_machine_restart(char - switch (bcm47xx_bus_type) { - #ifdef CONFIG_BCM47XX_SSB - case BCM47XX_BUS_TYPE_SSB: -+ if (bcm47xx_bus.ssb.chip_id == 0x4785) -+ write_c0_diag4(1 << 22); - ssb_watchdog_timer_set(&bcm47xx_bus.ssb, 1); -+ if (bcm47xx_bus.ssb.chip_id == 0x4785) { -+ __asm__ __volatile__( -+ ".set\tmips3\n\t" -+ "sync\n\t" -+ "wait\n\t" -+ ".set\tmips0"); -+ } - break; - #endif - #ifdef CONFIG_BCM47XX_BCMA diff --git a/target/linux/brcm47xx/patches-3.10/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch b/target/linux/brcm47xx/patches-3.10/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch deleted file mode 100644 index 2ee5442117..0000000000 --- a/target/linux/brcm47xx/patches-3.10/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 103c0bf3ff46486466bc9138d70c25133d516003 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Tue, 29 Jul 2014 00:08:01 +0200 -Subject: [PATCH] MIPS: BCM47XX: fixup broken MAC addresses in nvram - -The address prefix 00:90:4C is used by Broadcom in their initial -configuration. When a mac address with the prefix 00:90:4C is used all -devices from the same series are sharing the same mac address. To -prevent mac address collisions we replace them with a mac address based -on the base address. To generate such addresses we take the main mac -address from et0macaddr and increase it by two for the first wifi -device and by 3 for the second one. This matches the printed mac -address on the device. The main mac address increased by one is used as -wan address by the vendor code. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: zajec5@gmail.com -Cc: linux-mips@linux-mips.org -Patchwork: https://patchwork.linux-mips.org/patch/7489/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/sprom.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - ---- a/arch/mips/bcm47xx/sprom.c -+++ b/arch/mips/bcm47xx/sprom.c -@@ -28,6 +28,8 @@ - - #include <bcm47xx.h> - #include <bcm47xx_nvram.h> -+#include <linux/if_ether.h> -+#include <linux/etherdevice.h> - - static void create_key(const char *prefix, const char *postfix, - const char *name, char *buf, int len) -@@ -631,6 +633,33 @@ static void bcm47xx_fill_sprom_path_r45( - } - } - -+static bool bcm47xx_is_valid_mac(u8 *mac) -+{ -+ return mac && !(mac[0] == 0x00 && mac[1] == 0x90 && mac[2] == 0x4c); -+} -+ -+static int bcm47xx_increase_mac_addr(u8 *mac, u8 num) -+{ -+ u8 *oui = mac + ETH_ALEN/2 - 1; -+ u8 *p = mac + ETH_ALEN - 1; -+ -+ do { -+ (*p) += num; -+ if (*p > num) -+ break; -+ p--; -+ num = 1; -+ } while (p != oui); -+ -+ if (p == oui) { -+ pr_err("unable to fetch mac address\n"); -+ return -ENOENT; -+ } -+ return 0; -+} -+ -+static int mac_addr_used = 2; -+ - static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, - const char *prefix, bool fallback) - { -@@ -648,6 +677,25 @@ static void bcm47xx_fill_sprom_ethernet( - - nvram_read_macaddr(prefix, "macaddr", sprom->il0mac, fallback); - nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback); -+ -+ /* The address prefix 00:90:4C is used by Broadcom in their initial -+ configuration. When a mac address with the prefix 00:90:4C is used -+ all devices from the same series are sharing the same mac address. -+ To prevent mac address collisions we replace them with a mac address -+ based on the base address. */ -+ if (!bcm47xx_is_valid_mac(sprom->il0mac)) { -+ u8 mac[6]; -+ -+ nvram_read_macaddr(NULL, "et0macaddr", mac, false); -+ if (bcm47xx_is_valid_mac(mac)) { -+ int err = bcm47xx_increase_mac_addr(mac, mac_addr_used); -+ -+ if (!err) { -+ memcpy(sprom->il0mac, mac, ETH_ALEN); -+ mac_addr_used++; -+ } -+ } -+ } - } - - static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix, diff --git a/target/linux/brcm47xx/patches-3.10/146-MIPS-BCM47XX-add-Microsoft-MN-700-and-Asus-WL500G.patch b/target/linux/brcm47xx/patches-3.10/146-MIPS-BCM47XX-add-Microsoft-MN-700-and-Asus-WL500G.patch deleted file mode 100644 index eee4b04a9d..0000000000 --- a/target/linux/brcm47xx/patches-3.10/146-MIPS-BCM47XX-add-Microsoft-MN-700-and-Asus-WL500G.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 250dc03727b9cce91bd86091f05bf2443e2be9ec Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Tue, 29 Jul 2014 00:12:09 +0200 -Subject: [PATCH] MIPS: BCM47XX: add Microsoft MN-700 and Asus WL500G - -This patch adds detection for the Microsoft MN-700 and the Asus WL500G -router. This is based on some old code from OpenWrt. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: zajec5@gmail.com -Cc: linux-mips@linux-mips.org -Patchwork: https://patchwork.linux-mips.org/patch/7490/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/board.c | 17 +++++++++++++++++ - arch/mips/bcm47xx/buttons.c | 19 +++++++++++++++++++ - arch/mips/bcm47xx/leds.c | 19 +++++++++++++++++++ - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 3 +++ - 4 files changed, 58 insertions(+) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -79,6 +79,14 @@ struct bcm47xx_board_type_list1 bcm47xx_ - { {0}, NULL}, - }; - -+/* hardware_version, boardnum */ -+static const -+struct bcm47xx_board_type_list2 bcm47xx_board_list_hw_version_num[] __initconst = { -+ {{BCM47XX_BOARD_MICROSOFT_MN700, "Microsoft MN-700"}, "WL500-", "mn700"}, -+ {{BCM47XX_BOARD_ASUS_WL500G, "Asus WL500G"}, "WL500-", "asusX"}, -+ { {0}, NULL}, -+}; -+ - /* productid */ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_productid[] __initconst = { -@@ -236,6 +244,15 @@ static __init const struct bcm47xx_board - } - } - -+ if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0 && -+ bcm47xx_nvram_getenv("boardtype", buf2, sizeof(buf2)) >= 0) { -+ for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) { -+ if (!strstarts(buf1, e2->value1) && -+ !strcmp(buf2, e2->value2)) -+ return &e2->board; -+ } -+ } -+ - if (bcm47xx_nvram_getenv("productid", buf1, sizeof(buf1)) >= 0) { - for (e1 = bcm47xx_board_list_productid; e1->value1; e1++) { - if (!strcmp(buf1, e1->value1)) ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -56,6 +56,11 @@ bcm47xx_buttons_asus_wl330ge[] __initcon - }; - - static const struct gpio_keys_button -+bcm47xx_buttons_asus_wl500g[] __initconst = { -+ BCM47XX_GPIO_KEY(6, KEY_RESTART), -+}; -+ -+static const struct gpio_keys_button - bcm47xx_buttons_asus_wl500gd[] __initconst = { - BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; -@@ -288,6 +293,13 @@ bcm47xx_buttons_linksys_wrtsl54gs[] __in - BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; - -+/* Microsoft */ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_microsoft_nm700[] __initconst = { -+ BCM47XX_GPIO_KEY(7, KEY_RESTART), -+}; -+ - /* Motorola */ - - static const struct gpio_keys_button -@@ -395,6 +407,9 @@ int __init bcm47xx_buttons_register(void - case BCM47XX_BOARD_ASUS_WL330GE: - err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl330ge); - break; -+ case BCM47XX_BOARD_ASUS_WL500G: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500g); -+ break; - case BCM47XX_BOARD_ASUS_WL500GD: - err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_wl500gd); - break; -@@ -517,6 +532,10 @@ int __init bcm47xx_buttons_register(void - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs); - break; - -+ case BCM47XX_BOARD_MICROSOFT_MN700: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_microsoft_nm700); -+ break; -+ - case BCM47XX_BOARD_MOTOROLA_WE800G: - err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_we800g); - break; ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -64,6 +64,11 @@ bcm47xx_leds_asus_wl330ge[] __initconst - }; - - static const struct gpio_led -+bcm47xx_leds_asus_wl500g[] __initconst = { -+ BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+}; -+ -+static const struct gpio_led - bcm47xx_leds_asus_wl500gd[] __initconst = { - BCM47XX_GPIO_LED(0, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), - }; -@@ -332,6 +337,13 @@ bcm47xx_leds_linksys_wrtsl54gs[] __initc - BCM47XX_GPIO_LED(7, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - -+/* Microsoft */ -+ -+static const struct gpio_led -+bcm47xx_leds_microsoft_nm700[] __initconst = { -+ BCM47XX_GPIO_LED(6, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+}; -+ - /* Motorola */ - - static const struct gpio_led -@@ -432,6 +444,9 @@ void __init bcm47xx_leds_register(void) - case BCM47XX_BOARD_ASUS_WL330GE: - bcm47xx_set_pdata(bcm47xx_leds_asus_wl330ge); - break; -+ case BCM47XX_BOARD_ASUS_WL500G: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_wl500g); -+ break; - case BCM47XX_BOARD_ASUS_WL500GD: - bcm47xx_set_pdata(bcm47xx_leds_asus_wl500gd); - break; -@@ -554,6 +569,10 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrtsl54gs); - break; - -+ case BCM47XX_BOARD_MICROSOFT_MN700: -+ bcm47xx_set_pdata(bcm47xx_leds_microsoft_nm700); -+ break; -+ - case BCM47XX_BOARD_MOTOROLA_WE800G: - bcm47xx_set_pdata(bcm47xx_leds_motorola_we800g); - break; ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -18,6 +18,7 @@ enum bcm47xx_board { - BCM47XX_BOARD_ASUS_WL300G, - BCM47XX_BOARD_ASUS_WL320GE, - BCM47XX_BOARD_ASUS_WL330GE, -+ BCM47XX_BOARD_ASUS_WL500G, - BCM47XX_BOARD_ASUS_WL500GD, - BCM47XX_BOARD_ASUS_WL500GPV1, - BCM47XX_BOARD_ASUS_WL500GPV2, -@@ -75,6 +76,8 @@ enum bcm47xx_board { - BCM47XX_BOARD_LINKSYS_WRT610NV2, - BCM47XX_BOARD_LINKSYS_WRTSL54GS, - -+ BCM47XX_BOARD_MICROSOFT_MN700, -+ - BCM47XX_BOARD_MOTOROLA_WE800G, - BCM47XX_BOARD_MOTOROLA_WR850GP, - BCM47XX_BOARD_MOTOROLA_WR850GV2V3, diff --git a/target/linux/brcm47xx/patches-3.10/147-MIPS-BCM47xx-Distinguish-WRT54G-series-devices-by-bo.patch b/target/linux/brcm47xx/patches-3.10/147-MIPS-BCM47xx-Distinguish-WRT54G-series-devices-by-bo.patch deleted file mode 100644 index 86a98f20c6..0000000000 --- a/target/linux/brcm47xx/patches-3.10/147-MIPS-BCM47xx-Distinguish-WRT54G-series-devices-by-bo.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 41a867cb07443c77c24747dcbad1a40002516469 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Fri, 20 Jun 2014 07:56:39 +0200 -Subject: [PATCH] MIPS: BCM47xx: Distinguish WRT54G series devices by boardtype -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Catalin reported that GPIOs used by bcm47xx don't match layout of his -WRT54GS V1.0 board. It seems we need to distinguish these 54G* devices. - -Reported-by: Catalin Patulea <cat@vv.carleton.ca> -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Cc: linux-mips@linux-mips.org -Cc: Hauke Mehrtens <hauke@hauke-m.de> -Patchwork: https://patchwork.linux-mips.org/patch/7112/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/board.c | 6 +++--- - arch/mips/bcm47xx/buttons.c | 10 ++++++---- - arch/mips/bcm47xx/leds.c | 10 ++++++---- - arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 4 +++- - 4 files changed, 18 insertions(+), 12 deletions(-) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -187,9 +187,9 @@ struct bcm47xx_board_type_list3 bcm47xx_ - {{BCM47XX_BOARD_PHICOMM_M1, "Phicomm M1"}, "0x0590", "80", "0x1104"}, - {{BCM47XX_BOARD_ZTE_H218N, "ZTE H218N"}, "0x053d", "1234", "0x1305"}, - {{BCM47XX_BOARD_NETGEAR_WNR3500L, "Netgear WNR3500L"}, "0x04CF", "3500", "02"}, -- {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0101", "42", "0x10"}, -- {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0467", "42", "0x10"}, -- {{BCM47XX_BOARD_LINKSYS_WRT54G, "Linksys WRT54G/GS/GL"}, "0x0708", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101, "Linksys WRT54G/GS/GL"}, "0x0101", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467, "Linksys WRT54G/GS/GL"}, "0x0467", "42", "0x10"}, -+ {{BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708, "Linksys WRT54G/GS/GL"}, "0x0708", "42", "0x10"}, - { {0}, NULL}, - }; - ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -270,7 +270,7 @@ bcm47xx_buttons_linksys_wrt54g3gv2[] __i - }; - - static const struct gpio_keys_button --bcm47xx_buttons_linksys_wrt54gsv1[] __initconst = { -+bcm47xx_buttons_linksys_wrt54g_generic[] __initconst = { - BCM47XX_GPIO_KEY(4, KEY_WPS_BUTTON), - BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; -@@ -516,12 +516,14 @@ int __init bcm47xx_buttons_register(void - case BCM47XX_BOARD_LINKSYS_WRT310NV1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1); - break; -- case BCM47XX_BOARD_LINKSYS_WRT54G: -- err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54gsv1); -- break; - case BCM47XX_BOARD_LINKSYS_WRT54G3GV2: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2); - break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101: -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467: -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g_generic); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT610NV1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt610nv1); - break; ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -297,7 +297,7 @@ bcm47xx_leds_linksys_wrt310nv1[] __initc - }; - - static const struct gpio_led --bcm47xx_leds_linksys_wrt54gsv1[] __initconst = { -+bcm47xx_leds_linksys_wrt54g_generic[] __initconst = { - BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), - BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), - BCM47XX_GPIO_LED(5, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -@@ -553,12 +553,14 @@ void __init bcm47xx_leds_register(void) - case BCM47XX_BOARD_LINKSYS_WRT310NV1: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1); - break; -- case BCM47XX_BOARD_LINKSYS_WRT54G: -- bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54gsv1); -- break; - case BCM47XX_BOARD_LINKSYS_WRT54G3GV2: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g3gv2); - break; -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101: -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467: -+ case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_generic); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT610NV1: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt610nv1); - break; ---- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h -@@ -71,7 +71,9 @@ enum bcm47xx_board { - BCM47XX_BOARD_LINKSYS_WRT310NV1, - BCM47XX_BOARD_LINKSYS_WRT310NV2, - BCM47XX_BOARD_LINKSYS_WRT54G3GV2, -- BCM47XX_BOARD_LINKSYS_WRT54G, -+ BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101, -+ BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467, -+ BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708, - BCM47XX_BOARD_LINKSYS_WRT610NV1, - BCM47XX_BOARD_LINKSYS_WRT610NV2, - BCM47XX_BOARD_LINKSYS_WRTSL54GS, diff --git a/target/linux/brcm47xx/patches-3.10/148-MIPS-BCM47xx-Fix-LEDs-on-WRT54GS-V1.0.patch b/target/linux/brcm47xx/patches-3.10/148-MIPS-BCM47xx-Fix-LEDs-on-WRT54GS-V1.0.patch deleted file mode 100644 index 181758e6f8..0000000000 --- a/target/linux/brcm47xx/patches-3.10/148-MIPS-BCM47xx-Fix-LEDs-on-WRT54GS-V1.0.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 7bb26b1691166d0d830c42c1a25caf82208bf90d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Fri, 20 Jun 2014 07:56:40 +0200 -Subject: [PATCH] MIPS: BCM47xx: Fix LEDs on WRT54GS V1.0 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Reported-by: Catalin Patulea <cat@vv.carleton.ca> -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: linux-mips@linux-mips.org -Cc: Hauke Mehrtens <hauke@hauke-m.de> -Patchwork: https://patchwork.linux-mips.org/patch/7113/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/leds.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -311,6 +311,14 @@ bcm47xx_leds_linksys_wrt54g3gv2[] __init - BCM47XX_GPIO_LED(3, "blue", "3g", 0, LEDS_GPIO_DEFSTATE_OFF), - }; - -+/* Verified on: WRT54GS V1.0 */ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt54g_type_0101[] __initconst = { -+ BCM47XX_GPIO_LED(0, "green", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "green", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ - static const struct gpio_led - bcm47xx_leds_linksys_wrt610nv1[] __initconst = { - BCM47XX_GPIO_LED(0, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -@@ -557,6 +565,8 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g3gv2); - break; - case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_type_0101); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467: - case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_generic); diff --git a/target/linux/brcm47xx/patches-3.10/149-MIPS-BCM47XX-Move-shared-symbols-to-the-config-BCM47.patch b/target/linux/brcm47xx/patches-3.10/149-MIPS-BCM47XX-Move-shared-symbols-to-the-config-BCM47.patch deleted file mode 100644 index 59afdd48d6..0000000000 --- a/target/linux/brcm47xx/patches-3.10/149-MIPS-BCM47XX-Move-shared-symbols-to-the-config-BCM47.patch +++ /dev/null @@ -1,50 +0,0 @@ -From c949c0bc55571209fe6742f645b1e2eb20099591 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Tue, 17 Jun 2014 16:36:50 +0200 -Subject: [PATCH 149/150] MIPS: BCM47XX: Move shared symbols to the config - BCM47XX -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Cc: linux-mips@linux-mips.org -Cc: Hauke Mehrtens <hauke@hauke-m.de> -Patchwork: https://patchwork.linux-mips.org/patch/7100/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/Kconfig | 2 ++ - arch/mips/bcm47xx/Kconfig | 4 ---- - 2 files changed, 2 insertions(+), 4 deletions(-) - ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -119,6 +119,8 @@ config BCM47XX - select SYS_SUPPORTS_LITTLE_ENDIAN - select SYS_HAS_EARLY_PRINTK - select EARLY_PRINTK_8250 if EARLY_PRINTK -+ select GPIOLIB -+ select LEDS_GPIO_REGISTER - help - Support for BCM47XX based boards - ---- a/arch/mips/bcm47xx/Kconfig -+++ b/arch/mips/bcm47xx/Kconfig -@@ -11,8 +11,6 @@ config BCM47XX_SSB - select SSB_DRIVER_PCICORE if PCI - select SSB_PCICORE_HOSTMODE if PCI - select SSB_DRIVER_GPIO -- select GPIOLIB -- select LEDS_GPIO_REGISTER - default y - help - Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support. -@@ -29,8 +27,6 @@ config BCM47XX_BCMA - select BCMA_HOST_PCI if PCI - select BCMA_DRIVER_PCI_HOSTMODE if PCI - select BCMA_DRIVER_GPIO -- select GPIOLIB -- select LEDS_GPIO_REGISTER - default y - help - Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus. diff --git a/target/linux/brcm47xx/patches-3.10/150-MIPS-BCM47XX-Select-SYS_SUPPORTS_HIGHMEM-for-BCM47XX.patch b/target/linux/brcm47xx/patches-3.10/150-MIPS-BCM47XX-Select-SYS_SUPPORTS_HIGHMEM-for-BCM47XX.patch deleted file mode 100644 index 2fa44428b1..0000000000 --- a/target/linux/brcm47xx/patches-3.10/150-MIPS-BCM47XX-Select-SYS_SUPPORTS_HIGHMEM-for-BCM47XX.patch +++ /dev/null @@ -1,32 +0,0 @@ -From ce01cbef8b0b71d01f8a68cba59da3198165bae6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Tue, 17 Jun 2014 16:36:51 +0200 -Subject: [PATCH 150/150] MIPS: BCM47XX: Select SYS_SUPPORTS_HIGHMEM for - BCM47XX_BCMA -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -It seems that bcm47xx can handle only 128 MiB of RAM directly. There -are few devices with 256 MiB, but Broadcom's SDK uses highmem to handle -anything above 128 MiB. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Cc: linux-mips@linux-mips.org -Cc: Hauke Mehrtens <hauke@hauke-m.de> -Patchwork: https://patchwork.linux-mips.org/patch/7101/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/Kconfig | 1 + - 1 file changed, 1 insertion(+) - ---- a/arch/mips/bcm47xx/Kconfig -+++ b/arch/mips/bcm47xx/Kconfig -@@ -20,6 +20,7 @@ config BCM47XX_SSB - config BCM47XX_BCMA - bool "BCMA Support for Broadcom BCM47XX" - select SYS_HAS_CPU_MIPS32_R2 -+ select SYS_SUPPORTS_HIGHMEM - select CPU_MIPSR2_IRQ_VI - select BCMA - select BCMA_HOST_SOC diff --git a/target/linux/brcm47xx/patches-3.10/151-MIPS-BCM47XX-Devices-database-update-for-3.17.patch b/target/linux/brcm47xx/patches-3.10/151-MIPS-BCM47XX-Devices-database-update-for-3.17.patch deleted file mode 100644 index 78846d4ff2..0000000000 --- a/target/linux/brcm47xx/patches-3.10/151-MIPS-BCM47XX-Devices-database-update-for-3.17.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 9194b3431616567ffbf69ef970506d695912be0b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Thu, 17 Jul 2014 23:24:30 +0200 -Subject: [PATCH] MIPS: BCM47XX: Devices database update for 3.17 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Detect more devices and register leds & buttons for them. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: linux-mips@linux-mips.org -Patchwork: https://patchwork.linux-mips.org/patch/7394/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/board.c | 3 ++- - arch/mips/bcm47xx/buttons.c | 9 ++++++++ - arch/mips/bcm47xx/leds.c | 53 +++++++++++++++++++++++++++++++++++++-------- - 3 files changed, 55 insertions(+), 10 deletions(-) - ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -57,6 +57,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_hardware_version[] __initconst = { - {{BCM47XX_BOARD_ASUS_RTN10U, "Asus RT-N10U"}, "RTN10U"}, -+ {{BCM47XX_BOARD_ASUS_RTN10D, "Asus RT-N10D"}, "RTN10D"}, - {{BCM47XX_BOARD_ASUS_RTN12, "Asus RT-N12"}, "RT-N12"}, - {{BCM47XX_BOARD_ASUS_RTN12B1, "Asus RT-N12B1"}, "RTN12B1"}, - {{BCM47XX_BOARD_ASUS_RTN12C1, "Asus RT-N12C1"}, "RTN12C1"}, -@@ -105,7 +106,7 @@ struct bcm47xx_board_type_list1 bcm47xx_ - /* ModelId */ - static const - struct bcm47xx_board_type_list1 bcm47xx_board_list_ModelId[] __initconst = { -- {{BCM47XX_BOARD_DELL_TM2300, "Dell WX-5565"}, "WX-5565"}, -+ {{BCM47XX_BOARD_DELL_TM2300, "Dell TrueMobile 2300"}, "WX-5565"}, - {{BCM47XX_BOARD_MOTOROLA_WE800G, "Motorola WE800G"}, "WE800G"}, - {{BCM47XX_BOARD_MOTOROLA_WR850GP, "Motorola WR850GP"}, "WR850GP"}, - {{BCM47XX_BOARD_MOTOROLA_WR850GV2V3, "Motorola WR850G"}, "WR850G"}, ---- a/arch/mips/bcm47xx/buttons.c -+++ b/arch/mips/bcm47xx/buttons.c -@@ -341,6 +341,12 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i - }; - - static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = { -+ BCM47XX_GPIO_KEY(4, KEY_RESTART), -+ BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON), -+}; -+ -+static const struct gpio_keys_button - bcm47xx_buttons_netgear_wnr834bv2[] __initconst = { - BCM47XX_GPIO_KEY(6, KEY_RESTART), - }; -@@ -557,6 +563,9 @@ int __init bcm47xx_buttons_register(void - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: - err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1); - break; -+ case BCM47XX_BOARD_NETGEAR_WNR3500L: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr3500lv1); -+ break; - case BCM47XX_BOARD_NETGEAR_WNR834BV2: - err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wnr834bv2); - break; ---- a/arch/mips/bcm47xx/leds.c -+++ b/arch/mips/bcm47xx/leds.c -@@ -35,6 +35,15 @@ bcm47xx_leds_asus_rtn12[] __initconst = - }; - - static const struct gpio_led -+bcm47xx_leds_asus_rtn15u[] __initconst = { -+ /* TODO: Add "wlan" LED */ -+ BCM47XX_GPIO_LED(3, "blue", "wan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(4, "blue", "lan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "blue", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(9, "blue", "usb", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led - bcm47xx_leds_asus_rtn16[] __initconst = { - BCM47XX_GPIO_LED(1, "blue", "power", 1, LEDS_GPIO_DEFSTATE_ON), - BCM47XX_GPIO_LED(7, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -@@ -42,8 +51,8 @@ bcm47xx_leds_asus_rtn16[] __initconst = - - static const struct gpio_led - bcm47xx_leds_asus_rtn66u[] __initconst = { -- BCM47XX_GPIO_LED(12, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -- BCM47XX_GPIO_LED(15, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(12, "blue", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(15, "blue", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - - static const struct gpio_led -@@ -221,8 +230,8 @@ bcm47xx_leds_linksys_e1000v1[] __initcon - - static const struct gpio_led - bcm47xx_leds_linksys_e1000v21[] __initconst = { -- BCM47XX_GPIO_LED(5, "unk", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -- BCM47XX_GPIO_LED(6, "unk", "power", 1, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(5, "blue", "wlan", 0, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(6, "blue", "power", 1, LEDS_GPIO_DEFSTATE_ON), - BCM47XX_GPIO_LED(7, "amber", "wps", 0, LEDS_GPIO_DEFSTATE_OFF), - BCM47XX_GPIO_LED(8, "blue", "wps", 0, LEDS_GPIO_DEFSTATE_OFF), - }; -@@ -319,6 +328,16 @@ bcm47xx_leds_linksys_wrt54g_type_0101[] - BCM47XX_GPIO_LED(7, "green", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - -+/* Verified on: WRT54GL V1.1 */ -+static const struct gpio_led -+bcm47xx_leds_linksys_wrt54g_type_0467[] __initconst = { -+ BCM47XX_GPIO_LED(0, "green", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(2, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "green", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ - static const struct gpio_led - bcm47xx_leds_linksys_wrt610nv1[] __initconst = { - BCM47XX_GPIO_LED(0, "unk", "usb", 1, LEDS_GPIO_DEFSTATE_OFF), -@@ -338,11 +357,10 @@ bcm47xx_leds_linksys_wrt610nv2[] __initc - - static const struct gpio_led - bcm47xx_leds_linksys_wrtsl54gs[] __initconst = { -- BCM47XX_GPIO_LED(0, "unk", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -- BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON), -- BCM47XX_GPIO_LED(2, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -- BCM47XX_GPIO_LED(3, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -- BCM47XX_GPIO_LED(7, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(0, "green", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(5, "white", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(7, "orange", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), - }; - - /* Microsoft */ -@@ -397,6 +415,15 @@ bcm47xx_leds_netgear_wndr4500v1[] __init - }; - - static const struct gpio_led -+bcm47xx_leds_netgear_wnr3500lv1[] __initconst = { -+ BCM47XX_GPIO_LED(0, "blue", "wlan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(1, "green", "wps", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(2, "green", "wan", 1, LEDS_GPIO_DEFSTATE_OFF), -+ BCM47XX_GPIO_LED(3, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), -+ BCM47XX_GPIO_LED(7, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -+}; -+ -+static const struct gpio_led - bcm47xx_leds_netgear_wnr834bv2[] __initconst = { - BCM47XX_GPIO_LED(2, "green", "power", 0, LEDS_GPIO_DEFSTATE_ON), - BCM47XX_GPIO_LED(3, "amber", "power", 0, LEDS_GPIO_DEFSTATE_OFF), -@@ -437,6 +464,9 @@ void __init bcm47xx_leds_register(void) - case BCM47XX_BOARD_ASUS_RTN12: - bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12); - break; -+ case BCM47XX_BOARD_ASUS_RTN15U: -+ bcm47xx_set_pdata(bcm47xx_leds_asus_rtn15u); -+ break; - case BCM47XX_BOARD_ASUS_RTN16: - bcm47xx_set_pdata(bcm47xx_leds_asus_rtn16); - break; -@@ -568,6 +598,8 @@ void __init bcm47xx_leds_register(void) - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_type_0101); - break; - case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467: -+ bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_type_0467); -+ break; - case BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0708: - bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt54g_generic); - break; -@@ -601,6 +633,9 @@ void __init bcm47xx_leds_register(void) - case BCM47XX_BOARD_NETGEAR_WNDR4500V1: - bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500v1); - break; -+ case BCM47XX_BOARD_NETGEAR_WNR3500L: -+ bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr3500lv1); -+ break; - case BCM47XX_BOARD_NETGEAR_WNR834BV2: - bcm47xx_set_pdata(bcm47xx_leds_netgear_wnr834bv2); - break; diff --git a/target/linux/brcm47xx/patches-3.10/152-Revert-MIPS-Delete-unused-function-add_temporary_ent.patch b/target/linux/brcm47xx/patches-3.10/152-Revert-MIPS-Delete-unused-function-add_temporary_ent.patch deleted file mode 100644 index 8fb06b2be9..0000000000 --- a/target/linux/brcm47xx/patches-3.10/152-Revert-MIPS-Delete-unused-function-add_temporary_ent.patch +++ /dev/null @@ -1,107 +0,0 @@ -From d377732c8c9aac14ccb900b65678558b0fb8f0f3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Thu, 17 Jul 2014 23:26:32 +0200 -Subject: [PATCH 152/153] Revert "MIPS: Delete unused function - add_temporary_entry." -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This reverts commit d7a887a73dec6c387b02a966a71aac767bbd9ce6. - -Function add_temporary_entry is needed by bcm47xx to support highmem. We -need to add a temporary entry to check for amount of RAM. -The only change made in this revert was replacing (ENTER|EXIT)_CRITICAL. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Cc: linux-mips@linux-mips.org -Cc: Hauke Mehrtens <hauke@hauke-m.de> -Patchwork: https://patchwork.linux-mips.org/patch/7395/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/include/asm/pgtable-32.h | 10 ++++++++ - arch/mips/mm/tlb-r4k.c | 47 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 57 insertions(+) - ---- a/arch/mips/include/asm/pgtable-32.h -+++ b/arch/mips/include/asm/pgtable-32.h -@@ -19,6 +19,16 @@ - #include <asm-generic/pgtable-nopmd.h> - - /* -+ * - add_temporary_entry() add a temporary TLB entry. We use TLB entries -+ * starting at the top and working down. This is for populating the -+ * TLB before trap_init() puts the TLB miss handler in place. It -+ * should be used only for entries matching the actual page tables, -+ * to prevent inconsistencies. -+ */ -+extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, -+ unsigned long entryhi, unsigned long pagemask); -+ -+/* - * Basically we have the same two-level (which is the logical three level - * Linux page table layout folded) page tables as the i386. Some day - * when we have proper page coloring support we can have a 1% quicker ---- a/arch/mips/mm/tlb-r4k.c -+++ b/arch/mips/mm/tlb-r4k.c -@@ -389,6 +389,51 @@ int __init has_transparent_hugepage(void - - #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ - -+/* -+ * Used for loading TLB entries before trap_init() has started, when we -+ * don't actually want to add a wired entry which remains throughout the -+ * lifetime of the system -+ */ -+ -+static int temp_tlb_entry __cpuinitdata; -+ -+__init int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, -+ unsigned long entryhi, unsigned long pagemask) -+{ -+ int ret = 0; -+ unsigned long flags; -+ unsigned long wired; -+ unsigned long old_pagemask; -+ unsigned long old_ctx; -+ -+ local_irq_save(flags); -+ /* Save old context and create impossible VPN2 value */ -+ old_ctx = read_c0_entryhi(); -+ old_pagemask = read_c0_pagemask(); -+ wired = read_c0_wired(); -+ if (--temp_tlb_entry < wired) { -+ printk(KERN_WARNING -+ "No TLB space left for add_temporary_entry\n"); -+ ret = -ENOSPC; -+ goto out; -+ } -+ -+ write_c0_index(temp_tlb_entry); -+ write_c0_pagemask(pagemask); -+ write_c0_entryhi(entryhi); -+ write_c0_entrylo0(entrylo0); -+ write_c0_entrylo1(entrylo1); -+ mtc0_tlbw_hazard(); -+ tlb_write_indexed(); -+ tlbw_use_hazard(); -+ -+ write_c0_entryhi(old_ctx); -+ write_c0_pagemask(old_pagemask); -+out: -+ local_irq_restore(flags); -+ return ret; -+} -+ - static int __cpuinitdata ntlb; - static int __init set_ntlb(char *str) - { -@@ -426,6 +471,8 @@ void __cpuinit tlb_init(void) - write_c0_pagegrain(pg); - } - -+ temp_tlb_entry = current_cpu_data.tlbsize - 1; -+ - /* From this point on the ARC firmware is dead. */ - local_flush_tlb_all(); - diff --git a/target/linux/brcm47xx/patches-3.10/153-MIPS-BCM47XX-Detect-more-then-128-MiB-of-RAM-HIGHMEM.patch b/target/linux/brcm47xx/patches-3.10/153-MIPS-BCM47XX-Detect-more-then-128-MiB-of-RAM-HIGHMEM.patch deleted file mode 100644 index ed5695dca3..0000000000 --- a/target/linux/brcm47xx/patches-3.10/153-MIPS-BCM47XX-Detect-more-then-128-MiB-of-RAM-HIGHMEM.patch +++ /dev/null @@ -1,166 +0,0 @@ -From 6ee1d93455384cef8a0426effe85da241b525b63 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> -Date: Thu, 17 Jul 2014 23:26:33 +0200 -Subject: [PATCH 153/153] MIPS: BCM47XX: Detect more then 128 MiB of RAM - (HIGHMEM) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -So far BCM47XX can only detect amount of HIGHMEM. It still requires -adding (registering) and well-testing before enabling by default. - -Signed-off-by: Rafał Miłecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: linux-mips@linux-mips.org -Patchwork: https://patchwork.linux-mips.org/patch/7396/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/bcm47xx_private.h | 3 ++ - arch/mips/bcm47xx/prom.c | 68 ++++++++++++++++++++++++++++++++++++- - arch/mips/bcm47xx/setup.c | 3 ++ - arch/mips/include/asm/pgtable-32.h | 2 ++ - arch/mips/mm/tlb-r4k.c | 2 +- - 5 files changed, 76 insertions(+), 2 deletions(-) - ---- a/arch/mips/bcm47xx/bcm47xx_private.h -+++ b/arch/mips/bcm47xx/bcm47xx_private.h -@@ -3,6 +3,9 @@ - - #include <linux/kernel.h> - -+/* prom.c */ -+void __init bcm47xx_prom_highmem_init(void); -+ - /* buttons.c */ - int __init bcm47xx_buttons_register(void); - ---- a/arch/mips/bcm47xx/prom.c -+++ b/arch/mips/bcm47xx/prom.c -@@ -51,6 +51,8 @@ __init void bcm47xx_set_system_type(u16 - chip_id); - } - -+static unsigned long lowmem __initdata; -+ - static __init void prom_init_mem(void) - { - unsigned long mem; -@@ -84,6 +86,7 @@ static __init void prom_init_mem(void) - if (!memcmp(prom_init, prom_init + mem, 32)) - break; - } -+ lowmem = mem; - - /* Ignoring the last page when ddr size is 128M. Cached - * accesses to last page is causing the processor to prefetch -@@ -92,7 +95,6 @@ static __init void prom_init_mem(void) - */ - if (c->cputype == CPU_74K && (mem == (128 << 20))) - mem -= 0x1000; -- - add_memory_region(0, mem, BOOT_MEM_RAM); - } - -@@ -111,3 +113,67 @@ void __init prom_init(void) - void __init prom_free_prom_memory(void) - { - } -+ -+#if defined(CONFIG_BCM47XX_BCMA) && defined(CONFIG_HIGHMEM) -+ -+#define EXTVBASE 0xc0000000 -+#define ENTRYLO(x) ((pte_val(pfn_pte((x) >> _PFN_SHIFT, PAGE_KERNEL_UNCACHED)) >> 6) | 1) -+ -+#include <asm/tlbflush.h> -+ -+/* Stripped version of tlb_init, with the call to build_tlb_refill_handler -+ * dropped. Calling it at this stage causes a hang. -+ */ -+void __cpuinit early_tlb_init(void) -+{ -+ write_c0_pagemask(PM_DEFAULT_MASK); -+ write_c0_wired(0); -+ temp_tlb_entry = current_cpu_data.tlbsize - 1; -+ local_flush_tlb_all(); -+} -+ -+void __init bcm47xx_prom_highmem_init(void) -+{ -+ unsigned long off = (unsigned long)prom_init; -+ unsigned long extmem = 0; -+ bool highmem_region = false; -+ -+ if (WARN_ON(bcm47xx_bus_type != BCM47XX_BUS_TYPE_BCMA)) -+ return; -+ -+ if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706) -+ highmem_region = true; -+ -+ if (lowmem != 128 << 20 || !highmem_region) -+ return; -+ -+ early_tlb_init(); -+ -+ /* Add one temporary TLB entry to map SDRAM Region 2. -+ * Physical Virtual -+ * 0x80000000 0xc0000000 (1st: 256MB) -+ * 0x90000000 0xd0000000 (2nd: 256MB) -+ */ -+ add_temporary_entry(ENTRYLO(0x80000000), -+ ENTRYLO(0x80000000 + (256 << 20)), -+ EXTVBASE, PM_256M); -+ -+ off = EXTVBASE + __pa(off); -+ for (extmem = 128 << 20; extmem < 512 << 20; extmem <<= 1) { -+ if (!memcmp(prom_init, (void *)(off + extmem), 16)) -+ break; -+ } -+ extmem -= lowmem; -+ -+ early_tlb_init(); -+ -+ if (!extmem) -+ return; -+ -+ pr_warn("Found %lu MiB of extra memory, but highmem is unsupported yet!\n", -+ extmem >> 20); -+ -+ /* TODO: Register extra memory */ -+} -+ -+#endif /* defined(CONFIG_BCM47XX_BCMA) && defined(CONFIG_HIGHMEM) */ ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -223,6 +223,9 @@ void __init plat_mem_setup(void) - bcm47xx_bus_type = BCM47XX_BUS_TYPE_BCMA; - bcm47xx_register_bcma(); - bcm47xx_set_system_type(bcm47xx_bus.bcma.bus.chipinfo.id); -+#ifdef CONFIG_HIGHMEM -+ bcm47xx_prom_highmem_init(); -+#endif - #endif - } else { - printk(KERN_INFO "bcm47xx: using ssb bus\n"); ---- a/arch/mips/include/asm/pgtable-32.h -+++ b/arch/mips/include/asm/pgtable-32.h -@@ -18,6 +18,8 @@ - - #include <asm-generic/pgtable-nopmd.h> - -+extern int temp_tlb_entry __cpuinitdata; -+ - /* - * - add_temporary_entry() add a temporary TLB entry. We use TLB entries - * starting at the top and working down. This is for populating the ---- a/arch/mips/mm/tlb-r4k.c -+++ b/arch/mips/mm/tlb-r4k.c -@@ -395,7 +395,7 @@ int __init has_transparent_hugepage(void - * lifetime of the system - */ - --static int temp_tlb_entry __cpuinitdata; -+int temp_tlb_entry __cpuinitdata; - - __init int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, - unsigned long entryhi, unsigned long pagemask) diff --git a/target/linux/brcm47xx/patches-3.10/159-cpu_fixes.patch b/target/linux/brcm47xx/patches-3.10/159-cpu_fixes.patch deleted file mode 100644 index 984624ac70..0000000000 --- a/target/linux/brcm47xx/patches-3.10/159-cpu_fixes.patch +++ /dev/null @@ -1,368 +0,0 @@ ---- a/arch/mips/include/asm/r4kcache.h -+++ b/arch/mips/include/asm/r4kcache.h -@@ -17,6 +17,20 @@ - #include <asm/cpu-features.h> - #include <asm/mipsmtregs.h> - -+#ifdef CONFIG_BCM47XX -+#include <asm/paccess.h> -+#include <linux/ssb/ssb.h> -+#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE))) -+ -+#define BCM4710_FILL_TLB(addr) (*(volatile unsigned long *)(addr)) -+#define BCM4710_PROTECTED_FILL_TLB(addr) ({ unsigned long x; get_dbe(x, (volatile unsigned long *)(addr)); }) -+#else -+#define BCM4710_DUMMY_RREG() -+ -+#define BCM4710_FILL_TLB(addr) -+#define BCM4710_PROTECTED_FILL_TLB(addr) -+#endif -+ - /* - * This macro return a properly sign-extended address suitable as base address - * for indexed cache operations. Two issues here: -@@ -150,6 +164,7 @@ static inline void flush_icache_line_ind - static inline void flush_dcache_line_indexed(unsigned long addr) - { - __dflush_prologue -+ BCM4710_DUMMY_RREG(); - cache_op(Index_Writeback_Inv_D, addr); - __dflush_epilogue - } -@@ -169,6 +184,7 @@ static inline void flush_icache_line(uns - static inline void flush_dcache_line(unsigned long addr) - { - __dflush_prologue -+ BCM4710_DUMMY_RREG(); - cache_op(Hit_Writeback_Inv_D, addr); - __dflush_epilogue - } -@@ -176,6 +192,7 @@ static inline void flush_dcache_line(uns - static inline void invalidate_dcache_line(unsigned long addr) - { - __dflush_prologue -+ BCM4710_DUMMY_RREG(); - cache_op(Hit_Invalidate_D, addr); - __dflush_epilogue - } -@@ -208,6 +225,7 @@ static inline void flush_scache_line(uns - */ - static inline void protected_flush_icache_line(unsigned long addr) - { -+ BCM4710_DUMMY_RREG(); - protected_cache_op(Hit_Invalidate_I, addr); - } - -@@ -219,6 +237,7 @@ static inline void protected_flush_icach - */ - static inline void protected_writeback_dcache_line(unsigned long addr) - { -+ BCM4710_DUMMY_RREG(); - protected_cache_op(Hit_Writeback_Inv_D, addr); - } - -@@ -339,8 +358,52 @@ static inline void invalidate_tcache_pag - : "r" (base), \ - "i" (op)); - -+static inline void blast_dcache(void) -+{ -+ unsigned long start = KSEG0; -+ unsigned long dcache_size = current_cpu_data.dcache.waysize * current_cpu_data.dcache.ways; -+ unsigned long end = (start + dcache_size); -+ -+ do { -+ BCM4710_DUMMY_RREG(); -+ cache_op(Index_Writeback_Inv_D, start); -+ start += current_cpu_data.dcache.linesz; -+ } while(start < end); -+} -+ -+static inline void blast_dcache_page(unsigned long page) -+{ -+ unsigned long start = page; -+ unsigned long end = start + PAGE_SIZE; -+ -+ BCM4710_FILL_TLB(start); -+ do { -+ BCM4710_DUMMY_RREG(); -+ cache_op(Hit_Writeback_Inv_D, start); -+ start += current_cpu_data.dcache.linesz; -+ } while(start < end); -+} -+ -+static inline void blast_dcache_page_indexed(unsigned long page) -+{ -+ unsigned long start = page; -+ unsigned long end = start + PAGE_SIZE; -+ unsigned long ws_inc = 1UL << current_cpu_data.dcache.waybit; -+ unsigned long ws_end = current_cpu_data.dcache.ways << -+ current_cpu_data.dcache.waybit; -+ unsigned long ws, addr; -+ for (ws = 0; ws < ws_end; ws += ws_inc) { -+ start = page + ws; -+ for (addr = start; addr < end; addr += current_cpu_data.dcache.linesz) { -+ BCM4710_DUMMY_RREG(); -+ cache_op(Index_Writeback_Inv_D, addr); -+ } -+ } -+} -+ -+ - /* build blast_xxx, blast_xxx_page, blast_xxx_page_indexed */ --#define __BUILD_BLAST_CACHE(pfx, desc, indexop, hitop, lsize) \ -+#define __BUILD_BLAST_CACHE(pfx, desc, indexop, hitop, lsize, war) \ - static inline void blast_##pfx##cache##lsize(void) \ - { \ - unsigned long start = INDEX_BASE; \ -@@ -352,6 +415,7 @@ static inline void blast_##pfx##cache##l - \ - __##pfx##flush_prologue \ - \ -+ war \ - for (ws = 0; ws < ws_end; ws += ws_inc) \ - for (addr = start; addr < end; addr += lsize * 32) \ - cache##lsize##_unroll32(addr|ws, indexop); \ -@@ -366,6 +430,7 @@ static inline void blast_##pfx##cache##l - \ - __##pfx##flush_prologue \ - \ -+ war \ - do { \ - cache##lsize##_unroll32(start, hitop); \ - start += lsize * 32; \ -@@ -384,6 +449,8 @@ static inline void blast_##pfx##cache##l - current_cpu_data.desc.waybit; \ - unsigned long ws, addr; \ - \ -+ war \ -+ \ - __##pfx##flush_prologue \ - \ - for (ws = 0; ws < ws_end; ws += ws_inc) \ -@@ -393,36 +460,38 @@ static inline void blast_##pfx##cache##l - __##pfx##flush_epilogue \ - } - --__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 16) --__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 16) --__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16) --__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32) --__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32) --__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32) --__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 64) --__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64) --__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64) --__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128) -- --__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 16) --__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 32) --__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 16) --__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 32) --__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 64) --__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 128) -+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 16, ) -+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 16, BCM4710_FILL_TLB(start);) -+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16, ) -+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32, ) -+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32, BCM4710_FILL_TLB(start);) -+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32, ) -+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 64, ) -+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64, BCM4710_FILL_TLB(start);) -+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64, ) -+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128, ) -+ -+__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 16, ) -+__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 32, ) -+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 16, ) -+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 32, ) -+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 64, ) -+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 128, ) - - /* build blast_xxx_range, protected_blast_xxx_range */ --#define __BUILD_BLAST_CACHE_RANGE(pfx, desc, hitop, prot) \ -+#define __BUILD_BLAST_CACHE_RANGE(pfx, desc, hitop, prot, war, war2) \ - static inline void prot##blast_##pfx##cache##_range(unsigned long start, \ - unsigned long end) \ - { \ - unsigned long lsize = cpu_##desc##_line_size(); \ - unsigned long addr = start & ~(lsize - 1); \ - unsigned long aend = (end - 1) & ~(lsize - 1); \ -+ war \ - \ - __##pfx##flush_prologue \ - \ - while (1) { \ -+ war2 \ - prot##cache_op(hitop, addr); \ - if (addr == aend) \ - break; \ -@@ -432,13 +501,13 @@ static inline void prot##blast_##pfx##ca - __##pfx##flush_epilogue \ - } - --__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, protected_) --__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, protected_) --__BUILD_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I, protected_) --__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, ) --__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, ) -+__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, protected_, BCM4710_PROTECTED_FILL_TLB(addr); BCM4710_PROTECTED_FILL_TLB(aend);, BCM4710_DUMMY_RREG();) -+__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, protected_,, ) -+__BUILD_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I, protected_,, ) -+__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D,, BCM4710_FILL_TLB(addr); BCM4710_FILL_TLB(aend);, BCM4710_DUMMY_RREG();) -+__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD,,, ) - /* blast_inv_dcache_range */ --__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D, ) --__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD, ) -+__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D,,,BCM4710_DUMMY_RREG();) -+__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD,,, ) - - #endif /* _ASM_R4KCACHE_H */ ---- a/arch/mips/include/asm/stackframe.h -+++ b/arch/mips/include/asm/stackframe.h -@@ -449,6 +449,10 @@ - .macro RESTORE_SP_AND_RET - LONG_L sp, PT_R29(sp) - .set mips3 -+#ifdef CONFIG_BCM47XX -+ nop -+ nop -+#endif - eret - .set mips0 - .endm ---- a/arch/mips/kernel/genex.S -+++ b/arch/mips/kernel/genex.S -@@ -46,6 +46,10 @@ - NESTED(except_vec3_generic, 0, sp) - .set push - .set noat -+#ifdef CONFIG_BCM47XX -+ nop -+ nop -+#endif - #if R5432_CP0_INTERRUPT_WAR - mfc0 k0, CP0_INDEX - #endif ---- a/arch/mips/mm/c-r4k.c -+++ b/arch/mips/mm/c-r4k.c -@@ -35,6 +35,9 @@ - #include <asm/traps.h> - #include <asm/dma-coherence.h> - -+/* For enabling BCM4710 cache workarounds */ -+int bcm4710 = 0; -+ - /* - * Special Variant of smp_call_function for use by cache functions: - * -@@ -111,6 +114,9 @@ static void __cpuinit r4k_blast_dcache_p - { - unsigned long dc_lsize = cpu_dcache_line_size(); - -+ if (bcm4710) -+ r4k_blast_dcache_page = blast_dcache_page; -+ else - if (dc_lsize == 0) - r4k_blast_dcache_page = (void *)cache_noop; - else if (dc_lsize == 16) -@@ -127,6 +133,9 @@ static void __cpuinit r4k_blast_dcache_p - { - unsigned long dc_lsize = cpu_dcache_line_size(); - -+ if (bcm4710) -+ r4k_blast_dcache_page_indexed = blast_dcache_page_indexed; -+ else - if (dc_lsize == 0) - r4k_blast_dcache_page_indexed = (void *)cache_noop; - else if (dc_lsize == 16) -@@ -144,6 +153,9 @@ static void __cpuinit r4k_blast_dcache_s - { - unsigned long dc_lsize = cpu_dcache_line_size(); - -+ if (bcm4710) -+ r4k_blast_dcache = blast_dcache; -+ else - if (dc_lsize == 0) - r4k_blast_dcache = (void *)cache_noop; - else if (dc_lsize == 16) -@@ -674,6 +686,8 @@ static void local_r4k_flush_cache_sigtra - unsigned long addr = (unsigned long) arg; - - R4600_HIT_CACHEOP_WAR_IMPL; -+ BCM4710_PROTECTED_FILL_TLB(addr); -+ BCM4710_PROTECTED_FILL_TLB(addr + 4); - if (dc_lsize) - protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); - if (!cpu_icache_snoops_remote_store && scache_size) -@@ -1357,6 +1371,17 @@ static void __cpuinit coherency_setup(vo - * silly idea of putting something else there ... - */ - switch (current_cpu_type()) { -+ case CPU_BMIPS3300: -+ { -+ u32 cm; -+ cm = read_c0_diag(); -+ /* Enable icache */ -+ cm |= (1 << 31); -+ /* Enable dcache */ -+ cm |= (1 << 30); -+ write_c0_diag(cm); -+ } -+ break; - case CPU_R4000PC: - case CPU_R4000SC: - case CPU_R4000MC: -@@ -1404,6 +1429,15 @@ void __cpuinit r4k_cache_init(void) - extern void build_copy_page(void); - struct cpuinfo_mips *c = ¤t_cpu_data; - -+ /* Check if special workarounds are required */ -+#ifdef CONFIG_BCM47XX -+ if (current_cpu_data.cputype == CPU_BMIPS32 && (current_cpu_data.processor_id & 0xff) == 0) { -+ printk("Enabling BCM4710A0 cache workarounds.\n"); -+ bcm4710 = 1; -+ } else -+#endif -+ bcm4710 = 0; -+ - probe_pcache(); - setup_scache(); - -@@ -1469,6 +1503,14 @@ void __cpuinit r4k_cache_init(void) - */ - local_r4k___flush_cache_all(NULL); - -+#ifdef CONFIG_BCM47XX -+ { -+ static void (*_coherency_setup)(void); -+ _coherency_setup = (void (*)(void)) KSEG1ADDR(coherency_setup); -+ _coherency_setup(); -+ } -+#else - coherency_setup(); -+#endif - board_cache_error_setup = r4k_cache_error_setup; - } ---- a/arch/mips/mm/tlbex.c -+++ b/arch/mips/mm/tlbex.c -@@ -1311,6 +1311,9 @@ static void __cpuinit build_r4000_tlb_re - /* No need for uasm_i_nop */ - } - -+#ifdef CONFIG_BCM47XX -+ uasm_i_nop(&p); -+#endif - #ifdef CONFIG_64BIT - build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */ - #else -@@ -1842,6 +1845,9 @@ build_r4000_tlbchange_handler_head(u32 * - { - struct work_registers wr = build_get_work_registers(p); - -+#ifdef CONFIG_BCM47XX -+ uasm_i_nop(p); -+#endif - #ifdef CONFIG_64BIT - build_get_pmde64(p, l, r, wr.r1, wr.r2); /* get pmd in ptr */ - #else diff --git a/target/linux/brcm47xx/patches-3.10/160-kmap_coherent.patch b/target/linux/brcm47xx/patches-3.10/160-kmap_coherent.patch deleted file mode 100644 index 3c9f550636..0000000000 --- a/target/linux/brcm47xx/patches-3.10/160-kmap_coherent.patch +++ /dev/null @@ -1,70 +0,0 @@ ---- a/arch/mips/include/asm/cpu-features.h -+++ b/arch/mips/include/asm/cpu-features.h -@@ -120,6 +120,9 @@ - #ifndef cpu_has_local_ebase - #define cpu_has_local_ebase 1 - #endif -+#ifndef cpu_use_kmap_coherent -+#define cpu_use_kmap_coherent 1 -+#endif - - /* - * I-Cache snoops remote store. This only matters on SMP. Some multiprocessors ---- a/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h -+++ b/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h -@@ -79,4 +79,6 @@ - #define cpu_scache_line_size() 0 - #define cpu_has_vz 0 - -+#define cpu_use_kmap_coherent 0 -+ - #endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */ ---- a/arch/mips/mm/c-r4k.c -+++ b/arch/mips/mm/c-r4k.c -@@ -509,7 +509,7 @@ static inline void local_r4k_flush_cache - */ - map_coherent = (cpu_has_dc_aliases && - page_mapped(page) && !Page_dcache_dirty(page)); -- if (map_coherent) -+ if (map_coherent && cpu_use_kmap_coherent) - vaddr = kmap_coherent(page, addr); - else - vaddr = kmap_atomic(page); -@@ -532,7 +532,7 @@ static inline void local_r4k_flush_cache - } - - if (vaddr) { -- if (map_coherent) -+ if (map_coherent && cpu_use_kmap_coherent) - kunmap_coherent(); - else - kunmap_atomic(vaddr); ---- a/arch/mips/mm/init.c -+++ b/arch/mips/mm/init.c -@@ -203,7 +203,7 @@ void copy_user_highpage(struct page *to, - void *vfrom, *vto; - - vto = kmap_atomic(to); -- if (cpu_has_dc_aliases && -+ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && - page_mapped(from) && !Page_dcache_dirty(from)) { - vfrom = kmap_coherent(from, vaddr); - copy_page(vto, vfrom); -@@ -225,7 +225,7 @@ void copy_to_user_page(struct vm_area_st - struct page *page, unsigned long vaddr, void *dst, const void *src, - unsigned long len) - { -- if (cpu_has_dc_aliases && -+ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && - page_mapped(page) && !Page_dcache_dirty(page)) { - void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); - memcpy(vto, src, len); -@@ -243,7 +243,7 @@ void copy_from_user_page(struct vm_area_ - struct page *page, unsigned long vaddr, void *dst, const void *src, - unsigned long len) - { -- if (cpu_has_dc_aliases && -+ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && - page_mapped(page) && !Page_dcache_dirty(page)) { - void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); - memcpy(dst, vfrom, len); diff --git a/target/linux/brcm47xx/patches-3.10/170-fix-74k-cpu.patch b/target/linux/brcm47xx/patches-3.10/170-fix-74k-cpu.patch deleted file mode 100644 index 2cdd887a18..0000000000 --- a/target/linux/brcm47xx/patches-3.10/170-fix-74k-cpu.patch +++ /dev/null @@ -1,56 +0,0 @@ -From fb143ba7f7cd215bc2fc34a478c4c0b6dc56e537 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Mon, 6 Jan 2014 14:51:59 +0100 -Subject: [PATCH] MIPS: BCM47XX: fix position of cpu_wait disabling - -The disabling of cpu_wait was done too early, before the detection was -done. This moves the code to a position where it actually works. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: Rafa? Mi?ecki <zajec5@gmail.com> ---- - arch/mips/bcm47xx/setup.c | 34 +++++++++++++++++++++++++--------- - 1 file changed, 25 insertions(+), 9 deletions(-) - ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -37,6 +37,7 @@ - #include <asm/prom.h> - #include <asm/reboot.h> - #include <asm/time.h> -+#include <asm/idle.h> - #include <bcm47xx.h> - #include <bcm47xx_nvram.h> - #include <bcm47xx_board.h> -@@ -243,6 +244,31 @@ void __init plat_mem_setup(void) - mips_set_machine_name(bcm47xx_board_get_name()); - } - -+static int __init bcm47xx_cpu_fixes(void) -+{ -+ switch (bcm47xx_bus_type) { -+#ifdef CONFIG_BCM47XX_SSB -+ case BCM47XX_BUS_TYPE_SSB: -+ /* Nothing to do */ -+ break; -+#endif -+#ifdef CONFIG_BCM47XX_BCMA -+ case BCM47XX_BUS_TYPE_BCMA: -+ /* The BCM4706 has a problem with the CPU wait instruction. -+ * When r4k_wait or r4k_wait_irqoff is used will just hang and -+ * not return from a msleep(). Removing the cpu_wait -+ * functionality is a workaround for this problem. The BCM4716 -+ * does not have this problem. -+ */ -+ if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706) -+ cpu_wait = NULL; -+ break; -+#endif -+ } -+ return 0; -+} -+arch_initcall(bcm47xx_cpu_fixes); -+ - static int __init bcm47xx_register_bus_complete(void) - { - switch (bcm47xx_bus_type) { diff --git a/target/linux/brcm47xx/patches-3.10/200-b44-add-support-for-Byte-Queue-Limits.patch b/target/linux/brcm47xx/patches-3.10/200-b44-add-support-for-Byte-Queue-Limits.patch deleted file mode 100644 index 127c9849d5..0000000000 --- a/target/linux/brcm47xx/patches-3.10/200-b44-add-support-for-Byte-Queue-Limits.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -596,6 +596,7 @@ static void b44_timer(unsigned long __op - static void b44_tx(struct b44 *bp) - { - u32 cur, cons; -+ unsigned bytes_compl = 0, pkts_compl = 0; - - cur = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK; - cur /= sizeof(struct dma_desc); -@@ -612,9 +613,14 @@ static void b44_tx(struct b44 *bp) - skb->len, - DMA_TO_DEVICE); - rp->skb = NULL; -+ -+ bytes_compl += skb->len; -+ pkts_compl++; -+ - dev_kfree_skb_irq(skb); - } - -+ netdev_completed_queue(bp->dev, pkts_compl, bytes_compl); - bp->tx_cons = cons; - if (netif_queue_stopped(bp->dev) && - TX_BUFFS_AVAIL(bp) > B44_TX_WAKEUP_THRESH) -@@ -1018,6 +1024,8 @@ static netdev_tx_t b44_start_xmit(struct - if (bp->flags & B44_FLAG_REORDER_BUG) - br32(bp, B44_DMATX_PTR); - -+ netdev_sent_queue(dev, skb->len); -+ - if (TX_BUFFS_AVAIL(bp) < 1) - netif_stop_queue(dev); - -@@ -1416,6 +1424,8 @@ static void b44_init_hw(struct b44 *bp, - - val = br32(bp, B44_ENET_CTRL); - bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE)); -+ -+ netdev_reset_queue(bp->dev); - } - - static int b44_open(struct net_device *dev) diff --git a/target/linux/brcm47xx/patches-3.10/201-b44-check-register-instead-of-PHY-address-to-detect-.patch b/target/linux/brcm47xx/patches-3.10/201-b44-check-register-instead-of-PHY-address-to-detect-.patch deleted file mode 100644 index a9b3fa87c6..0000000000 --- a/target/linux/brcm47xx/patches-3.10/201-b44-check-register-instead-of-PHY-address-to-detect-.patch +++ /dev/null @@ -1,116 +0,0 @@ -From d61941952d5e7d062c3884e6d81bd503a37702b4 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:06 +0100 -Subject: [PATCH 201/208] b44: check register instead of PHY address to detect - external PHY - -The Ethernet core supported by b44 supports an internal PHY integrated -into the mac core, which is supported by the b44 driver and an external -PHY to which the mac core is connected. This external PHY could be a -switch connected through MII, which is often the case when this core is -used on home routers. The usage of an external PHY was assumed when the -PHY address 30 was used and an internal PHY was assumed when the PHY -address was different. To verify that b44_phy_reset() was called and -checked if it worked, otherwise PHY address 30 was assumed, an external -PHY. It is better to check the register which says which PHY is -connected to the MAC instead of checking the PHY address. -The interface to an external PHY was only activated when this register -was set. - -This also changes B44_FLAG_INTERNAL_PHY to B44_FLAG_EXTERNAL_PHY, it is -easier to check. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 18 +++++++++--------- - drivers/net/ethernet/broadcom/b44.h | 2 +- - 2 files changed, 10 insertions(+), 10 deletions(-) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -284,7 +284,7 @@ static int __b44_writephy(struct b44 *bp - - static inline int b44_readphy(struct b44 *bp, int reg, u32 *val) - { -- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) - return 0; - - return __b44_readphy(bp, bp->phy_addr, reg, val); -@@ -292,7 +292,7 @@ static inline int b44_readphy(struct b44 - - static inline int b44_writephy(struct b44 *bp, int reg, u32 val) - { -- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) - return 0; - - return __b44_writephy(bp, bp->phy_addr, reg, val); -@@ -321,7 +321,7 @@ static int b44_phy_reset(struct b44 *bp) - u32 val; - int err; - -- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) - return 0; - err = b44_writephy(bp, MII_BMCR, BMCR_RESET); - if (err) -@@ -423,7 +423,7 @@ static int b44_setup_phy(struct b44 *bp) - - b44_wap54g10_workaround(bp); - -- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) - return 0; - if ((err = b44_readphy(bp, B44_MII_ALEDCTRL, &val)) != 0) - goto out; -@@ -521,7 +521,7 @@ static void b44_check_phy(struct b44 *bp - { - u32 bmsr, aux; - -- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) { -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) { - bp->flags |= B44_FLAG_100_BASE_T; - bp->flags |= B44_FLAG_FULL_DUPLEX; - if (!netif_carrier_ok(bp->dev)) { -@@ -1315,7 +1315,7 @@ static void b44_chip_reset(struct b44 *b - if (!(br32(bp, B44_DEVCTRL) & DEVCTRL_IPP)) { - bw32(bp, B44_ENET_CTRL, ENET_CTRL_EPSEL); - br32(bp, B44_ENET_CTRL); -- bp->flags &= ~B44_FLAG_INTERNAL_PHY; -+ bp->flags |= B44_FLAG_EXTERNAL_PHY; - } else { - u32 val = br32(bp, B44_DEVCTRL); - -@@ -1324,7 +1324,7 @@ static void b44_chip_reset(struct b44 *b - br32(bp, B44_DEVCTRL); - udelay(100); - } -- bp->flags |= B44_FLAG_INTERNAL_PHY; -+ bp->flags &= ~B44_FLAG_EXTERNAL_PHY; - } - } - -@@ -1828,8 +1828,8 @@ static int b44_get_settings(struct net_d - DUPLEX_FULL : DUPLEX_HALF; - cmd->port = 0; - cmd->phy_address = bp->phy_addr; -- cmd->transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ? -- XCVR_INTERNAL : XCVR_EXTERNAL; -+ cmd->transceiver = (bp->flags & B44_FLAG_EXTERNAL_PHY) ? -+ XCVR_EXTERNAL : XCVR_INTERNAL; - cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ? - AUTONEG_DISABLE : AUTONEG_ENABLE; - if (cmd->autoneg == AUTONEG_ENABLE) ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -376,7 +376,7 @@ struct b44 { - #define B44_FLAG_ADV_10FULL 0x02000000 - #define B44_FLAG_ADV_100HALF 0x04000000 - #define B44_FLAG_ADV_100FULL 0x08000000 --#define B44_FLAG_INTERNAL_PHY 0x10000000 -+#define B44_FLAG_EXTERNAL_PHY 0x10000000 - #define B44_FLAG_RX_RING_HACK 0x20000000 - #define B44_FLAG_TX_RING_HACK 0x40000000 - #define B44_FLAG_WOL_ENABLE 0x80000000 diff --git a/target/linux/brcm47xx/patches-3.10/202-b44-rename-B44_PHY_ADDR_NO_PHY-to-B44_PHY_ADDR_NO_LO.patch b/target/linux/brcm47xx/patches-3.10/202-b44-rename-B44_PHY_ADDR_NO_PHY-to-B44_PHY_ADDR_NO_LO.patch deleted file mode 100644 index a1ae7f4a44..0000000000 --- a/target/linux/brcm47xx/patches-3.10/202-b44-rename-B44_PHY_ADDR_NO_PHY-to-B44_PHY_ADDR_NO_LO.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 5ab6329c5224d8135d76da18066edf3395f679f5 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:07 +0100 -Subject: [PATCH 202/208] b44: rename B44_PHY_ADDR_NO_PHY to - B44_PHY_ADDR_NO_LOCAL_PHY - -The PHY address 30 means there is no local PHY, but there could be an -external PHY like a switch connected via MII. This is the case on most -embedded home routers where this driver is used. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 2 +- - drivers/net/ethernet/broadcom/b44.h | 6 +++--- - 2 files changed, 4 insertions(+), 4 deletions(-) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -2238,7 +2238,7 @@ static int b44_init_one(struct ssb_devic - - /* do a phy reset to test if there is an active phy */ - if (b44_phy_reset(bp) < 0) -- bp->phy_addr = B44_PHY_ADDR_NO_PHY; -+ bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; - - netdev_info(dev, "%s %pM\n", DRV_DESCRIPTION, dev->dev_addr); - ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -280,9 +280,9 @@ struct ring_info { - dma_addr_t mapping; - }; - --#define B44_MCAST_TABLE_SIZE 32 --#define B44_PHY_ADDR_NO_PHY 30 --#define B44_MDC_RATIO 5000000 -+#define B44_MCAST_TABLE_SIZE 32 -+#define B44_PHY_ADDR_NO_LOCAL_PHY 30 /* no local phy regs */ -+#define B44_MDC_RATIO 5000000 - - #define B44_STAT_REG_DECLARE \ - _B44(tx_good_octets) \ diff --git a/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch b/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch deleted file mode 100644 index 8ed078a3f1..0000000000 --- a/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 7befa6abe09c84269b8af614a166409090346cf8 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:08 +0100 -Subject: [PATCH 203/208] b44: abort when no PHY is available at all - -When the phy address is 31, this means that there is no PHY connected -to this MAC at all, no internal and no external PHY. Reading these PHY -registers causes a system reset on some routers. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 6 ++++++ - drivers/net/ethernet/broadcom/b44.h | 1 + - 2 files changed, 7 insertions(+) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -2207,6 +2207,12 @@ static int b44_init_one(struct ssb_devic - goto err_out_powerdown; - } - -+ if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) { -+ dev_err(sdev->dev, "No PHY present on this MAC, aborting\n"); -+ err = -ENODEV; -+ goto err_out_powerdown; -+ } -+ - bp->mii_if.dev = dev; - bp->mii_if.mdio_read = b44_mii_read; - bp->mii_if.mdio_write = b44_mii_write; ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -282,6 +282,7 @@ struct ring_info { - - #define B44_MCAST_TABLE_SIZE 32 - #define B44_PHY_ADDR_NO_LOCAL_PHY 30 /* no local phy regs */ -+#define B44_PHY_ADDR_NO_PHY 31 /* no phy present at all */ - #define B44_MDC_RATIO 5000000 - - #define B44_STAT_REG_DECLARE \ diff --git a/target/linux/brcm47xx/patches-3.10/204-b44-rename-b44_mii_-read-write-to-b44_mdio_-read-wri.patch b/target/linux/brcm47xx/patches-3.10/204-b44-rename-b44_mii_-read-write-to-b44_mdio_-read-wri.patch deleted file mode 100644 index 09e3315025..0000000000 --- a/target/linux/brcm47xx/patches-3.10/204-b44-rename-b44_mii_-read-write-to-b44_mdio_-read-wri.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 348baa6c81cf774811040e4da01438d077a08301 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:09 +0100 -Subject: [PATCH 204/208] b44: rename b44_mii_{read, write} to b44_mdio_{read, - write}_mii - -The next patch will add these functions for phylib, and we should -rename the old ones before. This now indicates that these functions are -used for the mdio registers and on the mii interface. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -299,7 +299,7 @@ static inline int b44_writephy(struct b4 - } - - /* miilib interface */ --static int b44_mii_read(struct net_device *dev, int phy_id, int location) -+static int b44_mdio_read_mii(struct net_device *dev, int phy_id, int location) - { - u32 val; - struct b44 *bp = netdev_priv(dev); -@@ -309,8 +309,8 @@ static int b44_mii_read(struct net_devic - return val; - } - --static void b44_mii_write(struct net_device *dev, int phy_id, int location, -- int val) -+static void b44_mdio_write_mii(struct net_device *dev, int phy_id, int location, -+ int val) - { - struct b44 *bp = netdev_priv(dev); - __b44_writephy(bp, phy_id, location, val); -@@ -2214,8 +2214,8 @@ static int b44_init_one(struct ssb_devic - } - - bp->mii_if.dev = dev; -- bp->mii_if.mdio_read = b44_mii_read; -- bp->mii_if.mdio_write = b44_mii_write; -+ bp->mii_if.mdio_read = b44_mdio_read_mii; -+ bp->mii_if.mdio_write = b44_mdio_write_mii; - bp->mii_if.phy_id = bp->phy_addr; - bp->mii_if.phy_id_mask = 0x1f; - bp->mii_if.reg_num_mask = 0x1f; diff --git a/target/linux/brcm47xx/patches-3.10/205-b44-add-phylib-support.patch b/target/linux/brcm47xx/patches-3.10/205-b44-add-phylib-support.patch deleted file mode 100644 index 82fd96515d..0000000000 --- a/target/linux/brcm47xx/patches-3.10/205-b44-add-phylib-support.patch +++ /dev/null @@ -1,332 +0,0 @@ -From 86f4ea63e696db996f68d1065b55506e75a7d765 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:10 +0100 -Subject: [PATCH 205/208] b44: add phylib support - -Most of the older home routers based on the Broadcom BCM47XX SoC series -are using a MAC that is supported by b44. On most of these routers not -the internal PHY of this MAC core is used, but a switch sometimes on an -external chip or integrated into the same SoC as the Ethernet core. -For this switch a special PHY driver is needed which should not be -integrated into b44 as the same switches are also used by other -Broadcom home networking SoCs which are using different Ethernet MAC -drivers. This was tested with the b53 switch driver which is currently -on its way to mainline. - -If the internal PHY is not used, b44 will now search on the MDIO bus -for a phy and use the Linux phylib subsystem to register a driver. -Support for the internal PHY must stay here, because there are some -device which are suing the internal phy. - -With this patch we scan the mdio bus when the sprom or nvram says that -the PHY address is 30, if a PHY was found at this address b44 uses it. - -This was tested with a BCM4704, BCM4712 and BCM5354. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/Kconfig | 1 + - drivers/net/ethernet/broadcom/b44.c | 190 ++++++++++++++++++++++++++++++++- - drivers/net/ethernet/broadcom/b44.h | 3 + - 3 files changed, 189 insertions(+), 5 deletions(-) - ---- a/drivers/net/ethernet/broadcom/Kconfig -+++ b/drivers/net/ethernet/broadcom/Kconfig -@@ -24,6 +24,7 @@ config B44 - select SSB - select NET_CORE - select MII -+ select PHYLIB - ---help--- - If you have a network (Ethernet) controller of this type, say Y - or M and read the Ethernet-HOWTO, available from ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -6,6 +6,7 @@ - * Copyright (C) 2006 Felix Fietkau (nbd@openwrt.org) - * Copyright (C) 2006 Broadcom Corporation. - * Copyright (C) 2007 Michael Buesch <m@bues.ch> -+ * Copyright (C) 2013 Hauke Mehrtens <hauke@hauke-m.de> - * - * Distribute under GPL. - */ -@@ -29,6 +30,7 @@ - #include <linux/dma-mapping.h> - #include <linux/ssb/ssb.h> - #include <linux/slab.h> -+#include <linux/phy.h> - - #include <asm/uaccess.h> - #include <asm/io.h> -@@ -316,6 +318,23 @@ static void b44_mdio_write_mii(struct ne - __b44_writephy(bp, phy_id, location, val); - } - -+static int b44_mdio_read_phylib(struct mii_bus *bus, int phy_id, int location) -+{ -+ u32 val; -+ struct b44 *bp = bus->priv; -+ int rc = __b44_readphy(bp, phy_id, location, &val); -+ if (rc) -+ return 0xffffffff; -+ return val; -+} -+ -+static int b44_mdio_write_phylib(struct mii_bus *bus, int phy_id, int location, -+ u16 val) -+{ -+ struct b44 *bp = bus->priv; -+ return __b44_writephy(bp, phy_id, location, val); -+} -+ - static int b44_phy_reset(struct b44 *bp) - { - u32 val; -@@ -523,10 +542,12 @@ static void b44_check_phy(struct b44 *bp - - if (bp->flags & B44_FLAG_EXTERNAL_PHY) { - bp->flags |= B44_FLAG_100_BASE_T; -- bp->flags |= B44_FLAG_FULL_DUPLEX; - if (!netif_carrier_ok(bp->dev)) { - u32 val = br32(bp, B44_TX_CTRL); -- val |= TX_CTRL_DUPLEX; -+ if (bp->flags & B44_FLAG_FULL_DUPLEX) -+ val |= TX_CTRL_DUPLEX; -+ else -+ val &= ~TX_CTRL_DUPLEX; - bw32(bp, B44_TX_CTRL, val); - netif_carrier_on(bp->dev); - b44_link_report(bp); -@@ -1805,6 +1826,11 @@ static int b44_get_settings(struct net_d - { - struct b44 *bp = netdev_priv(dev); - -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) { -+ BUG_ON(!bp->phydev); -+ return phy_ethtool_gset(bp->phydev, cmd); -+ } -+ - cmd->supported = (SUPPORTED_Autoneg); - cmd->supported |= (SUPPORTED_100baseT_Half | - SUPPORTED_100baseT_Full | -@@ -1846,7 +1872,23 @@ static int b44_get_settings(struct net_d - static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) - { - struct b44 *bp = netdev_priv(dev); -- u32 speed = ethtool_cmd_speed(cmd); -+ u32 speed; -+ int ret; -+ -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) { -+ BUG_ON(!bp->phydev); -+ spin_lock_irq(&bp->lock); -+ if (netif_running(dev)) -+ b44_setup_phy(bp); -+ -+ ret = phy_ethtool_sset(bp->phydev, cmd); -+ -+ spin_unlock_irq(&bp->lock); -+ -+ return ret; -+ } -+ -+ speed = ethtool_cmd_speed(cmd); - - /* We do not support gigabit. */ - if (cmd->autoneg == AUTONEG_ENABLE) { -@@ -2076,7 +2118,6 @@ static const struct ethtool_ops b44_etht - - static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) - { -- struct mii_ioctl_data *data = if_mii(ifr); - struct b44 *bp = netdev_priv(dev); - int err = -EINVAL; - -@@ -2084,7 +2125,12 @@ static int b44_ioctl(struct net_device * - goto out; - - spin_lock_irq(&bp->lock); -- err = generic_mii_ioctl(&bp->mii_if, data, cmd, NULL); -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) { -+ BUG_ON(!bp->phydev); -+ err = phy_mii_ioctl(bp->phydev, ifr, cmd); -+ } else { -+ err = generic_mii_ioctl(&bp->mii_if, if_mii(ifr), cmd, NULL); -+ } - spin_unlock_irq(&bp->lock); - out: - return err; -@@ -2146,6 +2192,127 @@ static const struct net_device_ops b44_n - #endif - }; - -+static void b44_adjust_link(struct net_device *dev) -+{ -+ struct b44 *bp = netdev_priv(dev); -+ struct phy_device *phydev = bp->phydev; -+ bool status_changed = 0; -+ -+ BUG_ON(!phydev); -+ -+ if (bp->old_link != phydev->link) { -+ status_changed = 1; -+ bp->old_link = phydev->link; -+ } -+ -+ /* reflect duplex change */ -+ if (phydev->link) { -+ if ((phydev->duplex == DUPLEX_HALF) && -+ (bp->flags & B44_FLAG_FULL_DUPLEX)) { -+ status_changed = 1; -+ bp->flags &= ~B44_FLAG_FULL_DUPLEX; -+ } else if ((phydev->duplex == DUPLEX_FULL) && -+ !(bp->flags & B44_FLAG_FULL_DUPLEX)) { -+ status_changed = 1; -+ bp->flags |= B44_FLAG_FULL_DUPLEX; -+ } -+ } -+ -+ if (status_changed) { -+ b44_check_phy(bp); -+ phy_print_status(phydev); -+ } -+} -+ -+static int b44_register_phy_one(struct b44 *bp) -+{ -+ struct mii_bus *mii_bus; -+ struct ssb_device *sdev = bp->sdev; -+ struct phy_device *phydev; -+ char bus_id[MII_BUS_ID_SIZE + 3]; -+ int err; -+ -+ mii_bus = mdiobus_alloc(); -+ if (!mii_bus) { -+ dev_err(sdev->dev, "mdiobus_alloc() failed\n"); -+ err = -ENOMEM; -+ goto err_out; -+ } -+ -+ mii_bus->priv = bp; -+ mii_bus->read = b44_mdio_read_phylib; -+ mii_bus->write = b44_mdio_write_phylib; -+ mii_bus->name = "b44_eth_mii"; -+ mii_bus->parent = sdev->dev; -+ mii_bus->phy_mask = ~(1 << bp->phy_addr); -+ snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%x", instance); -+ mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); -+ if (!mii_bus->irq) { -+ dev_err(sdev->dev, "mii_bus irq allocation failed\n"); -+ err = -ENOMEM; -+ goto err_out_mdiobus; -+ } -+ -+ memset(mii_bus->irq, PHY_POLL, sizeof(int) * PHY_MAX_ADDR); -+ -+ bp->mii_bus = mii_bus; -+ -+ err = mdiobus_register(mii_bus); -+ if (err) { -+ dev_err(sdev->dev, "failed to register MII bus\n"); -+ goto err_out_mdiobus_irq; -+ } -+ -+ snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, mii_bus->id, bp->phy_addr); -+ -+ phydev = phy_connect(bp->dev, bus_id, &b44_adjust_link, -+ PHY_INTERFACE_MODE_MII); -+ if (IS_ERR(phydev)) { -+ dev_err(sdev->dev, "could not attach PHY at %i\n", -+ bp->phy_addr); -+ err = PTR_ERR(phydev); -+ goto err_out_mdiobus_unregister; -+ } -+ -+ /* mask with MAC supported features */ -+ phydev->supported &= (SUPPORTED_100baseT_Half | -+ SUPPORTED_100baseT_Full | -+ SUPPORTED_Autoneg | -+ SUPPORTED_MII); -+ phydev->advertising = phydev->supported; -+ -+ bp->phydev = phydev; -+ bp->old_link = 0; -+ bp->phy_addr = phydev->addr; -+ -+ dev_info(sdev->dev, "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", -+ phydev->drv->name, dev_name(&phydev->dev)); -+ -+ return 0; -+ -+err_out_mdiobus_unregister: -+ mdiobus_unregister(mii_bus); -+ -+err_out_mdiobus_irq: -+ kfree(mii_bus->irq); -+ -+err_out_mdiobus: -+ mdiobus_free(mii_bus); -+ -+err_out: -+ return err; -+} -+ -+static void b44_unregister_phy_one(struct b44 *bp) -+{ -+ struct mii_bus *mii_bus = bp->mii_bus; -+ -+ phy_disconnect(bp->phydev); -+ mdiobus_unregister(mii_bus); -+ kfree(mii_bus->irq); -+ mdiobus_free(mii_bus); -+} -+ - static int b44_init_one(struct ssb_device *sdev, - const struct ssb_device_id *ent) - { -@@ -2246,10 +2413,20 @@ static int b44_init_one(struct ssb_devic - if (b44_phy_reset(bp) < 0) - bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; - -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) { -+ err = b44_register_phy_one(bp); -+ if (err) { -+ dev_err(sdev->dev, "Cannot register PHY, aborting\n"); -+ goto err_out_unregister_netdev; -+ } -+ } -+ - netdev_info(dev, "%s %pM\n", DRV_DESCRIPTION, dev->dev_addr); - - return 0; - -+err_out_unregister_netdev: -+ unregister_netdev(dev); - err_out_powerdown: - ssb_bus_may_powerdown(sdev->bus); - -@@ -2263,8 +2440,11 @@ out: - static void b44_remove_one(struct ssb_device *sdev) - { - struct net_device *dev = ssb_get_drvdata(sdev); -+ struct b44 *bp = netdev_priv(dev); - - unregister_netdev(dev); -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) -+ b44_unregister_phy_one(bp); - ssb_device_disable(sdev, 0); - ssb_bus_may_powerdown(sdev->bus); - free_netdev(dev); ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -397,6 +397,9 @@ struct b44 { - u32 tx_pending; - u8 phy_addr; - u8 force_copybreak; -+ struct phy_device *phydev; -+ struct mii_bus *mii_bus; -+ int old_link; - struct mii_if_info mii_if; - }; - diff --git a/target/linux/brcm47xx/patches-3.10/206-b44-activate-PHY-when-MAC-is-off.patch b/target/linux/brcm47xx/patches-3.10/206-b44-activate-PHY-when-MAC-is-off.patch deleted file mode 100644 index 57212bb95c..0000000000 --- a/target/linux/brcm47xx/patches-3.10/206-b44-activate-PHY-when-MAC-is-off.patch +++ /dev/null @@ -1,29 +0,0 @@ -From bea69c47f5b93b3142f8833f8a34b666d5d7d6a7 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:11 +0100 -Subject: [PATCH 206/208] b44: activate PHY when MAC is off - -Without this patch we can not access the PHY when the MAC is switched -off. This PHY access is needed to configure the switch, which is done -through PHY registers. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -1360,7 +1360,10 @@ static void b44_halt(struct b44 *bp) - bw32(bp, B44_MAC_CTRL, MAC_CTRL_PHY_PDOWN); - /* now reset the chip, but without enabling the MAC&PHY - * part of it. This has to be done _after_ we shut down the PHY */ -- b44_chip_reset(bp, B44_CHIP_RESET_PARTIAL); -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) -+ b44_chip_reset(bp, B44_CHIP_RESET_FULL); -+ else -+ b44_chip_reset(bp, B44_CHIP_RESET_PARTIAL); - } - - /* bp->lock is held. */ diff --git a/target/linux/brcm47xx/patches-3.10/207-b44-do-not-set-PHY-address-to-30-for-every-ext-PHY.patch b/target/linux/brcm47xx/patches-3.10/207-b44-do-not-set-PHY-address-to-30-for-every-ext-PHY.patch deleted file mode 100644 index d4eda982ee..0000000000 --- a/target/linux/brcm47xx/patches-3.10/207-b44-do-not-set-PHY-address-to-30-for-every-ext-PHY.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 656a7c2b1210deddf76444ecc76e058c0404ce80 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:12 +0100 -Subject: [PATCH 207/208] b44: do not set PHY address to 30 for every ext PHY - -b44_phy_reset() will fail for an external PHY and only work with the -internal PHY, this was an old workaround when the detection of an -external switch based on the PHY address failed and it is not needed -any more. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - drivers/net/ethernet/broadcom/b44.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -2413,8 +2413,11 @@ static int b44_init_one(struct ssb_devic - b44_chip_reset(bp, B44_CHIP_RESET_FULL); - - /* do a phy reset to test if there is an active phy */ -- if (b44_phy_reset(bp) < 0) -- bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; -+ err = b44_phy_reset(bp); -+ if (err < 0) { -+ dev_err(sdev->dev, "phy reset failed\n"); -+ goto err_out_unregister_netdev; -+ } - - if (bp->flags & B44_FLAG_EXTERNAL_PHY) { - err = b44_register_phy_one(bp); diff --git a/target/linux/brcm47xx/patches-3.10/208-b44-use-fixed-PHY-device-if-we-do-not-find-any.patch b/target/linux/brcm47xx/patches-3.10/208-b44-use-fixed-PHY-device-if-we-do-not-find-any.patch deleted file mode 100644 index ae539a3215..0000000000 --- a/target/linux/brcm47xx/patches-3.10/208-b44-use-fixed-PHY-device-if-we-do-not-find-any.patch +++ /dev/null @@ -1,97 +0,0 @@ -From b04138b335203b79ffe1b14750fa245a4dab7191 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Fri, 20 Dec 2013 02:16:13 +0100 -Subject: [PATCH 208/208] b44: use fixed PHY device if we do not find any - -The ADM6996L switch and some Broadcom switches with two MII interfaces -like the BCM5325F connected to two MACs on the SoC, used on some -routers do not return a valid value when reading the PHY id register -and Linux thinks there is no PHY at all, but that is wrong. -This patch registers a fixed phy in the arch code and then searches it -when there is no other phy in the Ethernet driver code. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Signed-off-by: David S. Miller <davem@davemloft.net> ---- - arch/mips/bcm47xx/setup.c | 10 ++++++++++ - drivers/net/ethernet/broadcom/b44.c | 16 +++++++++++++++- - drivers/net/ethernet/broadcom/b44.h | 3 +++ - 3 files changed, 28 insertions(+), 1 deletion(-) - ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -30,6 +30,9 @@ - - #include <linux/export.h> - #include <linux/types.h> -+#include <linux/ethtool.h> -+#include <linux/phy.h> -+#include <linux/phy_fixed.h> - #include <linux/ssb/ssb.h> - #include <linux/ssb/ssb_embedded.h> - #include <linux/bcma/bcma_soc.h> -@@ -269,6 +272,12 @@ static int __init bcm47xx_cpu_fixes(void - } - arch_initcall(bcm47xx_cpu_fixes); - -+static struct fixed_phy_status bcm47xx_fixed_phy_status __initdata = { -+ .link = 1, -+ .speed = SPEED_100, -+ .duplex = DUPLEX_FULL, -+}; -+ - static int __init bcm47xx_register_bus_complete(void) - { - switch (bcm47xx_bus_type) { -@@ -287,6 +296,7 @@ static int __init bcm47xx_register_bus_c - bcm47xx_buttons_register(); - bcm47xx_leds_register(); - bcm47xx_workarounds(); -+ fixed_phy_add(PHY_POLL, 0, &bcm47xx_fixed_phy_status); - - return 0; - } ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -2233,6 +2233,7 @@ static int b44_register_phy_one(struct b - struct ssb_device *sdev = bp->sdev; - struct phy_device *phydev; - char bus_id[MII_BUS_ID_SIZE + 3]; -+ struct ssb_sprom *sprom = &sdev->bus->sprom; - int err; - - mii_bus = mdiobus_alloc(); -@@ -2266,7 +2267,20 @@ static int b44_register_phy_one(struct b - goto err_out_mdiobus_irq; - } - -- snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, mii_bus->id, bp->phy_addr); -+ if (!bp->mii_bus->phy_map[bp->phy_addr] && -+ (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { -+ -+ dev_info(sdev->dev, -+ "could not find PHY at %i, use fixed one\n", -+ bp->phy_addr); -+ -+ bp->phy_addr = 0; -+ snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, "fixed-0", -+ bp->phy_addr); -+ } else { -+ snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, mii_bus->id, -+ bp->phy_addr); -+ } - - phydev = phy_connect(bp->dev, bus_id, &b44_adjust_link, - PHY_INTERFACE_MODE_MII); ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -345,6 +345,9 @@ B44_STAT_REG_DECLARE - struct u64_stats_sync syncp; - }; - -+#define B44_BOARDFLAG_ROBO 0x0010 /* Board has robo switch */ -+#define B44_BOARDFLAG_ADM 0x0080 /* Board has ADMtek switch */ -+ - struct ssb_device; - - struct b44 { diff --git a/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch b/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch deleted file mode 100644 index 62bb89ce20..0000000000 --- a/target/linux/brcm47xx/patches-3.10/209-b44-register-adm-switch.patch +++ /dev/null @@ -1,122 +0,0 @@ -From b36f694256f41bc71571f467646d015dda128d14 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sat, 9 Nov 2013 17:03:59 +0100 -Subject: [PATCH 210/210] b44: register adm switch - ---- - drivers/net/ethernet/broadcom/b44.c | 57 +++++++++++++++++++++++++++++++++++ - drivers/net/ethernet/broadcom/b44.h | 3 ++ - 2 files changed, 60 insertions(+) - ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -31,6 +31,8 @@ - #include <linux/ssb/ssb.h> - #include <linux/slab.h> - #include <linux/phy.h> -+#include <linux/platform_device.h> -+#include <linux/platform_data/adm6996-gpio.h> - - #include <asm/uaccess.h> - #include <asm/io.h> -@@ -2227,6 +2229,70 @@ static void b44_adjust_link(struct net_d - } - } - -+#ifdef CONFIG_BCM47XX -+static int b44_register_adm_switch(struct b44 *bp) -+{ -+ int gpio; -+ struct platform_device *pdev; -+ struct adm6996_gpio_platform_data adm_data = {0}; -+ struct platform_device_info info = {0}; -+ -+ adm_data.model = ADM6996L; -+ gpio = bcm47xx_nvram_gpio_pin("adm_eecs"); -+ if (gpio >= 0) -+ adm_data.eecs = gpio; -+ else -+ adm_data.eecs = 2; -+ -+ gpio = bcm47xx_nvram_gpio_pin("adm_eesk"); -+ if (gpio >= 0) -+ adm_data.eesk = gpio; -+ else -+ adm_data.eesk = 3; -+ -+ gpio = bcm47xx_nvram_gpio_pin("adm_eedi"); -+ if (gpio >= 0) -+ adm_data.eedi = gpio; -+ else -+ adm_data.eedi = 4; -+ -+ gpio = bcm47xx_nvram_gpio_pin("adm_rc"); -+ if (gpio >= 0) -+ adm_data.eerc = gpio; -+ else -+ adm_data.eerc = 5; -+ -+ info.parent = bp->sdev->dev; -+ info.name = "adm6996_gpio"; -+ info.id = -1; -+ info.data = &adm_data; -+ info.size_data = sizeof(adm_data); -+ -+ if (!bp->adm_switch) { -+ pdev = platform_device_register_full(&info); -+ if (IS_ERR(pdev)) -+ return PTR_ERR(pdev); -+ -+ bp->adm_switch = pdev; -+ } -+ return 0; -+} -+static void b44_unregister_adm_switch(struct b44 *bp) -+{ -+ if (bp->adm_switch) -+ platform_device_unregister(bp->adm_switch); -+} -+#else -+static int b44_register_adm_switch(struct b44 *bp) -+{ -+ return 0; -+} -+static void b44_unregister_adm_switch(struct b44 *bp) -+{ -+ -+} -+#endif /* CONFIG_BCM47XX */ -+ - static int b44_register_phy_one(struct b44 *bp) - { - struct mii_bus *mii_bus; -@@ -2270,6 +2336,9 @@ static int b44_register_phy_one(struct b - if (!bp->mii_bus->phy_map[bp->phy_addr] && - (sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) { - -+ if (sprom->boardflags_lo & B44_BOARDFLAG_ADM) -+ b44_register_adm_switch(bp); -+ - dev_info(sdev->dev, - "could not find PHY at %i, use fixed one\n", - bp->phy_addr); -@@ -2465,6 +2534,7 @@ static void b44_remove_one(struct ssb_de - unregister_netdev(dev); - if (bp->flags & B44_FLAG_EXTERNAL_PHY) - b44_unregister_phy_one(bp); -+ b44_unregister_adm_switch(bp); - ssb_device_disable(sdev, 0); - ssb_bus_may_powerdown(sdev->bus); - free_netdev(dev); ---- a/drivers/net/ethernet/broadcom/b44.h -+++ b/drivers/net/ethernet/broadcom/b44.h -@@ -404,6 +404,9 @@ struct b44 { - struct mii_bus *mii_bus; - int old_link; - struct mii_if_info mii_if; -+ -+ /* platform device for associated switch */ -+ struct platform_device *adm_switch; - }; - - #endif /* _B44_H */ diff --git a/target/linux/brcm47xx/patches-3.10/210-b44_phy_fix.patch b/target/linux/brcm47xx/patches-3.10/210-b44_phy_fix.patch deleted file mode 100644 index 452ea2eb0a..0000000000 --- a/target/linux/brcm47xx/patches-3.10/210-b44_phy_fix.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -431,10 +431,34 @@ static void b44_wap54g10_workaround(stru - error: - pr_warning("PHY: cannot reset MII transceiver isolate bit\n"); - } -+ -+static void b44_bcm47xx_workarounds(struct b44 *bp) -+{ -+ char buf[20]; -+ struct ssb_device *sdev = bp->sdev; -+ -+ /* Toshiba WRC-1000, Siemens SE505 v1, Askey RT-210W, RT-220W */ -+ if (sdev->bus->sprom.board_num == 100) { -+ bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; -+ } else { -+ /* WL-HDD */ -+ if (bcm47xx_nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0 && -+ !strncmp(buf, "WL300-", strlen("WL300-"))) { -+ if (sdev->bus->sprom.et0phyaddr == 0 && -+ sdev->bus->sprom.et1phyaddr == 1) -+ bp->phy_addr = B44_PHY_ADDR_NO_LOCAL_PHY; -+ } -+ } -+ return; -+} - #else - static inline void b44_wap54g10_workaround(struct b44 *bp) - { - } -+ -+static inline void b44_bcm47xx_workarounds(struct b44 *bp) -+{ -+} - #endif - - static int b44_setup_phy(struct b44 *bp) -@@ -443,6 +467,7 @@ static int b44_setup_phy(struct b44 *bp) - int err; - - b44_wap54g10_workaround(bp); -+ b44_bcm47xx_workarounds(bp); - - if (bp->flags & B44_FLAG_EXTERNAL_PHY) - return 0; -@@ -2162,6 +2187,8 @@ static int b44_get_invariants(struct b44 - * valid PHY address. */ - bp->phy_addr &= 0x1F; - -+ b44_bcm47xx_workarounds(bp); -+ - memcpy(bp->dev->dev_addr, addr, 6); - - if (!is_valid_ether_addr(&bp->dev->dev_addr[0])){ diff --git a/target/linux/brcm47xx/patches-3.10/211-b44-start_phy.patch b/target/linux/brcm47xx/patches-3.10/211-b44-start_phy.patch deleted file mode 100644 index c5429662ab..0000000000 --- a/target/linux/brcm47xx/patches-3.10/211-b44-start_phy.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- a/drivers/net/ethernet/broadcom/b44.c -+++ b/drivers/net/ethernet/broadcom/b44.c -@@ -576,7 +576,6 @@ static void b44_check_phy(struct b44 *bp - else - val &= ~TX_CTRL_DUPLEX; - bw32(bp, B44_TX_CTRL, val); -- netif_carrier_on(bp->dev); - b44_link_report(bp); - } - return; -@@ -1511,6 +1510,10 @@ static int b44_open(struct net_device *d - add_timer(&bp->timer); - - b44_enable_ints(bp); -+ -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) -+ phy_start(bp->phydev); -+ - netif_start_queue(dev); - out: - return err; -@@ -1673,6 +1676,9 @@ static int b44_close(struct net_device * - - netif_stop_queue(dev); - -+ if (bp->flags & B44_FLAG_EXTERNAL_PHY) -+ phy_stop(bp->phydev); -+ - napi_disable(&bp->napi); - - del_timer_sync(&bp->timer); -@@ -2251,8 +2257,13 @@ static void b44_adjust_link(struct net_d - } - - if (status_changed) { -- b44_check_phy(bp); -- phy_print_status(phydev); -+ u32 val = br32(bp, B44_TX_CTRL); -+ if (bp->flags & B44_FLAG_FULL_DUPLEX) -+ val |= TX_CTRL_DUPLEX; -+ else -+ val &= ~TX_CTRL_DUPLEX; -+ bw32(bp, B44_TX_CTRL, val); -+ b44_link_report(bp); - } - } - diff --git a/target/linux/brcm47xx/patches-3.10/280-activate_ssb_support_in_usb.patch b/target/linux/brcm47xx/patches-3.10/280-activate_ssb_support_in_usb.patch deleted file mode 100644 index 748710f6f8..0000000000 --- a/target/linux/brcm47xx/patches-3.10/280-activate_ssb_support_in_usb.patch +++ /dev/null @@ -1,25 +0,0 @@ -This prevents the options from being delete with make kernel_oldconfig. ---- - drivers/ssb/Kconfig | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/drivers/bcma/Kconfig -+++ b/drivers/bcma/Kconfig -@@ -38,6 +38,7 @@ config BCMA_DRIVER_PCI_HOSTMODE - config BCMA_HOST_SOC - bool "Support for BCMA in a SoC" - depends on BCMA -+ select USB_HCD_BCMA if USB_EHCI_HCD || USB_OHCI_HCD - help - Host interface for a Broadcom AIX bus directly mapped into - the memory. This only works with the Broadcom SoCs from the ---- a/drivers/ssb/Kconfig -+++ b/drivers/ssb/Kconfig -@@ -146,6 +146,7 @@ config SSB_SFLASH - config SSB_EMBEDDED - bool - depends on SSB_DRIVER_MIPS && SSB_PCICORE_HOSTMODE -+ select USB_HCD_SSB if USB_EHCI_HCD || USB_OHCI_HCD - default y - - config SSB_DRIVER_EXTIF diff --git a/target/linux/brcm47xx/patches-3.10/300-fork_cacheflush.patch b/target/linux/brcm47xx/patches-3.10/300-fork_cacheflush.patch deleted file mode 100644 index 686fb1b945..0000000000 --- a/target/linux/brcm47xx/patches-3.10/300-fork_cacheflush.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/arch/mips/include/asm/cacheflush.h -+++ b/arch/mips/include/asm/cacheflush.h -@@ -32,7 +32,7 @@ - extern void (*flush_cache_all)(void); - extern void (*__flush_cache_all)(void); - extern void (*flush_cache_mm)(struct mm_struct *mm); --#define flush_cache_dup_mm(mm) do { (void) (mm); } while (0) -+#define flush_cache_dup_mm(mm) flush_cache_mm(mm) - extern void (*flush_cache_range)(struct vm_area_struct *vma, - unsigned long start, unsigned long end); - extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); diff --git a/target/linux/brcm47xx/patches-3.10/310-no_highpage.patch b/target/linux/brcm47xx/patches-3.10/310-no_highpage.patch deleted file mode 100644 index bdf56723ca..0000000000 --- a/target/linux/brcm47xx/patches-3.10/310-no_highpage.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- a/arch/mips/include/asm/page.h -+++ b/arch/mips/include/asm/page.h -@@ -46,6 +46,7 @@ - #endif /* CONFIG_MIPS_HUGE_TLB_SUPPORT */ - - #include <linux/pfn.h> -+#include <asm/cpu-features.h> - - extern void build_clear_page(void); - extern void build_copy_page(void); -@@ -80,13 +81,16 @@ static inline void clear_user_page(void - flush_data_cache_page((unsigned long)addr); - } - --extern void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, -- struct page *to); --struct vm_area_struct; --extern void copy_user_highpage(struct page *to, struct page *from, -- unsigned long vaddr, struct vm_area_struct *vma); -+static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, -+ struct page *to) -+{ -+ extern void (*flush_data_cache_page)(unsigned long addr); - --#define __HAVE_ARCH_COPY_USER_HIGHPAGE -+ copy_page(vto, vfrom); -+ if (!cpu_has_ic_fills_f_dc || -+ pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK)) -+ flush_data_cache_page((unsigned long)vto); -+} - - /* - * These are used to make use of C type-checking.. ---- a/arch/mips/mm/init.c -+++ b/arch/mips/mm/init.c -@@ -197,30 +197,6 @@ void kunmap_coherent(void) - preempt_check_resched(); - } - --void copy_user_highpage(struct page *to, struct page *from, -- unsigned long vaddr, struct vm_area_struct *vma) --{ -- void *vfrom, *vto; -- -- vto = kmap_atomic(to); -- if (cpu_has_dc_aliases && cpu_use_kmap_coherent && -- page_mapped(from) && !Page_dcache_dirty(from)) { -- vfrom = kmap_coherent(from, vaddr); -- copy_page(vto, vfrom); -- kunmap_coherent(); -- } else { -- vfrom = kmap_atomic(from); -- copy_page(vto, vfrom); -- kunmap_atomic(vfrom); -- } -- if ((!cpu_has_ic_fills_f_dc) || -- pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK)) -- flush_data_cache_page((unsigned long)vto); -- kunmap_atomic(vto); -- /* Make sure this page is cleared on other CPU's too before using it */ -- smp_wmb(); --} -- - void copy_to_user_page(struct vm_area_struct *vma, - struct page *page, unsigned long vaddr, void *dst, const void *src, - unsigned long len) diff --git a/target/linux/brcm47xx/patches-3.10/610-pci_ide_fix.patch b/target/linux/brcm47xx/patches-3.10/610-pci_ide_fix.patch deleted file mode 100644 index f254b203bd..0000000000 --- a/target/linux/brcm47xx/patches-3.10/610-pci_ide_fix.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/include/linux/ide.h -+++ b/include/linux/ide.h -@@ -195,7 +195,11 @@ static inline void ide_std_init_ports(st - hw->io_ports.ctl_addr = ctl_addr; - } - -+#if defined CONFIG_BCM47XX -+# define MAX_HWIFS 2 -+#else - #define MAX_HWIFS 10 -+#endif - - /* - * Now for the data we need to maintain per-drive: ide_drive_t diff --git a/target/linux/brcm47xx/patches-3.10/790-tg3-phylib.patch b/target/linux/brcm47xx/patches-3.10/790-tg3-phylib.patch deleted file mode 100644 index a1ab0d2b09..0000000000 --- a/target/linux/brcm47xx/patches-3.10/790-tg3-phylib.patch +++ /dev/null @@ -1,197 +0,0 @@ ---- a/drivers/net/ethernet/broadcom/tg3.c -+++ b/drivers/net/ethernet/broadcom/tg3.c -@@ -1367,7 +1367,7 @@ static int tg3_mdio_read(struct mii_bus - - spin_lock_bh(&tp->lock); - -- if (tg3_readphy(tp, reg, &val)) -+ if (__tg3_readphy(tp, mii_id, reg, &val)) - val = -EIO; - - spin_unlock_bh(&tp->lock); -@@ -1382,7 +1382,7 @@ static int tg3_mdio_write(struct mii_bus - - spin_lock_bh(&tp->lock); - -- if (tg3_writephy(tp, reg, val)) -+ if (__tg3_writephy(tp, mii_id, reg, val)) - ret = -EIO; - - spin_unlock_bh(&tp->lock); -@@ -1400,7 +1400,7 @@ static void tg3_mdio_config_5785(struct - u32 val; - struct phy_device *phydev; - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { - case PHY_ID_BCM50610: - case PHY_ID_BCM50610M: -@@ -1505,6 +1505,13 @@ static int tg3_mdio_init(struct tg3 *tp) - TG3_CPMU_PHY_STRAP_IS_SERDES; - if (is_serdes) - tp->phy_addr += 7; -+ } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) { -+ int addr; -+ -+ addr = ssb_gige_get_phyaddr(tp->pdev); -+ if (addr < 0) -+ return addr; -+ tp->phy_addr = addr; - } else - tp->phy_addr = TG3_PHY_MII_ADDR; - -@@ -1525,7 +1532,7 @@ static int tg3_mdio_init(struct tg3 *tp) - tp->mdio_bus->read = &tg3_mdio_read; - tp->mdio_bus->write = &tg3_mdio_write; - tp->mdio_bus->reset = &tg3_mdio_reset; -- tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR); -+ tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr); - tp->mdio_bus->irq = &tp->mdio_irq[0]; - - for (i = 0; i < PHY_MAX_ADDR; i++) -@@ -1546,7 +1553,7 @@ static int tg3_mdio_init(struct tg3 *tp) - return i; - } - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - if (!phydev || !phydev->drv) { - dev_warn(&tp->pdev->dev, "No PHY devices\n"); -@@ -1963,7 +1970,7 @@ static void tg3_setup_flow_control(struc - u32 old_tx_mode = tp->tx_mode; - - if (tg3_flag(tp, USE_PHYLIB)) -- autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg; -+ autoneg = tp->mdio_bus->phy_map[tp->phy_addr]->autoneg; - else - autoneg = tp->link_config.autoneg; - -@@ -1999,7 +2006,7 @@ static void tg3_adjust_link(struct net_d - u8 oldflowctrl, linkmesg = 0; - u32 mac_mode, lcl_adv, rmt_adv; - struct tg3 *tp = netdev_priv(dev); -- struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ struct phy_device *phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - spin_lock_bh(&tp->lock); - -@@ -2088,7 +2095,7 @@ static int tg3_phy_init(struct tg3 *tp) - /* Bring the PHY back to a known state. */ - tg3_bmcr_reset(tp); - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - /* Attach the MAC to the PHY. */ - phydev = phy_connect(tp->dev, dev_name(&phydev->dev), -@@ -2115,7 +2122,7 @@ static int tg3_phy_init(struct tg3 *tp) - SUPPORTED_Asym_Pause); - break; - default: -- phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); -+ phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]); - return -EINVAL; - } - -@@ -2133,7 +2140,7 @@ static void tg3_phy_start(struct tg3 *tp - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return; - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { - tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; -@@ -2153,13 +2160,13 @@ static void tg3_phy_stop(struct tg3 *tp) - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return; - -- phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); -+ phy_stop(tp->mdio_bus->phy_map[tp->phy_addr]); - } - - static void tg3_phy_fini(struct tg3 *tp) - { - if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { -- phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); -+ phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]); - tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; - } - } -@@ -3999,7 +4006,7 @@ static int tg3_power_down_prepare(struct - struct phy_device *phydev; - u32 phyid, advertising; - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; - -@@ -11782,7 +11789,7 @@ static int tg3_get_settings(struct net_d - struct phy_device *phydev; - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return -EAGAIN; -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - return phy_ethtool_gset(phydev, cmd); - } - -@@ -11849,7 +11856,7 @@ static int tg3_set_settings(struct net_d - struct phy_device *phydev; - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return -EAGAIN; -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - return phy_ethtool_sset(phydev, cmd); - } - -@@ -12006,7 +12013,7 @@ static int tg3_nway_reset(struct net_dev - if (tg3_flag(tp, USE_PHYLIB)) { - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return -EAGAIN; -- r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); -+ r = phy_start_aneg(tp->mdio_bus->phy_map[tp->phy_addr]); - } else { - u32 bmcr; - -@@ -12124,7 +12131,7 @@ static int tg3_set_pauseparam(struct net - u32 newadv; - struct phy_device *phydev; - -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - - if (!(phydev->supported & SUPPORTED_Pause) || - (!(phydev->supported & SUPPORTED_Asym_Pause) && -@@ -13558,7 +13565,7 @@ static int tg3_ioctl(struct net_device * - struct phy_device *phydev; - if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) - return -EAGAIN; -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - return phy_mii_ioctl(phydev, ifr, cmd); - } - -@@ -17194,8 +17201,10 @@ static int tg3_init_one(struct pci_dev * - tg3_flag_set(tp, FLUSH_POSTED_WRITES); - if (ssb_gige_one_dma_at_once(pdev)) - tg3_flag_set(tp, ONE_DMA_AT_ONCE); -- if (ssb_gige_have_roboswitch(pdev)) -+ if (ssb_gige_have_roboswitch(pdev)) { -+ tg3_flag_set(tp, USE_PHYLIB); - tg3_flag_set(tp, ROBOSWITCH); -+ } - if (ssb_gige_is_rgmii(pdev)) - tg3_flag_set(tp, RGMII_MODE); - } -@@ -17464,7 +17473,7 @@ static int tg3_init_one(struct pci_dev * - - if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { - struct phy_device *phydev; -- phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; -+ phydev = tp->mdio_bus->phy_map[tp->phy_addr]; - netdev_info(dev, - "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", - phydev->drv->name, dev_name(&phydev->dev)); diff --git a/target/linux/brcm47xx/patches-3.10/791-tg3-no-pci-sleep.patch b/target/linux/brcm47xx/patches-3.10/791-tg3-no-pci-sleep.patch deleted file mode 100644 index f8b2c7c15f..0000000000 --- a/target/linux/brcm47xx/patches-3.10/791-tg3-no-pci-sleep.patch +++ /dev/null @@ -1,17 +0,0 @@ -When the Ethernet controller is powered down and someone wants to -access the mdio bus like the witch driver (b53) the system crashed if -PCI_D3hot was set before. This patch deactivates this power sawing mode -when a switch driver is in use. - ---- a/drivers/net/ethernet/broadcom/tg3.c -+++ b/drivers/net/ethernet/broadcom/tg3.c -@@ -4221,7 +4221,8 @@ static void tg3_power_down(struct tg3 *t - tg3_power_down_prepare(tp); - - pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); -- pci_set_power_state(tp->pdev, PCI_D3hot); -+ if (!tg3_flag(tp, ROBOSWITCH)) -+ pci_set_power_state(tp->pdev, PCI_D3hot); - } - - static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) diff --git a/target/linux/brcm47xx/patches-3.10/820-wgt634u-nvram-fix.patch b/target/linux/brcm47xx/patches-3.10/820-wgt634u-nvram-fix.patch deleted file mode 100644 index f666cf36ca..0000000000 --- a/target/linux/brcm47xx/patches-3.10/820-wgt634u-nvram-fix.patch +++ /dev/null @@ -1,296 +0,0 @@ -The Netgear wgt634u uses a different format for storing the -configuration. This patch is needed to read out the correct -configuration. The cfe_env.c file uses a different method way to read -out the configuration than the in kernel cfe config reader. - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -5,3 +5,4 @@ - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o - obj-y += board.o buttons.o leds.o workarounds.o -+obj-y += cfe_env.o ---- /dev/null -+++ b/arch/mips/bcm47xx/cfe_env.c -@@ -0,0 +1,229 @@ -+/* -+ * CFE environment variable access -+ * -+ * Copyright 2001-2003, Broadcom Corporation -+ * Copyright 2006, Felix Fietkau <nbd@openwrt.org> -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ */ -+ -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/string.h> -+#include <asm/io.h> -+#include <asm/uaccess.h> -+ -+#define NVRAM_SIZE (0x1ff0) -+static char _nvdata[NVRAM_SIZE]; -+static char _valuestr[256]; -+ -+/* -+ * TLV types. These codes are used in the "type-length-value" -+ * encoding of the items stored in the NVRAM device (flash or EEPROM) -+ * -+ * The layout of the flash/nvram is as follows: -+ * -+ * <type> <length> <data ...> <type> <length> <data ...> <type_end> -+ * -+ * The type code of "ENV_TLV_TYPE_END" marks the end of the list. -+ * The "length" field marks the length of the data section, not -+ * including the type and length fields. -+ * -+ * Environment variables are stored as follows: -+ * -+ * <type_env> <length> <flags> <name> = <value> -+ * -+ * If bit 0 (low bit) is set, the length is an 8-bit value. -+ * If bit 0 (low bit) is clear, the length is a 16-bit value -+ * -+ * Bit 7 set indicates "user" TLVs. In this case, bit 0 still -+ * indicates the size of the length field. -+ * -+ * Flags are from the constants below: -+ * -+ */ -+#define ENV_LENGTH_16BITS 0x00 /* for low bit */ -+#define ENV_LENGTH_8BITS 0x01 -+ -+#define ENV_TYPE_USER 0x80 -+ -+#define ENV_CODE_SYS(n,l) (((n)<<1)|(l)) -+#define ENV_CODE_USER(n,l) ((((n)<<1)|(l)) | ENV_TYPE_USER) -+ -+/* -+ * The actual TLV types we support -+ */ -+ -+#define ENV_TLV_TYPE_END 0x00 -+#define ENV_TLV_TYPE_ENV ENV_CODE_SYS(0,ENV_LENGTH_8BITS) -+ -+/* -+ * Environment variable flags -+ */ -+ -+#define ENV_FLG_NORMAL 0x00 /* normal read/write */ -+#define ENV_FLG_BUILTIN 0x01 /* builtin - not stored in flash */ -+#define ENV_FLG_READONLY 0x02 /* read-only - cannot be changed */ -+ -+#define ENV_FLG_MASK 0xFF /* mask of attributes we keep */ -+#define ENV_FLG_ADMIN 0x100 /* lets us internally override permissions */ -+ -+ -+/* ********************************************************************* -+ * _nvram_read(buffer,offset,length) -+ * -+ * Read data from the NVRAM device -+ * -+ * Input parameters: -+ * buffer - destination buffer -+ * offset - offset of data to read -+ * length - number of bytes to read -+ * -+ * Return value: -+ * number of bytes read, or <0 if error occured -+ ********************************************************************* */ -+static int -+_nvram_read(unsigned char *nv_buf, unsigned char *buffer, int offset, int length) -+{ -+ int i; -+ if (offset > NVRAM_SIZE) -+ return -1; -+ -+ for ( i = 0; i < length; i++) { -+ buffer[i] = ((volatile unsigned char*)nv_buf)[offset + i]; -+ } -+ return length; -+} -+ -+ -+static char* -+_strnchr(const char *dest,int c,size_t cnt) -+{ -+ while (*dest && (cnt > 0)) { -+ if (*dest == c) return (char *) dest; -+ dest++; -+ cnt--; -+ } -+ return NULL; -+} -+ -+ -+ -+/* -+ * Core support API: Externally visible. -+ */ -+ -+/* -+ * Get the value of an NVRAM variable -+ * @param name name of variable to get -+ * @return value of variable or NULL if undefined -+ */ -+ -+char* -+cfe_env_get(unsigned char *nv_buf, char* name) -+{ -+ int size; -+ unsigned char *buffer; -+ unsigned char *ptr; -+ unsigned char *envval; -+ unsigned int reclen; -+ unsigned int rectype; -+ int offset; -+ int flg; -+ -+ if (!strcmp(name, "nvram_type")) -+ return "cfe"; -+ -+ size = NVRAM_SIZE; -+ buffer = &_nvdata[0]; -+ -+ ptr = buffer; -+ offset = 0; -+ -+ /* Read the record type and length */ -+ if (_nvram_read(nv_buf, ptr,offset,1) != 1) { -+ goto error; -+ } -+ -+ while ((*ptr != ENV_TLV_TYPE_END) && (size > 1)) { -+ -+ /* Adjust pointer for TLV type */ -+ rectype = *(ptr); -+ offset++; -+ size--; -+ -+ /* -+ * Read the length. It can be either 1 or 2 bytes -+ * depending on the code -+ */ -+ if (rectype & ENV_LENGTH_8BITS) { -+ /* Read the record type and length - 8 bits */ -+ if (_nvram_read(nv_buf, ptr,offset,1) != 1) { -+ goto error; -+ } -+ reclen = *(ptr); -+ size--; -+ offset++; -+ } -+ else { -+ /* Read the record type and length - 16 bits, MSB first */ -+ if (_nvram_read(nv_buf, ptr,offset,2) != 2) { -+ goto error; -+ } -+ reclen = (((unsigned int) *(ptr)) << 8) + (unsigned int) *(ptr+1); -+ size -= 2; -+ offset += 2; -+ } -+ -+ if (reclen > size) -+ break; /* should not happen, bad NVRAM */ -+ -+ switch (rectype) { -+ case ENV_TLV_TYPE_ENV: -+ /* Read the TLV data */ -+ if (_nvram_read(nv_buf, ptr,offset,reclen) != reclen) -+ goto error; -+ flg = *ptr++; -+ envval = (unsigned char *) _strnchr(ptr,'=',(reclen-1)); -+ if (envval) { -+ *envval++ = '\0'; -+ memcpy(_valuestr,envval,(reclen-1)-(envval-ptr)); -+ _valuestr[(reclen-1)-(envval-ptr)] = '\0'; -+#if 0 -+ printk(KERN_INFO "NVRAM:%s=%s\n", ptr, _valuestr); -+#endif -+ if(!strcmp(ptr, name)){ -+ return _valuestr; -+ } -+ if((strlen(ptr) > 1) && !strcmp(&ptr[1], name)) -+ return _valuestr; -+ } -+ break; -+ -+ default: -+ /* Unknown TLV type, skip it. */ -+ break; -+ } -+ -+ /* -+ * Advance to next TLV -+ */ -+ -+ size -= (int)reclen; -+ offset += reclen; -+ -+ /* Read the next record type */ -+ ptr = buffer; -+ if (_nvram_read(nv_buf, ptr,offset,1) != 1) -+ goto error; -+ } -+ -+error: -+ return NULL; -+ -+} -+ ---- a/arch/mips/bcm47xx/nvram.c -+++ b/arch/mips/bcm47xx/nvram.c -@@ -22,6 +22,8 @@ - #include <asm/mach-bcm47xx/bcm47xx.h> - - static char nvram_buf[NVRAM_SPACE]; -+static int cfe_env; -+extern char *cfe_env_get(char *nv_buf, const char *name); - - static u32 find_nvram_size(u32 end) - { -@@ -47,6 +49,26 @@ static int nvram_find_and_copy(u32 base, - u32 *src, *dst; - u32 size; - -+ cfe_env = 0; -+ -+ /* XXX: hack for supporting the CFE environment stuff on WGT634U */ -+ if (lim >= 8 * 1024 * 1024) { -+ src = (u32 *) KSEG1ADDR(base + 8 * 1024 * 1024 - 0x2000); -+ dst = (u32 *) nvram_buf; -+ -+ if ((*src & 0xff00ff) == 0x000001) { -+ printk("early_nvram_init: WGT634U NVRAM found.\n"); -+ -+ for (i = 0; i < 0x1ff0; i++) { -+ if (*src == 0xFFFFFFFF) -+ break; -+ *dst++ = *src++; -+ } -+ cfe_env = 1; -+ return 0; -+ } -+ } -+ - /* TODO: when nvram is on nand flash check for bad blocks first. */ - off = FLASH_MIN; - while (off <= lim) { -@@ -173,6 +195,13 @@ int bcm47xx_nvram_getenv(char *name, cha - return err; - } - -+ if (cfe_env) { -+ value = cfe_env_get(nvram_buf, name); -+ if (!value) -+ return -ENOENT; -+ return snprintf(val, val_len, "%s", value); -+ } -+ - /* Look for name=value and return value */ - var = &nvram_buf[sizeof(struct nvram_header)]; - end = nvram_buf + sizeof(nvram_buf) - 2; diff --git a/target/linux/brcm47xx/patches-3.10/830-huawei_e970_support.patch b/target/linux/brcm47xx/patches-3.10/830-huawei_e970_support.patch deleted file mode 100644 index 6aaac837cc..0000000000 --- a/target/linux/brcm47xx/patches-3.10/830-huawei_e970_support.patch +++ /dev/null @@ -1,101 +0,0 @@ ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -36,6 +36,7 @@ - #include <linux/ssb/ssb.h> - #include <linux/ssb/ssb_embedded.h> - #include <linux/bcma/bcma_soc.h> -+#include <linux/gpio_wdt.h> - #include <asm/bootinfo.h> - #include <asm/prom.h> - #include <asm/reboot.h> -@@ -278,6 +279,33 @@ static struct fixed_phy_status bcm47xx_f - .duplex = DUPLEX_FULL, - }; - -+static struct gpio_wdt_platform_data gpio_wdt_data; -+ -+static struct platform_device gpio_wdt_device = { -+ .name = "gpio-wdt", -+ .id = 0, -+ .dev = { -+ .platform_data = &gpio_wdt_data, -+ }, -+}; -+ -+static int __init bcm47xx_register_gpio_watchdog(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ -+ switch (board) { -+ case BCM47XX_BOARD_HUAWEI_E970: -+ pr_info("bcm47xx: detected Huawei E970 or similar, starting early gpio_wdt timer\n"); -+ gpio_wdt_data.gpio = 7; -+ gpio_wdt_data.interval = HZ; -+ gpio_wdt_data.first_interval = HZ / 5; -+ return platform_device_register(&gpio_wdt_device); -+ default: -+ /* Nothing to do */ -+ return 0; -+ } -+} -+ - static int __init bcm47xx_register_bus_complete(void) - { - switch (bcm47xx_bus_type) { -@@ -297,6 +325,7 @@ static int __init bcm47xx_register_bus_c - bcm47xx_leds_register(); - bcm47xx_workarounds(); - fixed_phy_add(PHY_POLL, 0, &bcm47xx_fixed_phy_status); -+ bcm47xx_register_gpio_watchdog(); - - return 0; - } ---- a/arch/mips/configs/bcm47xx_defconfig -+++ b/arch/mips/configs/bcm47xx_defconfig -@@ -379,6 +379,7 @@ CONFIG_THERMAL=y - CONFIG_WATCHDOG=y - CONFIG_WATCHDOG_NOWAYOUT=y - CONFIG_BCM47XX_WDT=y -+CONFIG_GPIO_WDT=y - CONFIG_SSB_DRIVER_GIGE=y - CONFIG_DISPLAY_SUPPORT=m - CONFIG_SOUND=m ---- a/drivers/ssb/embedded.c -+++ b/drivers/ssb/embedded.c -@@ -34,11 +34,36 @@ int ssb_watchdog_timer_set(struct ssb_bu - } - EXPORT_SYMBOL(ssb_watchdog_timer_set); - -+#ifdef CONFIG_BCM47XX -+#include <bcm47xx_board.h> -+ -+static bool ssb_watchdog_supported(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ -+ /* The Huawei E970 has a hardware watchdog using a GPIO */ -+ switch (board) { -+ case BCM47XX_BOARD_HUAWEI_E970: -+ return false; -+ default: -+ return true; -+ } -+} -+#else -+static bool ssb_watchdog_supported(void) -+{ -+ return true; -+} -+#endif -+ - int ssb_watchdog_register(struct ssb_bus *bus) - { - struct bcm47xx_wdt wdt = {}; - struct platform_device *pdev; - -+ if (!ssb_watchdog_supported()) -+ return 0; -+ - if (ssb_chipco_available(&bus->chipco)) { - wdt.driver_data = &bus->chipco; - wdt.timer_set = ssb_chipco_watchdog_timer_set_wdt; diff --git a/target/linux/brcm47xx/patches-3.10/920-cache-wround.patch b/target/linux/brcm47xx/patches-3.10/920-cache-wround.patch deleted file mode 100644 index bac689981b..0000000000 --- a/target/linux/brcm47xx/patches-3.10/920-cache-wround.patch +++ /dev/null @@ -1,138 +0,0 @@ ---- a/arch/mips/include/asm/r4kcache.h -+++ b/arch/mips/include/asm/r4kcache.h -@@ -20,10 +20,28 @@ - #ifdef CONFIG_BCM47XX - #include <asm/paccess.h> - #include <linux/ssb/ssb.h> --#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE))) -+#define BCM4710_DUMMY_RREG() bcm4710_dummy_rreg() -+ -+static inline unsigned long bcm4710_dummy_rreg(void) -+{ -+ return *(volatile unsigned long *)(KSEG1ADDR(SSB_ENUM_BASE)); -+} -+ -+#define BCM4710_FILL_TLB(addr) bcm4710_fill_tlb((void *)(addr)) -+ -+static inline unsigned long bcm4710_fill_tlb(void *addr) -+{ -+ return *(unsigned long *)addr; -+} -+ -+#define BCM4710_PROTECTED_FILL_TLB(addr) bcm4710_protected_fill_tlb((void *)(addr)) -+ -+static inline void bcm4710_protected_fill_tlb(void *addr) -+{ -+ unsigned long x; -+ get_dbe(x, (unsigned long *)addr);; -+} - --#define BCM4710_FILL_TLB(addr) (*(volatile unsigned long *)(addr)) --#define BCM4710_PROTECTED_FILL_TLB(addr) ({ unsigned long x; get_dbe(x, (volatile unsigned long *)(addr)); }) - #else - #define BCM4710_DUMMY_RREG() - ---- a/arch/mips/mm/tlbex.c -+++ b/arch/mips/mm/tlbex.c -@@ -969,6 +969,9 @@ build_get_pgde32(u32 **p, unsigned int t - #endif - uasm_i_addu(p, ptr, tmp, ptr); - #else -+#ifdef CONFIG_BCM47XX -+ uasm_i_nop(p); -+#endif - UASM_i_LA_mostly(p, ptr, pgdc); - #endif - uasm_i_mfc0(p, tmp, C0_BADVADDR); /* get faulting address */ -@@ -1311,12 +1314,12 @@ static void __cpuinit build_r4000_tlb_re - /* No need for uasm_i_nop */ - } - --#ifdef CONFIG_BCM47XX -- uasm_i_nop(&p); --#endif - #ifdef CONFIG_64BIT - build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */ - #else -+# ifdef CONFIG_BCM47XX -+ uasm_i_nop(&p); -+# endif - build_get_pgde32(&p, K0, K1); /* get pgd in K1 */ - #endif - -@@ -1328,6 +1331,9 @@ static void __cpuinit build_r4000_tlb_re - build_update_entries(&p, K0, K1); - build_tlb_write_entry(&p, &l, &r, tlb_random); - uasm_l_leave(&l, p); -+#ifdef CONFIG_BCM47XX -+ uasm_i_nop(&p); -+#endif - uasm_i_eret(&p); /* return from trap */ - } - #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT -@@ -1845,12 +1851,12 @@ build_r4000_tlbchange_handler_head(u32 * - { - struct work_registers wr = build_get_work_registers(p); - --#ifdef CONFIG_BCM47XX -- uasm_i_nop(p); --#endif - #ifdef CONFIG_64BIT - build_get_pmde64(p, l, r, wr.r1, wr.r2); /* get pmd in ptr */ - #else -+# ifdef CONFIG_BCM47XX -+ uasm_i_nop(p); -+# endif - build_get_pgde32(p, wr.r1, wr.r2); /* get pgd in ptr */ - #endif - -@@ -1889,6 +1895,9 @@ build_r4000_tlbchange_handler_tail(u32 * - build_tlb_write_entry(p, l, r, tlb_indexed); - uasm_l_leave(l, *p); - build_restore_work_registers(p); -+#ifdef CONFIG_BCM47XX -+ uasm_i_nop(p); -+#endif - uasm_i_eret(p); /* return from trap */ - - #ifdef CONFIG_64BIT ---- a/arch/mips/kernel/genex.S -+++ b/arch/mips/kernel/genex.S -@@ -21,6 +21,19 @@ - #include <asm/war.h> - #include <asm/thread_info.h> - -+#ifdef CONFIG_BCM47XX -+# ifdef eret -+# undef eret -+# endif -+# define eret \ -+ .set push; \ -+ .set noreorder; \ -+ nop; \ -+ nop; \ -+ eret; \ -+ .set pop; -+#endif -+ - #ifdef CONFIG_MIPS_MT_SMTC - #define PANIC_PIC(msg) \ - .set push; \ -@@ -48,7 +61,6 @@ NESTED(except_vec3_generic, 0, sp) - .set noat - #ifdef CONFIG_BCM47XX - nop -- nop - #endif - #if R5432_CP0_INTERRUPT_WAR - mfc0 k0, CP0_INDEX -@@ -73,6 +85,9 @@ NESTED(except_vec3_r4000, 0, sp) - .set push - .set mips3 - .set noat -+#ifdef CONFIG_BCM47XX -+ nop -+#endif - mfc0 k1, CP0_CAUSE - li k0, 31<<2 - andi k1, k1, 0x7c diff --git a/target/linux/brcm47xx/patches-3.10/940-bcm47xx-yenta.patch b/target/linux/brcm47xx/patches-3.10/940-bcm47xx-yenta.patch deleted file mode 100644 index 1739ff78ab..0000000000 --- a/target/linux/brcm47xx/patches-3.10/940-bcm47xx-yenta.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- a/drivers/pcmcia/yenta_socket.c -+++ b/drivers/pcmcia/yenta_socket.c -@@ -920,6 +920,8 @@ static unsigned int yenta_probe_irq(stru - * Probe for usable interrupts using the force - * register to generate bogus card status events. - */ -+#ifndef CONFIG_BCM47XX -+ /* WRT54G3G does not like this */ - cb_writel(socket, CB_SOCKET_EVENT, -1); - cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); - reg = exca_readb(socket, I365_CSCINT); -@@ -935,6 +937,7 @@ static unsigned int yenta_probe_irq(stru - } - cb_writel(socket, CB_SOCKET_MASK, 0); - exca_writeb(socket, I365_CSCINT, reg); -+#endif - - mask = probe_irq_mask(val) & 0xffff; - -@@ -1019,6 +1022,10 @@ static void yenta_get_socket_capabilitie - else - socket->socket.irq_mask = 0; - -+ /* irq mask probing is broken for the WRT54G3G */ -+ if (socket->socket.irq_mask == 0) -+ socket->socket.irq_mask = 0x6f8; -+ - dev_printk(KERN_INFO, &socket->dev->dev, - "ISA IRQ mask 0x%04x, PCI irq %d\n", - socket->socket.irq_mask, socket->cb_irq); -@@ -1257,6 +1264,15 @@ static int yenta_probe(struct pci_dev *d - dev_printk(KERN_INFO, &dev->dev, - "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE)); - -+ /* Generate an interrupt on card insert/remove */ -+ config_writew(socket, CB_SOCKET_MASK, CB_CSTSMASK | CB_CDMASK); -+ -+ /* Set up Multifunction Routing Status Register */ -+ config_writew(socket, 0x8C, 0x1000 /* MFUNC3 to GPIO3 */ | 0x2 /* MFUNC0 to INTA */); -+ -+ /* Switch interrupts to parallelized */ -+ config_writeb(socket, 0x92, 0x64); -+ - yenta_fixup_parent_bridge(dev->subordinate); - - /* Register it with the pcmcia layer.. */ diff --git a/target/linux/brcm47xx/patches-3.10/976-ssb_increase_pci_delay.patch b/target/linux/brcm47xx/patches-3.10/976-ssb_increase_pci_delay.patch deleted file mode 100644 index b56f1d5be3..0000000000 --- a/target/linux/brcm47xx/patches-3.10/976-ssb_increase_pci_delay.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/ssb/driver_pcicore.c -+++ b/drivers/ssb/driver_pcicore.c -@@ -375,7 +375,7 @@ static void ssb_pcicore_init_hostmode(st - set_io_port_base(ssb_pcicore_controller.io_map_base); - /* Give some time to the PCI controller to configure itself with the new - * values. Not waiting at this point causes crashes of the machine. */ -- mdelay(10); -+ mdelay(300); - register_pci_controller(&ssb_pcicore_controller); - } - diff --git a/target/linux/brcm47xx/patches-3.10/980-wnr834b_no_cardbus_invariant.patch b/target/linux/brcm47xx/patches-3.10/980-wnr834b_no_cardbus_invariant.patch deleted file mode 100644 index 8bab5f09bf..0000000000 --- a/target/linux/brcm47xx/patches-3.10/980-wnr834b_no_cardbus_invariant.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -136,6 +136,10 @@ static int bcm47xx_get_invariants(struct - if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0) - iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10); - -+ /* Do not indicate cardbus for Netgear WNR834B V1 and V2 */ -+ if (iv->boardinfo.type == 0x0472 && iv->has_cardbus_slot) -+ iv->has_cardbus_slot = 0; -+ - return 0; - } - diff --git a/target/linux/brcm47xx/patches-3.10/999-wl_exports.patch b/target/linux/brcm47xx/patches-3.10/999-wl_exports.patch deleted file mode 100644 index 2c464bd34e..0000000000 --- a/target/linux/brcm47xx/patches-3.10/999-wl_exports.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/arch/mips/bcm47xx/nvram.c -+++ b/arch/mips/bcm47xx/nvram.c -@@ -21,7 +21,8 @@ - #include <bcm47xx_nvram.h> - #include <asm/mach-bcm47xx/bcm47xx.h> - --static char nvram_buf[NVRAM_SPACE]; -+char nvram_buf[NVRAM_SPACE]; -+EXPORT_SYMBOL(nvram_buf); - static int cfe_env; - extern char *cfe_env_get(char *nv_buf, const char *name); - ---- a/arch/mips/mm/cache.c -+++ b/arch/mips/mm/cache.c -@@ -59,6 +59,7 @@ void (*_dma_cache_wback)(unsigned long s - void (*_dma_cache_inv)(unsigned long start, unsigned long size); - - EXPORT_SYMBOL(_dma_cache_wback_inv); -+EXPORT_SYMBOL(_dma_cache_inv); - - #endif /* CONFIG_DMA_NONCOHERENT */ - |