linux-mips
[Top] [All Lists]

ddb5477 fixes for 2.6

To: linux-mips@linux-mips.org
Subject: ddb5477 fixes for 2.6
From: Daniel Jacobowitz <dan@debian.org>
Date: Thu, 18 Sep 2003 12:33:44 -0400
Cc: ralf@linux-mips.org
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.5.1i
Here's just enough to make the ddb5477 compile and boot.  The defconfig has
lost the onboard network card, and you also need to turn on CONFIG_EMBEDDED
to turn off CONFIG_VT.  Otherwise, conswitchp is uninitialized, causing a
crash.  If I initialize it to &dummy_con, serial consoles stop working
(???).

Userspace doesn't work - lots of scripts segfault, portmap times out, there
are a number of other glitches.  init=/bin/bash hangs.  But at least it's
progress.

I update CFLAGS for gcc 3.3/binutils 2.14.  I think asking people to use
vaguely modern tools for 2.6 is reasonable.  And the old flags don't work
any more.  This should work with 3.2 too.

The PCI and ac97 changes are pretty mindless merge work.

Ralf, this re-adds CONFIG_PCI_AUTO.  Do you know where it went? :)  Probably
a lot of other boards are sad about its disappearance also.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

Index: arch/mips/Kconfig
===================================================================
RCS file: /home/cvs/linux/arch/mips/Kconfig,v
retrieving revision 1.12
diff -u -p -r1.12 Kconfig
--- arch/mips/Kconfig   10 Sep 2003 16:45:49 -0000      1.12
+++ arch/mips/Kconfig   18 Sep 2003 16:25:07 -0000
@@ -726,6 +726,11 @@ config NEW_PCI
        depends on ZAO_CAPCELLA || VICTOR_MPC30X || TOSHIBA_JMR3927 || 
TOSHIBA_RBTX4927 || NEC_EAGLE || DDB5477 || DDB5476 || DDB5074 || MIPS_ITE8172 
|| HP_LASERJET || MIPS_IVR || MIPS_EV96100 || MIPS_PB1500 || MIPS_PB1100 || 
MIPS_PB1000 || TANBAC_TB0226 || TANBAC_TB0229
        default y
 
+config PCI_AUTO
+       bool
+       depends on DDB5477 || DDB5476
+       default y
+
 config SWAP_IO_SPACE
        bool
        depends on TOSHIBA_JMR3927 || TOSHIBA_RBTX4927 || SIBYTE_SB1xxx_SOC || 
SGI_IP22 || MOMENCO_OCELOT_C || MOMENCO_OCELOT_G || MOMENCO_OCELOT || 
MIPS_MALTA || MIPS_ATLAS || MIPS_EV96100 || MIPS_PB1100 || MIPS_PB1000
Index: arch/mips/Makefile
===================================================================
RCS file: /home/cvs/linux/arch/mips/Makefile,v
retrieving revision 1.138
diff -u -p -r1.138 Makefile
--- arch/mips/Makefile  3 Sep 2003 15:10:33 -0000       1.138
+++ arch/mips/Makefile  18 Sep 2003 16:25:07 -0000
@@ -104,8 +104,8 @@ cflags-$(CONFIG_CPU_MIPS64) += 
 cflags-$(CONFIG_CPU_R5000)     += -mcpu=r8000
 32bit-isa-$(CONFIG_CPU_R5000)  += -mips2 -Wa,--trap
 64bit-isa-$(CONFIG_CPU_R5000)  += -mips4 -Wa,--trap
-cflags-$(CONFIG_CPU_R5432)     += -mcpu=r5000
-32bit-isa-$(CONFIG_CPU_R5432)  += -mips1 -Wa,--trap
+cflags-$(CONFIG_CPU_R5432)     += -mtune=r5000
+32bit-isa-$(CONFIG_CPU_R5432)  += -mips2 -Wa,--trap
 64bit-isa-$(CONFIG_CPU_R5432)  += -mips3 -Wa,--trap
 cflags-$(CONFIG_CPU_NEVADA)    += -mcpu=r8000 -mmad
 32bit-isa-$(CONFIG_CPU_NEVADA) += -mips2 -Wa,--trap
Index: arch/mips/ddb5xxx/ddb5477/setup.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/ddb5xxx/ddb5477/setup.c,v
retrieving revision 1.17
diff -u -p -r1.17 setup.c
--- arch/mips/ddb5xxx/ddb5477/setup.c   25 Aug 2003 16:15:25 -0000      1.17
+++ arch/mips/ddb5xxx/ddb5477/setup.c   18 Sep 2003 16:25:07 -0000
@@ -142,7 +142,7 @@ static void __init ddb_time_init(void)
        }
 
        /* mips_hpt_frequency is 1/2 of the cpu core freq */
-       i =  (read_32bit_cp0_register(CP0_CONFIG) >> 28 ) & 7;
+       i =  (read_c0_config() >> 28 ) & 7;
        if ((current_cpu_data.cputype == CPU_R5432) && (i == 3)) 
                i = 4;
        mips_hpt_frequency = bus_frequency*(i+4)/4;
Index: arch/mips/pci/ops-ddb5477.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/pci/ops-ddb5477.c,v
retrieving revision 1.2
diff -u -p -r1.2 ops-ddb5477.c
--- arch/mips/pci/ops-ddb5477.c 13 Jun 2003 14:19:56 -0000      1.2
+++ arch/mips/pci/ops-ddb5477.c 18 Sep 2003 16:25:08 -0000
@@ -127,39 +127,41 @@ static inline void ddb_close_config_base
 }
 
 static int read_config_dword(struct pci_config_swap *swap,
-                            struct pci_bus *bus, u32 where, u32 * val)
+                            struct pci_bus *bus, unsigned int devfn,
+                            u32 where, u32 * val)
 {
-       u32 bus, slot_num, func_num;
+       u32 busno, slot_num, func_num;
        u32 base;
 
        db_assert((where & 3) == 0);
        db_assert(where < (1 << 8));
 
        /* check if the bus is top-level */
-       if (dev->bus->parent != NULL) {
-               bus = dev->bus->number;
-               db_assert(bus != 0);
+       if (bus->parent != NULL) {
+               busno = bus->number;
+               db_assert(busno != 0);
        } else {
-               bus = 0;
+               busno = 0;
        }
 
-       slot_num = PCI_SLOT(dev->devfn);
-       func_num = PCI_FUNC(dev->devfn);
-       base = ddb_access_config_base(swap, bus, slot_num);
+       slot_num = PCI_SLOT(devfn);
+       func_num = PCI_FUNC(devfn);
+       base = ddb_access_config_base(swap, busno, slot_num);
        *val = *(volatile u32 *) (base + (func_num << 8) + where);
        ddb_close_config_base(swap);
        return PCIBIOS_SUCCESSFUL;
 }
 
 static int read_config_word(struct pci_config_swap *swap,
-                           struct pci_bus *bus, u32 where, u16 * val)
+                           struct pci_bus *bus, unsigned int devfn,
+                           u32 where, u16 * val)
 {
        int status;
        u32 result;
 
        db_assert((where & 1) == 0);
 
-       status = read_config_dword(swap, bus, where & ~3, &result);
+       status = read_config_dword(swap, bus, devfn, where & ~3, &result);
        if (where & 2)
                result >>= 16;
        *val = result & 0xffff;
@@ -168,12 +170,12 @@ static int read_config_word(struct pci_c
 
 static int read_config_byte(struct pci_config_swap *swap,
                            struct pci_bus *bus, unsigned int devfn,
-                           u8 * val)
+                           unsigned int where, u8 * val)
 {
        int status;
        u32 result;
 
-       status = read_config_dword(swap, bus, where & ~3, &result);
+       status = read_config_dword(swap, bus, devfn, where & ~3, &result);
        if (where & 1)
                result >>= 8;
        if (where & 2)
@@ -185,7 +187,7 @@ static int read_config_byte(struct pci_c
 
 static int write_config_dword(struct pci_config_swap *swap,
                              struct pci_bus *bus, unsigned int devfn,
-                             u32 val)
+                             unsigned int where, u32 val)
 {
        u32 busno, slot_num, func_num;
        u32 base;
@@ -218,7 +220,7 @@ static int write_config_word(struct pci_
 
        db_assert((where & 1) == 0);
 
-       status = read_config_dword(swap, dev, where & ~3, &result);
+       status = read_config_dword(swap, bus, devfn, where & ~3, &result);
        if (status != PCIBIOS_SUCCESSFUL)
                return status;
 
@@ -226,7 +228,7 @@ static int write_config_word(struct pci_
                shift += 16;
        result &= ~(0xffff << shift);
        result |= val << shift;
-       return write_config_dword(swap, dev, where & ~3, result);
+       return write_config_dword(swap, bus, devfn, where & ~3, result);
 }
 
 static int write_config_byte(struct pci_config_swap *swap,
@@ -236,7 +238,7 @@ static int write_config_byte(struct pci_
        int status, shift = 0;
        u32 result;
 
-       status = read_config_dword(swap, dev, where & ~3, &result);
+       status = read_config_dword(swap, bus, devfn, where & ~3, &result);
        if (status != PCIBIOS_SUCCESSFUL)
                return status;
 
@@ -246,28 +248,28 @@ static int write_config_byte(struct pci_
                shift += 8;
        result &= ~(0xff << shift);
        result |= val << shift;
-       return write_config_dword(swap, dev, where & ~3, result);
+       return write_config_dword(swap, bus, devfn, where & ~3, result);
 }
 
 /*
  * Dump solution for now so I don't break hw I can't test on ...
  */
-#define        MAKE_PCI_OPS(prefix, rw, unitname, unittype, pciswap) \
-static int prefix##_##rw##_config(struct pci_bus *bus, int where, int size, 
unittype val) \
+#define        MAKE_PCI_OPS(prefix, rw, pciswap, star) \
+static int prefix##_##rw##_config(struct pci_bus *bus, unsigned int devfn, int 
where, int size, u32 star val) \
 { \
        if (size == 1) \
-               return rw##_config_byte(pciswap, bus, where, val); \
+               return rw##_config_byte(pciswap, bus, devfn, where, (u8 
star)val); \
        else if (size == 2) \
-               return rw##_config_word(pciswap, bus, where, val); \
+               return rw##_config_word(pciswap, bus, devfn, where, (u16 
star)val); \
        /* Size must be 4 */ \
-       return rw##_config_dword(pciswap, bus, where, val); \
+       return rw##_config_dword(pciswap, bus, devfn, where, val); \
 }
 
-MAKE_PCI_OPS(extpci, read, &ext_pci_swap)
-    MAKE_PCI_OPS(extpci, write, &ext_pci_swap)
+MAKE_PCI_OPS(extpci, read, &ext_pci_swap, *)
+MAKE_PCI_OPS(extpci, write, &ext_pci_swap,)
 
-    MAKE_PCI_OPS(iopci, read, &io_pci_swap)
-    MAKE_PCI_OPS(iopci, write, &io_pci_swap)
+MAKE_PCI_OPS(iopci, read, &io_pci_swap, *)
+MAKE_PCI_OPS(iopci, write, &io_pci_swap,)
 
 struct pci_ops ddb5477_ext_pci_ops = {
        .read = extpci_read_config,
Index: arch/mips/pci/pci.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/pci/pci.c,v
retrieving revision 1.3
diff -u -p -r1.3 pci.c
--- arch/mips/pci/pci.c 22 Jun 2003 23:09:48 -0000      1.3
+++ arch/mips/pci/pci.c 18 Sep 2003 16:25:08 -0000
@@ -66,6 +66,8 @@
 extern void pcibios_fixup(void);
 extern void pcibios_fixup_irqs(void);
 
+#if 0
+
 void __init pcibios_fixup_irqs(void)
 {
        struct pci_dev *dev = NULL;
@@ -126,6 +128,8 @@ void __init pcibios_fixup_resources(stru
        }
 
 }
+
+#endif
 
 struct pci_fixup pcibios_fixups[] = {
        {PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID,
Index: include/asm-mips/addrspace.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/addrspace.h,v
retrieving revision 1.11
diff -u -p -r1.11 addrspace.h
--- include/asm-mips/addrspace.h        9 Aug 2003 21:16:38 -0000       1.11
+++ include/asm-mips/addrspace.h        18 Sep 2003 16:25:13 -0000
@@ -75,14 +75,14 @@
  * The compatibility segments use the full 64-bit sign extended value.  Note
  * the R8000 doesn't have them so don't reference these in generic MIPS code.
  */
-#define XKUSEG                 0x0000000000000000
-#define XKSSEG                 0x4000000000000000
-#define XKPHYS                 0x8000000000000000
-#define XKSEG                  0xc000000000000000
-#define CKSEG0                 0xffffffff80000000
-#define CKSEG1                 0xffffffffa0000000
-#define CKSSEG                 0xffffffffc0000000
-#define CKSEG3                 0xffffffffe0000000
+#define XKUSEG                 0x0000000000000000ULL
+#define XKSSEG                 0x4000000000000000ULL
+#define XKPHYS                 0x8000000000000000ULL
+#define XKSEG                  0xc000000000000000ULL
+#define CKSEG0                 0xffffffff80000000ULL
+#define CKSEG1                 0xffffffffa0000000ULL
+#define CKSSEG                 0xffffffffc0000000ULL
+#define CKSEG3                 0xffffffffe0000000ULL
 
 /*
  * Cache modes for XKPHYS address conversion macros
Index: include/asm-mips/timex.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/timex.h,v
retrieving revision 1.12
diff -u -p -r1.12 timex.h
--- include/asm-mips/timex.h    20 Aug 2003 16:18:54 -0000      1.12
+++ include/asm-mips/timex.h    18 Sep 2003 16:25:13 -0000
@@ -38,6 +38,8 @@
 #define CLOCK_TICK_RATE                1193182
 #elif defined(CONFIG_SOC_AU1X00)
 #define CLOCK_TICK_RATE         ((HZ * 100000UL) / 2)
+#elif defined(CONFIG_DDB5477)
+#define CLOCK_TICK_RATE                1000000
 #endif
 
 /*
Index: sound/oss/nec_vrc5477.c
===================================================================
RCS file: /home/cvs/linux/sound/oss/nec_vrc5477.c,v
retrieving revision 1.13
diff -u -p -r1.13 nec_vrc5477.c
--- sound/oss/nec_vrc5477.c     9 Sep 2003 16:41:09 -0000       1.13
+++ sound/oss/nec_vrc5477.c     18 Sep 2003 16:25:16 -0000
@@ -8,8 +8,6 @@
  *
  * VRA support Copyright 2001 Bradley D. LaRonde <brad@ltc.com>
  *
- * VRA support Copyright 2001 Bradley D. LaRonde <brad@ltc.com>
- *
  * 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
@@ -80,6 +78,7 @@
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
+#include <linux/interrupt.h>
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <asm/uaccess.h>
@@ -399,44 +398,6 @@ static void set_dac_rate(struct vrc5477_
        }
 }
 
-static int ac97_codec_not_present(struct ac97_codec *codec)
-{
-       struct vrc5477_ac97_state *s = 
-               (struct vrc5477_ac97_state *)codec->private_data;
-       unsigned long flags;
-       unsigned short count  = 0xffff; 
-
-       spin_lock_irqsave(&s->lock, flags);
-
-       /* wait until we can access codec registers */
-       do {
-              if (!(inl(s->io + VRC5477_CODEC_WR) & 0x80000000))
-                      break;
-       } while (--count);
-
-       if (count == 0) {
-               spin_unlock_irqrestore(&s->lock, flags);
-               return -1;
-       }
-
-       /* write 0 to reset */
-       outl((AC97_RESET << 16) | 0, s->io + VRC5477_CODEC_WR);
-
-       /* test whether we get a response from ac97 chip */
-       count  = 0xffff; 
-       do { 
-              if (!(inl(s->io + VRC5477_CODEC_WR) & 0x80000000))
-                      break;
-       } while (--count);
-
-       if (count == 0) {
-               spin_unlock_irqrestore(&s->lock, flags);
-               return -1;
-       }
-       spin_unlock_irqrestore(&s->lock, flags);
-       return 0;
-}
-
 /* --------------------------------------------------------------------- */
 
 extern inline void 
@@ -1901,13 +1862,6 @@ static int __devinit vrc5477_ac97_probe(
 
         }
 
-       /* test if get response from ac97, if not return */
-        if (ac97_codec_not_present(&(s->codec))) {
-               printk(KERN_ERR PFX "no ac97 codec\n");
-               goto err_region;
-
-        }
-
        if (!request_region(s->io, pci_resource_len(pcidev,0),
                            VRC5477_AC97_MODULE_NAME)) {
                printk(KERN_ERR PFX "io ports %#lx->%#lx in use\n",
@@ -2005,7 +1959,7 @@ static int __devinit vrc5477_ac97_probe(
  err_irq:
        release_region(s->io, pci_resource_len(pcidev,0));
  err_region:
-       ac97_release_codec(codec);
+       ac97_release_codec(s->codec);
        kfree(s);
        return -1;
 }

<Prev in Thread] Current Thread [Next in Thread>