root/sys/arch/evbmips/malta/maltareg.h
/*      $NetBSD: maltareg.h,v 1.1 2002/03/07 14:44:04 simonb Exp $      */

/*
 * Copyright 2002 Wasabi Systems, Inc.
 * All rights reserved.
 *
 * Written by Simon Burge for Wasabi Systems, Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed for the NetBSD Project by
 *      Wasabi Systems, Inc.
 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
 *    or promote products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*
        Memory Map

        0000.0000 *     128MB   Typically SDRAM (on Core Board)
        0800.0000 *     256MB   Typically PCI
        1800.0000 *      62MB   Typically PCI
        1be0.0000 *       2MB   Typically System controller's internal registers
        1c00.0000 *      32MB   Typically not used
        1e00.0000         4MB   Monitor Flash
        1e40.0000        12MB   reserved
        1f00.0000        12MB   Switches
                                LEDs
                                ASCII display
                                Soft reset
                                FPGA revision number
                                CBUS UART (tty2)
                                General Purpose I/O
                                I2C controller
        1f10.0000 *      11MB   Typically System Controller specific
        1fc0.0000         4MB   Maps to Monitor Flash
        1fd0.0000 *       3MB   Typically System Controller specific

                  * depends on implementation of the Core Board and of software
 */

/*
        CPU interrupts

                NMI     South Bridge or NMI button
                 0      South Bridge INTR
                 1      South Bridge SMI
                 2      CBUS UART (tty2)
                 3      COREHI (Core Card)
                 4      CORELO (Core Card)
                 5      Not used, driven inactive (typically CPU internal timer interrupt

        IRQ mapping (as used by YAMON)

                0       Timer           South Bridge
                1       Keyboard        SuperIO
                2                       Reserved by South Bridge (for cascading)
                3       UART (tty1)     SuperIO
                4       UART (tty0)     SuperIO
                5                       Not used
                6       Floppy Disk     SuperIO
                7       Parallel Port   SuperIO
                8       Real Time Clock South Bridge
                9       I2C bus         South Bridge
                10      PCI A,B,eth     PCI slot 1..4, Ethernet
                11      PCI C,audio     PCI slot 1..4, Audio, USB (South Bridge)
                        PCI D,USB
                12      Mouse           SuperIO
                13                      Reserved by South Bridge
                14      Primary IDE     Primary IDE slot
                15      Secondary IDE   Secondary IDE slot/Compact flash connector
 */

#define MALTA_SYSTEMRAM_BASE    0x00000000  /* System RAM:      */
#define MALTA_SYSTEMRAM_SIZE    0x08000000  /*   128 MByte      */

#define MALTA_PCIMEM1_BASE      0x08000000  /* PCI 1 memory:    */
#define MALTA_PCIMEM1_SIZE      0x08000000  /*   128 MByte      */

#define MALTA_PCIMEM2_BASE      0x10000000  /* PCI 2 memory:    */
#define MALTA_PCIMEM2_SIZE      0x08000000  /*   128 MByte      */

#define MALTA_PCIMEM3_BASE      0x18000000  /* PCI 3 memory     */
#define MALTA_PCIMEM3_SIZE      0x03e00000  /*    62 MByte      */

#define MALTA_CORECTRL_BASE     0x1be00000  /* Core control:    */
#define MALTA_CORECTRL_SIZE     0x00200000  /*     2 MByte      */

#define MALTA_RESERVED_BASE1    0x1c000000  /* Reserved:        */
#define MALTA_RESERVED_SIZE1    0x02000000  /*    32 MByte      */

#define MALTA_MONITORFLASH_BASE 0x1e000000  /* Monitor Flash:   */
#define MALTA_MONITORFLASH_SIZE 0x003e0000  /*     4 MByte      */
#define MALTA_MONITORFLASH_SECTORSIZE 0x00010000 /* Sect. = 64 KB */

#define MALTA_FILEFLASH_BASE    0x1e3e0000 /* File Flash (for monitor): */
#define MALTA_FILEFLASH_SIZE    0x00020000 /*   128 KByte       */

#define MALTA_FILEFLASH_SECTORSIZE 0x00010000 /* Sect. = 64 KB  */

#define MALTA_RESERVED_BASE2    0x1e400000  /* Reserved:        */
#define MALTA_RESERVED_SIZE2    0x00c00000  /*    12 MByte      */

#define MALTA_FPGA_BASE         0x1f000000  /* FPGA:            */
#define MALTA_FPGA_SIZE         0x00c00000  /*    12 MByte      */

#define MALTA_NMISTATUS         (MALTA_FPGA_BASE + 0x24)
#define  MALTA_NMI_SB            0x2    /* Pending NMI from the South Bridge */
#define  MALTA_NMI_ONNMI         0x1    /* Pending NMI from the ON/NMI push button */

#define MALTA_NMIACK            (MALTA_FPGA_BASE + 0x104)
#define  MALTA_NMIACK_ONNMI      0x1    /* Write 1 to acknowledge ON/NMI */

#define MALTA_SWITCH            (MALTA_FPGA_BASE + 0x200)
#define  MALTA_SWITCH_MASK       0xff   /* settings of DIP switch S2 */

#define MALTA_STATUS            (MALTA_FPGA_BASE + 0x208)
#define  MALTA_ST_MFWR           0x10   /* Monitor Flash is write protected (JP1) */
#define  MALTA_S54               0x08   /* switch S5-4 - set YAMON factory default mode */
#define  MALTA_S53               0x04   /* switch S5-3 */
#define  MALTA_BIGEND            0x02   /* switch S5-2 - big endian mode */

#define MALTA_JMPRS             (MALTA_FPGA_BASE + 0x210)
#define  MALTA_JMPRS_PCICLK      0x1c   /* PCI clock frequency */
#define  MALTA_JMPRS_EELOCK      0x02   /* I2C EEPROM is write protected */

#define MALTA_LEDBAR            (MALTA_FPGA_BASE + 0x408)
#define MALTA_ASCIIWORD         (MALTA_FPGA_BASE + 0x410)
#define MALTA_ASCII_BASE        (MALTA_FPGA_BASE + 0x418)
#define MALTA_ASCIIPOS0         0x00
#define MALTA_ASCIIPOS1         0x08
#define MALTA_ASCIIPOS2         0x10
#define MALTA_ASCIIPOS3         0x18
#define MALTA_ASCIIPOS4         0x20
#define MALTA_ASCIIPOS5         0x28
#define MALTA_ASCIIPOS6         0x30
#define MALTA_ASCIIPOS7         0x38

#define MALTA_SOFTRES           (MALTA_FPGA_BASE + 0x500)
#define  MALTA_GORESET           0x42   /* write this to MALTA_SOFTRES for board reset */

/*
 * BRKRES is the number of milliseconds before a "break" on tty will
 * trigger a reset.  A value of 0 will disable the reset.
 */
#define MALTA_BRKRES            (MALTA_FPGA_BASE + 0x508)
#define  MALTA_BRKRES_MASK       0xff

#define MALTA_CBUSUART          (MALTA_FPGA_BASE + 0x900)
/* 16C550C UART, 8 bit registers on 8 byte boundaries */
/* RXTX    0x00 */
/* INTEN   0x08 */
/* IIFIFO  0x10 */
/* LCTRL   0x18 */
/* MCTRL   0x20 */
/* LSTAT   0x28 */
/* MSTAT   0x30 */
/* SCRATCH 0x38 */
#define MALTA_CBUSUART_INTR     2

#define MALTA_GPIO_BASE         (MALTA_FPGA_BASE + 0xa00)
#define MALTA_GPOUT             0x0
#define MALTA_GPINP             0x8

#define MALTA_I2C_BASE          (MALTA_FPGA_BASE + 0xb00)
#define MALTA_I2CINP            0x00
#define MALTA_I2COE             0x08
#define MALTA_I2COUT            0x10
#define MALTA_I2CSEL            0x18

#define MALTA_BOOTROM_BASE      0x1fc00000  /* Boot ROM:        */
#define MALTA_BOOTROM_SIZE      0x00400000  /*     4 MByte      */

#define MALTA_REVISION          0x1fc00010
#define  MALTA_REV_FPGRV         0xff0000       /* CBUS FPGA revision */
#define  MALTA_REV_CORID         0x00fc00       /* Core Board ID */
#define  MALTA_REV_CORRV         0x000300       /* Core Board Revision */
#define  MALTA_REV_PROID         0x0000f0       /* Product ID */
#define  MALTA_REV_PRORV         0x00000f       /* Product Revision */

/* PCI definitions */
#define MALTA_SOUTHBRIDGE_INTR     0

#define MALTA_PCI0_IO_BASE         MALTA_PCIMEM3_BASE
#define MALTA_PCI0_ADDR( addr )    (MALTA_PCI0_IO_BASE + (addr))

#define MALTA_RTCADR               0x70 // MALTA_PCI_IO_ADDR8(0x70)
#define MALTA_RTCDAT               0x71 // MALTA_PCI_IO_ADDR8(0x71)

#define MALTA_SMSC_COM1_ADR        0x3f8
#define MALTA_SMSC_COM2_ADR        0x2f8
#define MALTA_UART0ADR             MALTA_SMSC_COM1_ADR // MALTA_PCI0_ADDR(MALTA_SMSC_COM1_ADR)
#define MALTA_UART1ADR             MALTA_SMSC_COM2_ADR // MALTA_PCI0_ADDR(MALTA_SMSC_COM2_ADR)

#define MALTA_SMSC_1284_ADR        0x378
#define MALTA_1284ADR              MALTA_SMSC_1284_ADR // MALTA_PCI0_ADDR(MALTA_SMSC_1284_ADR)

#define MALTA_SMSC_FDD_ADR         0x3f0
#define MALTA_FDDADR               MALTA_SMSC_FDD_ADR // MALTA_PCI0_ADDR(MALTA_SMSC_FDD_ADR)

#define MALTA_SMSC_KYBD_ADR        0x60  /* Fixed 0x60, 0x64 */
#define MALTA_KYBDADR              MALTA_SMSC_KYBD_ADR // MALTA_PCI0_ADDR(MALTA_SMSC_KYBD_ADR)
#define MALTA_SMSC_MOUSE_ADR       MALTA_SMSC_KYBD_ADR
#define MALTA_MOUSEADR             MALTA_KYBDADR


#define MALTA_DMA_PCI_PCIBASE   0x00000000UL
#define MALTA_DMA_PCI_PHYSBASE  0x00000000UL
#define MALTA_DMA_PCI_SIZE      (256 * 1024 * 1024)

#define MALTA_DMA_ISA_PCIBASE   0x00800000UL
#define MALTA_DMA_ISA_PHYSBASE  0x00000000UL
#define MALTA_DMA_ISA_SIZE      (8 * 1024 * 1024)

#ifndef _LOCORE
void    led_bar(uint8_t);
void    led_display_word(uint32_t);
void    led_display_str(const char *);
void    led_display_char(int, uint8_t);
#endif