11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/arch/arm/mach-footbridge/cats-hw.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * CATS machine fixup 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1998, 1999 Russell King, Phil Blundell 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/ioport.h> 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h> 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h> 11b1c495ffb3ee354a2e91bedc8b9e832cb7777043Russell King#include <linux/screen_info.h> 12fced80c735941fa518ac67c0b61bbe153fb8c050Russell King#include <linux/io.h> 1370d13e083c8589dd3edc2313777655da39cb3568Russell King#include <linux/spinlock.h> 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/hardware/dec21285.h> 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach-types.h> 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h> 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/arch.h> 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "common.h" 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CFG_PORT 0x370 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INDEX_PORT (CFG_PORT) 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DATA_PORT (CFG_PORT + 1) 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int __init cats_hw_init(void) 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (machine_is_cats()) { 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set Aladdin to CONFIGURE mode */ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x51, CFG_PORT); 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x23, CFG_PORT); 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Select logical device 3 */ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x07, INDEX_PORT); 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x03, DATA_PORT); 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set parallel port to DMA channel 3, ECP+EPP1.9, 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enable EPP timeout */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x74, INDEX_PORT); 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x03, DATA_PORT); 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xf0, INDEX_PORT); 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x0f, DATA_PORT); 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xf1, INDEX_PORT); 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x07, DATA_PORT); 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Select logical device 4 */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x07, INDEX_PORT); 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x04, DATA_PORT); 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* UART1 high speed mode */ 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xf0, INDEX_PORT); 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x02, DATA_PORT); 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Select logical device 5 */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x07, INDEX_PORT); 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x05, DATA_PORT); 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* UART2 high speed mode */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xf0, INDEX_PORT); 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x02, DATA_PORT); 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set Aladdin to RUN mode */ 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0xbb, CFG_PORT); 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds__initcall(cats_hw_init); 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * CATS uses soft-reboot by default, since 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * hard reboots fail on early boards. 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void __init 790744a3ee37784dfda0025963716a36c3f1e3adccRussell Kingfixup_cats(struct tag *tags, char **cmdline, struct meminfo *mi) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 813ea335100014785fd2518461705654b200e58d00H. Peter Anvin screen_info.orig_video_lines = 25; 823ea335100014785fd2518461705654b200e58d00H. Peter Anvin screen_info.orig_video_points = 16; 833ea335100014785fd2518461705654b200e58d00H. Peter Anvin screen_info.orig_y = 24; 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_START(CATS, "Chalice-CATS") 87e9dea0c65d2de6981356c055781fb99d7191b14eRussell King /* Maintainer: Philip Blundell */ 8893ef8883696f3d8de786e176e777481ad8d1b720Nicolas Pitre .atag_offset = 0x100, 89b44c350d4104265cf3a6b4355dc1ee05c16aa5deRussell King .restart_mode = 's', 90e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .fixup = fixup_cats, 91e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .map_io = footbridge_map_io, 92e9dea0c65d2de6981356c055781fb99d7191b14eRussell King .init_irq = footbridge_init_irq, 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .timer = &isa_timer, 946fca1e17f64936de2e9c614c0d246e65ae553b68Russell King .restart = footbridge_restart, 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_END 96