1/*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2022 Adrian Chadd <adrian@FreeBSD.org>. 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 AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <dt-bindings/net/qcom-qca807x.h> 29 30/ { 31 soc { 32 mdio: mdio@90000 { 33 #address-cells = <1>; 34 #size-cells = <0>; 35 compatible = "qcom,ipq4019-mdio"; 36 reg = <0x90000 0x64>; 37 status = "disabled"; 38 }; 39 40 ess-switch@c000000 { 41 compatible = "qcom,ess-switch"; 42 reg = <0xc000000 0x80000>; 43 resets = <&gcc ESS_RESET>; 44 reset-names = "ess_rst"; 45 clocks = <&gcc GCC_ESS_CLK>; 46 clock-names = "ess_clk"; 47 48 /* 49 * The port bitmap describing which ports are CPU 50 * facing. It's almost always going to be port 0 51 * (ie bit 0.) 52 */ 53 switch_cpu_bmp = <0x1>; 54 55 /* 56 * The port bitmap describing which ports are in 57 * the LAN group. This defaults to VLAN 1 in the 58 * switch driver. 59 */ 60 switch_lan_bmp = <0x1e>; 61 62 /* 63 * The port bitmap describing which ports are 64 * in the WAN group. This defaults to VLAN 2 65 * in the switch driver. 66 */ 67 switch_wan_bmp = <0x20>; 68 69 /* 70 * Which interface to use to talk to an external 71 * PHY. In this instance we default to 72 * PORT_WRAPPER_PSGMII as we're defaulting to 73 * a PSGMII (well, Qualcomm SGMII) facing a 5 74 * port Malibu PHY. 75 */ 76 switch_mac_mode = <0>; 77 status = "disabled"; 78 }; 79 80 ess-psgmii@98000 { 81 compatible = "qcom,ess-psgmii"; 82 reg = <0x98000 0x800>; 83 status = "disabled"; 84 }; 85 86 edma@c080000 { 87 compatible = "qcom,ess-edma"; 88 reg = <0xc080000 0x8000>; 89 90 /* 91 * This is a hold-over from the Qualcomm Linux driver 92 * and controls whether to allocate a full PAGE_SIZE 93 * page entry per RX buffer or not. 94 * 95 * For now it's parsed but ignored by FreeBSD. 96 */ 97 qcom,page-mode = <0>; 98 99 /* 100 * This sets the size of the RX head buffer. 101 * 102 * If qcom,page_mode is set to 1 then this is ignored. 103 * 104 * Again, this is currently parsed but ignored by 105 * FreeBSD. 106 */ 107 qcom,rx_head_buf_size = <1540>; 108 109 /* 110 * These two fields control whether the GMAC driver 111 * should be polling the MDIO bus to determine if 112 * a gmac interface should be considered link 113 * up or down. 114 * 115 * It currently isn't supported by FreeBSD. 116 */ 117 qcom,mdio_supported; 118 qcom,poll_required = <1>; 119 120 /* 121 * How many virtual ethernet interfaces to create. 122 * The interfaces are created based on a port bitmap 123 * and default VLAN ID. 124 * 125 * These would do well to map to the default lan/wan 126 * bit map fields in the ESS switch configuration 127 * above. 128 */ 129 qcom,num_gmac = <2>; 130 131 /* 132 * Support up to 16 TX and 16 RX interrupts. 133 * For now the hardware only uses 16 TX and 8 134 * RX interrupts/queues, but for some reason 135 * they're all allocated just in case. 136 */ 137 interrupts = <0 65 IRQ_TYPE_EDGE_RISING 138 0 66 IRQ_TYPE_EDGE_RISING 139 0 67 IRQ_TYPE_EDGE_RISING 140 0 68 IRQ_TYPE_EDGE_RISING 141 0 69 IRQ_TYPE_EDGE_RISING 142 0 70 IRQ_TYPE_EDGE_RISING 143 0 71 IRQ_TYPE_EDGE_RISING 144 0 72 IRQ_TYPE_EDGE_RISING 145 0 73 IRQ_TYPE_EDGE_RISING 146 0 74 IRQ_TYPE_EDGE_RISING 147 0 75 IRQ_TYPE_EDGE_RISING 148 0 76 IRQ_TYPE_EDGE_RISING 149 0 77 IRQ_TYPE_EDGE_RISING 150 0 78 IRQ_TYPE_EDGE_RISING 151 0 79 IRQ_TYPE_EDGE_RISING 152 0 80 IRQ_TYPE_EDGE_RISING 153 0 240 IRQ_TYPE_EDGE_RISING 154 0 241 IRQ_TYPE_EDGE_RISING 155 0 242 IRQ_TYPE_EDGE_RISING 156 0 243 IRQ_TYPE_EDGE_RISING 157 0 244 IRQ_TYPE_EDGE_RISING 158 0 245 IRQ_TYPE_EDGE_RISING 159 0 246 IRQ_TYPE_EDGE_RISING 160 0 247 IRQ_TYPE_EDGE_RISING 161 0 248 IRQ_TYPE_EDGE_RISING 162 0 249 IRQ_TYPE_EDGE_RISING 163 0 250 IRQ_TYPE_EDGE_RISING 164 0 251 IRQ_TYPE_EDGE_RISING 165 0 252 IRQ_TYPE_EDGE_RISING 166 0 253 IRQ_TYPE_EDGE_RISING 167 0 254 IRQ_TYPE_EDGE_RISING 168 0 255 IRQ_TYPE_EDGE_RISING>; 169 170 status = "disabled"; 171 172 /* 173 * This is the LAN gmac interface. 174 */ 175 gmac0: gmac0 { 176 /* 177 * Default to an all-zero MAC address for 178 * this interface. Ideally bootloaders will 179 * override this in a DTS overlay but that 180 * doesn't happen all that often. 181 * 182 * If the driver finds an all-zero MAC address 183 * and no platform hint / routine for fetching 184 * it from flash it will simply choose a 185 * random MAC address. 186 * 187 * Note this isn't programmed into the 188 * hardware! The ethernet switch filters what 189 * is visible to the ethernet MAC through 190 * normal ethernet switch MAC address learning 191 * rules. 192 */ 193 local-mac-address = [00 00 00 00 00 00]; 194 195 /* 196 * The VLAN tag and port map. Yes, they used 197 * the same entry for both fields. The first 198 * integer is the default VLAN ID, and second 199 * field is the port map. 200 * 201 * When 802.1q VLANs are not used the switch 202 * will simply use the portmap to limit which 203 * ports can transmit the frames. It's used 204 * for sending broadcast/multicast or flooded 205 * traffic. 206 * 207 * When 802.1q VLANs are used then it's both 208 * the portmap and the 802.1q tag port 209 * membership that define which ports can 210 * be flooded as above. 211 */ 212 vlan_tag = <1 0x1f>; 213 }; 214 215 /* 216 * This is the WAN gmac interface. 217 */ 218 gmac1: gmac1 { 219 local-mac-address = [00 00 00 00 00 00]; 220 221 /* 222 * Whether to poll the MDIO port / PHY for 223 * link status or not. 224 * 225 * This is how the interface would get a 226 * logical link status for WAN events to tie 227 * things like dhclient to. 228 * 229 * For now it's unsupported in FreeBSD. 230 */ 231 qcom,phy_mdio_addr = <4>; 232 qcom,poll_required = <1>; 233 234 vlan_tag = <2 0x20>; 235 }; 236 }; 237 }; 238}; 239