2 * p5064/sbdreset.S: low level code for Algorithmics P5064 board
3 * Copyright (c) 1997 Algorithmics Ltd.
16 #include "isapnpreg.h"
17 #include "bsp_config.h"
19 #include "mipsmacros.h"
21 #if !defined(__MIPSEB) && !defined(__MIPSEL)
22 #error "must define MIPSEB or MIPSEL"
25 #define CFG_BE 0x00008000 /* Big Endian */
27 #define NTLBENTRIES 64
30 #define V96X_SWAP_MEM V96X_SWAP_NONE
31 #define V96X_SWAP_IO V96X_SWAP_NONE
32 #elif defined(__MIPSEB)
33 #define V96X_SWAP_MEM V96X_SWAP_8BIT
34 #define V96X_SWAP_IO V96X_SWAP_AUTO
37 #if !__mips64 && __mips >= 3 && __mips != 32
38 /* force 64-bit register support */
44 #define DISPLAY(d0,d1,d2,d3) \
45 li t8,PHYS_TO_K1(LED_BASE); \
61 #define R_R5K_INITCACHE _TBLIDX(0)
64 _LONG_ rm5200_l1cache_init # [ 0] R_R5K_INITCACHE
67 * Basic board initialisation, called straight from RESET.
68 * It is only called if this program is built for ROM.
69 * It can use any registers except s8, k0 and k1.
71 * Note that s8 holds a "relocation factor" (see ../share/romlow.sx)
72 * which must be added to any address before it is used. This
73 * is to support relocatable roms.
85 LEAF(mips_kseg0_switch)
91 END(mips_kseg0_switch)
93 LEAF(mips_kseg1_switch)
99 END(mips_kseg1_switch)
103 LEAF(board_earlyinit)
107 * Determine board revision
111 li revision,PHYS_TO_K1(OPTION_BASE)
112 lw revision,0(revision)
113 and revision,OPTION_REV
114 srl revision,OPTION_REV_SHIFT
115 bleu revision,MAXREVISION,1f
116 li revision,MAXREVISION
119 /* Initialise other low-level I/O devices */
120 LOADREL(a0,reginittab)
135 LEAF(board_dram_init)
140 * Now determine DRAM configuration and size by
141 * reading the I2C EEROM on the DIMMS
147 DISPLAY ('D','I','M','0')
149 /* start with DIMM #0 */
151 li crval,DCR_SLOW_CAS|DCR_DIMM0
154 /* read DIMM memory type (must be SDRAM) */
159 /* read DIMM memory size per side */
162 li tmpsize,4*1024*1024 # memory size unit
165 /* read DIMM number of rows */
178 2: /* read DIMM number of cols */
194 2: /* read DIMM number of blocks-per-dram */
198 or crval,DCR_BLOCKS_2
201 or crval,DCR_BLOCKS_4
204 2: /* read DIMM number of sides (banks) */
213 /* msize *= sides (banks) */
218 /* write control register value */
219 /* la ta0,PHYS_TO_K1(DCR_BASE)*/
220 li ta0,PHYS_TO_K1(DCR_BASE)
224 DISPLAY ('D','I','M','1')
225 li crval,DCR_SLOW_CAS|DCR_DIMM1
229 /* Panic if we've not got any memory! */
231 DISPLAY ('!','M','E','M')
234 /* Skip the memory clear if this was a soft reset */
239 /* We have to clear memory to initialise parity */
241 /* Clear bottom 64K running uncached */
242 DISPLAY ('Z','6','4','K')
248 SR zero,(2*REGSIZE)(a0)
254 /* we can now initialise the caches for a fast clear_mem */
255 DISPLAY ('C','A','C','H')
256 CALLINIT_KSEG1(boardinit_table,R_R5K_INITCACHE)
258 /* Finally clear rest of memory running cached */
259 li a0,PHYS_TO_K1(65536)
264 /* clear all of memory (to set correct parity) */
265 DISPLAY ('Z','M','E','M')
267 /* run memory clear loop cached */
268 bal mips_kseg0_switch
271 1: #cache Create_Dirty_Exc_D,0(a0)
274 SR zero,(REGSIZE*2)(a0)
280 /* revert to uncached */
281 bal mips_kseg1_switch
284 /* store memory size */
285 move k0,msize /* K0 returns the memory size */
286 srl t0,msize,22 # in 4MB units
287 sb t0,PHYS_TO_K1(SOFTC_BASE + SOFTC_MEMSZ)
290 sw k0,0(t0) /* store in 1st word of memory */
295 srl v0,20 /* return in megabytes */
302 /* crwrite (base, val)
303 * Write 8-bit <val> to 8 consecutive 1-bit registers,
304 * starting at <base>.
324 * This is the code to read the I2C EEROM on the DIMMS
327 #define EEABITS 8 /* 256x8 = 8 address bits */
329 #define PGMASK (((0x1 << (EEABITS-8)) - 1) << 1)
330 #define PGNUM(o) (((o) >> PGSHIFT) & PGMASK)
332 #define OFFS(o) ((o) & OMASK)
338 bgeu revision,2,97f; \
339 sw pio_val,ZPIO_B_DAT(pio_base); \
341 97: sb pio_val,GPIO2_DATA(pio_base); \
348 and pio_val,~(x); SET
351 * Max chip frequency = 100 kHz, so we require at least 5 usec
352 * delay between signal changes.
363 WAIT; BIS(PIO_I2C_SCL)
367 WAIT; BIC(PIO_I2C_SCL)
371 WAIT; BIS(PIO_I2C_SDA)
375 WAIT; BIC(PIO_I2C_SDA)
377 /* disable SDA output driver (tristate) */
380 and pio_val,~PIO_I2C_DIR; \
381 bgeu revision,2,97f; \
382 li t9,ZPIO_MODE_CTRL; \
383 sw t9,ZPIO_B_CTL(pio_base); \
385 sw t9,ZPIO_B_CTL(pio_base); \
386 sw pio_val,ZPIO_B_DAT(pio_base); \
388 97: li t9,PIO_OMASK; \
389 sb t9,GPIO2_DIR(pio_base); \
390 sb pio_val,GPIO2_DATA(pio_base); \
393 /* enable SDA output driver (tristate) */
396 or pio_val,PIO_I2C_DIR; \
397 bgeu revision,2,97f; \
398 li t9,ZPIO_MODE_CTRL; \
399 sw t9,ZPIO_B_CTL(pio_base); \
400 li t9,~(PIO_I2C_SDA | PIO_OMASK); \
401 sw t9,ZPIO_B_CTL(pio_base); \
402 sw pio_val,ZPIO_B_DAT(pio_base); \
404 97: li t9,PIO_I2C_SDA | PIO_OMASK; \
405 sb t9,GPIO2_DIR(pio_base); \
406 sb pio_val,GPIO2_DATA(pio_base); \
412 bgeu revision,2,97f; \
413 lw v0,ZPIO_B_DAT(pio_base); \
415 97: lb v0,GPIO2_DATA(pio_base); \
419 /* send a START: SDA high->low when SCL high */
427 /* send a STOP: SDA low->high when SCL high */
437 /* receive an ACK: a single 0 bit */
444 /* send an ACK: a single 0 bit */
452 /* send a NACK: a single 1 bit */
461 /* send 8 bit word in ta0 (note: check for ACK externally) */
481 /* receive 8 bit word into v0 (note: send ACK/NACK externally) */
497 /* DADDR(rw, a0=dev, a1=addr)
498 send first command byte: device address & page number */
502 sll t0,a0,1; /* t0 = dev << 1 */ \
503 srl ta0,a1,PGSHIFT; /* ta0 = (addr >> PGSHIFT) */ \
504 and ta0,PGMASK; /* ta0 &= PGMASK */ \
505 or ta0,t0; /* ta0 |= (dev << 1) */ \
506 or ta0,(0xa0 | rw); /* ta0 |= (0xa0 | rw) */ \
510 /* ADDR(rw, a0=dev, a1=addr)
511 send two command bytes */
514 /* timeout for previous write to complete */ \
517 /* send first byte: device address */ \
520 /* no acknowledge - count down */ \
525 2: /* send second byte: word offset */ \
526 and ta0,a1,OMASK; /* offset in page */ \
533 /* initialise global registers */
537 li pio_base,PHYS_TO_K1(ZPIO_BASE)
540 97: li pio_base,PHYS_TO_K1(ISAPORT_BASE(GPIO_PORT))
554 /* i2cread (unsigned dev, unsigned offs) */
558 ADDR(WRITE) # write address
561 DADDR(READ) # start read
564 bal i2cget8 # get data byte
566 SENDNACK # terminate read
590 li t1,CACHEMISS+ROMCYCLE
592 beq t0,V_CFG_K0COH(K_CFG_K0COH_UNCACHED),1f
600 subu a0,48 # approx number of loops so far
624 #define MOD_B 0x00000000 /* byte "modifier" */
625 #define MOD_H 0x00000001 /* halfword "modifier" */
626 #define MOD_W 0x00000002 /* word "modifier" */
627 #define MOD_D 0x00000003 /* doubleword "modifier" */
628 #define MOD_MASK 0x00000003
630 #define OP_MASK 0x000000fc
631 #define OP_EXIT 0x00000000 /* exit(status) */
632 #define OP_DELAY 0x00000008 /* delay(cycles) */
633 #define OP_RD 0x00000010 /* read (addr)) */
634 #define OP_WR 0x00000014 /* write (addr, val) */
635 #define OP_RMW 0x00000018 /* read-modify-write (addr, and, or) */
636 #define OP_WAIT 0x00000020 /* poll (addr, mask, value) */
656 8: bne t4, OP_DELAY, 8f
686 /* write(addr,val) */
709 /* write(addr,val) */
749 #define WR_INIT(mod,addr,val) \
750 .word OP_WR|MOD_##mod,PHYS_TO_K1(addr),(val),0
751 #define DELAY_INIT(cycles) \
752 .word OP_DELAY,(cycles),0,0
753 #define EXIT_INIT(status) \
754 .word OP_EXIT,(status),0,0
756 #define V96XWR_INIT(mod,v96xreg,val) \
757 WR_INIT(mod,V96XPBC_BASE+(v96xreg),val)
759 #define ISABWR_INIT(mod,isabreg,val) \
760 WR_INIT(mod,PCI_CONF_SPACE+(isabreg),val)
762 #define ISAWR_INIT(mod,isareg,val) \
763 WR_INIT(mod,PCI_IO_SPACE+(isareg),val)
765 #define DISPLAY_INIT(a,b,c,d) \
766 WR_INIT(W, LED_BASE+LED(0), 0+a); \
767 WR_INIT(W, LED_BASE+LED(1), 0+b); \
768 WR_INIT(W, LED_BASE+LED(2), 0+c); \
769 WR_INIT(W, LED_BASE+LED(3), 0+d)
771 /* .rdata*/ /* this RO data can go in text section */
781 /* 15us ISA bus refresh clock */
782 #define ISAREFRESH (PT_CRYSTAL/(1000000/15))
786 /* Set i/o system endianness first with a 64-bit write */
789 WR_INIT(D, BCR0_BASE + BCR0_ENDIAN, BCR0_ENDIAN_BE)
791 WR_INIT(D, BCR0_BASE + BCR0_ENDIAN, BCR0_ENDIAN_LE)
795 WR_INIT(W, BCR0_BASE + BCR0_ENDIAN + 4, BCR0_ENDIAN_BE)
797 WR_INIT(W, BCR0_BASE + BCR0_ENDIAN + 0, BCR0_ENDIAN_LE)
800 /* switch on the LED */
801 WR_INIT(W, BCR0_BASE + BCR0_LED, BCR0_LED_ON)
803 /* first ever led message */
804 DISPLAY_INIT('P','5','6','4')
806 /* toggle the V3 reset */
807 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_ENABLE)
808 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_RESET)
809 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_ENABLE)
811 /* initialise the z80pio chip, B channel */
812 WR_INIT(W, ZPIO_BASE + ZPIO_B_CTL, ZPIO_MODE_CTRL) # bidir control mode
813 WR_INIT(W, ZPIO_BASE + ZPIO_B_CTL, ~PIO_OMASK) # ip msk = ~op mask
814 WR_INIT(W, ZPIO_BASE + ZPIO_B_DAT, 0) # initial op value
816 /* enable the ISA bridge */
817 WR_INIT(W, BCR1_BASE + BCR1_ISA, BCR1_ENABLE)
819 /* enable the PCMCIA controller */
820 WR_INIT(W, BCR1_BASE + BCR1_PCMCIA, BCR1_ENABLE)
822 /* > 18.5ms delay while V3 attempts to read EEROM... */
823 DELAY_INIT(ROMMS(20))
826 * Setup a bare minimum to allow us to get at the i/o
827 * registers on the Intel PCI->ISA bridge, ISA bus
830 DISPLAY_INIT('V','9','6','X')
832 /* initial magic cycle for PCI bridge */
833 V96XWR_INIT(W, V96X_LB_IO_BASE, V96XPBC_BASE+V96X_LB_IO_BASE)
835 /* Local bus to PCI aptr 2 - LOCAL:PCI_IO_SPACE -> PCI:00000000 */
836 V96XWR_INIT(H, V96X_LB_BASE2, \
837 (PCI_IO_SPACE >> 16)|(V96X_SWAP_IO >> 2)|V96X_LB_BASEx_ENABLE)
838 V96XWR_INIT(H, V96X_LB_MAP2, 0)
840 /* Local to PCI aptr 0 - LOCAL:PCI_CONF_SPACE -> PCI:config (1MB) */
841 V96XWR_INIT(W, V96X_LB_BASE0, \
842 PCI_CONF_SPACE | V96X_SWAP_IO | V96X_ADR_SIZE_1MB | V96X_LB_BASEx_ENABLE)
844 /* high 12 bits of conf space address go in map reg */
845 V96XWR_INIT(H, V96X_LB_MAP0, \
846 ((1 << (8+PCI_IDSEL_I82371)) & V96X_LB_MAPx_MAP_ADR) | V96X_LB_TYPE_CONF)
848 /* Enable PCI bus master access */
849 V96XWR_INIT(H, V96X_PCI_CMD, V96X_PCI_CMD_MASTER_EN)
851 /* Unreset the PCI bus */
852 V96XWR_INIT(H, V96X_SYSTEM, V96X_SYSTEM_RST_OUT);
854 /* 2ms reset delay */
858 * Initialise the ISA bridge via its CONF space
861 DISPLAY_INIT ('I','S','A','B')
863 /* Enable PCI 2.1 timing support */
864 ISABWR_INIT(B, I82371_DLC, \
865 I82371_DLC_DT | I82371_DLC_PR | I82371_DLC_USBPR | I82371_DLC_DTTE)
867 /* Enable USB function, and force SYSCLK=PCICLK/4 */
868 ISABWR_INIT(H, I82371_MSTAT, I82371_MSTAT_USBE|I82371_MSTAT_ISADIV_4);
870 /* Programmable decode for Centronics input latch */
871 ISABWR_INIT(H, I82371_PCSC, CEN_LATCH_PORT|I82371_PCSC_SIZE_4)
873 /* Set top of memory to 16MB, so all ISA bus master & DMA
874 accesses are forwarded to PCI mem space, except for the
875 hole from 640K (A0000) to 1MB, which is confined to ISA */
876 ISAWR_INIT (B, I82371_TOM, I82371_TOM_TOM(16) | I82371_TOM_FWD_89)
878 /* Initialise ISA bus low-level I/O devices */
879 DISPLAY_INIT('I','S','A','R')
881 /* program i8254 ISA refresh counter */
882 ISAWR_INIT(B,CTC_PORT+PT_CONTROL, \
883 PTCW_SC(PT_REFRESH)|PTCW_16B|PTCW_MODE(MODE_RG))
884 ISAWR_INIT(B,CTC_PORT+PT_REFRESH, ISAREFRESH & 0xff)
885 ISAWR_INIT(B,CTC_PORT+PT_REFRESH, ISAREFRESH >> 8)
887 /* setup 32kHz refresh for our DRAM */
888 ISAWR_INIT(B,RTC_ADDR_PORT, RTC_STATUSA)
889 ISAWR_INIT(B,RTC_DATA_PORT, RTC_OSC_32KHz)
890 ISAWR_INIT(B,RTC_ADDR_PORT, RTC_STATUSB)
891 ISAWR_INIT(B,RTC_DATA_PORT, RTCSB_SQWE)
892 ISAWR_INIT(B,RTC_ADDR_PORT, RTC_INTR)
893 ISAWR_INIT(B,RTC_DATA_PORT, RTCIR_32KE)
896 DISPLAY_INIT('d','o','n','e')
903 /* Set i/o system endianness first with a 64-bit write */
905 WR_INIT(D, BCR0_BASE + BCR0_ENDIAN, BCR0_ENDIAN_BE)
907 WR_INIT(D, BCR0_BASE + BCR0_ENDIAN, BCR0_ENDIAN_LE)
910 /* switch on the LED */
911 WR_INIT(W, BCR0_BASE + BCR0_LED, BCR0_LED_ON)
913 /* first ever led message */
914 DISPLAY_INIT('P','5','6','4')
916 /* toggle the V3 reset */
917 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_ENABLE)
918 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_RESET)
919 WR_INIT(W, BCR1_BASE + BCR1_V96X, BCR1_ENABLE)
921 /* enable the ISA bridge */
922 WR_INIT(W, BCR1_BASE + BCR1_ISA, BCR1_ENABLE)
924 /* enable the PCMCIA controller */
925 WR_INIT(W, BCR1_BASE + BCR1_PCMCIA, BCR1_ENABLE)
927 /* > 18.5ms delay while V3 attempts to read EEROM... */
928 DELAY_INIT(ROMMS(20))
931 * Setup a bare minimum to allow us to get at the i/o
932 * registers on the Intel PCI->ISA bridge, ISA bus
935 DISPLAY_INIT('V','9','6','X')
937 /* initial magic cycle for PCI bridge */
938 V96XWR_INIT(W, V96X_LB_IO_BASE, V96XPBC_BASE+V96X_LB_IO_BASE)
940 /* Local bus to PCI aptr 2 - LOCAL:PCI_IO_SPACE -> PCI:00000000 */
941 V96XWR_INIT(H, V96X_LB_BASE2, \
942 (PCI_IO_SPACE >> 16)|(V96X_SWAP_IO >> 2)|V96X_LB_BASEx_ENABLE)
943 V96XWR_INIT(H, V96X_LB_MAP2, 0)
945 /* Local to PCI aptr 0 - LOCAL:PCI_CONF_SPACE -> PCI:config (1MB) */
946 V96XWR_INIT(W, V96X_LB_BASE0, \
947 PCI_CONF_SPACE | V96X_SWAP_IO | V96X_ADR_SIZE_1MB | V96X_LB_BASEx_ENABLE)
949 /* high 12 bits of conf space address go in map reg */
950 V96XWR_INIT(H, V96X_LB_MAP0, \
951 ((1 << (8+PCI_IDSEL_I82371)) & V96X_LB_MAPx_MAP_ADR) | V96X_LB_TYPE_CONF)
953 /* Enable PCI bus master access */
954 V96XWR_INIT(H, V96X_PCI_CMD, V96X_PCI_CMD_MASTER_EN)
956 /* Unreset the PCI bus */
957 V96XWR_INIT(H, V96X_SYSTEM, V96X_SYSTEM_RST_OUT);
959 /* 2ms reset delay */
963 * Initialise the ISA bridge via its CONF space
966 DISPLAY_INIT ('I','S','A','B')
968 /* Enable PCI 2.1 timing support */
969 ISABWR_INIT(B, I82371_DLC, \
970 I82371_DLC_DT | I82371_DLC_PR | I82371_DLC_USBPR | I82371_DLC_DTTE)
972 /* Enable USB function, and force SYSCLK=PCICLK/4 */
973 ISABWR_INIT(H, I82371_MSTAT, I82371_MSTAT_USBE|I82371_MSTAT_ISADIV_4);
975 /* Programmable decode for Centronics input latch */
976 ISABWR_INIT(H, I82371_PCSC, CEN_LATCH_PORT|I82371_PCSC_SIZE_4)
978 /* Set top of memory to 16MB, so all ISA bus master & DMA
979 accesses are forwarded to PCI mem space, except for the
980 hole from 640K (A0000) to 1MB, which is confined to ISA */
981 ISAWR_INIT (B, I82371_TOM, I82371_TOM_TOM(16) | I82371_TOM_FWD_89 | I82371_TOM_FWD_AB)
983 /* Initialise ISA bus low-level I/O devices */
984 DISPLAY_INIT('I','S','A','R')
986 /* program i8254 ISA refresh counter */
987 ISAWR_INIT(B,CTC_PORT+PT_CONTROL, \
988 PTCW_SC(PT_REFRESH)|PTCW_16B|PTCW_MODE(MODE_RG))
989 ISAWR_INIT(B,CTC_PORT+PT_REFRESH, ISAREFRESH & 0xff)
990 ISAWR_INIT(B,CTC_PORT+PT_REFRESH, ISAREFRESH >> 8)
992 /* set up ISA devices */
994 /* select logical device 0 (keyboard) */
995 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
996 ISAWR_INIT(B,ISAPNP_MBDATA,0)
997 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
998 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1000 /* select logical device 1 (mouse) */
1001 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
1002 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1003 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
1004 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1006 /* select logical device 4 (parallel) */
1007 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
1008 ISAWR_INIT(B,ISAPNP_MBDATA,4)
1009 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_IO_DESC0+ISAPNP_IO_BASE_15_8)
1010 ISAWR_INIT(B,ISAPNP_MBDATA,(ECP_PORT>>8) & 0xff)
1011 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_IO_DESC0+ISAPNP_IO_BASE_7_0)
1012 ISAWR_INIT(B,ISAPNP_MBDATA,ECP_PORT & 0xff)
1013 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_IRQ_DESC0+ISAPNP_IRQ_CONTROL)
1014 ISAWR_INIT(B,ISAPNP_MBDATA,ISAPNP_IRQ_HIGH)
1015 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
1016 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1018 /* select logical device 5 (COM2) */
1019 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
1020 ISAWR_INIT(B,ISAPNP_MBDATA,5)
1021 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
1022 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1024 /* select logical device 6 (COM1) */
1025 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
1026 ISAWR_INIT(B,ISAPNP_MBDATA,6)
1027 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
1028 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1030 /* select logical device 7 (PIO) */
1031 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_LOGICAL_DEV_NUM)
1032 ISAWR_INIT(B,ISAPNP_MBDATA,7)
1033 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_IO_DESC0+ISAPNP_IO_BASE_15_8)
1034 ISAWR_INIT(B,ISAPNP_MBDATA,(GPIO_PORT>>8) & 0xff)
1035 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_IO_DESC0+ISAPNP_IO_BASE_7_0)
1036 ISAWR_INIT(B,ISAPNP_MBDATA,GPIO_PORT & 0xff)
1037 ISAWR_INIT(B,ISAPNP_MBADDR,ISAPNP_ACTIVATE)
1038 ISAWR_INIT(B,ISAPNP_MBDATA,1)
1040 /* set default configuration for GPIO2 */
1041 ISAWR_INIT(B,GPIO_PORT+GPIO2_OTYPE, 0xff)
1042 ISAWR_INIT(B,GPIO_PORT+GPIO2_PULLUP, 0)
1043 ISAWR_INIT(B,GPIO_PORT+GPIO2_DIR, GPIO2_OMASK)
1044 ISAWR_INIT(B,GPIO_PORT+GPIO2_DATA, 0)
1047 DISPLAY_INIT('d','o','n','e')