linux/arch/mips/vr41xx/nec-cmbvr4133/init.c
<<
>>
Prefs
   1/*
   2 * arch/mips/vr41xx/nec-cmbvr4133/init.c
   3 *
   4 * PROM library initialisation code for NEC CMB-VR4133 board.
   5 *
   6 * Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com> and
   7 *         Jun Sun <jsun@mvista.com, or source@mvista.com> and
   8 *         Alex Sapkov <asapkov@ru.mvista.com>
   9 *
  10 * 2001-2004 (c) MontaVista, Software, Inc. This file is licensed under
  11 * the terms of the GNU General Public License version 2. This program
  12 * is licensed "as is" without any warranty of any kind, whether express
  13 * or implied.
  14 *
  15 * Support for NEC-CMBVR4133 in 2.6
  16 * Manish Lachwani (mlachwani@mvista.com)
  17 */
  18
  19#ifdef CONFIG_ROCKHOPPER
  20#include <asm/io.h>
  21#include <linux/pci.h>
  22
  23#define PCICONFDREG     0xaf000c14
  24#define PCICONFAREG     0xaf000c18
  25
  26void disable_pcnet(void)
  27{
  28        u32 data;
  29
  30        /*
  31         * Workaround for the bug in PMON on VR4133. PMON leaves
  32         * AMD PCNet controller (on Rockhopper) initialized and running in
  33         * bus master mode. We have do disable it before doing any
  34         * further initialization. Or we get problems with PCI bus 2
  35         * and random lockups and crashes.
  36         */
  37
  38        writel((2 << 16)                |
  39               (PCI_DEVFN(1, 0) << 8)   |
  40               (0 & 0xfc)               |
  41               1UL,
  42               PCICONFAREG);
  43
  44        data = readl(PCICONFDREG);
  45
  46        writel((2 << 16)                |
  47               (PCI_DEVFN(1, 0) << 8)   |
  48               (4 & 0xfc)               |
  49               1UL,
  50               PCICONFAREG);
  51
  52        data = readl(PCICONFDREG);
  53
  54        writel((2 << 16)                |
  55               (PCI_DEVFN(1, 0) << 8)   |
  56               (4 & 0xfc)               |
  57               1UL,
  58               PCICONFAREG);
  59
  60        data &= ~4;
  61
  62        writel(data, PCICONFDREG);
  63}
  64#endif
  65
  66