Changeset 31625


Ignore:
Timestamp:
2012-05-06T19:08:30+02:00 (6 years ago)
Author:
nbd
Message:

atheros: update to 3.3.4 (based on work by acoul), fix mvswitch driver for newer kernels

Location:
trunk/target/linux
Files:
3 added
3 deleted
2 edited
12 copied
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/atheros/Makefile

    r26588 r31625  
    1212FEATURES:=squashfs jffs2 
    1313 
    14 LINUX_VERSION:=2.6.37.6 
     14LINUX_VERSION:=3.3.4 
    1515 
    1616include $(INCLUDE_DIR)/target.mk 
  • trunk/target/linux/atheros/config-3.3

    r31623 r31625  
    1 CONFIG_AR231X_ETHERNET=y 
    21CONFIG_AR8216_PHY=y 
     2CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y 
     3CONFIG_ARCH_DISCARD_MEMBLOCK=y 
     4# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set 
    35# CONFIG_ARCH_HAS_ILOG2_U32 is not set 
    46# CONFIG_ARCH_HAS_ILOG2_U64 is not set 
    57CONFIG_ARCH_HIBERNATION_POSSIBLE=y 
    68# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set 
    7 CONFIG_ARCH_POPULATES_NODE_MAP=y 
     9CONFIG_ARCH_REQUIRE_GPIOLIB=y 
    810# CONFIG_ARCH_SUPPORTS_MSI is not set 
    9 CONFIG_ARCH_SUPPORTS_OPROFILE=y 
    1011CONFIG_ARCH_SUSPEND_POSSIBLE=y 
    11 # CONFIG_ATH79 is not set 
    1212CONFIG_ATHEROS_AR2315=y 
    1313CONFIG_ATHEROS_AR2315_PCI=y 
     
    1515CONFIG_ATHEROS_AR5312=y 
    1616CONFIG_ATHEROS_WDT=y 
    17 # CONFIG_AUTO_IRQ_AFFINITY is not set 
     17CONFIG_BCMA_POSSIBLE=y 
    1818CONFIG_CC_OPTIMIZE_FOR_SIZE=y 
    1919CONFIG_CEVT_R4K=y 
     
    3535CONFIG_DMA_NONCOHERENT=y 
    3636CONFIG_EARLY_PRINTK=y 
    37 CONFIG_EXPERT=y 
    38 # CONFIG_FSNOTIFY is not set 
    3937CONFIG_GENERIC_ATOMIC64=y 
    4038CONFIG_GENERIC_CLOCKEVENTS=y 
    4139CONFIG_GENERIC_CLOCKEVENTS_BUILD=y 
    4240CONFIG_GENERIC_CMOS_UPDATE=y 
    43 CONFIG_GENERIC_FIND_LAST_BIT=y 
    44 CONFIG_GENERIC_FIND_NEXT_BIT=y 
     41# CONFIG_GENERIC_CPU_DEVICES is not set 
    4542CONFIG_GENERIC_GPIO=y 
    46 # CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED is not set 
    47 # CONFIG_GENERIC_PENDING_IRQ is not set 
     43CONFIG_GENERIC_IRQ_SHOW=y 
     44CONFIG_GENERIC_PCI_IOMAP=y 
     45CONFIG_GPIOLIB=y 
    4846CONFIG_GPIO_DEVICE=y 
     47CONFIG_GPIO_SYSFS=y 
    4948# CONFIG_HAMRADIO is not set 
    50 # CONFIG_HARDIRQS_SW_RESEND is not set 
    5149CONFIG_HARDWARE_WATCHPOINTS=y 
    5250CONFIG_HAS_DMA=y 
     
    6765CONFIG_HAVE_IDE=y 
    6866CONFIG_HAVE_IRQ_WORK=y 
     67CONFIG_HAVE_MEMBLOCK=y 
     68CONFIG_HAVE_MEMBLOCK_NODE_MAP=y 
    6969CONFIG_HAVE_OPROFILE=y 
    7070CONFIG_HAVE_PERF_EVENTS=y 
    71 # CONFIG_HAVE_SPARSE_IRQ is not set 
    7271CONFIG_HW_HAS_PCI=y 
    7372CONFIG_HW_RANDOM=y 
     
    7675CONFIG_IP17XX_PHY=y 
    7776CONFIG_IRQ_CPU=y 
    78 # CONFIG_IRQ_PER_CPU is not set 
     77CONFIG_IRQ_FORCED_THREADING=y 
    7978# CONFIG_LEDS_GPIO is not set 
    80 CONFIG_MACH_NO_WESTBRIDGE=y 
     79CONFIG_MDIO_BOARDINFO=y 
     80# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set 
    8181CONFIG_MIPS=y 
    8282CONFIG_MIPS_L1_CACHE_SHIFT=5 
    8383# CONFIG_MIPS_MACHINE is not set 
    8484CONFIG_MIPS_MT_DISABLED=y 
     85# CONFIG_MLX4_CORE is not set 
    8586CONFIG_MTD_AR2315=y 
    8687CONFIG_MTD_CFI_ADV_OPTIONS=y 
     
    9495CONFIG_NEED_DMA_MAP_STATE=y 
    9596CONFIG_NEED_PER_CPU_KM=y 
    96 # CONFIG_NET_PCI is not set 
     97CONFIG_NET_VENDOR_AR231X=y 
     98CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y 
    9799CONFIG_PAGEFLAGS_EXTENDED=y 
    98100CONFIG_PCI=y 
     
    113115CONFIG_SYS_SUPPORTS_ARBIT_HZ=y 
    114116CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y 
    115 # CONFIG_TEST_KSTRTOX is not set 
     117CONFIG_USB_ARCH_HAS_XHCI=y 
    116118CONFIG_USB_SUPPORT=y 
    117119CONFIG_XZ_DEC=y 
  • trunk/target/linux/atheros/patches-3.3/100-board.patch

    r31623 r31625  
    1414+       select SYS_SUPPORTS_BIG_ENDIAN 
    1515+       select SYS_SUPPORTS_32BIT_KERNEL 
    16 +       select GENERIC_GPIO 
     16+       select ARCH_REQUIRE_GPIOLIB 
    1717+       help 
    1818+         Support for AR231x and AR531x based boards 
     
    2121        bool "Cobalt Server" 
    2222        select CEVT_R4K 
    23 @@ -737,6 +750,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD 
     23@@ -813,6 +826,7 @@ config NLM_XLP_BOARD 
    2424  
    2525 endchoice 
     
    2828 source "arch/mips/alchemy/Kconfig" 
    2929 source "arch/mips/ath79/Kconfig" 
    30  source "arch/mips/bcm63xx/Kconfig" 
     30 source "arch/mips/bcm47xx/Kconfig" 
    3131--- a/arch/mips/Kbuild.platforms 
    3232+++ b/arch/mips/Kbuild.platforms 
     
    5050--- /dev/null 
    5151+++ b/arch/mips/ar231x/Kconfig 
    52 @@ -0,0 +1,17 @@ 
     52@@ -0,0 +1,16 @@ 
    5353+config ATHEROS_AR5312 
    5454+       bool "Atheros 5312/2312+ support" 
     
    6666+       select SYS_SUPPORTS_32BIT_KERNEL 
    6767+       select SYS_SUPPORTS_BIG_ENDIAN 
    68 +       select GENERIC_GPIO 
    6968+       default y 
    7069--- /dev/null 
     
    8685--- /dev/null 
    8786+++ b/arch/mips/ar231x/board.c 
    88 @@ -0,0 +1,258 @@ 
     87@@ -0,0 +1,259 @@ 
    8988+/* 
    9089+ * This file is subject to the terms and conditions of the GNU General Public 
     
    107106+#include <linux/random.h> 
    108107+#include <linux/etherdevice.h> 
     108+#include <linux/irq.h> 
    109109+#include <asm/irq_cpu.h> 
    110110+#include <asm/reboot.h> 
     
    639639--- /dev/null 
    640640+++ b/arch/mips/include/asm/mach-ar231x/gpio.h 
    641 @@ -0,0 +1,84 @@ 
     641@@ -0,0 +1,28 @@ 
    642642+#ifndef _ATHEROS_GPIO_H_ 
    643643+#define _ATHEROS_GPIO_H_ 
     
    645645+#include <ar231x.h> 
    646646+ 
    647 +struct ar231x_gpiodev { 
    648 +       u32 valid_mask; 
    649 +       u32 (*get_output)(void); 
    650 +       u32 (*set_output)(u32 mask, u32 val); 
    651 +       u32 (*get)(void); 
    652 +       u32 (*set)(u32 mask, u32 val); 
    653 +}; 
    654 + 
    655 +extern const struct ar231x_gpiodev *ar231x_gpiodev; 
     647+#define gpio_get_value __gpio_get_value 
     648+#define gpio_set_value __gpio_set_value 
     649+#define gpio_cansleep __gpio_cansleep 
    656650+ 
    657651+/* 
     
    659653+ */ 
    660654+ 
    661 +static inline int gpio_direction_input(unsigned gpio) { 
    662 +       u32 mask = 1 << gpio; 
    663 + 
    664 +       if (!(ar231x_gpiodev->valid_mask & mask)) 
    665 +               return -ENXIO; 
    666 + 
    667 +       ar231x_gpiodev->set_output(mask, 0); 
    668 +       return 0; 
    669 +} 
    670 + 
    671 +static inline void gpio_set_value(unsigned gpio, int value) { 
    672 +       u32 mask = 1 << gpio; 
    673 + 
    674 +       if (!(ar231x_gpiodev->valid_mask & mask)) 
    675 +               return; 
    676 + 
    677 +       ar231x_gpiodev->set(mask, (!!value) * mask); 
    678 +} 
    679 + 
    680 +static inline int gpio_direction_output(unsigned gpio, int value) { 
    681 +       u32 mask = 1 << gpio; 
    682 + 
    683 +       if (!(ar231x_gpiodev->valid_mask & mask)) 
    684 +               return -ENXIO; 
    685 + 
    686 +       ar231x_gpiodev->set_output(mask, mask); 
    687 +       ar231x_gpiodev->set(mask, (!!value) * mask); 
    688 +       return 0; 
    689 +} 
    690 + 
    691 +/* Reads the gpio pin.  Unchecked function */ 
    692 +static inline int gpio_get_value(unsigned gpio) { 
    693 +       u32 mask = 1 << gpio; 
    694 + 
    695 +       if (!(ar231x_gpiodev->valid_mask & mask)) 
    696 +               return 0; 
    697 + 
    698 +       return !!(ar231x_gpiodev->get() & mask); 
    699 +} 
    700 + 
    701 +static inline int gpio_request(unsigned gpio, const char *label) { 
    702 +       return 0; 
    703 +} 
    704 + 
    705 +static inline void gpio_free(unsigned gpio) { 
    706 +} 
     655+/* not sure if these are used? */ 
    707656+ 
    708657+/* Returns IRQ to attach for gpio.  Unchecked function */ 
     
    714663+static inline int irq_to_gpio(unsigned irq) { 
    715664+       return (irq - (AR531X_GPIO_IRQ(0))); 
    716 +} 
    717 + 
    718 +static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) 
    719 +{ 
    720 +       return -ENOSYS; 
    721665+} 
    722666+ 
     
    15811525--- /dev/null 
    15821526+++ b/arch/mips/ar231x/ar5312.c 
    1583 @@ -0,0 +1,529 @@ 
     1527@@ -0,0 +1,579 @@ 
    15841528+/* 
    15851529+ * This file is subject to the terms and conditions of the GNU General Public 
     
    15911535+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org> 
    15921536+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org> 
     1537+ * Copyright (C) 2012 Alexandros C. Couloumbis <alex@ozo.com> 
    15931538+ */ 
    15941539+ 
     
    16071552+#include <linux/reboot.h> 
    16081553+#include <linux/leds.h> 
     1554+#include <linux/gpio.h> 
    16091555+#include <asm/bootinfo.h> 
    16101556+#include <asm/reboot.h> 
    16111557+#include <asm/time.h> 
    1612 +#include <asm/irq.h> 
     1558+#include <linux/irq.h> 
    16131559+#include <asm/io.h> 
    1614 +#include <gpio.h> 
    16151560+ 
    16161561+#include <ar231x_platform.h> 
     
    16601605+/* Enable the specified AR531X_MISC_IRQ interrupt */ 
    16611606+static void 
    1662 +ar5312_misc_intr_enable(unsigned int irq) 
     1607+ar5312_misc_intr_enable(struct irq_data *d) 
    16631608+{ 
    16641609+       unsigned int imr; 
    16651610+ 
    16661611+       imr = ar231x_read_reg(AR531X_IMR); 
    1667 +       imr |= (1 << (irq - AR531X_MISC_IRQ_BASE - 1)); 
     1612+       imr |= (1 << (d->irq - AR531X_MISC_IRQ_BASE - 1)); 
    16681613+       ar231x_write_reg(AR531X_IMR, imr); 
    16691614+} 
     
    16711616+/* Disable the specified AR531X_MISC_IRQ interrupt */ 
    16721617+static void 
    1673 +ar5312_misc_intr_disable(unsigned int irq) 
     1618+ar5312_misc_intr_disable(struct irq_data *d) 
    16741619+{ 
    16751620+       unsigned int imr; 
    16761621+ 
    16771622+       imr = ar231x_read_reg(AR531X_IMR); 
    1678 +       imr &= ~(1 << (irq - AR531X_MISC_IRQ_BASE - 1)); 
     1623+       imr &= ~(1 << (d->irq - AR531X_MISC_IRQ_BASE - 1)); 
    16791624+       ar231x_write_reg(AR531X_IMR, imr); 
    16801625+       ar231x_read_reg(AR531X_IMR); /* flush write buffer */ 
    16811626+} 
    16821627+ 
    1683 +static void 
    1684 +ar5312_misc_intr_end(unsigned int irq) 
    1685 +{ 
    1686 +       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) 
    1687 +               ar5312_misc_intr_enable(irq); 
    1688 +} 
    1689 + 
    16901628+static struct irq_chip ar5312_misc_intr_controller = { 
    1691 +       .name     = "AR5312-MISC", 
    1692 +       .disable  = ar5312_misc_intr_disable, 
    1693 +       .ack      = ar5312_misc_intr_disable, 
    1694 +       .mask_ack = ar5312_misc_intr_disable, 
    1695 +       .mask     = ar5312_misc_intr_disable, 
    1696 +       .unmask   = ar5312_misc_intr_enable, 
    1697 +       .end      = ar5312_misc_intr_end, 
     1629+       .irq_mask     = ar5312_misc_intr_disable, 
     1630+       .irq_unmask   = ar5312_misc_intr_enable, 
    16981631+}; 
    16991632+ 
     
    17161649+static struct irqaction ar5312_ahb_proc_interrupt  = { 
    17171650+       .handler = ar5312_ahb_proc_handler, 
    1718 +       .flags   = IRQF_DISABLED, 
    17191651+       .name    = "ar5312_ahb_proc_interrupt", 
    17201652+}; 
     
    17231655+static struct irqaction cascade  = { 
    17241656+       .handler = no_action, 
    1725 +       .flags   = IRQF_DISABLED, 
    17261657+       .name    = "cascade", 
    17271658+}; 
     
    17371668+       for (i = 0; i < AR531X_MISC_IRQ_COUNT; i++) { 
    17381669+               int irq = AR531X_MISC_IRQ_BASE + i; 
    1739 +               set_irq_chip_and_handler(irq, &ar5312_misc_intr_controller, 
     1670+               irq_set_chip_and_handler(irq, &ar5312_misc_intr_controller, 
    17401671+                       handle_level_irq); 
    17411672+       } 
    17421673+       setup_irq(AR531X_MISC_IRQ_AHB_PROC, &ar5312_ahb_proc_interrupt); 
    17431674+       setup_irq(AR5312_IRQ_MISC_INTRS, &cascade); 
    1744 +} 
    1745 + 
    1746 +const struct ar231x_gpiodev ar5312_gpiodev; 
    1747 + 
    1748 +static u32 
    1749 +ar5312_gpio_get_output(void) 
    1750 +{ 
    1751 +       u32 reg; 
    1752 +       reg = ~(ar231x_read_reg(AR531X_GPIO_CR)); 
    1753 +       reg &= ar5312_gpiodev.valid_mask; 
    1754 +       return reg; 
    17551675+} 
    17561676+ 
     
    17681688+ 
    17691689+static u32 
    1770 +ar5312_gpio_get(void) 
     1690+ar5312_gpio_get(u32 valid_mask) 
    17711691+{ 
    17721692+       u32 reg; 
    17731693+       reg = ar231x_read_reg(AR531X_GPIO_DI); 
    1774 +       reg &= ar5312_gpiodev.valid_mask; 
     1694+       reg &= valid_mask; 
    17751695+       return reg; 
    17761696+} 
     
    17871707+} 
    17881708+ 
    1789 +const struct ar231x_gpiodev ar5312_gpiodev = { 
    1790 +       .valid_mask = (1 << 8) - 1, 
    1791 +       .get_output = ar5312_gpio_get_output, 
    1792 +       .set_output = ar5312_gpio_set_output, 
    1793 +       .get = ar5312_gpio_get, 
    1794 +       .set = ar5312_gpio_set, 
    1795 +}; 
     1709+/* 
     1710+ * gpiolib implementations. Original mask based methods preserved 
     1711+ */ 
     1712+static int 
     1713+ar5312_gpio_get_value(struct gpio_chip *chip, unsigned gpio) 
     1714+{ 
     1715+       struct ar231x_gpio_chip *gpch = 
     1716+               container_of(chip, struct ar231x_gpio_chip, chip); 
     1717+       u32 mask = 1 << gpio; 
     1718+       u32 rett; 
     1719+       if (!(gpch->valid_mask & mask)) 
     1720+               return 0; 
     1721+       rett = ar5312_gpio_get(gpch->valid_mask); 
     1722+       return !!(rett & mask); 
     1723+} 
     1724+ 
     1725+static void 
     1726+ar5312_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) 
     1727+{ 
     1728+       struct ar231x_gpio_chip *gpch = 
     1729+               container_of(chip, struct ar231x_gpio_chip, chip); 
     1730+       u32 mask = 1 << gpio; 
     1731+       if (!(gpch->valid_mask & mask)) 
     1732+               return; 
     1733+       ar5312_gpio_set(mask, (!!value) * mask); 
     1734+} 
     1735+ 
     1736+static int 
     1737+ar5312_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 
     1738+{ 
     1739+       struct ar231x_gpio_chip *gpch = 
     1740+               container_of(chip, struct ar231x_gpio_chip, chip); 
     1741+       u32 mask = 1 << gpio; 
     1742+       if (!(gpch->valid_mask & mask)) 
     1743+               return -ENXIO; 
     1744+       ar5312_gpio_set_output(mask, 0); 
     1745+       return 0; 
     1746+} 
     1747+static int 
     1748+ar5312_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int value) 
     1749+{ 
     1750+       struct ar231x_gpio_chip *gpch = 
     1751+               container_of(chip, struct ar231x_gpio_chip, chip); 
     1752+       u32 mask = 1 << gpio; 
     1753+       if (!(gpch->valid_mask & mask)) 
     1754+               return -ENXIO; 
     1755+       ar5312_gpio_set_output(mask, mask); 
     1756+       ar5312_gpio_set(mask, (!!value) * mask); 
     1757+       return 0; 
     1758+} 
     1759+ 
     1760+static struct ar231x_gpio_chip ar5312_gpio_chip = { 
     1761+       .valid_mask = (1 << 22) - 1, 
     1762+       .chip = { 
     1763+               .label                  = "ar5312-gpio", 
     1764+               .direction_input        = ar5312_gpio_direction_input, 
     1765+               .direction_output       = ar5312_gpio_direction_output, 
     1766+               .set                    = ar5312_gpio_set_value, 
     1767+               .get                    = ar5312_gpio_get_value, 
     1768+               .base                   = 0, 
     1769+               .ngpio                  = AR531X_GPIO_IRQ_COUNT, // 22 
     1770+       } 
     1771+}; 
     1772+ 
     1773+// end of gpiolib 
    17961774+ 
    17971775+static struct physmap_flash_data ar5312_flash_data = { 
     
    20702048+} 
    20712049+ 
     2050+int __init 
     2051+ar5312_gpio_init(void) 
     2052+{ 
     2053+       int ret; 
     2054+       struct ar231x_gpio_chip *gpch; 
     2055+       gpch = &ar5312_gpio_chip; 
     2056+       ret = gpiochip_add(&gpch->chip); 
     2057+       if (ret) { 
     2058+               printk(KERN_ERR "%s: failed to add gpiochip\n", 
     2059+                       gpch->chip.label); 
     2060+               return ret; 
     2061+       } 
     2062+       printk(KERN_INFO "%s: registered %d GPIOs\n", 
     2063+               gpch->chip.label, gpch->chip.ngpio); 
     2064+       return ret; 
     2065+} 
    20722066+ 
    20732067+void __init 
     
    20932087+       devid &= AR531X_REV_CHIP; 
    20942088+       ar231x_board.devid = (u16) devid; 
    2095 +       ar231x_gpiodev = &ar5312_gpiodev; 
     2089+       ar5312_gpio_init(); 
    20962090+} 
    20972091+ 
     
    21132107--- /dev/null 
    21142108+++ b/arch/mips/ar231x/ar2315.c 
    2115 @@ -0,0 +1,658 @@ 
     2109@@ -0,0 +1,694 @@ 
    21162110+/* 
    21172111+ * This file is subject to the terms and conditions of the GNU General Public 
     
    21232117+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org> 
    21242118+ * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> 
     2119+ * Copyright (C) 2012 Alexandros C. Couloumbis <alex@ozo.com> 
    21252120+ */ 
    21262121+ 
     
    21392134+#include <linux/delay.h> 
    21402135+#include <linux/leds.h> 
     2136+#include <linux/gpio.h> 
    21412137+#include <asm/bootinfo.h> 
    21422138+#include <asm/reboot.h> 
    21432139+#include <asm/time.h> 
    2144 +#include <asm/irq.h> 
     2140+#include <linux/irq.h> 
    21452141+#include <asm/io.h> 
    2146 +#include <asm/gpio.h> 
    21472142+ 
    21482143+#include <ar231x_platform.h> 
     
    22282223+} 
    22292224+ 
    2230 +static void ar2315_gpio_intr_enable(unsigned int irq) 
    2231 +{ 
    2232 +       unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE; 
     2225+static void ar2315_gpio_intr_enable(struct irq_data *d) 
     2226+{ 
     2227+       unsigned int gpio = d->irq - AR531X_GPIO_IRQ_BASE; 
    22332228+ 
    22342229+       /* Enable interrupt with edge detection */ 
     
    22402235+} 
    22412236+ 
    2242 +static unsigned int ar2315_gpio_intr_startup(unsigned int irq) 
    2243 +{ 
    2244 +       unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE; 
    2245 + 
    2246 +       /* reconfigure GPIO line as input */ 
    2247 +       ar231x_mask_reg(AR2315_GPIO_CR, AR2315_GPIO_CR_M(gpio), AR2315_GPIO_CR_I(gpio)); 
    2248 +       ar2315_gpio_intr_enable(irq); 
    2249 +       return 0; 
    2250 +} 
    2251 + 
    2252 +static void ar2315_gpio_intr_disable(unsigned int irq) 
    2253 +{ 
    2254 +       unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE; 
     2237+static void ar2315_gpio_intr_disable(struct irq_data *d) 
     2238+{ 
     2239+       unsigned int gpio = d->irq - AR531X_GPIO_IRQ_BASE; 
    22552240+ 
    22562241+       /* Disable interrupt */ 
     
    22592244+} 
    22602245+ 
     2246+static struct irq_chip ar2315_gpio_intr_controller = { 
     2247+       .irq_mask     = ar2315_gpio_intr_disable, 
     2248+       .irq_unmask   = ar2315_gpio_intr_enable, 
     2249+}; 
     2250+ 
    22612251+static void 
    2262 +ar2315_gpio_intr_end(unsigned int irq) 
    2263 +{ 
    2264 +       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) 
    2265 +               ar2315_gpio_intr_enable(irq); 
    2266 +} 
    2267 + 
    2268 +static struct irq_chip ar2315_gpio_intr_controller = { 
    2269 +       .name   = "AR2315-GPIO", 
    2270 +       .startup  = ar2315_gpio_intr_startup, 
    2271 +       .ack      = ar2315_gpio_intr_disable, 
    2272 +       .mask_ack = ar2315_gpio_intr_disable, 
    2273 +       .mask     = ar2315_gpio_intr_disable, 
    2274 +       .unmask   = ar2315_gpio_intr_enable, 
    2275 +       .end      = ar2315_gpio_intr_end, 
    2276 +}; 
    2277 + 
    2278 +static void 
    2279 +ar2315_misc_intr_enable(unsigned int irq) 
     2252+ar2315_misc_intr_enable(struct irq_data *d) 
    22802253+{ 
    22812254+       unsigned int imr; 
    22822255+ 
    22832256+       imr = ar231x_read_reg(AR2315_IMR); 
    2284 +       switch(irq) { 
     2257+       switch(d->irq) { 
    22852258+       case AR531X_MISC_IRQ_SPI: 
    22862259+                imr |= AR2315_ISR_SPI; 
     
    23082281+ 
    23092282+static void 
    2310 +ar2315_misc_intr_disable(unsigned int irq) 
     2283+ar2315_misc_intr_disable(struct irq_data *d) 
    23112284+{ 
    23122285+       unsigned int imr; 
    23132286+ 
    23142287+       imr = ar231x_read_reg(AR2315_IMR); 
    2315 +       switch(irq) { 
     2288+       switch(d->irq) { 
    23162289+       case AR531X_MISC_IRQ_SPI: 
    23172290+                imr &= ~AR2315_ISR_SPI; 
     
    23382311+} 
    23392312+ 
    2340 +static void 
    2341 +ar2315_misc_intr_end(unsigned int irq) 
    2342 +{ 
    2343 +       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) 
    2344 +               ar2315_misc_intr_enable(irq); 
    2345 +} 
    2346 + 
    2347 + 
    23482313+static struct irq_chip ar2315_misc_intr_controller = { 
    2349 +       .name   = "AR2315-MISC", 
    2350 +       .ack      = ar2315_misc_intr_disable, 
    2351 +       .mask_ack = ar2315_misc_intr_disable, 
    2352 +       .mask     = ar2315_misc_intr_disable, 
    2353 +       .unmask   = ar2315_misc_intr_enable, 
    2354 +       .end      = ar2315_misc_intr_end, 
     2314+       .irq_mask     = ar2315_misc_intr_disable, 
     2315+       .irq_unmask   = ar2315_misc_intr_enable, 
    23552316+}; 
    23562317+ 
     
    23682329+static struct irqaction ar2315_ahb_proc_interrupt  = { 
    23692330+       .handler        = ar2315_ahb_proc_handler, 
    2370 +       .flags          = IRQF_DISABLED, 
    23712331+       .name           = "ar2315_ahb_proc_interrupt", 
    23722332+}; 
     
    23742334+static struct irqaction cascade  = { 
    23752335+       .handler        = no_action, 
    2376 +       .flags          = IRQF_DISABLED, 
    23772336+       .name           = "cascade", 
    23782337+}; 
     
    23902349+       for (i = 0; i < AR531X_MISC_IRQ_COUNT; i++) { 
    23912350+               int irq = AR531X_MISC_IRQ_BASE + i; 
    2392 +               set_irq_chip_and_handler(irq, &ar2315_misc_intr_controller, 
     2351+               irq_set_chip_and_handler(irq, &ar2315_misc_intr_controller, 
    23932352+                       handle_level_irq); 
    23942353+       } 
    23952354+       for (i = 0; i < AR531X_GPIO_IRQ_COUNT; i++) { 
    23962355+               int irq = AR531X_GPIO_IRQ_BASE + i; 
    2397 +               set_irq_chip_and_handler(irq, &ar2315_gpio_intr_controller, 
     2356+               irq_set_chip_and_handler(irq, &ar2315_gpio_intr_controller, 
    23982357+                       handle_level_irq); 
    23992358+       } 
     
    24012360+       setup_irq(AR531X_MISC_IRQ_AHB_PROC, &ar2315_ahb_proc_interrupt); 
    24022361+       setup_irq(AR2315_IRQ_MISC_INTRS, &cascade); 
    2403 +} 
    2404 + 
    2405 +const struct ar231x_gpiodev ar2315_gpiodev; 
    2406 + 
    2407 +static u32 
    2408 +ar2315_gpio_get_output(void) 
    2409 +{ 
    2410 +       u32 reg; 
    2411 +       reg = ar231x_read_reg(AR2315_GPIO_CR); 
    2412 +       reg &= ar2315_gpiodev.valid_mask; 
    2413 +       return reg; 
    24142362+} 
    24152363+ 
     
    24272375+ 
    24282376+static u32 
    2429 +ar2315_gpio_get(void) 
     2377+ar2315_gpio_get(u32 valid_mask) 
    24302378+{ 
    24312379+       u32 reg; 
    24322380+       reg = ar231x_read_reg(AR2315_GPIO_DI); 
    2433 +       reg &= ar2315_gpiodev.valid_mask; 
     2381+       reg &= valid_mask; 
    24342382+       return reg; 
    24352383+} 
     
    24462394+} 
    24472395+ 
    2448 +const struct ar231x_gpiodev ar2315_gpiodev = { 
     2396+/* 
     2397+ * gpiolib implementation.  Original legacy mask based methods 
     2398+ * preserved for now. 
     2399+ */ 
     2400+static int 
     2401+ar2315_gpio_get_value(struct gpio_chip *chip, unsigned gpio) 
     2402+{ 
     2403+       struct ar231x_gpio_chip *gpch = 
     2404+               container_of(chip, struct ar231x_gpio_chip, chip); 
     2405+       u32 mask = 1 << gpio; 
     2406+       u32 rett; 
     2407+       if (!(gpch->valid_mask & mask)) 
     2408+               return 0; 
     2409+       rett = ar2315_gpio_get(gpch->valid_mask);  // legacy code 
     2410+       return !!(rett & mask); 
     2411+} 
     2412+ 
     2413+static void 
     2414+ar2315_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) 
     2415+{ 
     2416+       struct ar231x_gpio_chip *gpch = 
     2417+               container_of(chip, struct ar231x_gpio_chip, chip); 
     2418+       u32 mask = 1 << gpio; 
     2419+       if (!(gpch->valid_mask & mask)) 
     2420+               return; 
     2421+       ar2315_gpio_set(mask, (!!value) * mask);  // legacy 
     2422+} 
     2423+ 
     2424+static int 
     2425+ar2315_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 
     2426+{ 
     2427+       struct ar231x_gpio_chip *gpch = 
     2428+               container_of(chip, struct ar231x_gpio_chip, chip); 
     2429+       u32 mask = 1 << gpio; 
     2430+       if (!(gpch->valid_mask & mask)) 
     2431+               return -ENXIO; 
     2432+       ar2315_gpio_set_output(mask, 0);  // legacy 
     2433+       return 0; 
     2434+} 
     2435+ 
     2436+static int 
     2437+ar2315_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int value) 
     2438+{ 
     2439+       struct ar231x_gpio_chip *gpch = 
     2440+               container_of(chip, struct ar231x_gpio_chip, chip); 
     2441+       u32 mask = 1 << gpio; 
     2442+       if (!(gpch->valid_mask & mask)) 
     2443+               return -ENXIO; 
     2444+       ar2315_gpio_set_output(mask, mask);  // both legacy 
     2445+       ar2315_gpio_set(mask, (!!value) * mask); 
     2446+       return 0; 
     2447+} 
     2448+ 
     2449+static struct ar231x_gpio_chip ar2315_gpio_chip = { 
    24492450+       .valid_mask = (1 << 22) - 1, 
    2450 +       .get_output = ar2315_gpio_get_output, 
    2451 +       .set_output = ar2315_gpio_set_output, 
    2452 +       .get = ar2315_gpio_get, 
    2453 +       .set = ar2315_gpio_set, 
    2454 +}; 
     2451+       .chip = { 
     2452+               .label                  = "ar2315-gpio", 
     2453+               .direction_input        = ar2315_gpio_direction_input, 
     2454+               .direction_output       = ar2315_gpio_direction_output, 
     2455+               .set                    = ar2315_gpio_set_value, 
     2456+               .get                    = ar2315_gpio_get_value, 
     2457+               .base                   = 0, 
     2458+               .ngpio                  = AR531X_GPIO_IRQ_COUNT, // 22 
     2459+       } 
     2460+}; 
     2461+ 
     2462+// end of gpiolib 
     2463+ 
    24552464+ 
    24562465+static struct ar231x_eth ar2315_eth_data = { 
     
    25872596+ 
    25882597+static void __init 
    2589 +ar2315_init_gpio(void) 
     2598+ar2315_init_gpio_leds(void) 
    25902599+{ 
    25912600+       static char led_names[6][6]; 
     
    26132622+} 
    26142623+#else 
    2615 +static inline void ar2315_init_gpio(void) 
     2624+static inline void ar2315_init_gpio_leds(void) 
    26162625+{ 
    26172626+} 
     
    26282637+       ar2315_eth_data.macaddr = ar231x_board.config->enet0_mac; 
    26292638+ 
    2630 +       ar2315_init_gpio(); 
     2639+       ar2315_init_gpio_leds(); 
    26312640+       platform_device_register(&ar2315_wdt); 
    26322641+       platform_device_register(&ar2315_spiflash); 
     
    27242733+} 
    27252734+ 
     2735+int __init 
     2736+ar2315_gpio_init(void) 
     2737+{ 
     2738+       int ret; 
     2739+       struct ar231x_gpio_chip *gpch; 
     2740+       gpch = &ar2315_gpio_chip; 
     2741+       ret = gpiochip_add(&gpch->chip); 
     2742+       if (ret) { 
     2743+               printk(KERN_ERR "%s: failed to add gpiochip\n", 
     2744+                       gpch->chip.label); 
     2745+               return ret; 
     2746+       } 
     2747+       printk(KERN_INFO "%s: registered %d GPIOs\n", 
     2748+               gpch->chip.label, gpch->chip.ngpio); 
     2749+       return ret; 
     2750+} 
     2751+ 
     2752+ 
     2753+ 
    27262754+void __init 
    27272755+ar2315_prom_init(void) 
     
    27502778+                       break; 
    27512779+       } 
    2752 +       ar231x_gpiodev = &ar2315_gpiodev; 
     2780+       ar2315_gpio_init(); 
    27532781+       ar231x_board.devid = devid; 
    27542782+} 
     
    27612789+       if (!is_2315()) 
    27622790+               return; 
     2791+ 
     2792+       gpio_request(AR2315_RESET_GPIO, "reset"); 
    27632793+ 
    27642794+       /* Clear any lingering AHB errors */ 
     
    29122942--- /dev/null 
    29132943+++ b/arch/mips/ar231x/devices.h 
    2914 @@ -0,0 +1,37 @@ 
     2944@@ -0,0 +1,42 @@ 
    29152945+#ifndef __AR231X_DEVICES_H 
    29162946+#define __AR231X_DEVICES_H 
     2947+#include <linux/gpio.h> 
    29172948+ 
    29182949+enum { 
     
    29492980+} 
    29502981+ 
     2982+struct ar231x_gpio_chip { 
     2983+       u32 valid_mask; 
     2984+       struct gpio_chip chip; 
     2985+}; 
    29512986+#endif 
    29522987--- /dev/null 
    29532988+++ b/arch/mips/ar231x/devices.c 
    2954 @@ -0,0 +1,175 @@ 
     2989@@ -0,0 +1,173 @@ 
    29552990+#include <linux/kernel.h> 
    29562991+#include <linux/init.h> 
     
    29673002+struct ar231x_board_config ar231x_board; 
    29683003+int ar231x_devtype = DEV_TYPE_UNKNOWN; 
    2969 +const struct ar231x_gpiodev *ar231x_gpiodev; 
    2970 +EXPORT_SYMBOL(ar231x_gpiodev); 
    29713004+ 
    29723005+static struct resource ar231x_eth0_res[] = { 
  • trunk/target/linux/atheros/patches-3.3/101-early-printk-support.patch

    r31623 r31625  
    6262        select SYS_SUPPORTS_BIG_ENDIAN 
    6363        select SYS_SUPPORTS_32BIT_KERNEL 
    64         select GENERIC_GPIO 
     64        select ARCH_REQUIRE_GPIOLIB 
    6565+       select SYS_HAS_EARLY_PRINTK 
    6666        help 
  • trunk/target/linux/atheros/patches-3.3/105-ar2315_pci.patch

    r31623 r31625  
    241241--- a/arch/mips/ar231x/Kconfig 
    242242+++ b/arch/mips/ar231x/Kconfig 
    243 @@ -15,3 +15,13 @@ config ATHEROS_AR2315 
     243@@ -14,3 +14,10 @@ config ATHEROS_AR2315 
     244        select SYS_SUPPORTS_32BIT_KERNEL 
    244245        select SYS_SUPPORTS_BIG_ENDIAN 
    245         select GENERIC_GPIO 
    246246        default y 
    247247+ 
     
    251251+       select HW_HAS_PCI 
    252252+       select PCI 
    253 +       select USB_ARCH_HAS_HCD 
    254 +       select USB_ARCH_HAS_OHCI 
    255 +       select USB_ARCH_HAS_EHCI 
    256253+       default y 
    257254--- a/arch/mips/ar231x/ar2315.c 
    258255+++ b/arch/mips/ar231x/ar2315.c 
    259 @@ -63,6 +63,27 @@ static inline void ar2315_gpio_irq(void) 
     256@@ -64,6 +64,27 @@ static inline void ar2315_gpio_irq(void) 
    260257                do_IRQ(AR531X_GPIO_IRQ_BASE + bit); 
    261258 } 
     
    285282 /* 
    286283  * Called when an interrupt is received, this function 
    287 @@ -81,6 +102,10 @@ ar2315_irq_dispatch(void) 
     284@@ -82,6 +103,10 @@ ar2315_irq_dispatch(void) 
    288285                do_IRQ(AR2315_IRQ_WLAN0_INTRS); 
    289286        else if (pending & CAUSEF_IP4) 
  • trunk/target/linux/atheros/patches-3.3/110-ar2313_ethernet.patch

    r31623 r31625  
    1 --- a/drivers/net/Kconfig 
    2 +++ b/drivers/net/Kconfig 
    3 @@ -251,6 +251,12 @@ config AX88796_93CX6 
    4         help 
    5           Select this if your platform comes with an external 93CX6 eeprom. 
    6   
    7 +config AR231X_ETHERNET 
    8 +       tristate "AR231x Ethernet support" 
     1--- a/drivers/net/ethernet/Kconfig 
     2+++ b/drivers/net/ethernet/Kconfig 
     3@@ -22,6 +22,7 @@ source "drivers/net/ethernet/adaptec/Kco 
     4 source "drivers/net/ethernet/aeroflex/Kconfig" 
     5 source "drivers/net/ethernet/alteon/Kconfig" 
     6 source "drivers/net/ethernet/amd/Kconfig" 
     7+source "drivers/net/ethernet/ar231x/Kconfig" 
     8 source "drivers/net/ethernet/apple/Kconfig" 
     9 source "drivers/net/ethernet/atheros/Kconfig" 
     10 source "drivers/net/ethernet/cadence/Kconfig" 
     11--- a/drivers/net/ethernet/Makefile 
     12+++ b/drivers/net/ethernet/Makefile 
     13@@ -9,6 +9,7 @@ obj-$(CONFIG_GRETH) += aeroflex/ 
     14 obj-$(CONFIG_NET_VENDOR_ALTEON) += alteon/ 
     15 obj-$(CONFIG_NET_VENDOR_AMD) += amd/ 
     16 obj-$(CONFIG_NET_VENDOR_APPLE) += apple/ 
     17+obj-$(CONFIG_NET_VENDOR_AR231X) += ar231x/ 
     18 obj-$(CONFIG_NET_VENDOR_ATHEROS) += atheros/ 
     19 obj-$(CONFIG_NET_CADENCE) += cadence/ 
     20 obj-$(CONFIG_NET_BFIN) += adi/ 
     21--- /dev/null 
     22+++ b/drivers/net/ethernet/ar231x/Kconfig 
     23@@ -0,0 +1,5 @@ 
     24+config NET_VENDOR_AR231X 
     25+       tristate "AR231X Ethernet support" 
    926+       depends on ATHEROS_AR231X 
    1027+       help 
    1128+         Support for the AR231x/531x ethernet controller 
    12 + 
    13  config MACE 
    14         tristate "MACE (Power Mac ethernet) support" 
    15         depends on PPC_PMAC && PPC32 
    16 --- a/drivers/net/Makefile 
    17 +++ b/drivers/net/Makefile 
    18 @@ -224,6 +224,7 @@ obj-$(CONFIG_EQUALIZER) += eql.o 
    19  obj-$(CONFIG_KORINA) += korina.o 
    20  obj-$(CONFIG_MIPS_JAZZ_SONIC) += jazzsonic.o 
    21  obj-$(CONFIG_MIPS_AU1X00_ENET) += au1000_eth.o 
    22 +obj-$(CONFIG_AR231X_ETHERNET) += ar231x.o 
    23  obj-$(CONFIG_MIPS_SIM_NET) += mipsnet.o 
    24  obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o 
    25  obj-$(CONFIG_DECLANCE) += declance.o 
    2629--- /dev/null 
    27 +++ b/drivers/net/ar231x.c 
    28 @@ -0,0 +1,1293 @@ 
     30+++ b/drivers/net/ethernet/ar231x/Makefile 
     31@@ -0,0 +1 @@ 
     32+obj-$(CONFIG_NET_VENDOR_AR231X) += ar231x.o 
     33--- /dev/null 
     34+++ b/drivers/net/ethernet/ar231x/ar231x.c 
     35@@ -0,0 +1,1282 @@ 
    2936+/* 
    3037+ * ar231x.c: Linux driver for the Atheros AR231x Ethernet device. 
     
    5562+#include <linux/netdevice.h> 
    5663+#include <linux/etherdevice.h> 
     64+#include <linux/interrupt.h> 
     65+#include <linux/hardirq.h> 
    5766+#include <linux/skbuff.h> 
    5867+#include <linux/init.h> 
     
    210219+}; 
    211220+ 
    212 +int __init ar231x_probe(struct platform_device *pdev) 
     221+int __devinit ar231x_probe(struct platform_device *pdev) 
    213222+{ 
    214223+       struct net_device *dev; 
     
    416425+}; 
    417426+ 
    418 +int __init ar231x_module_init(void) 
    419 +{ 
    420 +       return platform_driver_register(&ar231x_driver); 
    421 +} 
    422 + 
    423 +void __exit ar231x_module_cleanup(void) 
    424 +{ 
    425 +       platform_driver_unregister(&ar231x_driver); 
    426 +} 
    427 + 
    428 +module_init(ar231x_module_init); 
    429 +module_exit(ar231x_module_cleanup); 
    430 + 
     427+module_platform_driver(ar231x_driver); 
    431428+ 
    432429+static void ar231x_free_descriptors(struct net_device *dev) 
     
    11721169+static int ar231x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 
    11731170+{ 
    1174 +       struct mii_ioctl_data *data = (struct mii_ioctl_data *) &ifr->ifr_data; 
    11751171+       struct ar231x_private *sp = netdev_priv(dev); 
    11761172+       int ret; 
     
    13211317+ 
    13221318--- /dev/null 
    1323 +++ b/drivers/net/ar231x.h 
    1324 @@ -0,0 +1,302 @@ 
     1319+++ b/drivers/net/ethernet/ar231x/ar231x.h 
     1320@@ -0,0 +1,303 @@ 
    13251321+/* 
    13261322+ * ar231x.h: Linux driver for the Atheros AR231x Ethernet device. 
     
    13421338+#define _AR2313_H_ 
    13431339+ 
     1340+#include <linux/interrupt.h> 
    13441341+#include <generated/autoconf.h> 
    13451342+#include <linux/bitops.h> 
  • trunk/target/linux/atheros/patches-3.3/120-spiflash.patch

    r31623 r31625  
    11--- a/drivers/mtd/devices/Kconfig 
    22+++ b/drivers/mtd/devices/Kconfig 
    3 @@ -112,6 +112,10 @@ config MTD_SST25L 
     3@@ -120,6 +120,10 @@ config MTD_SST25L 
    44          Set up your spi devices with the right board-specific platform data, 
    55          if you want to specify device partitioning. 
     
    1414--- a/drivers/mtd/devices/Makefile 
    1515+++ b/drivers/mtd/devices/Makefile 
    16 @@ -17,3 +17,4 @@ obj-$(CONFIG_MTD_BLOCK2MTD)   += block2mtd 
     16@@ -18,5 +18,6 @@ obj-$(CONFIG_MTD_BLOCK2MTD)   += block2mtd 
    1717 obj-$(CONFIG_MTD_DATAFLASH)    += mtd_dataflash.o 
    1818 obj-$(CONFIG_MTD_M25P80)       += m25p80.o 
    1919 obj-$(CONFIG_MTD_SST25L)       += sst25l.o 
    2020+obj-$(CONFIG_MTD_AR2315)       += ar2315.o 
     21  
     22-CFLAGS_docg3.o                 += -I$(src) 
     23\ No newline at end of file 
     24+CFLAGS_docg3.o                 += -I$(src) 
    2125--- /dev/null 
    2226+++ b/drivers/mtd/devices/ar2315.c 
    23 @@ -0,0 +1,517 @@ 
     27@@ -0,0 +1,515 @@ 
    2428+ 
    2529+/* 
     
    3034+ * Copyright (C) 2006-2007 Imre Kaloz <kaloz@openwrt.org> 
    3135+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org> 
     36+ * Copyright (C) 2012 Alexandros C. Couloumbis <alex@ozo.com> 
    3237+ * 
    3338+ * This code is free software; you can redistribute it and/or modify 
     
    430435+ 
    431436+ 
    432 +#ifdef CONFIG_MTD_PARTITIONS 
     437+#if defined CONFIG_MTD_REDBOOT_PARTS || CONFIG_MTD_MYLOADER_PARTS 
    433438+static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "MyLoader", NULL }; 
    434439+#endif 
     
    439444+{ 
    440445+       struct spiflash_priv *priv; 
    441 +       struct mtd_partition *parts; 
    442446+       struct mtd_info *mtd; 
    443 +       int index, num_parts; 
     447+       int index; 
    444448+       int result = 0; 
    445449+ 
     
    482486+       mtd->owner = THIS_MODULE; 
    483487+ 
    484 +#ifdef CONFIG_MTD_PARTITIONS 
     488+#if defined CONFIG_MTD_REDBOOT_PARTS || CONFIG_MTD_MYLOADER_PARTS 
    485489+       /* parse redboot partitions */ 
    486 +       num_parts = parse_mtd_partitions(mtd, part_probe_types, &parts, 0); 
    487 +       if (!num_parts) 
    488 +               goto error; 
    489 + 
    490 +       result = add_mtd_partitions(mtd, parts, num_parts); 
     490+ 
     491+       result = mtd_device_parse_register(mtd, part_probe_types, 
     492+                       NULL, NULL, 0); 
    491493+#endif 
    492494+ 
     
    506508+       struct mtd_info *mtd = &priv->mtd; 
    507509+ 
    508 +       del_mtd_partitions(mtd); 
     510+       mtd_device_unregister(mtd); 
    509511+       iounmap(priv->mmraddr); 
    510512+       iounmap(priv->readaddr); 
  • trunk/target/linux/atheros/patches-3.3/130-watchdog.patch

    r31623 r31625  
    101101+}; 
    102102+ 
    103 +static int 
    104 +ar2315_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 
     103+static long 
     104+ar2315_wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 
    105105+{ 
    106106+       int new_wdt_timeout; 
     
    204204--- a/drivers/watchdog/Kconfig 
    205205+++ b/drivers/watchdog/Kconfig 
    206 @@ -972,6 +972,12 @@ config BCM63XX_WDT 
    207           To compile this driver as a loadable module, choose M here. 
    208           The module will be called bcm63xx_wdt. 
     206@@ -1033,6 +1033,12 @@ config LANTIQ_WDT 
     207        help 
     208          Hardware driver for the Lantiq SoC Watchdog Timer. 
    209209  
    210210+config ATHEROS_WDT 
     
    219219--- a/drivers/watchdog/Makefile 
    220220+++ b/drivers/watchdog/Makefile 
    221 @@ -118,6 +118,7 @@ obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o 
     221@@ -128,6 +128,7 @@ obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o 
    222222 obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt.o 
    223223 obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o 
  • trunk/target/linux/atheros/patches-3.3/140-redboot_partition_scan.patch

    r31623 r31625  
    11--- a/drivers/mtd/redboot.c 
    22+++ b/drivers/mtd/redboot.c 
    3 @@ -78,31 +78,32 @@ static int parse_redboot_partitions(stru 
     3@@ -79,6 +79,11 @@ static int parse_redboot_partitions(stru 
    44        static char nullstring[] = "unallocated"; 
    55 #endif 
     
    88+       if (!buf) 
    99+               return -ENOMEM; 
    10 + 
     10+                
    1111+ restart: 
    1212        if ( directory < 0 ) { 
    1313                offset = master->size + directory * master->erasesize; 
    14 -               while (master->block_isbad &&  
    15 +               while (master->block_isbad && 
    16                        master->block_isbad(master, offset)) { 
     14                while (mtd_can_have_bb(master) && 
     15@@ -86,6 +91,7 @@ static int parse_redboot_partitions(stru 
    1716                        if (!offset) { 
    1817                        nogood: 
     
    2221                        } 
    2322                        offset -= master->erasesize; 
    24                 } 
    25         } else { 
    26                 offset = directory * master->erasesize; 
    27 -               while (master->block_isbad &&  
    28 +               while (master->block_isbad && 
    29                        master->block_isbad(master, offset)) { 
    30                         offset += master->erasesize; 
    31                         if (offset == master->size) 
     23@@ -99,10 +105,6 @@ static int parse_redboot_partitions(stru 
    3224                                goto nogood; 
    3325                } 
     
    3729-       if (!buf) 
    3830-               return -ENOMEM; 
    39 - 
     31  
    4032        printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n", 
    4133               master->name, offset); 
    42   
    43 @@ -174,6 +175,11 @@ static int parse_redboot_partitions(stru 
     34@@ -175,6 +177,11 @@ static int parse_redboot_partitions(stru 
    4435        } 
    4536        if (i == numslots) { 
  • trunk/target/linux/atheros/patches-3.3/141-redboot_various_erase_size_fix.patch

    r31623 r31625  
    11--- a/drivers/mtd/redboot.c 
    22+++ b/drivers/mtd/redboot.c 
    3 @@ -57,6 +57,22 @@ static inline int redboot_checksum(struc 
     3@@ -58,6 +58,22 @@ static inline int redboot_checksum(struc 
    44        return 1; 
    55 } 
     
    2222+ 
    2323 static int parse_redboot_partitions(struct mtd_info *master, 
    24                               struct mtd_partition **pparts, 
    25                               unsigned long fis_origin) 
    26 @@ -73,6 +89,7 @@ static int parse_redboot_partitions(stru 
     24                                    struct mtd_partition **pparts, 
     25                                    struct mtd_part_parser_data *data) 
     26@@ -74,6 +90,7 @@ static int parse_redboot_partitions(stru 
    2727        int namelen = 0; 
    2828        int nulllen = 0; 
     
    3232 #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED 
    3333        static char nullstring[] = "unallocated"; 
    34 @@ -186,7 +203,10 @@ static int parse_redboot_partitions(stru 
     34@@ -188,7 +205,10 @@ static int parse_redboot_partitions(stru 
    3535                goto out; 
    3636        } 
     
    4444  
    4545                if (buf[i].name[0] == 0xff) { 
    46 @@ -262,12 +282,13 @@ static int parse_redboot_partitions(stru 
     46@@ -263,12 +283,13 @@ static int parse_redboot_partitions(stru 
    4747        } 
    4848 #endif 
     
    6060 #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY 
    6161                if (!memcmp(names, "RedBoot", 8) || 
    62 @@ -297,7 +318,9 @@ static int parse_redboot_partitions(stru 
     62@@ -298,7 +319,9 @@ static int parse_redboot_partitions(stru 
    6363                fl = fl->next; 
    6464                kfree(tmp_fl); 
  • trunk/target/linux/atheros/patches-3.3/200-ar2313_enable_mvswitch.patch

    r31623 r31625  
    1 --- a/drivers/net/ar231x.c 
    2 +++ b/drivers/net/ar231x.c 
    3 @@ -755,6 +755,7 @@ static void ar231x_load_rx_ring(struct n 
     1--- a/drivers/net/ethernet/ar231x/ar231x.c 
     2+++ b/drivers/net/ethernet/ar231x/ar231x.c 
     3@@ -745,6 +745,7 @@ static void ar231x_load_rx_ring(struct n 
    44        for (i = 0; i < nr_bufs; i++) { 
    55                struct sk_buff *skb; 
     
    99                if (sp->rx_skb[idx]) 
    1010                        break; 
    11 @@ -770,7 +771,9 @@ static void ar231x_load_rx_ring(struct n 
     11@@ -760,7 +761,9 @@ static void ar231x_load_rx_ring(struct n 
    1212                 * Make sure IP header starts on a fresh cache line. 
    1313                 */ 
     
    2020  
    2121                rd = (ar231x_descr_t *) & sp->rx_ring[idx]; 
    22 @@ -844,20 +847,23 @@ static int ar231x_rx_int(struct net_devi 
     22@@ -834,20 +837,23 @@ static int ar231x_rx_int(struct net_devi 
    2323                        /* alloc new buffer. */ 
    2424                        skb_new = netdev_alloc_skb(dev, AR2313_BUFSIZE + RX_OFFSET); 
     
    4949                                rxdesc->addr = virt_to_phys(skb_new->data); 
    5050  
    51 @@ -1269,6 +1275,8 @@ static int ar231x_mdiobus_probe (struct  
     51@@ -1258,6 +1264,8 @@ static int ar231x_mdiobus_probe (struct  
    5252                return PTR_ERR(phydev); 
    5353        } 
     
    5858        phydev->supported &= (SUPPORTED_10baseT_Half 
    5959                | SUPPORTED_10baseT_Full 
    60 --- a/drivers/net/ar231x.h 
    61 +++ b/drivers/net/ar231x.h 
    62 @@ -221,6 +221,8 @@ typedef struct { 
     60--- a/drivers/net/ethernet/ar231x/ar231x.h 
     61+++ b/drivers/net/ethernet/ar231x/ar231x.h 
     62@@ -222,6 +222,8 @@ typedef struct { 
    6363  */ 
    6464 struct ar231x_private { 
  • trunk/target/linux/atheros/patches-3.3/220-enet_micrel_workaround.patch

    r31623 r31625  
    1 --- a/drivers/net/ar231x.c 
    2 +++ b/drivers/net/ar231x.c 
    3 @@ -149,6 +149,7 @@ static int ar231x_mdiobus_write(struct m 
     1--- a/drivers/net/ethernet/ar231x/ar231x.c 
     2+++ b/drivers/net/ethernet/ar231x/ar231x.c 
     3@@ -151,6 +151,7 @@ static int ar231x_mdiobus_write(struct m 
    44 static int ar231x_mdiobus_reset(struct mii_bus *bus); 
    55 static int ar231x_mdiobus_probe (struct net_device *dev); 
     
    99 #ifndef ERR 
    1010 #define ERR(fmt, args...) printk("%s: " fmt, __func__, ##args) 
    11 @@ -298,6 +299,21 @@ int __init ar231x_probe(struct platform_ 
     11@@ -300,6 +301,21 @@ int __devinit ar231x_probe(struct platfo 
    1212  
    1313        mdiobus_register(sp->mii_bus); 
     
    3131                printk(KERN_ERR "%s: mdiobus_probe failed\n", dev->name); 
    3232                rx_tasklet_cleanup(dev); 
    33 @@ -354,8 +370,10 @@ static int __devexit ar231x_remove(struc 
     33@@ -356,8 +372,10 @@ static int __devexit ar231x_remove(struc 
    3434        rx_tasklet_cleanup(dev); 
    3535        ar231x_init_cleanup(dev); 
     
    4444        return 0; 
    4545 } 
    46 @@ -856,7 +874,12 @@ static int ar231x_rx_int(struct net_devi 
     46@@ -846,7 +864,12 @@ static int ar231x_rx_int(struct net_devi 
    4747                                dev->stats.rx_bytes += skb->len; 
    4848  
     
    5858  
    5959                                /* 16 bit align */ 
    60 @@ -1153,6 +1176,9 @@ static int ar231x_ioctl(struct net_devic 
     60@@ -1142,6 +1165,9 @@ static int ar231x_ioctl(struct net_devic 
    6161        struct ar231x_private *sp = netdev_priv(dev); 
    6262        int ret; 
  • trunk/target/linux/generic/files/drivers/net/phy/mvswitch.c

    r23862 r31625  
    4444        const struct net_device_ops *ndo_old; 
    4545        struct net_device_ops ndo; 
    46         struct vlan_group *grp; 
    4746        u8 vlans[16]; 
    4847}; 
     
    163162                goto error; 
    164163 
    165         if (!priv->grp) 
    166                 goto error; 
    167  
    168164#ifdef HEADER_MODE 
    169165        buf = skb->data; 
     
    186182        skb->protocol = eth_type_trans(skb, skb->dev); 
    187183 
     184        __vlan_hwaccel_put_tag(skb, vlan); 
    188185        if (napi) 
    189                 return vlan_hwaccel_receive_skb(skb, priv->grp, vlan); 
     186                return netif_receive_skb(skb); 
    190187        else 
    191                 return vlan_hwaccel_rx(skb, priv->grp, vlan); 
     188                return netif_rx(skb); 
    192189 
    193190error: 
     
    208205{ 
    209206        return mvswitch_mangle_rx(skb, 1); 
    210 } 
    211  
    212  
    213 static void 
    214 mvswitch_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) 
    215 { 
    216         struct mvswitch_priv *priv = dev->phy_ptr; 
    217         priv->grp = grp; 
    218207} 
    219208 
     
    347336        memcpy(&priv->ndo, priv->ndo_old, sizeof(struct net_device_ops)); 
    348337        priv->ndo.ndo_start_xmit = mvswitch_mangle_tx; 
    349         priv->ndo.ndo_vlan_rx_register = mvswitch_vlan_rx_register; 
    350338        dev->netdev_ops = &priv->ndo; 
    351339 
Note: See TracChangeset for help on using the changeset viewer.