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

Merge branch 'aspeed/dt-3' into arm/late

* aspeed/dt-3:
ARM: dts: aspeed: Add AST2600 pinmux nodes
ARM: dts: aspeed: Add AST2600 and EVB
clk: Add support for AST2600 SoC
clk: aspeed: Move structures to header
clk: aspeed: Add SDIO gate

+2407 -67
+1
arch/arm/boot/dts/Makefile
··· 1269 1269 dtb-$(CONFIG_ARCH_ZX) += zx296702-ad1.dtb 1270 1270 dtb-$(CONFIG_ARCH_ASPEED) += \ 1271 1271 aspeed-ast2500-evb.dtb \ 1272 + aspeed-ast2600-evb.dtb \ 1272 1273 aspeed-bmc-arm-centriq2400-rep.dtb \ 1273 1274 aspeed-bmc-arm-stardragon4800-rep2.dtb \ 1274 1275 aspeed-bmc-facebook-cmm.dtb \
+80
arch/arm/boot/dts/aspeed-ast2600-evb.dts
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + // Copyright 2019 IBM Corp. 3 + 4 + /dts-v1/; 5 + 6 + #include "aspeed-g6.dtsi" 7 + 8 + / { 9 + model = "AST2600 EVB"; 10 + compatible = "aspeed,ast2600"; 11 + 12 + aliases { 13 + serial4 = &uart5; 14 + }; 15 + 16 + chosen { 17 + bootargs = "console=ttyS4,115200n8"; 18 + }; 19 + 20 + memory@80000000 { 21 + device_type = "memory"; 22 + reg = <0x80000000 0x80000000>; 23 + }; 24 + }; 25 + 26 + &mdio1 { 27 + status = "okay"; 28 + 29 + ethphy1: ethernet-phy@0 { 30 + compatible = "ethernet-phy-ieee802.3-c22"; 31 + reg = <0>; 32 + }; 33 + }; 34 + 35 + &mdio2 { 36 + status = "okay"; 37 + 38 + ethphy2: ethernet-phy@0 { 39 + compatible = "ethernet-phy-ieee802.3-c22"; 40 + reg = <0>; 41 + }; 42 + }; 43 + 44 + &mdio3 { 45 + status = "okay"; 46 + 47 + ethphy3: ethernet-phy@0 { 48 + compatible = "ethernet-phy-ieee802.3-c22"; 49 + reg = <0>; 50 + }; 51 + }; 52 + 53 + &mac1 { 54 + status = "okay"; 55 + 56 + phy-mode = "rgmii"; 57 + phy-handle = <&ethphy1>; 58 + }; 59 + 60 + &mac2 { 61 + status = "okay"; 62 + 63 + phy-mode = "rgmii"; 64 + phy-handle = <&ethphy2>; 65 + }; 66 + 67 + &mac3 { 68 + status = "okay"; 69 + 70 + phy-mode = "rgmii"; 71 + phy-handle = <&ethphy3>; 72 + }; 73 + 74 + &emmc { 75 + status = "okay"; 76 + }; 77 + 78 + &rtc { 79 + status = "okay"; 80 + };
+1154
arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + // Copyright 2019 IBM Corp. 3 + 4 + &pinctrl { 5 + pinctrl_adc0_default: adc0_default { 6 + function = "ADC0"; 7 + groups = "ADC0"; 8 + }; 9 + 10 + pinctrl_adc1_default: adc1_default { 11 + function = "ADC1"; 12 + groups = "ADC1"; 13 + }; 14 + 15 + pinctrl_adc10_default: adc10_default { 16 + function = "ADC10"; 17 + groups = "ADC10"; 18 + }; 19 + 20 + pinctrl_adc11_default: adc11_default { 21 + function = "ADC11"; 22 + groups = "ADC11"; 23 + }; 24 + 25 + pinctrl_adc12_default: adc12_default { 26 + function = "ADC12"; 27 + groups = "ADC12"; 28 + }; 29 + 30 + pinctrl_adc13_default: adc13_default { 31 + function = "ADC13"; 32 + groups = "ADC13"; 33 + }; 34 + 35 + pinctrl_adc14_default: adc14_default { 36 + function = "ADC14"; 37 + groups = "ADC14"; 38 + }; 39 + 40 + pinctrl_adc15_default: adc15_default { 41 + function = "ADC15"; 42 + groups = "ADC15"; 43 + }; 44 + 45 + pinctrl_adc2_default: adc2_default { 46 + function = "ADC2"; 47 + groups = "ADC2"; 48 + }; 49 + 50 + pinctrl_adc3_default: adc3_default { 51 + function = "ADC3"; 52 + groups = "ADC3"; 53 + }; 54 + 55 + pinctrl_adc4_default: adc4_default { 56 + function = "ADC4"; 57 + groups = "ADC4"; 58 + }; 59 + 60 + pinctrl_adc5_default: adc5_default { 61 + function = "ADC5"; 62 + groups = "ADC5"; 63 + }; 64 + 65 + pinctrl_adc6_default: adc6_default { 66 + function = "ADC6"; 67 + groups = "ADC6"; 68 + }; 69 + 70 + pinctrl_adc7_default: adc7_default { 71 + function = "ADC7"; 72 + groups = "ADC7"; 73 + }; 74 + 75 + pinctrl_adc8_default: adc8_default { 76 + function = "ADC8"; 77 + groups = "ADC8"; 78 + }; 79 + 80 + pinctrl_adc9_default: adc9_default { 81 + function = "ADC9"; 82 + groups = "ADC9"; 83 + }; 84 + 85 + pinctrl_bmcint_default: bmcint_default { 86 + function = "BMCINT"; 87 + groups = "BMCINT"; 88 + }; 89 + 90 + pinctrl_espi_default: espi_default { 91 + function = "ESPI"; 92 + groups = "ESPI"; 93 + }; 94 + 95 + pinctrl_espialt_default: espialt_default { 96 + function = "ESPIALT"; 97 + groups = "ESPIALT"; 98 + }; 99 + 100 + pinctrl_fsi1_default: fsi1_default { 101 + function = "FSI1"; 102 + groups = "FSI1"; 103 + }; 104 + 105 + pinctrl_fsi2_default: fsi2_default { 106 + function = "FSI2"; 107 + groups = "FSI2"; 108 + }; 109 + 110 + pinctrl_fwspiabr_default: fwspiabr_default { 111 + function = "FWSPIABR"; 112 + groups = "FWSPIABR"; 113 + }; 114 + 115 + pinctrl_fwspid_default: fwspid_default { 116 + function = "FWSPID"; 117 + groups = "FWSPID"; 118 + }; 119 + 120 + pinctrl_fwqspid_default: fwqspid_default { 121 + function = "FWQSPID"; 122 + groups = "FWQSPID"; 123 + }; 124 + 125 + pinctrl_fwspiwp_default: fwspiwp_default { 126 + function = "FWSPIWP"; 127 + groups = "FWSPIWP"; 128 + }; 129 + 130 + pinctrl_gpit0_default: gpit0_default { 131 + function = "GPIT0"; 132 + groups = "GPIT0"; 133 + }; 134 + 135 + pinctrl_gpit1_default: gpit1_default { 136 + function = "GPIT1"; 137 + groups = "GPIT1"; 138 + }; 139 + 140 + pinctrl_gpit2_default: gpit2_default { 141 + function = "GPIT2"; 142 + groups = "GPIT2"; 143 + }; 144 + 145 + pinctrl_gpit3_default: gpit3_default { 146 + function = "GPIT3"; 147 + groups = "GPIT3"; 148 + }; 149 + 150 + pinctrl_gpit4_default: gpit4_default { 151 + function = "GPIT4"; 152 + groups = "GPIT4"; 153 + }; 154 + 155 + pinctrl_gpit5_default: gpit5_default { 156 + function = "GPIT5"; 157 + groups = "GPIT5"; 158 + }; 159 + 160 + pinctrl_gpit6_default: gpit6_default { 161 + function = "GPIT6"; 162 + groups = "GPIT6"; 163 + }; 164 + 165 + pinctrl_gpit7_default: gpit7_default { 166 + function = "GPIT7"; 167 + groups = "GPIT7"; 168 + }; 169 + 170 + pinctrl_gpiu0_default: gpiu0_default { 171 + function = "GPIU0"; 172 + groups = "GPIU0"; 173 + }; 174 + 175 + pinctrl_gpiu1_default: gpiu1_default { 176 + function = "GPIU1"; 177 + groups = "GPIU1"; 178 + }; 179 + 180 + pinctrl_gpiu2_default: gpiu2_default { 181 + function = "GPIU2"; 182 + groups = "GPIU2"; 183 + }; 184 + 185 + pinctrl_gpiu3_default: gpiu3_default { 186 + function = "GPIU3"; 187 + groups = "GPIU3"; 188 + }; 189 + 190 + pinctrl_gpiu4_default: gpiu4_default { 191 + function = "GPIU4"; 192 + groups = "GPIU4"; 193 + }; 194 + 195 + pinctrl_gpiu5_default: gpiu5_default { 196 + function = "GPIU5"; 197 + groups = "GPIU5"; 198 + }; 199 + 200 + pinctrl_gpiu6_default: gpiu6_default { 201 + function = "GPIU6"; 202 + groups = "GPIU6"; 203 + }; 204 + 205 + pinctrl_gpiu7_default: gpiu7_default { 206 + function = "GPIU7"; 207 + groups = "GPIU7"; 208 + }; 209 + 210 + pinctrl_hvi3c3_default: hvi3c3_default { 211 + function = "HVI3C3"; 212 + groups = "HVI3C3"; 213 + }; 214 + 215 + pinctrl_hvi3c4_default: hvi3c4_default { 216 + function = "HVI3C4"; 217 + groups = "HVI3C4"; 218 + }; 219 + 220 + pinctrl_i2c1_default: i2c1_default { 221 + function = "I2C1"; 222 + groups = "I2C1"; 223 + }; 224 + 225 + pinctrl_i2c10_default: i2c10_default { 226 + function = "I2C10"; 227 + groups = "I2C10"; 228 + }; 229 + 230 + pinctrl_i2c11_default: i2c11_default { 231 + function = "I2C11"; 232 + groups = "I2C11"; 233 + }; 234 + 235 + pinctrl_i2c12_default: i2c12_default { 236 + function = "I2C12"; 237 + groups = "I2C12"; 238 + }; 239 + 240 + pinctrl_i2c13_default: i2c13_default { 241 + function = "I2C13"; 242 + groups = "I2C13"; 243 + }; 244 + 245 + pinctrl_i2c14_default: i2c14_default { 246 + function = "I2C14"; 247 + groups = "I2C14"; 248 + }; 249 + 250 + pinctrl_i2c15_default: i2c15_default { 251 + function = "I2C15"; 252 + groups = "I2C15"; 253 + }; 254 + 255 + pinctrl_i2c16_default: i2c16_default { 256 + function = "I2C16"; 257 + groups = "I2C16"; 258 + }; 259 + 260 + pinctrl_i2c2_default: i2c2_default { 261 + function = "I2C2"; 262 + groups = "I2C2"; 263 + }; 264 + 265 + pinctrl_i2c3_default: i2c3_default { 266 + function = "I2C3"; 267 + groups = "I2C3"; 268 + }; 269 + 270 + pinctrl_i2c4_default: i2c4_default { 271 + function = "I2C4"; 272 + groups = "I2C4"; 273 + }; 274 + 275 + pinctrl_i2c5_default: i2c5_default { 276 + function = "I2C5"; 277 + groups = "I2C5"; 278 + }; 279 + 280 + pinctrl_i2c6_default: i2c6_default { 281 + function = "I2C6"; 282 + groups = "I2C6"; 283 + }; 284 + 285 + pinctrl_i2c7_default: i2c7_default { 286 + function = "I2C7"; 287 + groups = "I2C7"; 288 + }; 289 + 290 + pinctrl_i2c8_default: i2c8_default { 291 + function = "I2C8"; 292 + groups = "I2C8"; 293 + }; 294 + 295 + pinctrl_i2c9_default: i2c9_default { 296 + function = "I2C9"; 297 + groups = "I2C9"; 298 + }; 299 + 300 + pinctrl_i3c3_default: i3c3_default { 301 + function = "I3C3"; 302 + groups = "I3C3"; 303 + }; 304 + 305 + pinctrl_i3c4_default: i3c4_default { 306 + function = "I3C4"; 307 + groups = "I3C4"; 308 + }; 309 + 310 + pinctrl_i3c5_default: i3c5_default { 311 + function = "I3C5"; 312 + groups = "I3C5"; 313 + }; 314 + 315 + pinctrl_i3c6_default: i3c6_default { 316 + function = "I3C6"; 317 + groups = "I3C6"; 318 + }; 319 + 320 + pinctrl_jtagm_default: jtagm_default { 321 + function = "JTAGM"; 322 + groups = "JTAGM"; 323 + }; 324 + 325 + pinctrl_lhpd_default: lhpd_default { 326 + function = "LHPD"; 327 + groups = "LHPD"; 328 + }; 329 + 330 + pinctrl_lhsirq_default: lhsirq_default { 331 + function = "LHSIRQ"; 332 + groups = "LHSIRQ"; 333 + }; 334 + 335 + pinctrl_lpc_default: lpc_default { 336 + function = "LPC"; 337 + groups = "LPC"; 338 + }; 339 + 340 + pinctrl_lpchc_default: lpchc_default { 341 + function = "LPCHC"; 342 + groups = "LPCHC"; 343 + }; 344 + 345 + pinctrl_lpcpd_default: lpcpd_default { 346 + function = "LPCPD"; 347 + groups = "LPCPD"; 348 + }; 349 + 350 + pinctrl_lpcpme_default: lpcpme_default { 351 + function = "LPCPME"; 352 + groups = "LPCPME"; 353 + }; 354 + 355 + pinctrl_lpcsmi_default: lpcsmi_default { 356 + function = "LPCSMI"; 357 + groups = "LPCSMI"; 358 + }; 359 + 360 + pinctrl_lsirq_default: lsirq_default { 361 + function = "LSIRQ"; 362 + groups = "LSIRQ"; 363 + }; 364 + 365 + pinctrl_maclink1_default: maclink1_default { 366 + function = "MACLINK1"; 367 + groups = "MACLINK1"; 368 + }; 369 + 370 + pinctrl_maclink2_default: maclink2_default { 371 + function = "MACLINK2"; 372 + groups = "MACLINK2"; 373 + }; 374 + 375 + pinctrl_maclink3_default: maclink3_default { 376 + function = "MACLINK3"; 377 + groups = "MACLINK3"; 378 + }; 379 + 380 + pinctrl_maclink4_default: maclink4_default { 381 + function = "MACLINK4"; 382 + groups = "MACLINK4"; 383 + }; 384 + 385 + pinctrl_mdio1_default: mdio1_default { 386 + function = "MDIO1"; 387 + groups = "MDIO1"; 388 + }; 389 + 390 + pinctrl_mdio2_default: mdio2_default { 391 + function = "MDIO2"; 392 + groups = "MDIO2"; 393 + }; 394 + 395 + pinctrl_mdio3_default: mdio3_default { 396 + function = "MDIO3"; 397 + groups = "MDIO3"; 398 + }; 399 + 400 + pinctrl_mdio4_default: mdio4_default { 401 + function = "MDIO4"; 402 + groups = "MDIO4"; 403 + }; 404 + 405 + pinctrl_ncts1_default: ncts1_default { 406 + function = "NCTS1"; 407 + groups = "NCTS1"; 408 + }; 409 + 410 + pinctrl_ncts2_default: ncts2_default { 411 + function = "NCTS2"; 412 + groups = "NCTS2"; 413 + }; 414 + 415 + pinctrl_ncts3_default: ncts3_default { 416 + function = "NCTS3"; 417 + groups = "NCTS3"; 418 + }; 419 + 420 + pinctrl_ncts4_default: ncts4_default { 421 + function = "NCTS4"; 422 + groups = "NCTS4"; 423 + }; 424 + 425 + pinctrl_ndcd1_default: ndcd1_default { 426 + function = "NDCD1"; 427 + groups = "NDCD1"; 428 + }; 429 + 430 + pinctrl_ndcd2_default: ndcd2_default { 431 + function = "NDCD2"; 432 + groups = "NDCD2"; 433 + }; 434 + 435 + pinctrl_ndcd3_default: ndcd3_default { 436 + function = "NDCD3"; 437 + groups = "NDCD3"; 438 + }; 439 + 440 + pinctrl_ndcd4_default: ndcd4_default { 441 + function = "NDCD4"; 442 + groups = "NDCD4"; 443 + }; 444 + 445 + pinctrl_ndsr1_default: ndsr1_default { 446 + function = "NDSR1"; 447 + groups = "NDSR1"; 448 + }; 449 + 450 + pinctrl_ndsr2_default: ndsr2_default { 451 + function = "NDSR2"; 452 + groups = "NDSR2"; 453 + }; 454 + 455 + pinctrl_ndsr3_default: ndsr3_default { 456 + function = "NDSR3"; 457 + groups = "NDSR3"; 458 + }; 459 + 460 + pinctrl_ndsr4_default: ndsr4_default { 461 + function = "NDSR4"; 462 + groups = "NDSR4"; 463 + }; 464 + 465 + pinctrl_ndtr1_default: ndtr1_default { 466 + function = "NDTR1"; 467 + groups = "NDTR1"; 468 + }; 469 + 470 + pinctrl_ndtr2_default: ndtr2_default { 471 + function = "NDTR2"; 472 + groups = "NDTR2"; 473 + }; 474 + 475 + pinctrl_ndtr3_default: ndtr3_default { 476 + function = "NDTR3"; 477 + groups = "NDTR3"; 478 + }; 479 + 480 + pinctrl_ndtr4_default: ndtr4_default { 481 + function = "NDTR4"; 482 + groups = "NDTR4"; 483 + }; 484 + 485 + pinctrl_nri1_default: nri1_default { 486 + function = "NRI1"; 487 + groups = "NRI1"; 488 + }; 489 + 490 + pinctrl_nri2_default: nri2_default { 491 + function = "NRI2"; 492 + groups = "NRI2"; 493 + }; 494 + 495 + pinctrl_nri3_default: nri3_default { 496 + function = "NRI3"; 497 + groups = "NRI3"; 498 + }; 499 + 500 + pinctrl_nri4_default: nri4_default { 501 + function = "NRI4"; 502 + groups = "NRI4"; 503 + }; 504 + 505 + pinctrl_nrts1_default: nrts1_default { 506 + function = "NRTS1"; 507 + groups = "NRTS1"; 508 + }; 509 + 510 + pinctrl_nrts2_default: nrts2_default { 511 + function = "NRTS2"; 512 + groups = "NRTS2"; 513 + }; 514 + 515 + pinctrl_nrts3_default: nrts3_default { 516 + function = "NRTS3"; 517 + groups = "NRTS3"; 518 + }; 519 + 520 + pinctrl_nrts4_default: nrts4_default { 521 + function = "NRTS4"; 522 + groups = "NRTS4"; 523 + }; 524 + 525 + pinctrl_oscclk_default: oscclk_default { 526 + function = "OSCCLK"; 527 + groups = "OSCCLK"; 528 + }; 529 + 530 + pinctrl_pewake_default: pewake_default { 531 + function = "PEWAKE"; 532 + groups = "PEWAKE"; 533 + }; 534 + 535 + pinctrl_pwm0_default: pwm0_default { 536 + function = "PWM0"; 537 + groups = "PWM0"; 538 + }; 539 + 540 + pinctrl_pwm1_default: pwm1_default { 541 + function = "PWM1"; 542 + groups = "PWM1"; 543 + }; 544 + 545 + pinctrl_pwm10g0_default: pwm10g0_default { 546 + function = "PWM10"; 547 + groups = "PWM10G0"; 548 + }; 549 + 550 + pinctrl_pwm10g1_default: pwm10g1_default { 551 + function = "PWM10"; 552 + groups = "PWM10G1"; 553 + }; 554 + 555 + pinctrl_pwm11g0_default: pwm11g0_default { 556 + function = "PWM11"; 557 + groups = "PWM11G0"; 558 + }; 559 + 560 + pinctrl_pwm11g1_default: pwm11g1_default { 561 + function = "PWM11"; 562 + groups = "PWM11G1"; 563 + }; 564 + 565 + pinctrl_pwm12g0_default: pwm12g0_default { 566 + function = "PWM12"; 567 + groups = "PWM12G0"; 568 + }; 569 + 570 + pinctrl_pwm12g1_default: pwm12g1_default { 571 + function = "PWM12"; 572 + groups = "PWM12G1"; 573 + }; 574 + 575 + pinctrl_pwm13g0_default: pwm13g0_default { 576 + function = "PWM13"; 577 + groups = "PWM13G0"; 578 + }; 579 + 580 + pinctrl_pwm13g1_default: pwm13g1_default { 581 + function = "PWM13"; 582 + groups = "PWM13G1"; 583 + }; 584 + 585 + pinctrl_pwm14g0_default: pwm14g0_default { 586 + function = "PWM14"; 587 + groups = "PWM14G0"; 588 + }; 589 + 590 + pinctrl_pwm14g1_default: pwm14g1_default { 591 + function = "PWM14"; 592 + groups = "PWM14G1"; 593 + }; 594 + 595 + pinctrl_pwm15g0_default: pwm15g0_default { 596 + function = "PWM15"; 597 + groups = "PWM15G0"; 598 + }; 599 + 600 + pinctrl_pwm15g1_default: pwm15g1_default { 601 + function = "PWM15"; 602 + groups = "PWM15G1"; 603 + }; 604 + 605 + pinctrl_pwm2_default: pwm2_default { 606 + function = "PWM2"; 607 + groups = "PWM2"; 608 + }; 609 + 610 + pinctrl_pwm3_default: pwm3_default { 611 + function = "PWM3"; 612 + groups = "PWM3"; 613 + }; 614 + 615 + pinctrl_pwm4_default: pwm4_default { 616 + function = "PWM4"; 617 + groups = "PWM4"; 618 + }; 619 + 620 + pinctrl_pwm5_default: pwm5_default { 621 + function = "PWM5"; 622 + groups = "PWM5"; 623 + }; 624 + 625 + pinctrl_pwm6_default: pwm6_default { 626 + function = "PWM6"; 627 + groups = "PWM6"; 628 + }; 629 + 630 + pinctrl_pwm7_default: pwm7_default { 631 + function = "PWM7"; 632 + groups = "PWM7"; 633 + }; 634 + 635 + pinctrl_pwm8g0_default: pwm8g0_default { 636 + function = "PWM8"; 637 + groups = "PWM8G0"; 638 + }; 639 + 640 + pinctrl_pwm8g1_default: pwm8g1_default { 641 + function = "PWM8"; 642 + groups = "PWM8G1"; 643 + }; 644 + 645 + pinctrl_pwm9g0_default: pwm9g0_default { 646 + function = "PWM9"; 647 + groups = "PWM9G0"; 648 + }; 649 + 650 + pinctrl_pwm9g1_default: pwm9g1_default { 651 + function = "PWM9"; 652 + groups = "PWM9G1"; 653 + }; 654 + 655 + pinctrl_qspi1_default: qspi1_default { 656 + function = "QSPI1"; 657 + groups = "QSPI1"; 658 + }; 659 + 660 + pinctrl_qspi2_default: qspi2_default { 661 + function = "QSPI2"; 662 + groups = "QSPI2"; 663 + }; 664 + 665 + pinctrl_rgmii1_default: rgmii1_default { 666 + function = "RGMII1"; 667 + groups = "RGMII1"; 668 + }; 669 + 670 + pinctrl_rgmii2_default: rgmii2_default { 671 + function = "RGMII2"; 672 + groups = "RGMII2"; 673 + }; 674 + 675 + pinctrl_rgmii3_default: rgmii3_default { 676 + function = "RGMII3"; 677 + groups = "RGMII3"; 678 + }; 679 + 680 + pinctrl_rgmii4_default: rgmii4_default { 681 + function = "RGMII4"; 682 + groups = "RGMII4"; 683 + }; 684 + 685 + pinctrl_rmii1_default: rmii1_default { 686 + function = "RMII1"; 687 + groups = "RMII1"; 688 + }; 689 + 690 + pinctrl_rmii2_default: rmii2_default { 691 + function = "RMII2"; 692 + groups = "RMII2"; 693 + }; 694 + 695 + pinctrl_rmii3_default: rmii3_default { 696 + function = "RMII3"; 697 + groups = "RMII3"; 698 + }; 699 + 700 + pinctrl_rmii4_default: rmii4_default { 701 + function = "RMII4"; 702 + groups = "RMII4"; 703 + }; 704 + 705 + pinctrl_rxd1_default: rxd1_default { 706 + function = "RXD1"; 707 + groups = "RXD1"; 708 + }; 709 + 710 + pinctrl_rxd2_default: rxd2_default { 711 + function = "RXD2"; 712 + groups = "RXD2"; 713 + }; 714 + 715 + pinctrl_rxd3_default: rxd3_default { 716 + function = "RXD3"; 717 + groups = "RXD3"; 718 + }; 719 + 720 + pinctrl_rxd4_default: rxd4_default { 721 + function = "RXD4"; 722 + groups = "RXD4"; 723 + }; 724 + 725 + pinctrl_salt1_default: salt1_default { 726 + function = "SALT1"; 727 + groups = "SALT1"; 728 + }; 729 + 730 + pinctrl_salt10g0_default: salt10g0_default { 731 + function = "SALT10"; 732 + groups = "SALT10G0"; 733 + }; 734 + 735 + pinctrl_salt10g1_default: salt10g1_default { 736 + function = "SALT10"; 737 + groups = "SALT10G1"; 738 + }; 739 + 740 + pinctrl_salt11g0_default: salt11g0_default { 741 + function = "SALT11"; 742 + groups = "SALT11G0"; 743 + }; 744 + 745 + pinctrl_salt11g1_default: salt11g1_default { 746 + function = "SALT11"; 747 + groups = "SALT11G1"; 748 + }; 749 + 750 + pinctrl_salt12g0_default: salt12g0_default { 751 + function = "SALT12"; 752 + groups = "SALT12G0"; 753 + }; 754 + 755 + pinctrl_salt12g1_default: salt12g1_default { 756 + function = "SALT12"; 757 + groups = "SALT12G1"; 758 + }; 759 + 760 + pinctrl_salt13g0_default: salt13g0_default { 761 + function = "SALT13"; 762 + groups = "SALT13G0"; 763 + }; 764 + 765 + pinctrl_salt13g1_default: salt13g1_default { 766 + function = "SALT13"; 767 + groups = "SALT13G1"; 768 + }; 769 + 770 + pinctrl_salt14g0_default: salt14g0_default { 771 + function = "SALT14"; 772 + groups = "SALT14G0"; 773 + }; 774 + 775 + pinctrl_salt14g1_default: salt14g1_default { 776 + function = "SALT14"; 777 + groups = "SALT14G1"; 778 + }; 779 + 780 + pinctrl_salt15g0_default: salt15g0_default { 781 + function = "SALT15"; 782 + groups = "SALT15G0"; 783 + }; 784 + 785 + pinctrl_salt15g1_default: salt15g1_default { 786 + function = "SALT15"; 787 + groups = "SALT15G1"; 788 + }; 789 + 790 + pinctrl_salt16g0_default: salt16g0_default { 791 + function = "SALT16"; 792 + groups = "SALT16G0"; 793 + }; 794 + 795 + pinctrl_salt16g1_default: salt16g1_default { 796 + function = "SALT16"; 797 + groups = "SALT16G1"; 798 + }; 799 + 800 + pinctrl_salt2_default: salt2_default { 801 + function = "SALT2"; 802 + groups = "SALT2"; 803 + }; 804 + 805 + pinctrl_salt3_default: salt3_default { 806 + function = "SALT3"; 807 + groups = "SALT3"; 808 + }; 809 + 810 + pinctrl_salt4_default: salt4_default { 811 + function = "SALT4"; 812 + groups = "SALT4"; 813 + }; 814 + 815 + pinctrl_salt5_default: salt5_default { 816 + function = "SALT5"; 817 + groups = "SALT5"; 818 + }; 819 + 820 + pinctrl_salt6_default: salt6_default { 821 + function = "SALT6"; 822 + groups = "SALT6"; 823 + }; 824 + 825 + pinctrl_salt7_default: salt7_default { 826 + function = "SALT7"; 827 + groups = "SALT7"; 828 + }; 829 + 830 + pinctrl_salt8_default: salt8_default { 831 + function = "SALT8"; 832 + groups = "SALT8"; 833 + }; 834 + 835 + pinctrl_salt9g0_default: salt9g0_default { 836 + function = "SALT9"; 837 + groups = "SALT9G0"; 838 + }; 839 + 840 + pinctrl_salt9g1_default: salt9g1_default { 841 + function = "SALT9"; 842 + groups = "SALT9G1"; 843 + }; 844 + 845 + pinctrl_sd1_default: sd1_default { 846 + function = "SD1"; 847 + groups = "SD1"; 848 + }; 849 + 850 + pinctrl_sd2_default: sd2_default { 851 + function = "SD2"; 852 + groups = "SD2"; 853 + }; 854 + 855 + pinctrl_sd3_default: sd3_default { 856 + function = "SD3"; 857 + groups = "SD3"; 858 + }; 859 + 860 + pinctrl_emmc_default: emmc_default { 861 + function = "SD3"; 862 + groups = "EMMC"; 863 + }; 864 + 865 + pinctrl_sgpm1_default: sgpm1_default { 866 + function = "SGPM1"; 867 + groups = "SGPM1"; 868 + }; 869 + 870 + pinctrl_sgps1_default: sgps1_default { 871 + function = "SGPS1"; 872 + groups = "SGPS1"; 873 + }; 874 + 875 + pinctrl_sioonctrl_default: sioonctrl_default { 876 + function = "SIOONCTRL"; 877 + groups = "SIOONCTRL"; 878 + }; 879 + 880 + pinctrl_siopbi_default: siopbi_default { 881 + function = "SIOPBI"; 882 + groups = "SIOPBI"; 883 + }; 884 + 885 + pinctrl_siopbo_default: siopbo_default { 886 + function = "SIOPBO"; 887 + groups = "SIOPBO"; 888 + }; 889 + 890 + pinctrl_siopwreq_default: siopwreq_default { 891 + function = "SIOPWREQ"; 892 + groups = "SIOPWREQ"; 893 + }; 894 + 895 + pinctrl_siopwrgd_default: siopwrgd_default { 896 + function = "SIOPWRGD"; 897 + groups = "SIOPWRGD"; 898 + }; 899 + 900 + pinctrl_sios3_default: sios3_default { 901 + function = "SIOS3"; 902 + groups = "SIOS3"; 903 + }; 904 + 905 + pinctrl_sios5_default: sios5_default { 906 + function = "SIOS5"; 907 + groups = "SIOS5"; 908 + }; 909 + 910 + pinctrl_siosci_default: siosci_default { 911 + function = "SIOSCI"; 912 + groups = "SIOSCI"; 913 + }; 914 + 915 + pinctrl_spi1_default: spi1_default { 916 + function = "SPI1"; 917 + groups = "SPI1"; 918 + }; 919 + 920 + pinctrl_spi1abr_default: spi1abr_default { 921 + function = "SPI1ABR"; 922 + groups = "SPI1ABR"; 923 + }; 924 + 925 + pinctrl_spi1cs1_default: spi1cs1_default { 926 + function = "SPI1CS1"; 927 + groups = "SPI1CS1"; 928 + }; 929 + 930 + pinctrl_spi1wp_default: spi1wp_default { 931 + function = "SPI1WP"; 932 + groups = "SPI1WP"; 933 + }; 934 + 935 + pinctrl_spi2_default: spi2_default { 936 + function = "SPI2"; 937 + groups = "SPI2"; 938 + }; 939 + 940 + pinctrl_spi2cs1_default: spi2cs1_default { 941 + function = "SPI2CS1"; 942 + groups = "SPI2CS1"; 943 + }; 944 + 945 + pinctrl_spi2cs2_default: spi2cs2_default { 946 + function = "SPI2CS2"; 947 + groups = "SPI2CS2"; 948 + }; 949 + 950 + pinctrl_tach0_default: tach0_default { 951 + function = "TACH0"; 952 + groups = "TACH0"; 953 + }; 954 + 955 + pinctrl_tach1_default: tach1_default { 956 + function = "TACH1"; 957 + groups = "TACH1"; 958 + }; 959 + 960 + pinctrl_tach10_default: tach10_default { 961 + function = "TACH10"; 962 + groups = "TACH10"; 963 + }; 964 + 965 + pinctrl_tach11_default: tach11_default { 966 + function = "TACH11"; 967 + groups = "TACH11"; 968 + }; 969 + 970 + pinctrl_tach12_default: tach12_default { 971 + function = "TACH12"; 972 + groups = "TACH12"; 973 + }; 974 + 975 + pinctrl_tach13_default: tach13_default { 976 + function = "TACH13"; 977 + groups = "TACH13"; 978 + }; 979 + 980 + pinctrl_tach14_default: tach14_default { 981 + function = "TACH14"; 982 + groups = "TACH14"; 983 + }; 984 + 985 + pinctrl_tach15_default: tach15_default { 986 + function = "TACH15"; 987 + groups = "TACH15"; 988 + }; 989 + 990 + pinctrl_tach2_default: tach2_default { 991 + function = "TACH2"; 992 + groups = "TACH2"; 993 + }; 994 + 995 + pinctrl_tach3_default: tach3_default { 996 + function = "TACH3"; 997 + groups = "TACH3"; 998 + }; 999 + 1000 + pinctrl_tach4_default: tach4_default { 1001 + function = "TACH4"; 1002 + groups = "TACH4"; 1003 + }; 1004 + 1005 + pinctrl_tach5_default: tach5_default { 1006 + function = "TACH5"; 1007 + groups = "TACH5"; 1008 + }; 1009 + 1010 + pinctrl_tach6_default: tach6_default { 1011 + function = "TACH6"; 1012 + groups = "TACH6"; 1013 + }; 1014 + 1015 + pinctrl_tach7_default: tach7_default { 1016 + function = "TACH7"; 1017 + groups = "TACH7"; 1018 + }; 1019 + 1020 + pinctrl_tach8_default: tach8_default { 1021 + function = "TACH8"; 1022 + groups = "TACH8"; 1023 + }; 1024 + 1025 + pinctrl_tach9_default: tach9_default { 1026 + function = "TACH9"; 1027 + groups = "TACH9"; 1028 + }; 1029 + 1030 + pinctrl_thru0_default: thru0_default { 1031 + function = "THRU0"; 1032 + groups = "THRU0"; 1033 + }; 1034 + 1035 + pinctrl_thru1_default: thru1_default { 1036 + function = "THRU1"; 1037 + groups = "THRU1"; 1038 + }; 1039 + 1040 + pinctrl_thru2_default: thru2_default { 1041 + function = "THRU2"; 1042 + groups = "THRU2"; 1043 + }; 1044 + 1045 + pinctrl_thru3_default: thru3_default { 1046 + function = "THRU3"; 1047 + groups = "THRU3"; 1048 + }; 1049 + 1050 + pinctrl_txd1_default: txd1_default { 1051 + function = "TXD1"; 1052 + groups = "TXD1"; 1053 + }; 1054 + 1055 + pinctrl_txd2_default: txd2_default { 1056 + function = "TXD2"; 1057 + groups = "TXD2"; 1058 + }; 1059 + 1060 + pinctrl_txd3_default: txd3_default { 1061 + function = "TXD3"; 1062 + groups = "TXD3"; 1063 + }; 1064 + 1065 + pinctrl_txd4_default: txd4_default { 1066 + function = "TXD4"; 1067 + groups = "TXD4"; 1068 + }; 1069 + 1070 + pinctrl_uart10_default: uart10_default { 1071 + function = "UART10"; 1072 + groups = "UART10"; 1073 + }; 1074 + 1075 + pinctrl_uart11_default: uart11_default { 1076 + function = "UART11"; 1077 + groups = "UART11"; 1078 + }; 1079 + 1080 + pinctrl_uart12g0_default: uart12g0_default { 1081 + function = "UART12"; 1082 + groups = "UART12G0"; 1083 + }; 1084 + 1085 + pinctrl_uart12g1_default: uart12g1_default { 1086 + function = "UART12"; 1087 + groups = "UART12G1"; 1088 + }; 1089 + 1090 + pinctrl_uart13g0_default: uart13g0_default { 1091 + function = "UART13"; 1092 + groups = "UART13G0"; 1093 + }; 1094 + 1095 + pinctrl_uart13g1_default: uart13g1_default { 1096 + function = "UART13"; 1097 + groups = "UART13G1"; 1098 + }; 1099 + 1100 + pinctrl_uart6_default: uart6_default { 1101 + function = "UART6"; 1102 + groups = "UART6"; 1103 + }; 1104 + 1105 + pinctrl_uart7_default: uart7_default { 1106 + function = "UART7"; 1107 + groups = "UART7"; 1108 + }; 1109 + 1110 + pinctrl_uart8_default: uart8_default { 1111 + function = "UART8"; 1112 + groups = "UART8"; 1113 + }; 1114 + 1115 + pinctrl_uart9_default: uart9_default { 1116 + function = "UART9"; 1117 + groups = "UART9"; 1118 + }; 1119 + 1120 + pinctrl_vb_default: vb_default { 1121 + function = "VB"; 1122 + groups = "VB"; 1123 + }; 1124 + 1125 + pinctrl_vgahs_default: vgahs_default { 1126 + function = "VGAHS"; 1127 + groups = "VGAHS"; 1128 + }; 1129 + 1130 + pinctrl_vgavs_default: vgavs_default { 1131 + function = "VGAVS"; 1132 + groups = "VGAVS"; 1133 + }; 1134 + 1135 + pinctrl_wdtrst1_default: wdtrst1_default { 1136 + function = "WDTRST1"; 1137 + groups = "WDTRST1"; 1138 + }; 1139 + 1140 + pinctrl_wdtrst2_default: wdtrst2_default { 1141 + function = "WDTRST2"; 1142 + groups = "WDTRST2"; 1143 + }; 1144 + 1145 + pinctrl_wdtrst3_default: wdtrst3_default { 1146 + function = "WDTRST3"; 1147 + groups = "WDTRST3"; 1148 + }; 1149 + 1150 + pinctrl_wdtrst4_default: wdtrst4_default { 1151 + function = "WDTRST4"; 1152 + groups = "WDTRST4"; 1153 + }; 1154 + };
+261
arch/arm/boot/dts/aspeed-g6.dtsi
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + // Copyright 2019 IBM Corp. 3 + 4 + #include <dt-bindings/interrupt-controller/arm-gic.h> 5 + #include <dt-bindings/clock/ast2600-clock.h> 6 + 7 + / { 8 + model = "Aspeed BMC"; 9 + compatible = "aspeed,ast2600"; 10 + #address-cells = <1>; 11 + #size-cells = <1>; 12 + interrupt-parent = <&gic>; 13 + 14 + aliases { 15 + serial4 = &uart5; 16 + }; 17 + 18 + 19 + cpus { 20 + #address-cells = <1>; 21 + #size-cells = <0>; 22 + enable-method = "aspeed,ast2600-smp"; 23 + 24 + cpu@f00 { 25 + compatible = "arm,cortex-a7"; 26 + device_type = "cpu"; 27 + reg = <0xf00>; 28 + }; 29 + 30 + cpu@f01 { 31 + compatible = "arm,cortex-a7"; 32 + device_type = "cpu"; 33 + reg = <0xf01>; 34 + }; 35 + }; 36 + 37 + timer { 38 + compatible = "arm,armv7-timer"; 39 + interrupt-parent = <&gic>; 40 + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, 41 + <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, 42 + <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, 43 + <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>; 44 + clocks = <&syscon ASPEED_CLK_HPLL>; 45 + arm,cpu-registers-not-fw-configured; 46 + }; 47 + 48 + ahb { 49 + compatible = "simple-bus"; 50 + #address-cells = <1>; 51 + #size-cells = <1>; 52 + device_type = "soc"; 53 + ranges; 54 + 55 + gic: interrupt-controller@40461000 { 56 + compatible = "arm,cortex-a7-gic"; 57 + interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>; 58 + #interrupt-cells = <3>; 59 + interrupt-controller; 60 + interrupt-parent = <&gic>; 61 + reg = <0x40461000 0x1000>, 62 + <0x40462000 0x1000>, 63 + <0x40464000 0x2000>, 64 + <0x40466000 0x2000>; 65 + }; 66 + 67 + mdio0: mdio@1e650000 { 68 + compatible = "aspeed,ast2600-mdio"; 69 + reg = <0x1e650000 0x8>; 70 + #address-cells = <1>; 71 + #size-cells = <0>; 72 + status = "disabled"; 73 + }; 74 + 75 + mdio1: mdio@1e650008 { 76 + compatible = "aspeed,ast2600-mdio"; 77 + reg = <0x1e650008 0x8>; 78 + #address-cells = <1>; 79 + #size-cells = <0>; 80 + status = "disabled"; 81 + }; 82 + 83 + mdio2: mdio@1e650010 { 84 + compatible = "aspeed,ast2600-mdio"; 85 + reg = <0x1e650010 0x8>; 86 + #address-cells = <1>; 87 + #size-cells = <0>; 88 + status = "disabled"; 89 + }; 90 + 91 + mdio3: mdio@1e650018 { 92 + compatible = "aspeed,ast2600-mdio"; 93 + reg = <0x1e650018 0x8>; 94 + #address-cells = <1>; 95 + #size-cells = <0>; 96 + status = "disabled"; 97 + }; 98 + 99 + mac0: ftgmac@1e660000 { 100 + compatible = "aspeed,ast2600-mac", "faraday,ftgmac100"; 101 + reg = <0x1e660000 0x180>; 102 + #address-cells = <1>; 103 + #size-cells = <0>; 104 + interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; 105 + clocks = <&syscon ASPEED_CLK_GATE_MAC1CLK>; 106 + status = "disabled"; 107 + }; 108 + 109 + mac1: ftgmac@1e680000 { 110 + compatible = "aspeed,ast2600-mac", "faraday,ftgmac100"; 111 + reg = <0x1e680000 0x180>; 112 + #address-cells = <1>; 113 + #size-cells = <0>; 114 + interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; 115 + clocks = <&syscon ASPEED_CLK_GATE_MAC2CLK>; 116 + status = "disabled"; 117 + }; 118 + 119 + mac2: ftgmac@1e670000 { 120 + compatible = "aspeed,ast2600-mac", "faraday,ftgmac100"; 121 + reg = <0x1e670000 0x180>; 122 + #address-cells = <1>; 123 + #size-cells = <0>; 124 + interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; 125 + clocks = <&syscon ASPEED_CLK_GATE_MAC3CLK>; 126 + status = "disabled"; 127 + }; 128 + 129 + mac3: ftgmac@1e690000 { 130 + compatible = "aspeed,ast2600-mac", "faraday,ftgmac100"; 131 + reg = <0x1e690000 0x180>; 132 + #address-cells = <1>; 133 + #size-cells = <0>; 134 + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; 135 + clocks = <&syscon ASPEED_CLK_GATE_MAC4CLK>; 136 + status = "disabled"; 137 + }; 138 + 139 + apb { 140 + compatible = "simple-bus"; 141 + #address-cells = <1>; 142 + #size-cells = <1>; 143 + ranges; 144 + 145 + syscon: syscon@1e6e2000 { 146 + compatible = "aspeed,ast2600-scu", "syscon", "simple-mfd"; 147 + reg = <0x1e6e2000 0x1000>; 148 + ranges = <0 0x1e6e2000 0x1000>; 149 + #address-cells = <1>; 150 + #size-cells = <1>; 151 + #clock-cells = <1>; 152 + #reset-cells = <1>; 153 + 154 + pinctrl: pinctrl { 155 + compatible = "aspeed,ast2600-pinctrl"; 156 + }; 157 + 158 + smp-memram@180 { 159 + compatible = "aspeed,ast2600-smpmem"; 160 + reg = <0x180 0x40>; 161 + }; 162 + }; 163 + 164 + rng: hwrng@1e6e2524 { 165 + compatible = "timeriomem_rng"; 166 + reg = <0x1e6e2524 0x4>; 167 + period = <1>; 168 + quality = <100>; 169 + }; 170 + 171 + rtc: rtc@1e781000 { 172 + compatible = "aspeed,ast2600-rtc"; 173 + reg = <0x1e781000 0x18>; 174 + interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; 175 + status = "disabled"; 176 + }; 177 + 178 + uart5: serial@1e784000 { 179 + compatible = "ns16550a"; 180 + reg = <0x1e784000 0x1000>; 181 + reg-shift = <2>; 182 + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>; 183 + clocks = <&syscon ASPEED_CLK_GATE_UART5CLK>; 184 + no-loopback-test; 185 + }; 186 + 187 + wdt1: watchdog@1e785000 { 188 + compatible = "aspeed,ast2600-wdt"; 189 + reg = <0x1e785000 0x40>; 190 + }; 191 + 192 + wdt2: watchdog@1e785040 { 193 + compatible = "aspeed,ast2600-wdt"; 194 + reg = <0x1e785040 0x40>; 195 + status = "disabled"; 196 + }; 197 + 198 + wdt3: watchdog@1e785080 { 199 + compatible = "aspeed,ast2600-wdt"; 200 + reg = <0x1e785080 0x40>; 201 + status = "disabled"; 202 + }; 203 + 204 + wdt4: watchdog@1e7850C0 { 205 + compatible = "aspeed,ast2600-wdt"; 206 + reg = <0x1e7850C0 0x40>; 207 + status = "disabled"; 208 + }; 209 + 210 + sdc: sdc@1e740000 { 211 + compatible = "aspeed,ast2600-sd-controller"; 212 + reg = <0x1e740000 0x100>; 213 + #address-cells = <1>; 214 + #size-cells = <1>; 215 + ranges = <0 0x1e740000 0x10000>; 216 + clocks = <&syscon ASPEED_CLK_GATE_SDCLK>; 217 + status = "disabled"; 218 + 219 + sdhci0: sdhci@1e740100 { 220 + compatible = "aspeed,ast2600-sdhci", "sdhci"; 221 + reg = <0x100 0x100>; 222 + interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>; 223 + sdhci,auto-cmd12; 224 + clocks = <&syscon ASPEED_CLK_SDIO>; 225 + status = "disabled"; 226 + }; 227 + 228 + sdhci1: sdhci@1e740200 { 229 + compatible = "aspeed,ast2600-sdhci", "sdhci"; 230 + reg = <0x200 0x100>; 231 + interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>; 232 + sdhci,auto-cmd12; 233 + clocks = <&syscon ASPEED_CLK_SDIO>; 234 + status = "disabled"; 235 + }; 236 + }; 237 + 238 + emmc: sdc@1e750000 { 239 + compatible = "aspeed,ast2600-sd-controller"; 240 + reg = <0x1e750000 0x100>; 241 + #address-cells = <1>; 242 + #size-cells = <1>; 243 + ranges = <0 0x1e750000 0x10000>; 244 + clocks = <&syscon ASPEED_CLK_GATE_EMMCCLK>; 245 + status = "disabled"; 246 + 247 + sdhci@1e750100 { 248 + compatible = "aspeed,ast2600-sdhci"; 249 + reg = <0x100 0x100>; 250 + sdhci,auto-cmd12; 251 + interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; 252 + clocks = <&syscon ASPEED_CLK_EMMC>; 253 + pinctrl-names = "default"; 254 + pinctrl-0 = <&pinctrl_emmc_default>; 255 + }; 256 + }; 257 + }; 258 + }; 259 + }; 260 + 261 + #include "aspeed-g6-pinctrl.dtsi"
+1
drivers/clk/Makefile
··· 30 30 obj-$(CONFIG_COMMON_CLK_FIXED_MMIO) += clk-fixed-mmio.o 31 31 obj-$(CONFIG_COMMON_CLK_GEMINI) += clk-gemini.o 32 32 obj-$(CONFIG_COMMON_CLK_ASPEED) += clk-aspeed.o 33 + obj-$(CONFIG_MACH_ASPEED_G6) += clk-ast2600.o 33 34 obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o 34 35 obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o 35 36 obj-$(CONFIG_COMMON_CLK_LOCHNAGAR) += clk-lochnagar.o
+11 -67
drivers/clk/clk-aspeed.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0+ 2 + // Copyright IBM Corp 2 3 3 4 #define pr_fmt(fmt) "clk-aspeed: " fmt 4 5 5 - #include <linux/clk-provider.h> 6 6 #include <linux/mfd/syscon.h> 7 7 #include <linux/of_address.h> 8 8 #include <linux/of_device.h> 9 9 #include <linux/platform_device.h> 10 10 #include <linux/regmap.h> 11 - #include <linux/reset-controller.h> 12 11 #include <linux/slab.h> 13 - #include <linux/spinlock.h> 14 12 15 13 #include <dt-bindings/clock/aspeed-clock.h> 14 + 15 + #include "clk-aspeed.h" 16 16 17 17 #define ASPEED_NUM_CLKS 36 18 18 ··· 41 41 static struct clk_hw_onecell_data *aspeed_clk_data; 42 42 43 43 static void __iomem *scu_base; 44 - 45 - /** 46 - * struct aspeed_gate_data - Aspeed gated clocks 47 - * @clock_idx: bit used to gate this clock in the clock register 48 - * @reset_idx: bit used to reset this IP in the reset register. -1 if no 49 - * reset is required when enabling the clock 50 - * @name: the clock name 51 - * @parent_name: the name of the parent clock 52 - * @flags: standard clock framework flags 53 - */ 54 - struct aspeed_gate_data { 55 - u8 clock_idx; 56 - s8 reset_idx; 57 - const char *name; 58 - const char *parent_name; 59 - unsigned long flags; 60 - }; 61 - 62 - /** 63 - * struct aspeed_clk_gate - Aspeed specific clk_gate structure 64 - * @hw: handle between common and hardware-specific interfaces 65 - * @reg: register controlling gate 66 - * @clock_idx: bit used to gate this clock in the clock register 67 - * @reset_idx: bit used to reset this IP in the reset register. -1 if no 68 - * reset is required when enabling the clock 69 - * @flags: hardware-specific flags 70 - * @lock: register lock 71 - * 72 - * Some of the clocks in the Aspeed SoC must be put in reset before enabling. 73 - * This modified version of clk_gate allows an optional reset bit to be 74 - * specified. 75 - */ 76 - struct aspeed_clk_gate { 77 - struct clk_hw hw; 78 - struct regmap *map; 79 - u8 clock_idx; 80 - s8 reset_idx; 81 - u8 flags; 82 - spinlock_t *lock; 83 - }; 84 - 85 - #define to_aspeed_clk_gate(_hw) container_of(_hw, struct aspeed_clk_gate, hw) 86 44 87 45 /* TODO: ask Aspeed about the actual parent data */ 88 46 static const struct aspeed_gate_data aspeed_gates[] = { ··· 166 208 mult, div); 167 209 } 168 210 169 - struct aspeed_clk_soc_data { 170 - const struct clk_div_table *div_table; 171 - const struct clk_div_table *eclk_div_table; 172 - const struct clk_div_table *mac_div_table; 173 - struct clk_hw *(*calc_pll)(const char *name, u32 val); 174 - }; 175 - 176 211 static const struct aspeed_clk_soc_data ast2500_data = { 177 212 .div_table = ast2500_div_table, 178 213 .eclk_div_table = ast2500_eclk_div_table, ··· 265 314 .disable = aspeed_clk_disable, 266 315 .is_enabled = aspeed_clk_is_enabled, 267 316 }; 268 - 269 - /** 270 - * struct aspeed_reset - Aspeed reset controller 271 - * @map: regmap to access the containing system controller 272 - * @rcdev: reset controller device 273 - */ 274 - struct aspeed_reset { 275 - struct regmap *map; 276 - struct reset_controller_dev rcdev; 277 - }; 278 - 279 - #define to_aspeed_reset(p) container_of((p), struct aspeed_reset, rcdev) 280 317 281 318 static const u8 aspeed_resets[] = { 282 319 /* SCU04 resets */ ··· 439 500 return PTR_ERR(hw); 440 501 aspeed_clk_data->hws[ASPEED_CLK_MPLL] = hw; 441 502 442 - /* SD/SDIO clock divider (TODO: There's a gate too) */ 443 - hw = clk_hw_register_divider_table(dev, "sdio", "hpll", 0, 444 - scu_base + ASPEED_CLK_SELECTION, 12, 3, 0, 503 + /* SD/SDIO clock divider and gate */ 504 + hw = clk_hw_register_gate(dev, "sd_extclk_gate", "hpll", 0, 505 + scu_base + ASPEED_CLK_SELECTION, 15, 0, 506 + &aspeed_clk_lock); 507 + if (IS_ERR(hw)) 508 + return PTR_ERR(hw); 509 + hw = clk_hw_register_divider_table(dev, "sd_extclk", "sd_extclk_gate", 510 + 0, scu_base + ASPEED_CLK_SELECTION, 12, 3, 0, 445 511 soc_data->div_table, 446 512 &aspeed_clk_lock); 447 513 if (IS_ERR(hw))
+82
drivers/clk/clk-aspeed.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 + /* 3 + * Structures used by ASPEED clock drivers 4 + * 5 + * Copyright 2019 IBM Corp. 6 + */ 7 + 8 + #include <linux/clk-provider.h> 9 + #include <linux/kernel.h> 10 + #include <linux/reset-controller.h> 11 + #include <linux/spinlock.h> 12 + 13 + struct clk_div_table; 14 + struct regmap; 15 + 16 + /** 17 + * struct aspeed_gate_data - Aspeed gated clocks 18 + * @clock_idx: bit used to gate this clock in the clock register 19 + * @reset_idx: bit used to reset this IP in the reset register. -1 if no 20 + * reset is required when enabling the clock 21 + * @name: the clock name 22 + * @parent_name: the name of the parent clock 23 + * @flags: standard clock framework flags 24 + */ 25 + struct aspeed_gate_data { 26 + u8 clock_idx; 27 + s8 reset_idx; 28 + const char *name; 29 + const char *parent_name; 30 + unsigned long flags; 31 + }; 32 + 33 + /** 34 + * struct aspeed_clk_gate - Aspeed specific clk_gate structure 35 + * @hw: handle between common and hardware-specific interfaces 36 + * @reg: register controlling gate 37 + * @clock_idx: bit used to gate this clock in the clock register 38 + * @reset_idx: bit used to reset this IP in the reset register. -1 if no 39 + * reset is required when enabling the clock 40 + * @flags: hardware-specific flags 41 + * @lock: register lock 42 + * 43 + * Some of the clocks in the Aspeed SoC must be put in reset before enabling. 44 + * This modified version of clk_gate allows an optional reset bit to be 45 + * specified. 46 + */ 47 + struct aspeed_clk_gate { 48 + struct clk_hw hw; 49 + struct regmap *map; 50 + u8 clock_idx; 51 + s8 reset_idx; 52 + u8 flags; 53 + spinlock_t *lock; 54 + }; 55 + 56 + #define to_aspeed_clk_gate(_hw) container_of(_hw, struct aspeed_clk_gate, hw) 57 + 58 + /** 59 + * struct aspeed_reset - Aspeed reset controller 60 + * @map: regmap to access the containing system controller 61 + * @rcdev: reset controller device 62 + */ 63 + struct aspeed_reset { 64 + struct regmap *map; 65 + struct reset_controller_dev rcdev; 66 + }; 67 + 68 + #define to_aspeed_reset(p) container_of((p), struct aspeed_reset, rcdev) 69 + 70 + /** 71 + * struct aspeed_clk_soc_data - Aspeed SoC specific divisor information 72 + * @div_table: Common divider lookup table 73 + * @eclk_div_table: Divider lookup table for ECLK 74 + * @mac_div_table: Divider lookup table for MAC (Ethernet) clocks 75 + * @calc_pll: Callback to maculate common PLL settings 76 + */ 77 + struct aspeed_clk_soc_data { 78 + const struct clk_div_table *div_table; 79 + const struct clk_div_table *eclk_div_table; 80 + const struct clk_div_table *mac_div_table; 81 + struct clk_hw *(*calc_pll)(const char *name, u32 val); 82 + };
+704
drivers/clk/clk-ast2600.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + // Copyright IBM Corp 3 + // Copyright ASPEED Technology 4 + 5 + #define pr_fmt(fmt) "clk-ast2600: " fmt 6 + 7 + #include <linux/mfd/syscon.h> 8 + #include <linux/of_address.h> 9 + #include <linux/of_device.h> 10 + #include <linux/platform_device.h> 11 + #include <linux/regmap.h> 12 + #include <linux/slab.h> 13 + 14 + #include <dt-bindings/clock/ast2600-clock.h> 15 + 16 + #include "clk-aspeed.h" 17 + 18 + #define ASPEED_G6_NUM_CLKS 67 19 + 20 + #define ASPEED_G6_SILICON_REV 0x004 21 + 22 + #define ASPEED_G6_RESET_CTRL 0x040 23 + #define ASPEED_G6_RESET_CTRL2 0x050 24 + 25 + #define ASPEED_G6_CLK_STOP_CTRL 0x080 26 + #define ASPEED_G6_CLK_STOP_CTRL2 0x090 27 + 28 + #define ASPEED_G6_MISC_CTRL 0x0C0 29 + #define UART_DIV13_EN BIT(12) 30 + 31 + #define ASPEED_G6_CLK_SELECTION1 0x300 32 + #define ASPEED_G6_CLK_SELECTION2 0x304 33 + #define ASPEED_G6_CLK_SELECTION4 0x310 34 + 35 + #define ASPEED_HPLL_PARAM 0x200 36 + #define ASPEED_APLL_PARAM 0x210 37 + #define ASPEED_MPLL_PARAM 0x220 38 + #define ASPEED_EPLL_PARAM 0x240 39 + #define ASPEED_DPLL_PARAM 0x260 40 + 41 + #define ASPEED_G6_STRAP1 0x500 42 + 43 + /* Globally visible clocks */ 44 + static DEFINE_SPINLOCK(aspeed_g6_clk_lock); 45 + 46 + /* Keeps track of all clocks */ 47 + static struct clk_hw_onecell_data *aspeed_g6_clk_data; 48 + 49 + static void __iomem *scu_g6_base; 50 + 51 + /* 52 + * Clocks marked with CLK_IS_CRITICAL: 53 + * 54 + * ref0 and ref1 are essential for the SoC to operate 55 + * mpll is required if SDRAM is used 56 + */ 57 + static const struct aspeed_gate_data aspeed_g6_gates[] = { 58 + /* clk rst name parent flags */ 59 + [ASPEED_CLK_GATE_MCLK] = { 0, -1, "mclk-gate", "mpll", CLK_IS_CRITICAL }, /* SDRAM */ 60 + [ASPEED_CLK_GATE_ECLK] = { 1, -1, "eclk-gate", "eclk", 0 }, /* Video Engine */ 61 + [ASPEED_CLK_GATE_GCLK] = { 2, 7, "gclk-gate", NULL, 0 }, /* 2D engine */ 62 + /* vclk parent - dclk/d1clk/hclk/mclk */ 63 + [ASPEED_CLK_GATE_VCLK] = { 3, 6, "vclk-gate", NULL, 0 }, /* Video Capture */ 64 + [ASPEED_CLK_GATE_BCLK] = { 4, 8, "bclk-gate", "bclk", 0 }, /* PCIe/PCI */ 65 + /* From dpll */ 66 + [ASPEED_CLK_GATE_DCLK] = { 5, -1, "dclk-gate", NULL, CLK_IS_CRITICAL }, /* DAC */ 67 + [ASPEED_CLK_GATE_REF0CLK] = { 6, -1, "ref0clk-gate", "clkin", CLK_IS_CRITICAL }, 68 + [ASPEED_CLK_GATE_USBPORT2CLK] = { 7, 3, "usb-port2-gate", NULL, 0 }, /* USB2.0 Host port 2 */ 69 + /* Reserved 8 */ 70 + [ASPEED_CLK_GATE_USBUHCICLK] = { 9, 15, "usb-uhci-gate", NULL, 0 }, /* USB1.1 (requires port 2 enabled) */ 71 + /* From dpll/epll/40mhz usb p1 phy/gpioc6/dp phy pll */ 72 + [ASPEED_CLK_GATE_D1CLK] = { 10, 13, "d1clk-gate", "d1clk", 0 }, /* GFX CRT */ 73 + /* Reserved 11/12 */ 74 + [ASPEED_CLK_GATE_YCLK] = { 13, 4, "yclk-gate", NULL, 0 }, /* HAC */ 75 + [ASPEED_CLK_GATE_USBPORT1CLK] = { 14, 14, "usb-port1-gate", NULL, 0 }, /* USB2 hub/USB2 host port 1/USB1.1 dev */ 76 + [ASPEED_CLK_GATE_UART5CLK] = { 15, -1, "uart5clk-gate", "uart", 0 }, /* UART5 */ 77 + /* Reserved 16/19 */ 78 + [ASPEED_CLK_GATE_MAC1CLK] = { 20, 11, "mac1clk-gate", "mac12", 0 }, /* MAC1 */ 79 + [ASPEED_CLK_GATE_MAC2CLK] = { 21, 12, "mac2clk-gate", "mac12", 0 }, /* MAC2 */ 80 + /* Reserved 22/23 */ 81 + [ASPEED_CLK_GATE_RSACLK] = { 24, 4, "rsaclk-gate", NULL, 0 }, /* HAC */ 82 + [ASPEED_CLK_GATE_RVASCLK] = { 25, 9, "rvasclk-gate", NULL, 0 }, /* RVAS */ 83 + /* Reserved 26 */ 84 + [ASPEED_CLK_GATE_EMMCCLK] = { 27, 16, "emmcclk-gate", NULL, 0 }, /* For card clk */ 85 + /* Reserved 28/29/30 */ 86 + [ASPEED_CLK_GATE_LCLK] = { 32, 32, "lclk-gate", NULL, 0 }, /* LPC */ 87 + [ASPEED_CLK_GATE_ESPICLK] = { 33, -1, "espiclk-gate", NULL, 0 }, /* eSPI */ 88 + [ASPEED_CLK_GATE_REF1CLK] = { 34, -1, "ref1clk-gate", "clkin", CLK_IS_CRITICAL }, 89 + /* Reserved 35 */ 90 + [ASPEED_CLK_GATE_SDCLK] = { 36, 56, "sdclk-gate", NULL, 0 }, /* SDIO/SD */ 91 + [ASPEED_CLK_GATE_LHCCLK] = { 37, -1, "lhclk-gate", "lhclk", 0 }, /* LPC master/LPC+ */ 92 + /* Reserved 38 RSA: no longer used */ 93 + /* Reserved 39 */ 94 + [ASPEED_CLK_GATE_I3C0CLK] = { 40, 40, "i3c0clk-gate", NULL, 0 }, /* I3C0 */ 95 + [ASPEED_CLK_GATE_I3C1CLK] = { 41, 41, "i3c1clk-gate", NULL, 0 }, /* I3C1 */ 96 + [ASPEED_CLK_GATE_I3C2CLK] = { 42, 42, "i3c2clk-gate", NULL, 0 }, /* I3C2 */ 97 + [ASPEED_CLK_GATE_I3C3CLK] = { 43, 43, "i3c3clk-gate", NULL, 0 }, /* I3C3 */ 98 + [ASPEED_CLK_GATE_I3C4CLK] = { 44, 44, "i3c4clk-gate", NULL, 0 }, /* I3C4 */ 99 + [ASPEED_CLK_GATE_I3C5CLK] = { 45, 45, "i3c5clk-gate", NULL, 0 }, /* I3C5 */ 100 + [ASPEED_CLK_GATE_I3C6CLK] = { 46, 46, "i3c6clk-gate", NULL, 0 }, /* I3C6 */ 101 + [ASPEED_CLK_GATE_I3C7CLK] = { 47, 47, "i3c7clk-gate", NULL, 0 }, /* I3C7 */ 102 + [ASPEED_CLK_GATE_UART1CLK] = { 48, -1, "uart1clk-gate", "uart", 0 }, /* UART1 */ 103 + [ASPEED_CLK_GATE_UART2CLK] = { 49, -1, "uart2clk-gate", "uart", 0 }, /* UART2 */ 104 + [ASPEED_CLK_GATE_UART3CLK] = { 50, -1, "uart3clk-gate", "uart", 0 }, /* UART3 */ 105 + [ASPEED_CLK_GATE_UART4CLK] = { 51, -1, "uart4clk-gate", "uart", 0 }, /* UART4 */ 106 + [ASPEED_CLK_GATE_MAC3CLK] = { 52, 52, "mac3clk-gate", "mac34", 0 }, /* MAC3 */ 107 + [ASPEED_CLK_GATE_MAC4CLK] = { 53, 53, "mac4clk-gate", "mac34", 0 }, /* MAC4 */ 108 + [ASPEED_CLK_GATE_UART6CLK] = { 54, -1, "uart6clk-gate", "uartx", 0 }, /* UART6 */ 109 + [ASPEED_CLK_GATE_UART7CLK] = { 55, -1, "uart7clk-gate", "uartx", 0 }, /* UART7 */ 110 + [ASPEED_CLK_GATE_UART8CLK] = { 56, -1, "uart8clk-gate", "uartx", 0 }, /* UART8 */ 111 + [ASPEED_CLK_GATE_UART9CLK] = { 57, -1, "uart9clk-gate", "uartx", 0 }, /* UART9 */ 112 + [ASPEED_CLK_GATE_UART10CLK] = { 58, -1, "uart10clk-gate", "uartx", 0 }, /* UART10 */ 113 + [ASPEED_CLK_GATE_UART11CLK] = { 59, -1, "uart11clk-gate", "uartx", 0 }, /* UART11 */ 114 + [ASPEED_CLK_GATE_UART12CLK] = { 60, -1, "uart12clk-gate", "uartx", 0 }, /* UART12 */ 115 + [ASPEED_CLK_GATE_UART13CLK] = { 61, -1, "uart13clk-gate", "uartx", 0 }, /* UART13 */ 116 + [ASPEED_CLK_GATE_FSICLK] = { 62, 59, "fsiclk-gate", NULL, 0 }, /* FSI */ 117 + }; 118 + 119 + static const char * const eclk_parent_names[] = { "mpll", "hpll", "dpll" }; 120 + 121 + static const struct clk_div_table ast2600_eclk_div_table[] = { 122 + { 0x0, 2 }, 123 + { 0x1, 2 }, 124 + { 0x2, 3 }, 125 + { 0x3, 4 }, 126 + { 0x4, 5 }, 127 + { 0x5, 6 }, 128 + { 0x6, 7 }, 129 + { 0x7, 8 }, 130 + { 0 } 131 + }; 132 + 133 + static const struct clk_div_table ast2600_mac_div_table[] = { 134 + { 0x0, 4 }, 135 + { 0x1, 4 }, 136 + { 0x2, 6 }, 137 + { 0x3, 8 }, 138 + { 0x4, 10 }, 139 + { 0x5, 12 }, 140 + { 0x6, 14 }, 141 + { 0x7, 16 }, 142 + { 0 } 143 + }; 144 + 145 + static const struct clk_div_table ast2600_div_table[] = { 146 + { 0x0, 4 }, 147 + { 0x1, 8 }, 148 + { 0x2, 12 }, 149 + { 0x3, 16 }, 150 + { 0x4, 20 }, 151 + { 0x5, 24 }, 152 + { 0x6, 28 }, 153 + { 0x7, 32 }, 154 + { 0 } 155 + }; 156 + 157 + /* For hpll/dpll/epll/mpll */ 158 + static struct clk_hw *ast2600_calc_pll(const char *name, u32 val) 159 + { 160 + unsigned int mult, div; 161 + 162 + if (val & BIT(24)) { 163 + /* Pass through mode */ 164 + mult = div = 1; 165 + } else { 166 + /* F = 25Mhz * [(M + 2) / (n + 1)] / (p + 1) */ 167 + u32 m = val & 0x1fff; 168 + u32 n = (val >> 13) & 0x3f; 169 + u32 p = (val >> 19) & 0xf; 170 + mult = (m + 1) / (n + 1); 171 + div = (p + 1); 172 + } 173 + return clk_hw_register_fixed_factor(NULL, name, "clkin", 0, 174 + mult, div); 175 + }; 176 + 177 + static struct clk_hw *ast2600_calc_apll(const char *name, u32 val) 178 + { 179 + unsigned int mult, div; 180 + 181 + if (val & BIT(20)) { 182 + /* Pass through mode */ 183 + mult = div = 1; 184 + } else { 185 + /* F = 25Mhz * (2-od) * [(m + 2) / (n + 1)] */ 186 + u32 m = (val >> 5) & 0x3f; 187 + u32 od = (val >> 4) & 0x1; 188 + u32 n = val & 0xf; 189 + 190 + mult = (2 - od) * (m + 2); 191 + div = n + 1; 192 + } 193 + return clk_hw_register_fixed_factor(NULL, name, "clkin", 0, 194 + mult, div); 195 + }; 196 + 197 + static u32 get_bit(u8 idx) 198 + { 199 + return BIT(idx % 32); 200 + } 201 + 202 + static u32 get_reset_reg(struct aspeed_clk_gate *gate) 203 + { 204 + if (gate->reset_idx < 32) 205 + return ASPEED_G6_RESET_CTRL; 206 + 207 + return ASPEED_G6_RESET_CTRL2; 208 + } 209 + 210 + static u32 get_clock_reg(struct aspeed_clk_gate *gate) 211 + { 212 + if (gate->clock_idx < 32) 213 + return ASPEED_G6_CLK_STOP_CTRL; 214 + 215 + return ASPEED_G6_CLK_STOP_CTRL2; 216 + } 217 + 218 + static int aspeed_g6_clk_is_enabled(struct clk_hw *hw) 219 + { 220 + struct aspeed_clk_gate *gate = to_aspeed_clk_gate(hw); 221 + u32 clk = get_bit(gate->clock_idx); 222 + u32 rst = get_bit(gate->reset_idx); 223 + u32 reg; 224 + u32 enval; 225 + 226 + /* 227 + * If the IP is in reset, treat the clock as not enabled, 228 + * this happens with some clocks such as the USB one when 229 + * coming from cold reset. Without this, aspeed_clk_enable() 230 + * will fail to lift the reset. 231 + */ 232 + if (gate->reset_idx >= 0) { 233 + regmap_read(gate->map, get_reset_reg(gate), &reg); 234 + 235 + if (reg & rst) 236 + return 0; 237 + } 238 + 239 + regmap_read(gate->map, get_clock_reg(gate), &reg); 240 + 241 + enval = (gate->flags & CLK_GATE_SET_TO_DISABLE) ? 0 : clk; 242 + 243 + return ((reg & clk) == enval) ? 1 : 0; 244 + } 245 + 246 + static int aspeed_g6_clk_enable(struct clk_hw *hw) 247 + { 248 + struct aspeed_clk_gate *gate = to_aspeed_clk_gate(hw); 249 + unsigned long flags; 250 + u32 clk = get_bit(gate->clock_idx); 251 + u32 rst = get_bit(gate->reset_idx); 252 + 253 + spin_lock_irqsave(gate->lock, flags); 254 + 255 + if (aspeed_g6_clk_is_enabled(hw)) { 256 + spin_unlock_irqrestore(gate->lock, flags); 257 + return 0; 258 + } 259 + 260 + if (gate->reset_idx >= 0) { 261 + /* Put IP in reset */ 262 + regmap_write(gate->map, get_reset_reg(gate), rst); 263 + /* Delay 100us */ 264 + udelay(100); 265 + } 266 + 267 + /* Enable clock */ 268 + if (gate->flags & CLK_GATE_SET_TO_DISABLE) { 269 + regmap_write(gate->map, get_clock_reg(gate), clk); 270 + } else { 271 + /* Use set to clear register */ 272 + regmap_write(gate->map, get_clock_reg(gate) + 0x04, clk); 273 + } 274 + 275 + if (gate->reset_idx >= 0) { 276 + /* A delay of 10ms is specified by the ASPEED docs */ 277 + mdelay(10); 278 + /* Take IP out of reset */ 279 + regmap_write(gate->map, get_reset_reg(gate) + 0x4, rst); 280 + } 281 + 282 + spin_unlock_irqrestore(gate->lock, flags); 283 + 284 + return 0; 285 + } 286 + 287 + static void aspeed_g6_clk_disable(struct clk_hw *hw) 288 + { 289 + struct aspeed_clk_gate *gate = to_aspeed_clk_gate(hw); 290 + unsigned long flags; 291 + u32 clk = get_bit(gate->clock_idx); 292 + 293 + spin_lock_irqsave(gate->lock, flags); 294 + 295 + if (gate->flags & CLK_GATE_SET_TO_DISABLE) { 296 + regmap_write(gate->map, get_clock_reg(gate), clk); 297 + } else { 298 + /* Use set to clear register */ 299 + regmap_write(gate->map, get_clock_reg(gate) + 0x4, clk); 300 + } 301 + 302 + spin_unlock_irqrestore(gate->lock, flags); 303 + } 304 + 305 + static const struct clk_ops aspeed_g6_clk_gate_ops = { 306 + .enable = aspeed_g6_clk_enable, 307 + .disable = aspeed_g6_clk_disable, 308 + .is_enabled = aspeed_g6_clk_is_enabled, 309 + }; 310 + 311 + static int aspeed_g6_reset_deassert(struct reset_controller_dev *rcdev, 312 + unsigned long id) 313 + { 314 + struct aspeed_reset *ar = to_aspeed_reset(rcdev); 315 + u32 rst = get_bit(id); 316 + u32 reg = id >= 32 ? ASPEED_G6_RESET_CTRL2 : ASPEED_G6_RESET_CTRL; 317 + 318 + /* Use set to clear register */ 319 + return regmap_write(ar->map, reg + 0x04, rst); 320 + } 321 + 322 + static int aspeed_g6_reset_assert(struct reset_controller_dev *rcdev, 323 + unsigned long id) 324 + { 325 + struct aspeed_reset *ar = to_aspeed_reset(rcdev); 326 + u32 rst = get_bit(id); 327 + u32 reg = id >= 32 ? ASPEED_G6_RESET_CTRL2 : ASPEED_G6_RESET_CTRL; 328 + 329 + return regmap_write(ar->map, reg, rst); 330 + } 331 + 332 + static int aspeed_g6_reset_status(struct reset_controller_dev *rcdev, 333 + unsigned long id) 334 + { 335 + struct aspeed_reset *ar = to_aspeed_reset(rcdev); 336 + int ret; 337 + u32 val; 338 + u32 rst = get_bit(id); 339 + u32 reg = id >= 32 ? ASPEED_G6_RESET_CTRL2 : ASPEED_G6_RESET_CTRL; 340 + 341 + ret = regmap_read(ar->map, reg, &val); 342 + if (ret) 343 + return ret; 344 + 345 + return !!(val & rst); 346 + } 347 + 348 + static const struct reset_control_ops aspeed_g6_reset_ops = { 349 + .assert = aspeed_g6_reset_assert, 350 + .deassert = aspeed_g6_reset_deassert, 351 + .status = aspeed_g6_reset_status, 352 + }; 353 + 354 + static struct clk_hw *aspeed_g6_clk_hw_register_gate(struct device *dev, 355 + const char *name, const char *parent_name, unsigned long flags, 356 + struct regmap *map, u8 clock_idx, u8 reset_idx, 357 + u8 clk_gate_flags, spinlock_t *lock) 358 + { 359 + struct aspeed_clk_gate *gate; 360 + struct clk_init_data init; 361 + struct clk_hw *hw; 362 + int ret; 363 + 364 + gate = kzalloc(sizeof(*gate), GFP_KERNEL); 365 + if (!gate) 366 + return ERR_PTR(-ENOMEM); 367 + 368 + init.name = name; 369 + init.ops = &aspeed_g6_clk_gate_ops; 370 + init.flags = flags; 371 + init.parent_names = parent_name ? &parent_name : NULL; 372 + init.num_parents = parent_name ? 1 : 0; 373 + 374 + gate->map = map; 375 + gate->clock_idx = clock_idx; 376 + gate->reset_idx = reset_idx; 377 + gate->flags = clk_gate_flags; 378 + gate->lock = lock; 379 + gate->hw.init = &init; 380 + 381 + hw = &gate->hw; 382 + ret = clk_hw_register(dev, hw); 383 + if (ret) { 384 + kfree(gate); 385 + hw = ERR_PTR(ret); 386 + } 387 + 388 + return hw; 389 + } 390 + 391 + static const char * const vclk_parent_names[] = { 392 + "dpll", 393 + "d1pll", 394 + "hclk", 395 + "mclk", 396 + }; 397 + 398 + static const char * const d1clk_parent_names[] = { 399 + "dpll", 400 + "epll", 401 + "usb-phy-40m", 402 + "gpioc6_clkin", 403 + "dp_phy_pll", 404 + }; 405 + 406 + static int aspeed_g6_clk_probe(struct platform_device *pdev) 407 + { 408 + struct device *dev = &pdev->dev; 409 + struct aspeed_reset *ar; 410 + struct regmap *map; 411 + struct clk_hw *hw; 412 + u32 val, rate; 413 + int i, ret; 414 + 415 + map = syscon_node_to_regmap(dev->of_node); 416 + if (IS_ERR(map)) { 417 + dev_err(dev, "no syscon regmap\n"); 418 + return PTR_ERR(map); 419 + } 420 + 421 + ar = devm_kzalloc(dev, sizeof(*ar), GFP_KERNEL); 422 + if (!ar) 423 + return -ENOMEM; 424 + 425 + ar->map = map; 426 + 427 + ar->rcdev.owner = THIS_MODULE; 428 + ar->rcdev.nr_resets = 64; 429 + ar->rcdev.ops = &aspeed_g6_reset_ops; 430 + ar->rcdev.of_node = dev->of_node; 431 + 432 + ret = devm_reset_controller_register(dev, &ar->rcdev); 433 + if (ret) { 434 + dev_err(dev, "could not register reset controller\n"); 435 + return ret; 436 + } 437 + 438 + /* UART clock div13 setting */ 439 + regmap_read(map, ASPEED_G6_MISC_CTRL, &val); 440 + if (val & UART_DIV13_EN) 441 + rate = 24000000 / 13; 442 + else 443 + rate = 24000000; 444 + hw = clk_hw_register_fixed_rate(dev, "uart", NULL, 0, rate); 445 + if (IS_ERR(hw)) 446 + return PTR_ERR(hw); 447 + aspeed_g6_clk_data->hws[ASPEED_CLK_UART] = hw; 448 + 449 + /* UART6~13 clock div13 setting */ 450 + regmap_read(map, 0x80, &val); 451 + if (val & BIT(31)) 452 + rate = 24000000 / 13; 453 + else 454 + rate = 24000000; 455 + hw = clk_hw_register_fixed_rate(dev, "uartx", NULL, 0, rate); 456 + if (IS_ERR(hw)) 457 + return PTR_ERR(hw); 458 + aspeed_g6_clk_data->hws[ASPEED_CLK_UARTX] = hw; 459 + 460 + /* EMMC ext clock divider */ 461 + hw = clk_hw_register_gate(dev, "emmc_extclk_gate", "hpll", 0, 462 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 15, 0, 463 + &aspeed_g6_clk_lock); 464 + if (IS_ERR(hw)) 465 + return PTR_ERR(hw); 466 + hw = clk_hw_register_divider_table(dev, "emmc_extclk", "emmc_extclk_gate", 0, 467 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 12, 3, 0, 468 + ast2600_div_table, 469 + &aspeed_g6_clk_lock); 470 + if (IS_ERR(hw)) 471 + return PTR_ERR(hw); 472 + aspeed_g6_clk_data->hws[ASPEED_CLK_EMMC] = hw; 473 + 474 + /* SD/SDIO clock divider and gate */ 475 + hw = clk_hw_register_gate(dev, "sd_extclk_gate", "hpll", 0, 476 + scu_g6_base + ASPEED_G6_CLK_SELECTION4, 31, 0, 477 + &aspeed_g6_clk_lock); 478 + if (IS_ERR(hw)) 479 + return PTR_ERR(hw); 480 + hw = clk_hw_register_divider_table(dev, "sd_extclk", "sd_extclk_gate", 481 + 0, scu_g6_base + ASPEED_G6_CLK_SELECTION4, 28, 3, 0, 482 + ast2600_div_table, 483 + &aspeed_g6_clk_lock); 484 + if (IS_ERR(hw)) 485 + return PTR_ERR(hw); 486 + aspeed_g6_clk_data->hws[ASPEED_CLK_SDIO] = hw; 487 + 488 + /* MAC1/2 AHB bus clock divider */ 489 + hw = clk_hw_register_divider_table(dev, "mac12", "hpll", 0, 490 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 16, 3, 0, 491 + ast2600_mac_div_table, 492 + &aspeed_g6_clk_lock); 493 + if (IS_ERR(hw)) 494 + return PTR_ERR(hw); 495 + aspeed_g6_clk_data->hws[ASPEED_CLK_MAC12] = hw; 496 + 497 + /* MAC3/4 AHB bus clock divider */ 498 + hw = clk_hw_register_divider_table(dev, "mac34", "hpll", 0, 499 + scu_g6_base + 0x310, 24, 3, 0, 500 + ast2600_mac_div_table, 501 + &aspeed_g6_clk_lock); 502 + if (IS_ERR(hw)) 503 + return PTR_ERR(hw); 504 + aspeed_g6_clk_data->hws[ASPEED_CLK_MAC34] = hw; 505 + 506 + /* LPC Host (LHCLK) clock divider */ 507 + hw = clk_hw_register_divider_table(dev, "lhclk", "hpll", 0, 508 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 20, 3, 0, 509 + ast2600_div_table, 510 + &aspeed_g6_clk_lock); 511 + if (IS_ERR(hw)) 512 + return PTR_ERR(hw); 513 + aspeed_g6_clk_data->hws[ASPEED_CLK_LHCLK] = hw; 514 + 515 + /* gfx d1clk : use dp clk */ 516 + regmap_update_bits(map, ASPEED_G6_CLK_SELECTION1, GENMASK(10, 8), BIT(10)); 517 + /* SoC Display clock selection */ 518 + hw = clk_hw_register_mux(dev, "d1clk", d1clk_parent_names, 519 + ARRAY_SIZE(d1clk_parent_names), 0, 520 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 8, 3, 0, 521 + &aspeed_g6_clk_lock); 522 + if (IS_ERR(hw)) 523 + return PTR_ERR(hw); 524 + aspeed_g6_clk_data->hws[ASPEED_CLK_D1CLK] = hw; 525 + 526 + /* d1 clk div 0x308[17:15] x [14:12] - 8,7,6,5,4,3,2,1 */ 527 + regmap_write(map, 0x308, 0x12000); /* 3x3 = 9 */ 528 + 529 + /* P-Bus (BCLK) clock divider */ 530 + hw = clk_hw_register_divider_table(dev, "bclk", "hpll", 0, 531 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 20, 3, 0, 532 + ast2600_div_table, 533 + &aspeed_g6_clk_lock); 534 + if (IS_ERR(hw)) 535 + return PTR_ERR(hw); 536 + aspeed_g6_clk_data->hws[ASPEED_CLK_BCLK] = hw; 537 + 538 + /* Video Capture clock selection */ 539 + hw = clk_hw_register_mux(dev, "vclk", vclk_parent_names, 540 + ARRAY_SIZE(vclk_parent_names), 0, 541 + scu_g6_base + ASPEED_G6_CLK_SELECTION2, 12, 3, 0, 542 + &aspeed_g6_clk_lock); 543 + if (IS_ERR(hw)) 544 + return PTR_ERR(hw); 545 + aspeed_g6_clk_data->hws[ASPEED_CLK_VCLK] = hw; 546 + 547 + /* Video Engine clock divider */ 548 + hw = clk_hw_register_divider_table(dev, "eclk", NULL, 0, 549 + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 28, 3, 0, 550 + ast2600_eclk_div_table, 551 + &aspeed_g6_clk_lock); 552 + if (IS_ERR(hw)) 553 + return PTR_ERR(hw); 554 + aspeed_g6_clk_data->hws[ASPEED_CLK_ECLK] = hw; 555 + 556 + for (i = 0; i < ARRAY_SIZE(aspeed_g6_gates); i++) { 557 + const struct aspeed_gate_data *gd = &aspeed_g6_gates[i]; 558 + u32 gate_flags; 559 + 560 + /* 561 + * Special case: the USB port 1 clock (bit 14) is always 562 + * working the opposite way from the other ones. 563 + */ 564 + gate_flags = (gd->clock_idx == 14) ? 0 : CLK_GATE_SET_TO_DISABLE; 565 + hw = aspeed_g6_clk_hw_register_gate(dev, 566 + gd->name, 567 + gd->parent_name, 568 + gd->flags, 569 + map, 570 + gd->clock_idx, 571 + gd->reset_idx, 572 + gate_flags, 573 + &aspeed_g6_clk_lock); 574 + if (IS_ERR(hw)) 575 + return PTR_ERR(hw); 576 + aspeed_g6_clk_data->hws[i] = hw; 577 + } 578 + 579 + return 0; 580 + }; 581 + 582 + static const struct of_device_id aspeed_g6_clk_dt_ids[] = { 583 + { .compatible = "aspeed,ast2600-scu" }, 584 + { } 585 + }; 586 + 587 + static struct platform_driver aspeed_g6_clk_driver = { 588 + .probe = aspeed_g6_clk_probe, 589 + .driver = { 590 + .name = "ast2600-clk", 591 + .of_match_table = aspeed_g6_clk_dt_ids, 592 + .suppress_bind_attrs = true, 593 + }, 594 + }; 595 + builtin_platform_driver(aspeed_g6_clk_driver); 596 + 597 + static const u32 ast2600_a0_axi_ahb_div_table[] = { 598 + 2, 2, 3, 5, 599 + }; 600 + 601 + static const u32 ast2600_a1_axi_ahb_div_table[] = { 602 + 4, 6, 2, 4, 603 + }; 604 + 605 + static void __init aspeed_g6_cc(struct regmap *map) 606 + { 607 + struct clk_hw *hw; 608 + u32 val, div, chip_id, axi_div, ahb_div; 609 + 610 + clk_hw_register_fixed_rate(NULL, "clkin", NULL, 0, 25000000); 611 + 612 + /* 613 + * High-speed PLL clock derived from the crystal. This the CPU clock, 614 + * and we assume that it is enabled 615 + */ 616 + regmap_read(map, ASPEED_HPLL_PARAM, &val); 617 + aspeed_g6_clk_data->hws[ASPEED_CLK_HPLL] = ast2600_calc_pll("hpll", val); 618 + 619 + regmap_read(map, ASPEED_MPLL_PARAM, &val); 620 + aspeed_g6_clk_data->hws[ASPEED_CLK_MPLL] = ast2600_calc_pll("mpll", val); 621 + 622 + regmap_read(map, ASPEED_DPLL_PARAM, &val); 623 + aspeed_g6_clk_data->hws[ASPEED_CLK_DPLL] = ast2600_calc_pll("dpll", val); 624 + 625 + regmap_read(map, ASPEED_EPLL_PARAM, &val); 626 + aspeed_g6_clk_data->hws[ASPEED_CLK_EPLL] = ast2600_calc_pll("epll", val); 627 + 628 + regmap_read(map, ASPEED_APLL_PARAM, &val); 629 + aspeed_g6_clk_data->hws[ASPEED_CLK_APLL] = ast2600_calc_apll("apll", val); 630 + 631 + /* Strap bits 12:11 define the AXI/AHB clock frequency ratio (aka HCLK)*/ 632 + regmap_read(map, ASPEED_G6_STRAP1, &val); 633 + if (val & BIT(16)) 634 + axi_div = 1; 635 + else 636 + axi_div = 2; 637 + 638 + regmap_read(map, ASPEED_G6_SILICON_REV, &chip_id); 639 + if (chip_id & BIT(16)) 640 + ahb_div = ast2600_a1_axi_ahb_div_table[(val >> 11) & 0x3]; 641 + else 642 + ahb_div = ast2600_a0_axi_ahb_div_table[(val >> 11) & 0x3]; 643 + 644 + hw = clk_hw_register_fixed_factor(NULL, "ahb", "hpll", 0, 1, axi_div * ahb_div); 645 + aspeed_g6_clk_data->hws[ASPEED_CLK_AHB] = hw; 646 + 647 + regmap_read(map, ASPEED_G6_CLK_SELECTION1, &val); 648 + val = (val >> 23) & 0x7; 649 + div = 4 * (val + 1); 650 + hw = clk_hw_register_fixed_factor(NULL, "apb1", "hpll", 0, 1, div); 651 + aspeed_g6_clk_data->hws[ASPEED_CLK_APB1] = hw; 652 + 653 + regmap_read(map, ASPEED_G6_CLK_SELECTION4, &val); 654 + val = (val >> 9) & 0x7; 655 + div = 2 * (val + 1); 656 + hw = clk_hw_register_fixed_factor(NULL, "apb2", "ahb", 0, 1, div); 657 + aspeed_g6_clk_data->hws[ASPEED_CLK_APB2] = hw; 658 + 659 + /* USB 2.0 port1 phy 40MHz clock */ 660 + hw = clk_hw_register_fixed_rate(NULL, "usb-phy-40m", NULL, 0, 40000000); 661 + aspeed_g6_clk_data->hws[ASPEED_CLK_USBPHY_40M] = hw; 662 + }; 663 + 664 + static void __init aspeed_g6_cc_init(struct device_node *np) 665 + { 666 + struct regmap *map; 667 + int ret; 668 + int i; 669 + 670 + scu_g6_base = of_iomap(np, 0); 671 + if (!scu_g6_base) 672 + return; 673 + 674 + aspeed_g6_clk_data = kzalloc(struct_size(aspeed_g6_clk_data, hws, 675 + ASPEED_G6_NUM_CLKS), GFP_KERNEL); 676 + if (!aspeed_g6_clk_data) 677 + return; 678 + 679 + /* 680 + * This way all clocks fetched before the platform device probes, 681 + * except those we assign here for early use, will be deferred. 682 + */ 683 + for (i = 0; i < ASPEED_G6_NUM_CLKS; i++) 684 + aspeed_g6_clk_data->hws[i] = ERR_PTR(-EPROBE_DEFER); 685 + 686 + /* 687 + * We check that the regmap works on this very first access, 688 + * but as this is an MMIO-backed regmap, subsequent regmap 689 + * access is not going to fail and we skip error checks from 690 + * this point. 691 + */ 692 + map = syscon_node_to_regmap(np); 693 + if (IS_ERR(map)) { 694 + pr_err("no syscon regmap\n"); 695 + return; 696 + } 697 + 698 + aspeed_g6_cc(map); 699 + aspeed_g6_clk_data->num = ASPEED_G6_NUM_CLKS; 700 + ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, aspeed_g6_clk_data); 701 + if (ret) 702 + pr_err("failed to add DT provider: %d\n", ret); 703 + }; 704 + CLK_OF_DECLARE_DRIVER(aspeed_cc_g6, "aspeed,ast2600-scu", aspeed_g6_cc_init);
+113
include/dt-bindings/clock/ast2600-clock.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-or-later OR MIT */ 2 + #ifndef DT_BINDINGS_AST2600_CLOCK_H 3 + #define DT_BINDINGS_AST2600_CLOCK_H 4 + 5 + #define ASPEED_CLK_GATE_ECLK 0 6 + #define ASPEED_CLK_GATE_GCLK 1 7 + 8 + #define ASPEED_CLK_GATE_MCLK 2 9 + 10 + #define ASPEED_CLK_GATE_VCLK 3 11 + #define ASPEED_CLK_GATE_BCLK 4 12 + #define ASPEED_CLK_GATE_DCLK 5 13 + 14 + #define ASPEED_CLK_GATE_LCLK 6 15 + #define ASPEED_CLK_GATE_LHCCLK 7 16 + 17 + #define ASPEED_CLK_GATE_D1CLK 8 18 + #define ASPEED_CLK_GATE_YCLK 9 19 + 20 + #define ASPEED_CLK_GATE_REF0CLK 10 21 + #define ASPEED_CLK_GATE_REF1CLK 11 22 + 23 + #define ASPEED_CLK_GATE_ESPICLK 12 24 + 25 + #define ASPEED_CLK_GATE_USBUHCICLK 13 26 + #define ASPEED_CLK_GATE_USBPORT1CLK 14 27 + #define ASPEED_CLK_GATE_USBPORT2CLK 15 28 + 29 + #define ASPEED_CLK_GATE_RSACLK 16 30 + #define ASPEED_CLK_GATE_RVASCLK 17 31 + 32 + #define ASPEED_CLK_GATE_MAC1CLK 18 33 + #define ASPEED_CLK_GATE_MAC2CLK 19 34 + #define ASPEED_CLK_GATE_MAC3CLK 20 35 + #define ASPEED_CLK_GATE_MAC4CLK 21 36 + 37 + #define ASPEED_CLK_GATE_UART1CLK 22 38 + #define ASPEED_CLK_GATE_UART2CLK 23 39 + #define ASPEED_CLK_GATE_UART3CLK 24 40 + #define ASPEED_CLK_GATE_UART4CLK 25 41 + #define ASPEED_CLK_GATE_UART5CLK 26 42 + #define ASPEED_CLK_GATE_UART6CLK 27 43 + #define ASPEED_CLK_GATE_UART7CLK 28 44 + #define ASPEED_CLK_GATE_UART8CLK 29 45 + #define ASPEED_CLK_GATE_UART9CLK 30 46 + #define ASPEED_CLK_GATE_UART10CLK 31 47 + #define ASPEED_CLK_GATE_UART11CLK 32 48 + #define ASPEED_CLK_GATE_UART12CLK 33 49 + #define ASPEED_CLK_GATE_UART13CLK 34 50 + 51 + #define ASPEED_CLK_GATE_SDCLK 35 52 + #define ASPEED_CLK_GATE_EMMCCLK 36 53 + 54 + #define ASPEED_CLK_GATE_I3C0CLK 37 55 + #define ASPEED_CLK_GATE_I3C1CLK 38 56 + #define ASPEED_CLK_GATE_I3C2CLK 39 57 + #define ASPEED_CLK_GATE_I3C3CLK 40 58 + #define ASPEED_CLK_GATE_I3C4CLK 41 59 + #define ASPEED_CLK_GATE_I3C5CLK 42 60 + #define ASPEED_CLK_GATE_I3C6CLK 43 61 + #define ASPEED_CLK_GATE_I3C7CLK 44 62 + 63 + #define ASPEED_CLK_GATE_FSICLK 45 64 + 65 + #define ASPEED_CLK_HPLL 46 66 + #define ASPEED_CLK_MPLL 47 67 + #define ASPEED_CLK_DPLL 48 68 + #define ASPEED_CLK_EPLL 49 69 + #define ASPEED_CLK_APLL 50 70 + #define ASPEED_CLK_AHB 51 71 + #define ASPEED_CLK_APB1 52 72 + #define ASPEED_CLK_APB2 53 73 + #define ASPEED_CLK_BCLK 54 74 + #define ASPEED_CLK_D1CLK 55 75 + #define ASPEED_CLK_VCLK 56 76 + #define ASPEED_CLK_LHCLK 57 77 + #define ASPEED_CLK_UART 58 78 + #define ASPEED_CLK_UARTX 59 79 + #define ASPEED_CLK_SDIO 60 80 + #define ASPEED_CLK_EMMC 61 81 + #define ASPEED_CLK_ECLK 62 82 + #define ASPEED_CLK_ECLK_MUX 63 83 + #define ASPEED_CLK_MAC12 64 84 + #define ASPEED_CLK_MAC34 65 85 + #define ASPEED_CLK_USBPHY_40M 66 86 + 87 + /* Only list resets here that are not part of a gate */ 88 + #define ASPEED_RESET_ADC 55 89 + #define ASPEED_RESET_JTAG_MASTER2 54 90 + #define ASPEED_RESET_I3C_DMA 39 91 + #define ASPEED_RESET_PWM 37 92 + #define ASPEED_RESET_PECI 36 93 + #define ASPEED_RESET_MII 35 94 + #define ASPEED_RESET_I2C 34 95 + #define ASPEED_RESET_H2X 31 96 + #define ASPEED_RESET_GP_MCU 30 97 + #define ASPEED_RESET_DP_MCU 29 98 + #define ASPEED_RESET_DP 28 99 + #define ASPEED_RESET_RC_XDMA 27 100 + #define ASPEED_RESET_GRAPHICS 26 101 + #define ASPEED_RESET_DEV_XDMA 25 102 + #define ASPEED_RESET_DEV_MCTP 24 103 + #define ASPEED_RESET_RC_MCTP 23 104 + #define ASPEED_RESET_JTAG_MASTER 22 105 + #define ASPEED_RESET_PCIE_DEV_O 21 106 + #define ASPEED_RESET_PCIE_DEV_OEN 20 107 + #define ASPEED_RESET_PCIE_RC_O 19 108 + #define ASPEED_RESET_PCIE_RC_OEN 18 109 + #define ASPEED_RESET_PCI_DP 5 110 + #define ASPEED_RESET_AHB 1 111 + #define ASPEED_RESET_SDRAM 0 112 + 113 + #endif