/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2006-2008, Juniper Networks, Inc.4* All rights reserved.5*6* Redistribution and use in source and binary forms, with or without7* modification, are permitted provided that the following conditions8* are met:9*10* 1. Redistributions of source code must retain the above copyright11* notice, this list of conditions and the following disclaimer.12* 2. Redistributions in binary form must reproduce the above copyright13* notice, this list of conditions and the following disclaimer in the14* documentation and/or other materials provided with the distribution.15*16* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR17* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES18* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.19* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,20* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT21* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,22* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY23* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF25* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.26*/2728#ifndef _MACHINE_LBC_H_29#define _MACHINE_LBC_H_3031/* Maximum number of devices on Local Bus */32#define LBC_DEV_MAX 83334/* Local access registers */35#define LBC85XX_BR(n) (0x0 + (8 * n)) /* Base register 0-7 */36#define LBC85XX_OR(n) (0x4 + (8 * n)) /* Options register 0-7 */37#define LBC85XX_MAR 0x068 /* UPM address register */38#define LBC85XX_MAMR 0x070 /* UPMA mode register */39#define LBC85XX_MBMR 0x074 /* UPMB mode register */40#define LBC85XX_MCMR 0x078 /* UPMC mode register */41#define LBC85XX_MRTPR 0x084 /* Memory refresh timer prescaler */42#define LBC85XX_MDR 0x088 /* UPM data register */43#define LBC85XX_LSOR 0x090 /* Special operation initiation */44#define LBC85XX_LURT 0x0a0 /* UPM refresh timer */45#define LBC85XX_LSRT 0x0a4 /* SDRAM refresh timer */46#define LBC85XX_LTESR 0x0b0 /* Transfer error status register */47#define LBC85XX_LTEDR 0x0b4 /* Transfer error disable register */48#define LBC85XX_LTEIR 0x0b8 /* Transfer error interrupt register */49#define LBC85XX_LTEATR 0x0bc /* Transfer error attributes register */50#define LBC85XX_LTEAR 0x0c0 /* Transfer error address register */51#define LBC85XX_LTECCR 0x0c4 /* Transfer error ECC register */52#define LBC85XX_LBCR 0x0d0 /* Configuration register */53#define LBC85XX_LCRR 0x0d4 /* Clock ratio register */54#define LBC85XX_FMR 0x0e0 /* Flash mode register */55#define LBC85XX_FIR 0x0e4 /* Flash instruction register */56#define LBC85XX_FCR 0x0e8 /* Flash command register */57#define LBC85XX_FBAR 0x0ec /* Flash block address register */58#define LBC85XX_FPAR 0x0f0 /* Flash page address register */59#define LBC85XX_FBCR 0x0f4 /* Flash byte count register */60#define LBC85XX_FECC0 0x100 /* Flash ECC block 0 register */61#define LBC85XX_FECC1 0x104 /* Flash ECC block 0 register */62#define LBC85XX_FECC2 0x108 /* Flash ECC block 0 register */63#define LBC85XX_FECC3 0x10c /* Flash ECC block 0 register */6465/* LBC machine select */66#define LBCRES_MSEL_GPCM 067#define LBCRES_MSEL_FCM 168#define LBCRES_MSEL_UPMA 869#define LBCRES_MSEL_UPMB 970#define LBCRES_MSEL_UPMC 107172/* LBC data error checking modes */73#define LBCRES_DECC_DISABLED 074#define LBCRES_DECC_NORMAL 175#define LBCRES_DECC_RMW 27677/* LBC atomic operation modes */78#define LBCRES_ATOM_DISABLED 079#define LBCRES_ATOM_RAWA 180#define LBCRES_ATOM_WARA 28182struct lbc_memrange {83vm_paddr_t addr;84vm_size_t size;85vm_offset_t kva;86};8788struct lbc_bank {89vm_paddr_t addr; /* physical addr of the bank */90vm_size_t size; /* bank size */91vm_offset_t kva; /* VA of the bank */9293/*94* XXX the following bank attributes do not have properties specified95* in the LBC DTS bindings yet (11.2009), so they are mainly a96* placeholder for future extensions.97*/98int width; /* data bus width */99uint8_t msel; /* machine select */100uint8_t atom; /* atomic op mode */101uint8_t wp; /* write protect */102uint8_t decc; /* data error checking */103};104105struct lbc_softc {106device_t sc_dev;107108struct resource *sc_mres;109bus_space_handle_t sc_bsh;110bus_space_tag_t sc_bst;111int sc_mrid;112113int sc_irid;114struct resource *sc_ires;115void *sc_icookie;116117struct rman sc_rman;118119int sc_addr_cells;120int sc_size_cells;121122struct lbc_memrange sc_range[LBC_DEV_MAX];123struct lbc_bank sc_banks[LBC_DEV_MAX];124125uint32_t sc_ltesr;126};127128struct lbc_devinfo {129struct ofw_bus_devinfo di_ofw;130struct resource_list di_res;131int di_bank;132};133134uint32_t lbc_read_reg(device_t child, u_int off);135void lbc_write_reg(device_t child, u_int off, uint32_t val);136137#endif /* _MACHINE_LBC_H_ */138139140