/* * Copyright (c) International Business Machines Corp., 2006 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /************************ BOE Engine offsets *********************************/ #define IIC_BOE_FIFO 0x00 #define IIC_BOE_CMD 0x01 #define IIC_BOE_MODE 0x02 #define IIC_BOE_WATER_MARK 0x03 #define IIC_BOE_INT_MASK 0x04 #define IIC_BOE_INT_COND 0x05 #define IIC_BOE_OR_INT_MASK 0x05 #define IIC_BOE_INTS 0x06 #define IIC_BOE_AND_INT_MASK 0x06 #define IIC_BOE_STAT 0x07 #define IIC_BOE_RESET_I2C 0x07 #define IIC_BOE_ESTAT 0x08 #define IIC_BOE_RESET_ERR 0x08 #define IIC_BOE_RESID_LEN 0x09 #define IIC_BOE_SET_SCL 0x09 #define IIC_BOE_RESERVED 0x0a #define IIC_BOE_PORTBUSY 0x0a #define IIC_BOE_RESET_SCL 0x0b #define IIC_BOE_SET_SDA 0x0c #define IIC_BOE_RESET_SDA 0x0d #define IIC_BOE_MAX_OFFSET IIC_BOE_RESET_SDA /************************ BOE Bit Definitions ********************************/ #define IIC_BOE_MAX_BUSES 16 #define IIC_BOE_MAX_FIFO_SIZE 32 #define IIC_BOE_DFLT_FIFO_SIZE 8 /* cmd register bits */ #define IIC_BOE_WITH_START 0x80000000 #define IIC_BOE_WITH_ADDR 0x40000000 #define IIC_BOE_RD_CONT 0x20000000 #define IIC_BOE_WITH_STOP 0x10000000 #define IIC_BOE_FORCE_LAUNCH 0x08000000 #define IIC_BOE_ADDR 0x00fe0000 #define IIC_BOE_ADDR_SHIFT 16 #define IIC_BOE_READ 0x00010000 #define IIC_BOE_XFR_LEN 0x0000ffff #define IIC_BOE_MK_ADDR(addr) ((addr << IIC_BOE_ADDR_SHIFT) & IIC_BOE_ADDR) #define IIC_BOE_GET_ADDR(r) ((r & IIC_BOE_ADDR) >> IIC_BOE_ADDR_SHIFT) /* mode register bits */ #define IIC_BOE_CLKDIV_LO 0xff000000 #define IIC_BOE_CLKDIV_LO_SHIFT 24 #define IIC_BOE_PORT 0x00ff0000 #define IIC_BOE_PORT_SHIFT 16 #define IIC_BOE_MODE_RSVD 0x0000ff00 #define IIC_BOE_CLKDIV_HI 0x000000f0 #define IIC_BOE_CLKDIV_HI_SHIFT 4 #define IIC_BOE_ENHANCED 0x00000008 #define IIC_BOE_DIAG 0x00000004 #define IIC_BOE_PACE_ALLOW 0x00000002 #define IIC_BOE_WRAP 0x00000001 #define IIC_BOE_GET_PORT(r) ((r & IIC_BOE_PORT) >> IIC_BOE_PORT_SHIFT) #define IIC_BOE_MK_PORT(p) ((p << IIC_BOE_PORT_SHIFT) & IIC_BOE_PORT) #define IIC_BOE_MK_CLKDIV(val) \ ((val << IIC_BOE_CLKDIV_LO_SHIFT) | \ ((val >> IIC_BOE_CLKDIV_HI_SHIFT) & IIC_BOE_CLKDIV_HI)) #define IIC_BOE_GET_CLKDIV(r) \ (((r & IIC_BOE_CLKDIV_LO) >> IIC_BOE_CLKDIV_LO_SHIFT) | \ ((r & IIC_BOE_CLKDIV_HI) << IIC_BOE_CLKDIV_HI_SHIFT)) /* Z7 plus mode register */ #define IIC_BOE_Z7_CLKDIV 0xffff0000 #define IIC_BOE_Z7_CLKDIV_SHIFT 16 #define IIC_BOE_Z7_PORT 0x0000fc00 #define IIC_BOE_Z7_PORT_SHIFT 10 #define IIC_BOE_Z7_GET_PORT(r) ((r & IIC_BOE_Z7_PORT) >> IIC_BOE_Z7_PORT_SHIFT) #define IIC_BOE_Z7_MK_PORT(p) ((p << IIC_BOE_Z7_PORT_SHIFT) & IIC_BOE_Z7_PORT) #define IIC_BOE_Z7_MK_CLKDIV(val) ((val << IIC_BOE_Z7_CLKDIV_SHIFT)) #define IIC_BOE_Z7_GET_CLKDIV(r) ((r & IIC_BOE_Z7_CLKDIV) >> IIC_BOE_Z7_CLKDIV_SHIFT) /* water mark register bits */ #define IIC_BOE_HI_MRK 0x0000ff00 #define IIC_BOE_HI_MRK_SHIFT 8 #define IIC_BOE_LO_MRK 0x000000ff #define IIC_BOE_LO_MRK_SHIFT 0 #define IIC_BOE_GET_LO_MRK(e) ((e->regs[IIC_BOE_WATER_MARK] & \ IIC_BOE_LO_MRK) >> \ IIC_BOE_LO_MRK_SHIFT) #define IIC_BOE_MK_WATER_MRK(hi, lo)\ ((((hi) << IIC_BOE_HI_MRK_SHIFT) & IIC_BOE_HI_MRK) |\ (((lo) << IIC_BOE_LO_MRK_SHIFT) & IIC_BOE_LO_MRK)) #define IIC_BOE_GET_HI_MRK(e) ((e->regs[IIC_BOE_WATER_MARK] & \ IIC_BOE_HI_MRK) >> \ IIC_BOE_HI_MRK_SHIFT) /* interrupt, interrupt mask, interrupt condition bits */ #define IIC_BOE_INVALID_CMD 0x00008000 #define IIC_BOE_PARITY 0x00004000 #define IIC_BOE_BE_OVERRUN 0x00002000 #define IIC_BOE_BE_ACCESS 0x00001000 #define IIC_BOE_LOST_ARB 0x00000800 #define IIC_BOE_NACK 0x00000400 #define IIC_BOE_DAT_REQ 0x00000200 #define IIC_BOE_CMD_COMP 0x00000100 #define IIC_BOE_STOP_ERR 0x00000080 #define IIC_BOE_BUSY 0x00000040 #define IIC_BOE_IDLE 0x00000020 #define IIC_BOE_ALL_INTS 0x0000ffff #define IIC_BOE_FE_ERRS (IIC_BOE_LOST_ARB | IIC_BOE_NACK | \ IIC_BOE_STOP_ERR) #define IIC_BOE_BE_ERRS (IIC_BOE_INVALID_CMD | IIC_BOE_PARITY | \ IIC_BOE_BE_OVERRUN | IIC_BOE_BE_ACCESS) #define IIC_BOE_ANY_ERR (IIC_BOE_BE_ERRS | IIC_BOE_FE_ERRS) /* status register bits */ #define IIC_BOE_S_INVALID_CMD 0x80000000 #define IIC_BOE_S_PARITY 0x40000000 #define IIC_BOE_S_BE_OVERRUN 0x20000000 #define IIC_BOE_S_BE_ACCESS 0x10000000 #define IIC_BOE_S_LOST_ARB 0x08000000 #define IIC_BOE_S_NACK 0x04000000 #define IIC_BOE_S_DAT_REQ 0x02000000 #define IIC_BOE_S_CMD_COMP 0x01000000 #define IIC_BOE_S_STOP_ERR 0x00800000 #define IIC_BOE_STAT_SHIFT 16 #define IIC_BOE_MAX_PORT 0x000f0000 #define IIC_BOE_MAX_PORT_SHIFT 16 #define IIC_BOE_ANY_INT 0x00008000 #define IIC_BOE_SCL_IN 0x00000800 #define IIC_BOE_SDA_IN 0x00000400 #define IIC_BOE_PORT_BUSY 0x00000200 #define IIC_BOE_SELF_BUSY 0x00000100 #define IIC_BOE_FIFO_COUNT 0x000000ff #define IIC_BOE_S_BE_ERRS (IIC_BOE_BE_ERRS << IIC_BOE_STAT_SHIFT) #define IIC_BOE_S_FE_ERRS (IIC_BOE_FE_ERRS << IIC_BOE_STAT_SHIFT) #define IIC_BOE_S_ANY_ERR (IIC_BOE_ANY_ERR << IIC_BOE_STAT_SHIFT) /* extended status register bits */ #define IIC_BOE_FIFO_SZ 0xff000000 #define IIC_BOE_FIFO_SZ_SHIFT 24 #define IIC_BOE_SCL_IN_SYN 0x00008000 #define IIC_BOE_SDA_IN_SYN 0x00004000 #define IIC_BOE_S_SCL 0x00002000 #define IIC_BOE_S_SDA 0x00001000 #define IIC_BOE_M_SCL 0x00000800 #define IIC_BOE_M_SDA 0x00000400 #define IIC_BOE_HI_WATER 0x00000200 #define IIC_BOE_LO_WATER 0x00000100 #define IIC_BOE_ES_PORT_BUSY 0x00000080 #define IIC_BOE_ES_SELF_BUSY 0x00000040 #define IIC_BOE_VERSION 0x0000001f /* residual length register bits */ #define IIC_BOE_FE_LEN 0xffff0000 #define IIC_BOE_FE_LEN_SHIFT 16 #define IIC_BOE_BE_LEN 0x0000ffff #define IIC_BOE_GET_BE(r) (r & IIC_BOE_BE_LEN) #define IIC_BOE_GET_FE(r) (r >> IIC_BOE_FE_LEN_SHIFT) /* Murano/Centaur port busy register */ #define IIC_BOE_PORT_BUSY_REST 0x80000000