/* 
 | 
 * Copyright (C) 2013 Imagination Technologies 
 | 
 * Author: Paul Burton <paul.burton@imgtec.com> 
 | 
 * 
 | 
 * Setup code for the FDC37M817 super I/O controller 
 | 
 * 
 | 
 * SPDX-License-Identifier:    GPL-2.0+ 
 | 
 */ 
 | 
  
 | 
#include <common.h> 
 | 
#include <asm/io.h> 
 | 
  
 | 
#define SIO_CONF_PORT        0x3f0 
 | 
#define SIO_DATA_PORT        0x3f1 
 | 
  
 | 
enum sio_conf_key { 
 | 
    SIOCONF_DEVNUM        = 0x07, 
 | 
    SIOCONF_ACTIVATE    = 0x30, 
 | 
    SIOCONF_ENTER_SETUP    = 0x55, 
 | 
    SIOCONF_BASE_HIGH    = 0x60, 
 | 
    SIOCONF_BASE_LOW    = 0x61, 
 | 
    SIOCONF_PRIMARY_INT    = 0x70, 
 | 
    SIOCONF_EXIT_SETUP    = 0xaa, 
 | 
    SIOCONF_MODE        = 0xf0, 
 | 
}; 
 | 
  
 | 
static struct { 
 | 
    u8 key; 
 | 
    u8 data; 
 | 
} sio_config[] = { 
 | 
    /* tty0 */ 
 | 
    { SIOCONF_DEVNUM,    0x04 }, 
 | 
    { SIOCONF_BASE_HIGH,    0x03 }, 
 | 
    { SIOCONF_BASE_LOW,    0xf8 }, 
 | 
    { SIOCONF_MODE,        0x02 }, 
 | 
    { SIOCONF_PRIMARY_INT,    0x04 }, 
 | 
    { SIOCONF_ACTIVATE,    0x01 }, 
 | 
  
 | 
    /* tty1 */ 
 | 
    { SIOCONF_DEVNUM,    0x05 }, 
 | 
    { SIOCONF_BASE_HIGH,    0x02 }, 
 | 
    { SIOCONF_BASE_LOW,    0xf8 }, 
 | 
    { SIOCONF_MODE,        0x02 }, 
 | 
    { SIOCONF_PRIMARY_INT,    0x03 }, 
 | 
    { SIOCONF_ACTIVATE,    0x01 }, 
 | 
}; 
 | 
  
 | 
void malta_superio_init(void) 
 | 
{ 
 | 
    unsigned i; 
 | 
  
 | 
    /* enter config state */ 
 | 
    outb(SIOCONF_ENTER_SETUP, SIO_CONF_PORT); 
 | 
  
 | 
    /* configure peripherals */ 
 | 
    for (i = 0; i < ARRAY_SIZE(sio_config); i++) { 
 | 
        outb(sio_config[i].key, SIO_CONF_PORT); 
 | 
        outb(sio_config[i].data, SIO_DATA_PORT); 
 | 
    } 
 | 
  
 | 
    /* exit config state */ 
 | 
    outb(SIOCONF_EXIT_SETUP, SIO_CONF_PORT); 
 | 
} 
 |