108077f58SMarcel Moolenaar /*- 2*71e3c308SPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*71e3c308SPedro F. Giffuni * 408077f58SMarcel Moolenaar * Copyright (c) 2006-2008, Juniper Networks, Inc. 508077f58SMarcel Moolenaar * All rights reserved. 608077f58SMarcel Moolenaar * 708077f58SMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 808077f58SMarcel Moolenaar * modification, are permitted provided that the following conditions 908077f58SMarcel Moolenaar * are met: 1008077f58SMarcel Moolenaar * 1108077f58SMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 1208077f58SMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 1308077f58SMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 1408077f58SMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 1508077f58SMarcel Moolenaar * documentation and/or other materials provided with the distribution. 1608077f58SMarcel Moolenaar * 1708077f58SMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1808077f58SMarcel Moolenaar * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1908077f58SMarcel Moolenaar * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2008077f58SMarcel Moolenaar * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2108077f58SMarcel Moolenaar * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2208077f58SMarcel Moolenaar * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2308077f58SMarcel Moolenaar * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2408077f58SMarcel Moolenaar * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2508077f58SMarcel Moolenaar * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2608077f58SMarcel Moolenaar * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2708077f58SMarcel Moolenaar * 2808077f58SMarcel Moolenaar * $FreeBSD$ 2908077f58SMarcel Moolenaar */ 3008077f58SMarcel Moolenaar 3108077f58SMarcel Moolenaar #ifndef _MACHINE_LBC_H_ 3208077f58SMarcel Moolenaar #define _MACHINE_LBC_H_ 3308077f58SMarcel Moolenaar 3425c22eb4SRafal Jaworowski /* Maximum number of devices on Local Bus */ 3525c22eb4SRafal Jaworowski #define LBC_DEV_MAX 8 3608077f58SMarcel Moolenaar 3725c22eb4SRafal Jaworowski /* Local access registers */ 38f6703dd2SMarcel Moolenaar #define LBC85XX_BR(n) (0x0 + (8 * n)) /* Base register 0-7 */ 39f6703dd2SMarcel Moolenaar #define LBC85XX_OR(n) (0x4 + (8 * n)) /* Options register 0-7 */ 40f6703dd2SMarcel Moolenaar #define LBC85XX_MAR 0x068 /* UPM address register */ 41f6703dd2SMarcel Moolenaar #define LBC85XX_MAMR 0x070 /* UPMA mode register */ 42f6703dd2SMarcel Moolenaar #define LBC85XX_MBMR 0x074 /* UPMB mode register */ 43f6703dd2SMarcel Moolenaar #define LBC85XX_MCMR 0x078 /* UPMC mode register */ 44f6703dd2SMarcel Moolenaar #define LBC85XX_MRTPR 0x084 /* Memory refresh timer prescaler */ 45f6703dd2SMarcel Moolenaar #define LBC85XX_MDR 0x088 /* UPM data register */ 46f6703dd2SMarcel Moolenaar #define LBC85XX_LSOR 0x090 /* Special operation initiation */ 47f6703dd2SMarcel Moolenaar #define LBC85XX_LURT 0x0a0 /* UPM refresh timer */ 48f6703dd2SMarcel Moolenaar #define LBC85XX_LSRT 0x0a4 /* SDRAM refresh timer */ 49f6703dd2SMarcel Moolenaar #define LBC85XX_LTESR 0x0b0 /* Transfer error status register */ 50f6703dd2SMarcel Moolenaar #define LBC85XX_LTEDR 0x0b4 /* Transfer error disable register */ 51f6703dd2SMarcel Moolenaar #define LBC85XX_LTEIR 0x0b8 /* Transfer error interrupt register */ 52f6703dd2SMarcel Moolenaar #define LBC85XX_LTEATR 0x0bc /* Transfer error attributes register */ 53f6703dd2SMarcel Moolenaar #define LBC85XX_LTEAR 0x0c0 /* Transfer error address register */ 54f6703dd2SMarcel Moolenaar #define LBC85XX_LTECCR 0x0c4 /* Transfer error ECC register */ 55f6703dd2SMarcel Moolenaar #define LBC85XX_LBCR 0x0d0 /* Configuration register */ 56f6703dd2SMarcel Moolenaar #define LBC85XX_LCRR 0x0d4 /* Clock ratio register */ 57f6703dd2SMarcel Moolenaar #define LBC85XX_FMR 0x0e0 /* Flash mode register */ 58f6703dd2SMarcel Moolenaar #define LBC85XX_FIR 0x0e4 /* Flash instruction register */ 59f6703dd2SMarcel Moolenaar #define LBC85XX_FCR 0x0e8 /* Flash command register */ 60f6703dd2SMarcel Moolenaar #define LBC85XX_FBAR 0x0ec /* Flash block address register */ 61f6703dd2SMarcel Moolenaar #define LBC85XX_FPAR 0x0f0 /* Flash page address register */ 62f6703dd2SMarcel Moolenaar #define LBC85XX_FBCR 0x0f4 /* Flash byte count register */ 63f6703dd2SMarcel Moolenaar #define LBC85XX_FECC0 0x100 /* Flash ECC block 0 register */ 64f6703dd2SMarcel Moolenaar #define LBC85XX_FECC1 0x104 /* Flash ECC block 0 register */ 65f6703dd2SMarcel Moolenaar #define LBC85XX_FECC2 0x108 /* Flash ECC block 0 register */ 66f6703dd2SMarcel Moolenaar #define LBC85XX_FECC3 0x10c /* Flash ECC block 0 register */ 6725c22eb4SRafal Jaworowski 6825c22eb4SRafal Jaworowski /* LBC machine select */ 6925c22eb4SRafal Jaworowski #define LBCRES_MSEL_GPCM 0 7025c22eb4SRafal Jaworowski #define LBCRES_MSEL_FCM 1 7125c22eb4SRafal Jaworowski #define LBCRES_MSEL_UPMA 8 7225c22eb4SRafal Jaworowski #define LBCRES_MSEL_UPMB 9 7325c22eb4SRafal Jaworowski #define LBCRES_MSEL_UPMC 10 7425c22eb4SRafal Jaworowski 7525c22eb4SRafal Jaworowski /* LBC data error checking modes */ 7625c22eb4SRafal Jaworowski #define LBCRES_DECC_DISABLED 0 7725c22eb4SRafal Jaworowski #define LBCRES_DECC_NORMAL 1 7825c22eb4SRafal Jaworowski #define LBCRES_DECC_RMW 2 7925c22eb4SRafal Jaworowski 8025c22eb4SRafal Jaworowski /* LBC atomic operation modes */ 8125c22eb4SRafal Jaworowski #define LBCRES_ATOM_DISABLED 0 8225c22eb4SRafal Jaworowski #define LBCRES_ATOM_RAWA 1 8325c22eb4SRafal Jaworowski #define LBCRES_ATOM_WARA 2 8425c22eb4SRafal Jaworowski 85f6703dd2SMarcel Moolenaar struct lbc_memrange { 86f6703dd2SMarcel Moolenaar vm_paddr_t addr; 87f6703dd2SMarcel Moolenaar vm_size_t size; 88f6703dd2SMarcel Moolenaar vm_offset_t kva; 89f6703dd2SMarcel Moolenaar }; 90f6703dd2SMarcel Moolenaar 91d1d3233eSRafal Jaworowski struct lbc_bank { 92f6703dd2SMarcel Moolenaar vm_paddr_t addr; /* physical addr of the bank */ 93f6703dd2SMarcel Moolenaar vm_size_t size; /* bank size */ 94f6703dd2SMarcel Moolenaar vm_offset_t kva; /* VA of the bank */ 95d1d3233eSRafal Jaworowski 96d1d3233eSRafal Jaworowski /* 97d1d3233eSRafal Jaworowski * XXX the following bank attributes do not have properties specified 98d1d3233eSRafal Jaworowski * in the LBC DTS bindings yet (11.2009), so they are mainly a 99d1d3233eSRafal Jaworowski * placeholder for future extensions. 100d1d3233eSRafal Jaworowski */ 101d1d3233eSRafal Jaworowski int width; /* data bus width */ 102d1d3233eSRafal Jaworowski uint8_t msel; /* machine select */ 103d1d3233eSRafal Jaworowski uint8_t atom; /* atomic op mode */ 104d1d3233eSRafal Jaworowski uint8_t wp; /* write protect */ 105d1d3233eSRafal Jaworowski uint8_t decc; /* data error checking */ 10625c22eb4SRafal Jaworowski }; 10725c22eb4SRafal Jaworowski 108d1d3233eSRafal Jaworowski struct lbc_softc { 109d1d3233eSRafal Jaworowski device_t sc_dev; 11023fbc06bSMarcel Moolenaar 11123fbc06bSMarcel Moolenaar struct resource *sc_mres; 112d1d3233eSRafal Jaworowski bus_space_handle_t sc_bsh; 113d1d3233eSRafal Jaworowski bus_space_tag_t sc_bst; 11423fbc06bSMarcel Moolenaar int sc_mrid; 11523fbc06bSMarcel Moolenaar 11623fbc06bSMarcel Moolenaar int sc_irid; 11723fbc06bSMarcel Moolenaar struct resource *sc_ires; 11823fbc06bSMarcel Moolenaar void *sc_icookie; 119d1d3233eSRafal Jaworowski 120d1d3233eSRafal Jaworowski struct rman sc_rman; 121d1d3233eSRafal Jaworowski 122d1d3233eSRafal Jaworowski int sc_addr_cells; 123d1d3233eSRafal Jaworowski int sc_size_cells; 124d1d3233eSRafal Jaworowski 125f6703dd2SMarcel Moolenaar struct lbc_memrange sc_range[LBC_DEV_MAX]; 126d1d3233eSRafal Jaworowski struct lbc_bank sc_banks[LBC_DEV_MAX]; 12723fbc06bSMarcel Moolenaar 12823fbc06bSMarcel Moolenaar uint32_t sc_ltesr; 129d1d3233eSRafal Jaworowski }; 130d1d3233eSRafal Jaworowski 131d1d3233eSRafal Jaworowski struct lbc_devinfo { 132d1d3233eSRafal Jaworowski struct ofw_bus_devinfo di_ofw; 133d1d3233eSRafal Jaworowski struct resource_list di_res; 134d1d3233eSRafal Jaworowski int di_bank; 135d1d3233eSRafal Jaworowski }; 13608077f58SMarcel Moolenaar 137f6703dd2SMarcel Moolenaar uint32_t lbc_read_reg(device_t child, u_int off); 138f6703dd2SMarcel Moolenaar void lbc_write_reg(device_t child, u_int off, uint32_t val); 139f6703dd2SMarcel Moolenaar 14008077f58SMarcel Moolenaar #endif /* _MACHINE_LBC_H_ */ 141