1 /*        $NetBSD: mv78xx0reg.h,v 1.3 2022/10/31 20:30:22 andvar Exp $          */
2 /*
3  * Copyright (c) 2010 KIYOHARA Takashi
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef _MV78XX0REG_H_
29 #define _MV78XX0REG_H_
30 
31 #include <arm/marvell/mvsocreg.h>
32 
33 /*
34  *              MHz  PCIe  GbE  SATA TDMI  COM
35  * MV76100:    800, 2      x2,   x1,   -,  x3
36  * MV78100:    1.2, 2 x4,  x2,   x2,  x2,  x4
37  * MV78200: 1.0 x2, 2 x4,  x4,   x2,  x2,  x4
38  */
39 
40 #define MV78XX0_UNITID_DDR              MVSOC_UNITID_DDR
41 #define MV78XX0_UNITID_DEVBUS           MVSOC_UNITID_DEVBUS
42 #define MV78XX0_UNITID_LMB              MVSOC_UNITID_MLMB
43 #define MV78XX0_UNITID_GBE23            0x3       /* Gigabit Ethernet registers */
44 #define MV78XX0_UNITID_PEX              MVSOC_UNITID_PEX
45 #define MV78XX0_UNITID_USB              0x5       /* USB registers */
46 #define MV78XX0_UNITID_IDMA             0x6       /* IDMA registers */
47 #define MV78XX0_UNITID_XOR              0x6       /* XOR registers */
48 #define MV78XX0_UNITID_GBE01            0x7       /* Gigabit Ethernet registers */
49 #define MV78XX0_UNITID_PEX1             0x8
50 #define MV78XX0_UNITID_CRYPT            0x9       /* Cryptographic Engine reg */
51 #define MV78XX0_UNITID_SA               0x9       /* Security Accelerator reg */
52 #define MV78XX0_UNITID_SATA             0xa       /* SATA registers */
53 #define MV78XX0_UNITID_TDM              0xb       /* TDM registers */
54 
55 #define MV78XX0_ATTR_DEVICE_CS0                   0x3e
56 #define MV78XX0_ATTR_DEVICE_CS1                   0x3d
57 #define MV78XX0_ATTR_DEVICE_CS2                   0x3b
58 #define MV78XX0_ATTR_DEVICE_CS3                   0x37
59 #define MV78XX0_ATTR_BOOT_CS            0x2f
60 #define MV78XX0_ATTR_SPI                0x1f
61 #define MV78XX0_ATTR_PEX_0_IO           0xe0      /* PCIe x1 Port 0.0 */
62 #define MV78XX0_ATTR_PEX_0_MEM                    0xe8
63 #define MV78XX0_ATTR_PEX_1_IO           0xd0      /* PCIe x1 Port 0.1 */
64 #define MV78XX0_ATTR_PEX_1_MEM                    0xd8
65 #define MV78XX0_ATTR_PEX_2_IO           0xb0      /* PCIe x1 Port 0.2 */
66 #define MV78XX0_ATTR_PEX_2_MEM                    0xb8
67 #define MV78XX0_ATTR_PEX_3_IO           0x70      /* PCIe x1 Port 0.3 */
68 #define MV78XX0_ATTR_PEX_3_MEM                    0x78
69 #define MV78XX0_ATTR_CRYPT              0x00/* 0:Bswap,1:No,2:B&Wswap,3:Wswap */
70 
71 #define MV78XX0_IRQ_ERRSUM              0         /* Sum of Main Intr Err Cause */
72 #define MV78XX0_IRQ_SPI                           1         /* SPI */
73 #define MV78XX0_IRQ_TWSI0               2         /* TWSI0 */
74 #define MV78XX0_IRQ_TWSI1               3         /* TWSI1 */
75 #define MV78XX0_IRQ_IDMA0               4         /* IDMA Channel0 completion */
76 #define MV78XX0_IRQ_IDMA1               5         /* IDMA Channel1 completion */
77 #define MV78XX0_IRQ_IDMA2               6         /* IDMA Channel2 completion */
78 #define MV78XX0_IRQ_IDMA3               7         /* IDMA Channel3 completion */
79 #define MV78XX0_IRQ_TIMER0              8         /* Timer0 */
80 #define MV78XX0_IRQ_TIMER1              9         /* Timer1 */
81 #define MV78XX0_IRQ_TIMER2              10        /* Timer2 */
82 #define MV78XX0_IRQ_TIMER3              11        /* Timer3 */
83 #define MV78XX0_IRQ_UART0               12        /* UART0 */
84 #define MV78XX0_IRQ_UART1               13        /* UART1 */
85 #define MV78XX0_IRQ_UART2               14        /* UART2 */
86 #define MV78XX0_IRQ_UART3               15        /* UART3 */
87 #define MV78XX0_IRQ_USB0                16        /* USB0 */
88 #define MV78XX0_IRQ_USB1                17        /* USB1 */
89 #define MV78XX0_IRQ_USB2                18        /* USB2 */
90 #define MV78XX0_IRQ_CRYPTO              19        /* Crypto engine completion */
91 #define MV78XX0_IRQ_XOR0                22        /* XOR engine 0 completion */
92 #define MV78XX0_IRQ_XOR1                23        /* XOR engine 1 completion */
93 #define MV78XX0_IRQ_SATA                26        /* SATA ports */
94 #define MV78XX0_IRQ_TDMI_INT            27        /* TDM */
95 #define MV78XX0_IRQ_PEX00INTA           32        /* PCIe Port0.0 INTA/B/C/D */
96 #define MV78XX0_IRQ_PEX01INTA           33        /* PCIe Port0.1 INTA/B/C/D */
97 #define MV78XX0_IRQ_PEX02INTA           34        /* PCIe Port0.2 INTA/B/C/D */
98 #define MV78XX0_IRQ_PEX03INTA           35        /* PCIe Port0.3 INTA/B/C/D */
99 #define MV78XX0_IRQ_PEX10INTA           36        /* PCIe Port1.0 INTA/B/C/D */
100 #define MV78XX0_IRQ_PEX11INTA           37        /* PCIe Port1.1 INTA/B/C/D */
101 #define MV78XX0_IRQ_PEX12INTA           38        /* PCIe Port1.2 INTA/B/C/D */
102 #define MV78XX0_IRQ_PEX13INTA           39        /* PCIe Port1.3 INTA/B/C/D */
103 #define MV78XX0_IRQ_GE00SUM             40        /* Gigabit Ethernet Port0 sum */
104 #define MV78XX0_IRQ_GE00RX              41        /* Gigabit Ethernet Port0 Rx */
105 #define MV78XX0_IRQ_GE00TX              42        /* Gigabit Ethernet Port0 Tx */
106 #define MV78XX0_IRQ_GE00MISC            43        /* Gigabit Ethernet Port0 misc*/
107 #define MV78XX0_IRQ_GE01SUM             44        /* Gigabit Ethernet Port1 sum */
108 #define MV78XX0_IRQ_GE01RX              45        /* Gigabit Ethernet Port1 Rx */
109 #define MV78XX0_IRQ_GE01TX              46        /* Gigabit Ethernet Port1 Tx */
110 #define MV78XX0_IRQ_GE01MISC            47        /* Gigabit Ethernet Port1 misc*/
111 #define MV78XX0_IRQ_GE10SUM             48        /* Gigabit Ethernet Port2 sum */
112 #define MV78XX0_IRQ_GE10RX              49        /* Gigabit Ethernet Port2 Rx */
113 #define MV78XX0_IRQ_GE10TX              50        /* Gigabit Ethernet Port2 Tx */
114 #define MV78XX0_IRQ_GE10MISC            51        /* Gigabit Ethernet Port2 misc*/
115 #define MV78XX0_IRQ_GE11SUM             52        /* Gigabit Ethernet Port3 sum */
116 #define MV78XX0_IRQ_GE11RX              53        /* Gigabit Ethernet Port3 Rx */
117 #define MV78XX0_IRQ_GE11TX              54        /* Gigabit Ethernet Port3 Tx */
118 #define MV78XX0_IRQ_GE11MISC            55        /* Gigabit Ethernet Port3 misc*/
119 #define MV78XX0_IRQ_GPIO0_7             56        /* GPIO[7:0] */
120 #define MV78XX0_IRQ_GPIO8_15            57        /* GPIO[15:8] */
121 #define MV78XX0_IRQ_GPIO16_23           58        /* GPIO[23:16] */
122 #define MV78XX0_IRQ_GPIO24_31           59        /* GPIO[31:24] */
123 #define MV78XX0_IRQ_DB_IN               60 /*Summary of Inbound Doorbell Cause*/
124 #define MV78XX0_IRQ_DB_OUT              61/*Summary of Outbound Doorbell Cause*/
125 
126 
127 /*
128  * Physical address of integrated peripherals
129  */
130 
131 #define MV78XX0_UNITID2PHYS(uid)        ((MV78XX0_UNITID_ ## uid) << 16)
132 
133 /*
134  * General Purpose Port Registers
135  */
136 #define MV78XX0_GPP_BASE                (MVSOC_DEVBUS_BASE + 0x0100)
137 #define MV78XX0_GPP_SIZE                  0x100
138 
139 /*
140  * Two-Wire Serial Interface Registers
141  */
142 #define MV78XX0_TWSI1_BASE              (MVSOC_DEVBUS_BASE + 0x1100)
143 
144 /*
145  * UART Interface Registers
146  */
147                                                   /* NS16550 compatible */
148 #define MV78XX0_COM2_BASE               (MVSOC_DEVBUS_BASE + 0x2200)
149 #define MV78XX0_COM3_BASE               (MVSOC_DEVBUS_BASE + 0x2300)
150 
151 /*
152  * Reset Registers
153  */
154 #define MV78XX0_SAMPLE_AT_RESET_LOW     (MVSOC_DEVBUS_BASE + 0x0030)
155 #define MV78XX0_SAMPLE_AT_RESET_HIGH    (MVSOC_DEVBUS_BASE + 0x0034)
156 
157 
158 /*
159  * Mbus-L to Mbus Bridge Registers
160  */
161 /* CPU Address Map Registers */
162 #define MV78XX0_MLMB_NWINDOW            14
163 #define MV78XX0_MLMB_NREMAP             8
164 
165 #define MV78XX0_ICI_BASE(cpu)           ((cpu)->ci_cpuid << 14)
166 
167 /* Interrupt Controller Interface Registers */
168 #define MV78XX0_ICI_MIECR                 0x200   /* Main Interrupt Error Cause */
169 #define MV78XX0_ICI_MICLR                 0x204   /* Main Interrupt Cause Low */
170 #define MV78XX0_ICI_MICHR                 0x208   /* Main Interrupt Cause High */
171 #define MV78XX0_ICI_IRQIMER               0x20c   /* IRQ Interrupt Mask Error */
172 #define MV78XX0_ICI_IRQIMLR               0x210   /* IRQ Interrupt Mask Low */
173 #define MV78XX0_ICI_IRQIMHR               0x214 /* IRQ Interrupt Mask High */
174 #define MV78XX0_ICI_IRQSCR                0x218 /* IRQ Select Cause */
175 #define MV78XX0_ICI_FIQIMER               0x21c   /* FIQ Interrupt Mask Error */
176 #define MV78XX0_ICI_FIQIMLR               0x220   /* FIQ Interrupt Mask Low */
177 #define MV78XX0_ICI_FIQIMHR               0x224   /* FIQ Interrupt Mask High */
178 #define MV78XX0_ICI_FIQSCR                0x228   /* FIQ Select Cause */
179 #define MV78XX0_ICI_EIMER                 0x22c   /* Endpoint Intr Mask Error */
180 #define MV78XX0_ICI_EIMLR                 0x230   /* Endpoint Intr Mask Low */
181 #define MV78XX0_ICI_EIMHR                 0x234   /* Endpoint Intr Mask High */
182 #define MV78XX0_ICI_ESCR                  0x238   /* Endpoint Select Cause */
183 
184 /* CPU Timers Registers */
185 
186 #define IRQ_IS_TIMER(n, irq)            ((irq) == MV78XX0_IRQ_TIMER ## n)
187 #define MLMBI_TIMER(n)                            MVSOC_MLMB_MLMBI_CPUTIMER ## n ## INTREQ
188 #define TIMER_IRQ2MLMBIMR(irq)                                        \
189           IRQ_IS_TIMER(0, irq) ? MLMBI_TIMER(0) :           \
190               (IRQ_IS_TIMER(1, irq) ? MLMBI_TIMER(1) :      \
191               (IRQ_IS_TIMER(2, irq) ? MLMBI_TIMER(2) : MLMBI_TIMER(3)))
192 
193 
194 /*
195  * PCI Express Interface Registers
196  */
197 #define MV78XX0_PEX1_BASE     (MV78XX0_UNITID2PHYS(PEX1))   /* 0x80000 */
198 
199 /*
200  * USB 2.0 Interface Registers
201  */
202 #define MV78XX0_USB_BASE      (MV78XX0_UNITID2PHYS(USB))    /* 0x50000 */
203 
204 /*
205  * IDMA Controller and XOR Engine Registers
206  */
207 #define MV78XX0_IDMAC_BASE    (MV78XX0_UNITID2PHYS(IDMA))   /* 0x60000 */
208 
209 /*
210  * Gigabit Ethernet Registers
211  */
212 #define MV78XX0_GBE0_BASE     (MV78XX0_UNITID2PHYS(GBE01))  /* 0x70000 */
213 #define MV78XX0_GBE1_BASE     (MV78XX0_UNITID2PHYS(GBE01) + MVGBE_SIZE)
214 #define MV78XX0_GBE2_BASE     (MV78XX0_UNITID2PHYS(GBE23))  /* 0x30000 */
215 #define MV78XX0_GBE3_BASE     (MV78XX0_UNITID2PHYS(GBE23) + MVGBE_SIZE)
216 
217 /*
218  * Cryptographic Engine and Security Accelerator Registers
219  */
220 #define MV78XX0_CESA_BASE     (MV78XX0_UNITID2PHYS(CRYPT) + 0xd000)/*0x9d000*/
221 
222 /*
223  * Serial-ATA Host Controller (SATAHC) Registers
224  */
225 #define MV78XX0_SATAHC_BASE   (MV78XX0_UNITID2PHYS(SATA))   /* 0xa0000 */
226 
227 /*
228  * Time Division Multiplexing (TDM) Unit Registers
229  */
230 #define MV78XX0_TDM_BASE      (MV78XX0_UNITID2PHYS(TDM))    /* 0xb0000 */
231 
232 #endif    /* _MV78XX0REG_H_ */
233