Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: dts: aspeed: Add Delta AHE-50DC BMC

This is a 1U Open19 power shelf with six PSUs and 50 12VDC outputs via
LM25066 efuses. It's managed by a pair of AST1250 BMCs in a redundant
active/active configuration using a PCA9541 on each I2C bus to
arbitrate access between the two.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Link: https://lore.kernel.org/r/20221108001551.18175-3-zev@bewilderbeest.net
Signed-off-by: Joel Stanley <joel@jms.id.au>

authored by

Zev Weiss and committed by
Joel Stanley
f7f0518b 8ba848a6

+419
+1
arch/arm/boot/dts/Makefile
··· 1588 1588 aspeed-bmc-asrock-e3c246d4i.dtb \ 1589 1589 aspeed-bmc-asrock-romed8hm3.dtb \ 1590 1590 aspeed-bmc-bytedance-g220a.dtb \ 1591 + aspeed-bmc-delta-ahe50dc.dtb \ 1591 1592 aspeed-bmc-facebook-bletchley.dtb \ 1592 1593 aspeed-bmc-facebook-cloudripper.dtb \ 1593 1594 aspeed-bmc-facebook-cmm.dtb \
+418
arch/arm/boot/dts/aspeed-bmc-delta-ahe50dc.dts
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /dts-v1/; 3 + 4 + #include "aspeed-g4.dtsi" 5 + #include <dt-bindings/gpio/aspeed-gpio.h> 6 + 7 + #define EFUSE_OUTPUT(n) \ 8 + efuse##n { \ 9 + compatible = "regulator-output"; \ 10 + vout-supply = <&efuse##n>; \ 11 + } 12 + 13 + #define __stringify(x) #x 14 + 15 + #define EFUSE(hexaddr, num) \ 16 + efuse@##hexaddr { \ 17 + compatible = "lm25066"; \ 18 + reg = <0x##hexaddr>; \ 19 + shunt-resistor-micro-ohms = <675>; \ 20 + regulators { \ 21 + efuse##num: vout0 { \ 22 + regulator-name = __stringify(efuse##num##-reg); \ 23 + }; \ 24 + }; \ 25 + } 26 + 27 + /{ 28 + model = "Delta Power AHE-50DC"; 29 + compatible = "delta,ahe50dc-bmc", "aspeed,ast2400"; 30 + 31 + aliases { 32 + serial4 = &uart5; 33 + 34 + /* 35 + * pca9541-arbitrated logical i2c buses are numbered as the 36 + * corresponding physical bus plus 20 37 + */ 38 + i2c20 = &i2carb0; 39 + i2c21 = &i2carb1; 40 + i2c22 = &i2carb2; 41 + i2c23 = &i2carb3; 42 + i2c24 = &i2carb4; 43 + i2c26 = &i2carb6; 44 + i2c27 = &i2carb7; 45 + i2c28 = &i2carb8; 46 + i2c32 = &i2carb12; 47 + }; 48 + 49 + chosen { 50 + stdout-path = &uart3; 51 + bootargs = "console=ttyS2,115200n8 earlycon"; 52 + }; 53 + 54 + memory@40000000 { 55 + reg = <0x40000000 0x10000000>; 56 + }; 57 + 58 + leds { 59 + compatible = "gpio-leds"; 60 + 61 + heartbeat { 62 + gpios = <&gpio ASPEED_GPIO(P, 0) GPIO_ACTIVE_HIGH>; 63 + linux,default-trigger = "heartbeat"; 64 + }; 65 + 66 + panic { 67 + gpios = <&gpio ASPEED_GPIO(P, 2) GPIO_ACTIVE_HIGH>; 68 + linux,default-trigger = "panic"; 69 + }; 70 + }; 71 + 72 + iio-hwmon { 73 + compatible = "iio-hwmon"; 74 + io-channels = <&adc 0>, <&adc 1>, <&adc 2>, <&adc 3>, <&adc 4>, 75 + <&adc 5>, <&adc 6>, <&adc 7>, <&adc 8>, <&adc 9>; 76 + }; 77 + 78 + EFUSE_OUTPUT(01); 79 + EFUSE_OUTPUT(02); 80 + EFUSE_OUTPUT(03); 81 + EFUSE_OUTPUT(04); 82 + EFUSE_OUTPUT(05); 83 + EFUSE_OUTPUT(06); 84 + EFUSE_OUTPUT(07); 85 + EFUSE_OUTPUT(08); 86 + EFUSE_OUTPUT(09); 87 + EFUSE_OUTPUT(10); 88 + EFUSE_OUTPUT(11); 89 + EFUSE_OUTPUT(12); 90 + EFUSE_OUTPUT(13); 91 + EFUSE_OUTPUT(14); 92 + EFUSE_OUTPUT(15); 93 + EFUSE_OUTPUT(16); 94 + EFUSE_OUTPUT(17); 95 + EFUSE_OUTPUT(18); 96 + EFUSE_OUTPUT(19); 97 + EFUSE_OUTPUT(20); 98 + EFUSE_OUTPUT(21); 99 + EFUSE_OUTPUT(22); 100 + EFUSE_OUTPUT(23); 101 + EFUSE_OUTPUT(24); 102 + EFUSE_OUTPUT(25); 103 + EFUSE_OUTPUT(26); 104 + EFUSE_OUTPUT(27); 105 + EFUSE_OUTPUT(28); 106 + EFUSE_OUTPUT(29); 107 + EFUSE_OUTPUT(30); 108 + EFUSE_OUTPUT(31); 109 + EFUSE_OUTPUT(32); 110 + EFUSE_OUTPUT(33); 111 + EFUSE_OUTPUT(34); 112 + EFUSE_OUTPUT(35); 113 + EFUSE_OUTPUT(36); 114 + EFUSE_OUTPUT(37); 115 + EFUSE_OUTPUT(38); 116 + EFUSE_OUTPUT(39); 117 + EFUSE_OUTPUT(40); 118 + EFUSE_OUTPUT(41); 119 + EFUSE_OUTPUT(42); 120 + EFUSE_OUTPUT(43); 121 + EFUSE_OUTPUT(44); 122 + EFUSE_OUTPUT(45); 123 + EFUSE_OUTPUT(46); 124 + EFUSE_OUTPUT(47); 125 + EFUSE_OUTPUT(48); 126 + EFUSE_OUTPUT(49); 127 + EFUSE_OUTPUT(50); 128 + 129 + }; 130 + 131 + &fmc { 132 + status = "okay"; 133 + 134 + flash@0 { 135 + status = "okay"; 136 + m25p,fast-read; 137 + label = "flash0"; 138 + spi-max-frequency = <50000000>; // 50 MHz 139 + #include "openbmc-flash-layout.dtsi" 140 + }; 141 + }; 142 + 143 + &uart3 { 144 + status = "okay"; 145 + }; 146 + 147 + &mac1 { 148 + status = "okay"; 149 + pinctrl-names = "default"; 150 + pinctrl-0 = <&pinctrl_rgmii2_default &pinctrl_mdio2_default>; 151 + }; 152 + 153 + &i2c0 { 154 + status = "okay"; 155 + bus-frequency = <200000>; 156 + 157 + pca9541@79 { 158 + compatible = "nxp,pca9541"; 159 + reg = <0x79>; 160 + 161 + i2carb0: i2c-arb { 162 + #address-cells = <1>; 163 + #size-cells = <0>; 164 + 165 + /* lm25066 efuses @ 10-17, 40-47, 50-57 */ 166 + EFUSE(10, 03); 167 + EFUSE(11, 04); 168 + EFUSE(12, 01); 169 + EFUSE(13, 02); 170 + EFUSE(14, 13); 171 + EFUSE(15, 14); 172 + EFUSE(16, 15); 173 + EFUSE(17, 16); 174 + EFUSE(40, 12); 175 + EFUSE(41, 11); 176 + EFUSE(42, 10); 177 + EFUSE(43, 09); 178 + EFUSE(44, 08); 179 + EFUSE(45, 07); 180 + EFUSE(46, 05); 181 + EFUSE(47, 06); 182 + EFUSE(50, 17); 183 + EFUSE(51, 18); 184 + EFUSE(52, 20); 185 + EFUSE(53, 19); 186 + EFUSE(54, 22); 187 + EFUSE(55, 21); 188 + EFUSE(56, 24); 189 + EFUSE(57, 23); 190 + }; 191 + }; 192 + }; 193 + 194 + &i2c1 { 195 + status = "okay"; 196 + bus-frequency = <200000>; 197 + 198 + pca9541@72 { 199 + compatible = "nxp,pca9541"; 200 + reg = <0x72>; 201 + 202 + i2carb1: i2c-arb { 203 + #address-cells = <1>; 204 + #size-cells = <0>; 205 + }; 206 + }; 207 + }; 208 + 209 + &i2c2 { 210 + status = "okay"; 211 + bus-frequency = <200000>; 212 + 213 + pca9541@73 { 214 + compatible = "nxp,pca9541"; 215 + reg = <0x73>; 216 + 217 + i2carb2: i2c-arb { 218 + #address-cells = <1>; 219 + #size-cells = <0>; 220 + }; 221 + }; 222 + }; 223 + 224 + &i2c3 { 225 + status = "okay"; 226 + bus-frequency = <200000>; 227 + 228 + pca9541@74 { 229 + compatible = "nxp,pca9541"; 230 + reg = <0x74>; 231 + 232 + i2carb3: i2c-arb { 233 + #address-cells = <1>; 234 + #size-cells = <0>; 235 + }; 236 + }; 237 + }; 238 + 239 + &i2c4 { 240 + status = "okay"; 241 + bus-frequency = <200000>; 242 + 243 + pca9541@7a { 244 + compatible = "nxp,pca9541"; 245 + reg = <0x7a>; 246 + 247 + i2carb4: i2c-arb { 248 + #address-cells = <1>; 249 + #size-cells = <0>; 250 + 251 + gpio@20 { 252 + compatible = "nxp,pca9534"; 253 + reg = <0x20>; 254 + gpio-controller; 255 + #gpio-cells = <2>; 256 + }; 257 + 258 + /* lm25066 efuses @ 10-17, 40-47, 50-57, 59, 5a */ 259 + EFUSE(10, 27); 260 + EFUSE(11, 28); 261 + EFUSE(12, 25); 262 + EFUSE(13, 26); 263 + EFUSE(14, 37); 264 + EFUSE(15, 38); 265 + EFUSE(16, 39); 266 + EFUSE(17, 40); 267 + EFUSE(40, 36); 268 + EFUSE(41, 35); 269 + EFUSE(42, 34); 270 + EFUSE(43, 33); 271 + EFUSE(44, 32); 272 + EFUSE(45, 31); 273 + EFUSE(46, 29); 274 + EFUSE(47, 30); 275 + EFUSE(50, 41); 276 + EFUSE(51, 42); 277 + EFUSE(52, 44); 278 + EFUSE(53, 43); 279 + EFUSE(54, 46); 280 + EFUSE(55, 45); 281 + EFUSE(56, 48); 282 + EFUSE(57, 47); 283 + EFUSE(59, 49); 284 + EFUSE(5a, 50); 285 + }; 286 + }; 287 + }; 288 + 289 + &i2c6 { 290 + status = "okay"; 291 + bus-frequency = <200000>; 292 + 293 + pca9541@75 { 294 + compatible = "nxp,pca9541"; 295 + reg = <0x75>; 296 + 297 + i2carb6: i2c-arb { 298 + #address-cells = <1>; 299 + #size-cells = <0>; 300 + }; 301 + }; 302 + }; 303 + 304 + &i2c7 { 305 + status = "okay"; 306 + bus-frequency = <200000>; 307 + 308 + pca9541@76 { 309 + compatible = "nxp,pca9541"; 310 + reg = <0x76>; 311 + 312 + i2carb7: i2c-arb { 313 + #address-cells = <1>; 314 + #size-cells = <0>; 315 + }; 316 + }; 317 + }; 318 + 319 + &i2c8 { 320 + status = "okay"; 321 + bus-frequency = <200000>; 322 + 323 + pca9541@7c { 324 + compatible = "nxp,pca9541"; 325 + reg = <0x7c>; 326 + 327 + i2carb8: i2c-arb { 328 + #address-cells = <1>; 329 + #size-cells = <0>; 330 + 331 + fancontrol@30 { 332 + compatible = "delta,ahe50dc-fan"; 333 + reg = <0x30>; 334 + }; 335 + 336 + /* Baseboard FRU eeprom */ 337 + eeprom@50 { 338 + compatible = "atmel,24c02"; 339 + reg = <0x50>; 340 + }; 341 + }; 342 + }; 343 + }; 344 + 345 + &i2c12 { 346 + status = "okay"; 347 + bus-frequency = <200000>; 348 + 349 + pca9541@71 { 350 + compatible = "nxp,pca9541"; 351 + reg = <0x71>; 352 + 353 + i2carb12: i2c-arb { 354 + #address-cells = <1>; 355 + #size-cells = <0>; 356 + }; 357 + }; 358 + }; 359 + 360 + &gpio { 361 + status = "okay"; 362 + gpio-line-names = 363 + /* A */ "", "", "", "", "", "", "", "", 364 + /* B */ "", "", "", "", "", "", "", "", 365 + /* C */ "RESET_PEER_N", "HEARTBEAT_OUT", "", "", "", "", "", "", 366 + /* D */ "", "", "", "", "", "", "", "", 367 + /* E */ "DOOM_N", "", "", "", "", "LED_PWR_BLUE", "", "", 368 + /* F */ "", "", "", "", "", "", "", "", 369 + /* G */ "", "", "", "", "", "", "", "", 370 + /* H */ "", "", "", "", "", "", "", "", 371 + /* I */ "", "", "", "", "", "", "", "", 372 + /* J */ "", "", "BMC_ID", "", "", "", "", "", 373 + /* K */ "", "", "", "", "", "", "", "", 374 + /* L */ "", "", "", "", "", "", "", "", 375 + /* M */ "", "", "", "", "", "", "", "", 376 + /* N */ "", "", "", "", "", "", "", "", 377 + /* O */ "", "", "", "", "", "", "", "", 378 + /* P */ "LED_GREEN", "", "LED_RED", "", "", "", "", "", 379 + /* Q */ "", "", "", "", "", "", "", "", 380 + /* R */ "", "", "", "", "", "", "", "", 381 + /* S */ "", "", "", "", "", "", "", "", 382 + /* T */ "", "", "", "", "", "", "", "", 383 + /* U */ "", "", "", "", "", "", "", "", 384 + /* V */ "", "", "", "", "", "", "", "", 385 + /* W */ "", "", "", "", "", "", "", "", 386 + /* X */ "", "", "", "", "", "", "", "", 387 + /* Y */ "HEARTBEAT_IN", "BOARDREV0", "BOARDREV1", "", 388 + /* Z */ "", "", "", "", "", "", "", "", 389 + /* AA */ "", "", "", "", "", "", "", "", 390 + /* AB */ "", "", "", ""; 391 + 392 + /* 393 + * I don't rightly know what this GPIO really *is*, but setting it to 394 + * zero causes the fans to run at full speed, after which setting it 395 + * back to one causes a power output glitch, so install a hog to keep 396 + * it at one as a failsafe to ensure nothing accidentally touches it. 397 + */ 398 + doom-guardrail { 399 + gpio-hog; 400 + gpios = <ASPEED_GPIO(E, 0) GPIO_ACTIVE_LOW>; 401 + output-low; 402 + }; 403 + }; 404 + 405 + &adc { 406 + status = "okay"; 407 + pinctrl-names = "default"; 408 + pinctrl-0 = <&pinctrl_adc0_default 409 + &pinctrl_adc1_default 410 + &pinctrl_adc2_default 411 + &pinctrl_adc3_default 412 + &pinctrl_adc4_default 413 + &pinctrl_adc5_default 414 + &pinctrl_adc6_default 415 + &pinctrl_adc7_default 416 + &pinctrl_adc8_default 417 + &pinctrl_adc9_default>; 418 + };