add ar7-2.6 fixes by Stefan Weil
authorFelix Fietkau <nbd@openwrt.org>
Mon, 4 Jun 2007 09:46:30 +0000 (09:46 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 4 Jun 2007 09:46:30 +0000 (09:46 +0000)
SVN-Revision: 7487

target/linux/ar7-2.6/files/arch/mips/ar7/clock.c
target/linux/ar7-2.6/files/arch/mips/ar7/irq.c
target/linux/ar7-2.6/files/arch/mips/ar7/prom.c
target/linux/ar7-2.6/files/arch/mips/ar7/vlynq.c
target/linux/ar7-2.6/files/drivers/net/cpmac.c
target/linux/ar7-2.6/files/include/asm-mips/ar7/spaces.h
target/linux/ar7-2.6/patches/100-board_support.patch
target/linux/generic-2.6/patches/011-mips_boot.patch

index 04b49cc..43e36ec 100644 (file)
@@ -174,10 +174,12 @@ static int tnetd7300_get_clock(u32 shift, struct tnetd7300_clock *clock,
 {
        int product;
        int base_clock = ar7_ref_clock;
 {
        int product;
        int base_clock = ar7_ref_clock;
-       int prediv = ((clock->ctrl & PREDIV_MASK) >> PREDIV_SHIFT) + 1;
-       int postdiv = (clock->ctrl & POSTDIV_MASK) + 1;
+       u32 ctrl = clock->ctrl;
+       u32 pll = clock->pll;
+       int prediv = ((ctrl & PREDIV_MASK) >> PREDIV_SHIFT) + 1;
+       int postdiv = (ctrl & POSTDIV_MASK) + 1;
        int divisor = prediv * postdiv;
        int divisor = prediv * postdiv;
-       int mul = ((clock->pll & MUL_MASK) >> MUL_SHIFT) + 1;
+       int mul = ((pll & MUL_MASK) >> MUL_SHIFT) + 1;
 
        switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) {
        case BOOT_PLL_SOURCE_BUS:
 
        switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) {
        case BOOT_PLL_SOURCE_BUS:
@@ -197,10 +199,10 @@ static int tnetd7300_get_clock(u32 shift, struct tnetd7300_clock *clock,
        if (*bootcr & BOOT_PLL_BYPASS)
                return base_clock / divisor;
 
        if (*bootcr & BOOT_PLL_BYPASS)
                return base_clock / divisor;
 
-       if ((clock->pll & PLL_MODE_MASK) == 0)
+       if ((pll & PLL_MODE_MASK) == 0)
                return (base_clock >> (mul / 16 + 1)) / divisor;
 
                return (base_clock >> (mul / 16 + 1)) / divisor;
 
-       if ((clock->pll & (PLL_NDIV | PLL_DIV)) == (PLL_NDIV | PLL_DIV)) {
+       if ((pll & (PLL_NDIV | PLL_DIV)) == (PLL_NDIV | PLL_DIV)) {
                product = (mul & 1) ? 
                        (base_clock * mul) >> 1 :
                        (base_clock * (mul - 1)) >> 2;
                product = (mul & 1) ? 
                        (base_clock * mul) >> 1 :
                        (base_clock * (mul - 1)) >> 2;
index 542a57a..1a09aed 100644 (file)
 
 #define REG_OFFSET(irq, reg) ((irq) / 32 * 0x4 + reg * 0x10)
 #define SEC_REG_OFFSET(reg) (EXCEPT_OFFSET + reg * 0x8)
 
 #define REG_OFFSET(irq, reg) ((irq) / 32 * 0x4 + reg * 0x10)
 #define SEC_REG_OFFSET(reg) (EXCEPT_OFFSET + reg * 0x8)
-#define SR_OFFSET  (SEC_REG_OFFSET(0))
-#define CR_OFFSET(irq)  (REG_OFFSET(irq, 1))
-#define SEC_CR_OFFSET  (SEC_REG_OFFSET(1))
-#define ESR_OFFSET(irq) (REG_OFFSET(irq, 2))
-#define SEC_ESR_OFFSET  (SEC_REG_OFFSET(2))
-#define ECR_OFFSET(irq) (REG_OFFSET(irq, 3))
-#define SEC_ECR_OFFSET  (SEC_REG_OFFSET(3))
+#define SEC_SR_OFFSET  (SEC_REG_OFFSET(0))      /* 0x80 */
+#define CR_OFFSET(irq)  (REG_OFFSET(irq, 1))    /* 0x10 */
+#define SEC_CR_OFFSET  (SEC_REG_OFFSET(1))      /* 0x88 */
+#define ESR_OFFSET(irq) (REG_OFFSET(irq, 2))    /* 0x20 */
+#define SEC_ESR_OFFSET  (SEC_REG_OFFSET(2))     /* 0x90 */
+#define ECR_OFFSET(irq) (REG_OFFSET(irq, 3))    /* 0x30 */
+#define SEC_ECR_OFFSET  (SEC_REG_OFFSET(3))     /* 0x98 */
 #define PIR_OFFSET      (0x40)
 #define MSR_OFFSET      (0x44)
 #define PIR_OFFSET      (0x40)
 #define MSR_OFFSET      (0x44)
-#define PM_OFFSET(irq)  (REG_OFFSET(irq, 5))
-#define TM_OFFSET(irq)  (REG_OFFSET(irq, 6))
+#define PM_OFFSET(irq)  (REG_OFFSET(irq, 5))    /* 0x50 */
+#define TM_OFFSET(irq)  (REG_OFFSET(irq, 6))    /* 0x60 */
 
 #define REG(addr) (*(volatile u32 *)(KSEG1ADDR(AR7_REGS_IRQ) + addr))
 
 
 #define REG(addr) (*(volatile u32 *)(KSEG1ADDR(AR7_REGS_IRQ) + addr))
 
@@ -59,6 +59,7 @@ static void ar7_irq_init(int base);
 static int ar7_irq_base;
 
 static struct irq_chip ar7_irq_type = {
 static int ar7_irq_base;
 
 static struct irq_chip ar7_irq_type = {
+       .typename = "AR7",
        .name = "AR7",
        .unmask = ar7_unmask_irq,
        .mask = ar7_mask_irq,
        .name = "AR7",
        .unmask = ar7_unmask_irq,
        .mask = ar7_mask_irq,
@@ -174,7 +175,7 @@ static irqreturn_t ar7_secondary_cascade(int interrupt, void *dev)
        int irq = 0, i;
        unsigned long status;
 
        int irq = 0, i;
        unsigned long status;
 
-       status = REG(SR_OFFSET);
+       status = REG(SEC_SR_OFFSET);
        if (unlikely(!status)) {
                spurious_interrupt();
                return IRQ_NONE;
        if (unlikely(!status)) {
                spurious_interrupt();
                return IRQ_NONE;
index 20926c6..38037dd 100644 (file)
@@ -246,7 +246,6 @@ static void __init console_config(void)
 
 #ifdef CONFIG_KGDB
        strcat(prom_getcmdline(), " console=kgdb");
 
 #ifdef CONFIG_KGDB
        strcat(prom_getcmdline(), " console=kgdb");
-       prom_printf("Please connect GDB to this port\n");
        kgdb_enabled = 1;
        return;
 #endif
        kgdb_enabled = 1;
        return;
 #endif
index c491020..0609755 100644 (file)
@@ -196,10 +196,11 @@ static irqreturn_t vlynq_irq(int irq, void *dev_id)
 }
 
 static struct irq_chip vlynq_irq_chip = {
 }
 
 static struct irq_chip vlynq_irq_chip = {
+        .typename = "VLYNQ",
         .name = "vlynq",
         .unmask = vlynq_irq_unmask,
         .mask = vlynq_irq_mask,
         .name = "vlynq",
         .unmask = vlynq_irq_unmask,
         .mask = vlynq_irq_mask,
-       .set_type = vlynq_irq_type,
+        .set_type = vlynq_irq_type,
 };
 
 static int vlynq_setup_irq(struct vlynq_device *dev)
 };
 
 static int vlynq_setup_irq(struct vlynq_device *dev)
@@ -235,7 +236,7 @@ static int vlynq_setup_irq(struct vlynq_device *dev)
                dev->remote->int_device[i >> 2] = 0;
        }
 
                dev->remote->int_device[i >> 2] = 0;
        }
 
-       if (request_irq(dev->irq, vlynq_irq, SA_SHIRQ, "AR7 VLYNQ", dev)) {
+       if (request_irq(dev->irq, vlynq_irq, SA_SHIRQ, "vlynq", dev)) {
                printk("%s: request_irq failed\n", dev->dev.bus_id);
                return -EAGAIN;
        }
                printk("%s: request_irq failed\n", dev->dev.bus_id);
                return -EAGAIN;
        }
index e0c49b7..1be7cb8 100644 (file)
@@ -223,6 +223,7 @@ static void cpmac_hw_init(struct net_device *dev);
 static int cpmac_stop(struct net_device *dev);
 static int cpmac_open(struct net_device *dev);
 
 static int cpmac_stop(struct net_device *dev);
 static int cpmac_open(struct net_device *dev);
 
+#undef CPMAC_DEBUG
 #define CPMAC_LOW_THRESH 32
 #define CPMAC_ALLOC_SIZE 64
 #define CPMAC_SKB_SIZE 1518
 #define CPMAC_LOW_THRESH 32
 #define CPMAC_ALLOC_SIZE 64
 #define CPMAC_SKB_SIZE 1518
@@ -238,6 +239,18 @@ static void cpmac_dump_regs(u32 *base, int count)
        }
        printk("\n");
 }
        }
        printk("\n");
 }
+
+static const char *cpmac_dump_buf(const uint8_t * buf, unsigned size)
+{
+    static char buffer[3 * 25 + 1];
+    char *p = &buffer[0];
+    if (size > 20)
+        size = 20;
+    while (size-- > 0) {
+        p += sprintf(p, " %02x", *buf++);
+    }
+    return buffer;
+}
 #endif
 
 static int cpmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
 #endif
 
 static int cpmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)
@@ -446,7 +459,11 @@ static void cpmac_rx(struct net_device *dev)
 
        desc = priv->rx_head;
        dma_cache_inv((u32)desc, 16);
 
        desc = priv->rx_head;
        dma_cache_inv((u32)desc, 16);
-       
+#ifdef CPMAC_DEBUG
+                printk(KERN_DEBUG "%s: len=%d, %s\n", __func__, pkt->datalen,
+                      cpmac_dump_buf(data, pkt->datalen));
+#endif
+
        while ((desc->dataflags & CPMAC_OWN) == 0) {
                skb = cpmac_rx_one(dev, priv, desc);
                if (likely(skb)) {
        while ((desc->dataflags & CPMAC_OWN) == 0) {
                skb = cpmac_rx_one(dev, priv, desc);
                if (likely(skb)) {
@@ -558,6 +575,9 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
        struct cpmac_priv *priv = netdev_priv(dev);
 
        len = skb->len;
        struct cpmac_priv *priv = netdev_priv(dev);
 
        len = skb->len;
+#ifdef CPMAC_DEBUG
+        printk(KERN_DEBUG "%s: len=%d\n", __func__, len); //cpmac_dump_buf(const uint8_t * buf, unsigned size)
+#endif
        if (unlikely(len < ETH_ZLEN)) {
                if (unlikely(skb_padto(skb, ETH_ZLEN))) {
                        if (printk_ratelimit())
        if (unlikely(len < ETH_ZLEN)) {
                if (unlikely(skb_padto(skb, ETH_ZLEN))) {
                        if (printk_ratelimit())
@@ -689,7 +709,9 @@ static irqreturn_t cpmac_irq(int irq, void *dev_id)
        priv->regs->mac_eoi_vector = 0;
 
        if (unlikely(status & (INTST_HOST | INTST_STATUS))) {
        priv->regs->mac_eoi_vector = 0;
 
        if (unlikely(status & (INTST_HOST | INTST_STATUS))) {
-               printk(KERN_ERR "%s: hw error, resetting...\n", dev->name);
+               if (printk_ratelimit()) {
+                       printk(KERN_ERR "%s: hw error, resetting...\n", dev->name);
+               }
                spin_lock(&priv->lock);
                phy_stop(priv->phy);
                cpmac_reset(dev);
                spin_lock(&priv->lock);
                phy_stop(priv->phy);
                cpmac_reset(dev);
index 4e082f8..f4d1237 100644 (file)
@@ -19,8 +19,8 @@
  * This handles the memory map.
  * We handle pages at KSEG0 for kernels with 32 bit address space.
  */
  * This handles the memory map.
  * We handle pages at KSEG0 for kernels with 32 bit address space.
  */
-#define PAGE_OFFSET            0x80000000UL
-#define PHYS_OFFSET    0x14000000UL
+#define PAGE_OFFSET            0x94000000UL
+#define PHYS_OFFSET            0x14000000UL
 
 /*
  * Memory above this physical address will be considered highmem.
 
 /*
  * Memory above this physical address will be considered highmem.
index b22d1a3..1fa2630 100644 (file)
@@ -1,7 +1,7 @@
 diff -Nru linux-2.6.19.2/arch/mips/Kconfig linux-ar7/arch/mips/Kconfig
 --- linux-2.6.19.2/arch/mips/Kconfig   2006-12-12 02:32:53.000000000 +0700
 +++ linux-ar7/arch/mips/Kconfig        2007-01-29 21:52:21.000000000 +0700
 diff -Nru linux-2.6.19.2/arch/mips/Kconfig linux-ar7/arch/mips/Kconfig
 --- linux-2.6.19.2/arch/mips/Kconfig   2006-12-12 02:32:53.000000000 +0700
 +++ linux-ar7/arch/mips/Kconfig        2007-01-29 21:52:21.000000000 +0700
-@@ -12,6 +12,19 @@
+@@ -16,6 +16,20 @@
        prompt "System type"
        default SGI_IP22
  
        prompt "System type"
        default SGI_IP22
  
@@ -13,6 +13,7 @@ diff -Nru linux-2.6.19.2/arch/mips/Kconfig linux-ar7/arch/mips/Kconfig
 +      select IRQ_CPU
 +      select SWAP_IO_SPACE
 +      select SYS_HAS_CPU_MIPS32_R1
 +      select IRQ_CPU
 +      select SWAP_IO_SPACE
 +      select SYS_HAS_CPU_MIPS32_R1
++      select SYS_HAS_EARLY_PRINTK
 +      select SYS_SUPPORTS_32BIT_KERNEL
 +      select SYS_SUPPORTS_LITTLE_ENDIAN
 +      select NEED_MULTIPLE_NODES
 +      select SYS_SUPPORTS_32BIT_KERNEL
 +      select SYS_SUPPORTS_LITTLE_ENDIAN
 +      select NEED_MULTIPLE_NODES
index 4aa80e0..6b3ebf7 100644 (file)
@@ -1,7 +1,7 @@
 diff -urN linux-2.6.21.1.old/arch/mips/kernel/head.S linux-2.6.21.1.dev/arch/mips/kernel/head.S
 --- linux-2.6.21.1.old/arch/mips/kernel/head.S 2007-04-27 23:49:26.000000000 +0200
 +++ linux-2.6.21.1.dev/arch/mips/kernel/head.S 2007-05-26 19:46:49.061952736 +0200
 diff -urN linux-2.6.21.1.old/arch/mips/kernel/head.S linux-2.6.21.1.dev/arch/mips/kernel/head.S
 --- linux-2.6.21.1.old/arch/mips/kernel/head.S 2007-04-27 23:49:26.000000000 +0200
 +++ linux-2.6.21.1.dev/arch/mips/kernel/head.S 2007-05-26 19:46:49.061952736 +0200
-@@ -129,6 +129,10 @@
+@@ -129,11 +129,15 @@
  #endif
        .endm
  
  #endif
        .endm
  
@@ -12,3 +12,9 @@ diff -urN linux-2.6.21.1.old/arch/mips/kernel/head.S linux-2.6.21.1.dev/arch/mip
        /*
         * Reserved space for exception handlers.
         * Necessary for machines which link their kernels at KSEG0.
        /*
         * Reserved space for exception handlers.
         * Necessary for machines which link their kernels at KSEG0.
+        */
+-      .fill   0x400
++      .align 10
+ EXPORT(stext)                                 # used for profiling
+ EXPORT(_stext)