1 1.14 andvar /* $NetBSD: mvsocreg.h,v 1.14 2025/01/07 18:27:26 andvar Exp $ */ 2 1.1 kiyohara /* 3 1.1 kiyohara * Copyright (c) 2007, 2008 KIYOHARA Takashi 4 1.1 kiyohara * All rights reserved. 5 1.1 kiyohara * 6 1.1 kiyohara * Redistribution and use in source and binary forms, with or without 7 1.1 kiyohara * modification, are permitted provided that the following conditions 8 1.1 kiyohara * are met: 9 1.1 kiyohara * 1. Redistributions of source code must retain the above copyright 10 1.1 kiyohara * notice, this list of conditions and the following disclaimer. 11 1.1 kiyohara * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 kiyohara * notice, this list of conditions and the following disclaimer in the 13 1.1 kiyohara * documentation and/or other materials provided with the distribution. 14 1.1 kiyohara * 15 1.1 kiyohara * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 1.1 kiyohara * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 1.1 kiyohara * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 1.1 kiyohara * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 19 1.1 kiyohara * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 1.1 kiyohara * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 21 1.1 kiyohara * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 1.1 kiyohara * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 1.1 kiyohara * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 24 1.1 kiyohara * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 kiyohara * POSSIBILITY OF SUCH DAMAGE. 26 1.1 kiyohara */ 27 1.1 kiyohara 28 1.1 kiyohara #ifndef _MVSOCREG_H_ 29 1.1 kiyohara #define _MVSOCREG_H_ 30 1.1 kiyohara 31 1.1 kiyohara #define MVSOC_UNITID_MASK 0xf 32 1.1 kiyohara #define MVSOC_UNITID_DDR 0x0 /* DDR registers */ 33 1.1 kiyohara #define MVSOC_UNITID_DEVBUS 0x1 /* Device Bus registers */ 34 1.1 kiyohara #define MVSOC_UNITID_MLMB 0x2 /* Mbus-L to Mbus Bridge reg */ 35 1.1 kiyohara #define MVSOC_UNITID_PEX 0x4 /* PCI Express Interface reg */ 36 1.1 kiyohara 37 1.1 kiyohara 38 1.13 kiyohara #define MVSOC_INTERREGS_SIZE 0x00100000 /* 1 MB */ 39 1.13 kiyohara 40 1.13 kiyohara 41 1.1 kiyohara /* 42 1.1 kiyohara * Physical address of integrated peripherals 43 1.1 kiyohara */ 44 1.1 kiyohara 45 1.1 kiyohara #define UNITID2PHYS(uid) ((MVSOC_UNITID_ ## uid) << 16) 46 1.1 kiyohara 47 1.1 kiyohara /* 48 1.1 kiyohara * DDR SDRAM Controller Registers 49 1.1 kiyohara */ 50 1.1 kiyohara #define MVSOC_DDR_BASE (UNITID2PHYS(DDR)) /* 0x00000 */ 51 1.1 kiyohara 52 1.14 andvar /* DDR SDRAM Controller Address Decode Registers */ 53 1.1 kiyohara #define MVSOC_DSC_BASE 0x01500 /* DDR SDRAM Ctrl Addr Reg */ 54 1.1 kiyohara #define MVSOC_DSC_NCS 4 55 1.1 kiyohara #define MVSOC_DSC_CSBAR(x) ((x) * 8) 56 1.1 kiyohara #define MVSOC_DSC_CSBAR_BASE_MASK 0xff000000 57 1.1 kiyohara #define MVSOC_DSC_CSSR(x) ((x) * 8 + 4) 58 1.1 kiyohara #define MVSOC_DSC_CSSR_WINEN 0x00000001 59 1.1 kiyohara #define MVSOC_DSC_CSSR_SIZE_MASK 0xff000000 60 1.1 kiyohara 61 1.4 rkujawa /* 62 1.1 kiyohara * Device Bus 63 1.1 kiyohara */ 64 1.1 kiyohara #define MVSOC_DEVBUS_BASE (UNITID2PHYS(DEVBUS)) /* 0x10000 */ 65 1.1 kiyohara 66 1.1 kiyohara /* 67 1.1 kiyohara * General Purpose Port Registers 68 1.1 kiyohara */ 69 1.6 kiyohara #define MVSOC_GPP_BASE (MVSOC_DEVBUS_BASE + 0x0100) 70 1.1 kiyohara 71 1.1 kiyohara /* 72 1.1 kiyohara * Two-Wire Serial Interface Registers 73 1.1 kiyohara */ 74 1.6 kiyohara #define MVSOC_TWSI_BASE (MVSOC_DEVBUS_BASE + 0x1000) 75 1.1 kiyohara 76 1.1 kiyohara /* 77 1.1 kiyohara * UART Interface Registers 78 1.1 kiyohara */ 79 1.6 kiyohara /* NS16550 compatible */ 80 1.6 kiyohara #define MVSOC_COM0_BASE (MVSOC_DEVBUS_BASE + 0x2000) 81 1.6 kiyohara #define MVSOC_COM1_BASE (MVSOC_DEVBUS_BASE + 0x2100) 82 1.6 kiyohara 83 1.6 kiyohara /* 84 1.1 kiyohara * Mbus-L to Mbus Bridge Registers 85 1.1 kiyohara */ 86 1.1 kiyohara #define MVSOC_MLMB_BASE (UNITID2PHYS(MLMB)) /* 0x20000 */ 87 1.1 kiyohara 88 1.1 kiyohara /* CPU Address Map Registers */ 89 1.4 rkujawa #define MVSOC_MLMB_WCR(w) ((w) < 8 ? ((w) << 4) + 0x0 :\ 90 1.4 rkujawa (((w) - 8) << 3) + 0x90) 91 1.1 kiyohara #define MVSOC_MLMB_WCR_WINEN (1 << 0) 92 1.12 hsuenaga #define MVSOC_MLMB_WCR_SYNC (1 << 1) /* sync barrier */ 93 1.1 kiyohara #define MVSOC_MLMB_WCR_TARGET(t) (((t) & 0xf) << 4) 94 1.12 hsuenaga #define MVSOC_MLMB_WCR_GET_TARGET(reg) (((reg) >> 4) & 0xf) 95 1.1 kiyohara #define MVSOC_MLMB_WCR_ATTR(a) (((a) & 0xff) << 8) 96 1.12 hsuenaga #define MVSOC_MLMB_WCR_GET_ATTR(reg) (((reg) >> 8) & 0xff) 97 1.1 kiyohara #define MVSOC_MLMB_WCR_SIZE_MASK 0xffff0000 98 1.1 kiyohara #define MVSOC_MLMB_WCR_SIZE(s) (((s) - 1) & MVSOC_MLMB_WCR_SIZE_MASK) 99 1.12 hsuenaga #define MVSOC_MLMB_WCR_GET_SIZE(reg) \ 100 1.12 hsuenaga (((reg) & MVSOC_MLMB_WCR_SIZE_MASK) + (1 << 16)) 101 1.4 rkujawa #define MVSOC_MLMB_WBR(w) ((w) < 8 ? ((w) << 4) + 0x4 :\ 102 1.4 rkujawa (((w) - 8) << 3) + 0x94) 103 1.1 kiyohara #define MVSOC_MLMB_WBR_BASE_MASK 0xffff0000 104 1.12 hsuenaga #define MVSOC_MLMB_WBR_GET_BASE(reg) (reg & MVSOC_MLMB_WBR_BASE_MASK) 105 1.1 kiyohara #define MVSOC_MLMB_WRLR(w) (((w) << 4) + 0x8) 106 1.1 kiyohara #define MVSOC_MLMB_WRLR_REMAP_MASK 0xffff0000 107 1.12 hsuenaga #define MVSOC_MLMB_WRLR_GET_REMAP(reg) \ 108 1.12 hsuenaga (reg & MVSOC_MLMB_WRLR_REMAP_MASK) 109 1.1 kiyohara #define MVSOC_MLMB_WRHR(w) (((w) << 4) + 0xc) 110 1.1 kiyohara #define MVSOC_MLMB_IRBAR 0x080 /* Internal regs Base Address */ 111 1.9 kiyohara #define MVSOC_MLMB_IRBAR_BASE_MASK 0xfff00000 112 1.1 kiyohara 113 1.1 kiyohara /* CPU Control and Status Registers */ 114 1.1 kiyohara #define MVSOC_MLMB_CPUCR 0x100 /* CPU Configuration Register */ 115 1.1 kiyohara #define MVSOC_MLMB_CPUCSR 0x104 /* CPU Control/Status Register*/ 116 1.1 kiyohara #define MVSOC_MLMB_RSTOUTNMASKR 0x108 /* RSTOUTn Mask Register */ 117 1.4 rkujawa #define MVSOC_MLMB_RSTOUTNMASKR_SOFTRSTOUTEN (1 << 2) 118 1.6 kiyohara #define MVSOC_MLMB_RSTOUTNMASKR_WDRSTOUTEN (1 << 1) 119 1.2 jakllsch #define MVSOC_MLMB_RSTOUTNMASKR_PEXRSTOUTEN (1 << 0) 120 1.6 kiyohara #define MVSOC_MLMB_SSRR 0x10c /* System Soft Reset Register */ 121 1.2 jakllsch #define MVSOC_MLMB_SSRR_SYSTEMSOFTRST (1 << 0) 122 1.1 kiyohara #define MVSOC_MLMB_MLMBICR 0x110 /*Mb-L to Mb Bridge Intr Cause*/ 123 1.1 kiyohara #define MVSOC_MLMB_MLMBIMR 0x114 /*Mb-L to Mb Bridge Intr Mask */ 124 1.1 kiyohara 125 1.3 msaitoh #define MVSOC_MLMB_CLKGATING 0x11c /* Clock Gating Control */ 126 1.8 kiyohara #define MVSOC_MLMB_CLKGATING_LNR (1 << 13) /* Load New Ratio */ 127 1.8 kiyohara #define MVSOC_MLMB_CLKGATING_GPH (1 << 12) /* Go To Power Half */ 128 1.8 kiyohara #define MVSOC_MLMB_CLKGATING_GPS (1 << 11) /* Go To Power Save */ 129 1.8 kiyohara #define MVSOC_MLMB_CLKGATING_CR (1 << 10) /* Production Realignment */ 130 1.3 msaitoh #define MVSOC_MLMB_CLKGATING_BIT(n) (1 << (n)) 131 1.3 msaitoh 132 1.1 kiyohara #define MVSOC_MLMB_L2CFG 0x128 /* L2 Cache Config */ 133 1.1 kiyohara 134 1.9 kiyohara #define MVSOC_MLMB_NWIN 4 135 1.9 kiyohara #define MVSOC_MLMB_WINBAR(w) (((w) << 3) + 0x180) 136 1.9 kiyohara #define MVSOC_MLMB_WINBAR_BASE_MASK 0xff000000 137 1.9 kiyohara #define MVSOC_MLMB_WINCR(w) (((w) << 3) + 0x184) 138 1.9 kiyohara #define MVSOC_MLMB_WINCR_EN (1 << 0) 139 1.9 kiyohara #define MVSOC_MLMB_WINCR_WINCS(x) (((x) & 0x1c) >> 2) 140 1.9 kiyohara #define MVSOC_MLMB_WINCR_SIZE_MASK 0xff000000 141 1.9 kiyohara 142 1.11 hsuenaga /* Coherent Fabric(CFU) Control and Status */ 143 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL 0x200 144 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL_PROP_ERR (0x1 << 8) 145 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL_SNOOP_CPU0 (0x1 << 24) 146 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL_SNOOP_CPU1 (0x1 << 25) 147 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL_SNOOP_CPU2 (0x1 << 26) 148 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CTRL_SNOOP_CPU3 (0x1 << 27) 149 1.11 hsuenaga 150 1.11 hsuenaga /* Coherent Fabiric Configuration */ 151 1.11 hsuenaga #define MVSOC_MLMB_CFU_FAB_CFG 0x204 152 1.11 hsuenaga 153 1.11 hsuenaga /* CFU IO Event Affinity */ 154 1.11 hsuenaga #define MVSOC_MLMB_CFU_EVA 0x208 155 1.11 hsuenaga 156 1.11 hsuenaga /* CFU IO Snoop Affinity */ 157 1.11 hsuenaga #define MVSOC_MLMB_CFU_IOA 0x20c 158 1.11 hsuenaga 159 1.11 hsuenaga /* CFU Configuration XXX: changed in ARMADA 370 */ 160 1.11 hsuenaga #define MVSOC_MLMB_CFU_CFG 0x228 161 1.11 hsuenaga #define MVSOC_MLMB_CFU_CFG_L2_NOTIFY (0x1 << 16) 162 1.4 rkujawa 163 1.4 rkujawa /* CIB registers offsets */ 164 1.10 hsuenaga #define MVSOC_MLMB_CIB_CTRL_CFG 0x280 165 1.10 hsuenaga #define MVSOC_MLMB_CIB_CTRL_CFG_WB_EN (0x1 << 0) 166 1.10 hsuenaga #define MVSOC_MLMB_CIB_CTRL_CFG_STOP (0x1 << 9) 167 1.10 hsuenaga #define MVSOC_MLMB_CIB_CTRL_CFG_IGN_SHARE (0x2 << 10) 168 1.10 hsuenaga #define MVSOC_MLMB_CIB_CTRL_CFG_EMPTY (0x1 << 13) 169 1.10 hsuenaga 170 1.10 hsuenaga /* CIB barrier register */ 171 1.11 hsuenaga #define MVSOC_MLMB_CIB_BARRIER(cpu) (0x1810 + 0x100 * (cpu)) 172 1.10 hsuenaga #define MVSOC_MLMB_CIB_BARRIER_TRIGGER (0x1 << 0) 173 1.4 rkujawa 174 1.6 kiyohara #define MVSOC_TMR_BASE (MVSOC_MLMB_BASE + 0x0300) 175 1.1 kiyohara 176 1.1 kiyohara /* CPU Doorbell Registers */ 177 1.1 kiyohara #define MVSOC_MLMB_H2CDR 0x400 /* Host-to-CPU Doorbell */ 178 1.1 kiyohara #define MVSOC_MLMB_H2CDMR 0x404 /* Host-to-CPU Doorbell Mask */ 179 1.1 kiyohara #define MVSOC_MLMB_C2HDR 0x408 /* CPU-to-Host Doorbell */ 180 1.1 kiyohara #define MVSOC_MLMB_C2HDMR 0x40c /* CPU-to-Host Doorbell Mask */ 181 1.1 kiyohara 182 1.1 kiyohara /* Local to System Bridge Interrupt {Cause,Mask} Register bits */ 183 1.1 kiyohara #define MVSOC_MLMB_MLMBI_CPUSELFINT 0 184 1.1 kiyohara #define MVSOC_MLMB_MLMBI_CPUTIMER0INTREQ 1 185 1.1 kiyohara #define MVSOC_MLMB_MLMBI_CPUTIMER1INTREQ 2 186 1.1 kiyohara #define MVSOC_MLMB_MLMBI_CPUWDTIMERINTREQ 3 187 1.1 kiyohara #define MVSOC_MLMB_MLMBI_ACCESSERR 4 188 1.1 kiyohara #define MVSOC_MLMB_MLMBI_BIT64ERR 5 189 1.5 kiyohara #define MVSOC_MLMB_MLMBI_CPUTIMER2INTREQ 6 190 1.5 kiyohara #define MVSOC_MLMB_MLMBI_CPUTIMER3INTREQ 7 191 1.1 kiyohara 192 1.5 kiyohara #define MVSOC_MLMB_MLMBI_NIRQ 8 193 1.1 kiyohara 194 1.1 kiyohara /* 195 1.1 kiyohara * PCI-Express Interface Registers 196 1.1 kiyohara */ 197 1.1 kiyohara #define MVSOC_PEX_BASE (UNITID2PHYS(PEX)) /* 0x40000 */ 198 1.1 kiyohara 199 1.13 kiyohara 200 1.13 kiyohara /* 201 1.13 kiyohara * AXI's DDR Controller Registers 202 1.13 kiyohara * used by Dove only ??? 203 1.13 kiyohara */ 204 1.13 kiyohara 205 1.14 andvar /* DDR SDRAM Controller Address Decode Registers */ 206 1.13 kiyohara #define MVSOC_AXI_NCS 2 207 1.13 kiyohara #define MVSOC_AXI_MMAP1(cs) (((cs) << 4) + 0x100) 208 1.13 kiyohara #define MVSOC_AXI_MMAP1_STARTADDRESS(v) ((v) & 0xff800000) 209 1.13 kiyohara #define MVSOC_AXI_MMAP1_AREALENGTH(v) (0x10000 << (((v) & 0xf0000) >> 16)) 210 1.13 kiyohara #define MVSOC_AXI_MMAP1_ADDRESSMASK (0x1ff << 7) 211 1.13 kiyohara #define MVSOC_AXI_MMAP1_VALID (1 << 0) 212 1.13 kiyohara 213 1.1 kiyohara #endif /* _MVSOCREG_H_ */ 214