SC598 Clock Tree

        graph LR
    Crystal["SYS_CLKIN0<br/>25 MHz<br/>(sc5xx.dtsi:80)"]

    subgraph CGU0["CGU0 - Main CGU (clk-adi-sc598.c:100-209)"]
        DF0["DF: ÷1<br/>25 MHz"]
        VCO0["VCO: ×80<br/>2000 MHz<br/>(CGU_CTL MSEL)"]
        PLL0["PLLCLK: ÷2<br/>1000 MHz<br/>(line 125-128)"]

        CCLK0_0["CCLK0_0<br/>500 MHz<br/>÷2 (CDIV)"]
        SYSCLK0["SYSCLK_0<br/>250 MHz<br/>÷4 (SYSSEL)"]
        DCLK0["DCLK_0<br/>333 MHz<br/>÷3 (DDIV)"]
        OCLK0["OCLK_0<br/>62.5 MHz<br/>÷16 (ODIV)"]

        SCLK0_0["SCLK0_0<br/>62.5 MHz<br/>÷4"]
        SCLK1_0["SCLK1_0<br/>125 MHz<br/>÷2"]

        CCLK2_0["CCLK2_0<br/>667 MHz<br/>VCO÷3 direct<br/>(line 158-161)"]

        DCLK0_HALF["DCLK_0_HALF<br/>167 MHz<br/>÷2 (line 223)"]
    end

    subgraph CGU1["CGU1 - Secondary CGU (clk-adi-sc598.c:104-220)"]
        DF1["DF: ÷1<br/>25 MHz"]
        VCO1["VCO: ×64<br/>1600 MHz"]
        PLL1["PLLCLK: ÷2<br/>800 MHz"]

        CCLK0_1["CCLK0_1<br/>400 MHz<br/>÷2"]
        SYSCLK1["SYSCLK_1<br/>200 MHz<br/>÷4"]
        DCLK1["DCLK_1<br/>400 MHz<br/>÷2"]
        OCLK1["OCLK_1<br/>50 MHz<br/>÷16"]

        SCLK0_1["SCLK0_1<br/>50 MHz<br/>÷4"]
        SCLK1_1["SCLK1_1<br/>100 MHz<br/>÷2"]

        CCLK2_1["CCLK2_1<br/>533 MHz<br/>VCO÷3 direct"]

        SCLK1_1_HALF["SCLK1_1_HALF<br/>50 MHz<br/>÷2 (line 231)"]
    end

    subgraph PLL3["3rd PLL - Optional DDR Source<br/>(clk-adi-sc598.c:108-111, clkinit.c:383-440)"]
        PLL3_VCO["VCO: ×64<br/>1600 MHz"]
        PLL3_OUT["3PLL_DDIV<br/>400 MHz<br/>÷2"]
        PLL3_DDR_SEL["DDR Mux<br/>(line 285-287)<br/>selects DCLK_0 or 3PLL"]
    end

    subgraph CDU["CDU - Clock Distribution (0x3108F000)"]
        SHARC0["CLKO0: SHARC-FX<br/>500 MHz<br/>(CDU_CFG0)"]
        SHARC1["CLKO1: SHARC1<br/>500 MHz<br/>(CDU_CFG1)"]
        ARM["CLKO2: ARM<br/>533 MHz<br/>(CDU_CFG2)"]
        DDR["CLKO3: DDR<br/>333 MHz<br/>(CDU_CFG3)"]
        CAN["CLKO4: CAN<br/>50 MHz<br/>(CDU_CFG4)"]
        SPDIF["CLKO5: SPDIF<br/>125 MHz<br/>(CDU_CFG5)"]
        SPI["CLKO6: SPI<br/>62.5 MHz<br/>(CDU_CFG6)"]
        GIGE["CLKO7: GigE<br/>62.5 MHz<br/>(CDU_CFG7)"]
        LP["CLKO8: LP<br/>400 MHz<br/>(CDU_CFG8)"]
        LP_DDR["CLKO9: LP_DDR<br/>62.5 MHz<br/>(CDU_CFG9)"]
        OSPI["CLKO10: OSPI<br/>100 MHz<br/>(CDU_CFG10)"]
        TRACE["CLKO12: TRACE<br/>62.5 MHz<br/>(CDU_CFG12)"]
        EMMC["CLKO13: EMMC<br/>167 MHz<br/>(CDU_CFG13)"]
        EMMC_TMR["CLKO14: EMMC_TMR<br/>50 MHz<br/>(CDU_CFG14)"]
    end

    Crystal --> DF0
    Crystal --> DF1
    Crystal --> PLL3_VCO

    DF0 --> VCO0
    VCO0 --> PLL0
    VCO0 --> CCLK2_0

    PLL0 --> CCLK0_0
    PLL0 --> SYSCLK0
    PLL0 --> DCLK0
    PLL0 --> OCLK0

    SYSCLK0 --> SCLK0_0
    SYSCLK0 --> SCLK1_0
    DCLK0 --> DCLK0_HALF

    DF1 --> VCO1
    VCO1 --> PLL1
    VCO1 --> CCLK2_1

    PLL1 --> CCLK0_1
    PLL1 --> SYSCLK1
    PLL1 --> DCLK1
    PLL1 --> OCLK1

    SYSCLK1 --> SCLK0_1
    SYSCLK1 --> SCLK1_1
    SCLK1_1 --> SCLK1_1_HALF

    PLL3_VCO --> PLL3_OUT
    PLL3_OUT --> PLL3_DDR_SEL
    DCLK0 --> PLL3_DDR_SEL

    CCLK0_0 -.-> SHARC0
    CCLK0_0 -.-> SHARC1
    CCLK2_1 -.-> ARM
    PLL3_DDR_SEL -.-> DDR
    OCLK1 -.-> CAN
    SCLK1_0 -.-> SPDIF
    SCLK0_0 -.-> SPI
    SCLK0_0 -.-> GIGE
    CCLK0_1 -.-> LP
    OCLK0 -.-> LP_DDR
    SCLK1_1 -.-> OSPI
    SCLK0_0 -.-> TRACE
    DCLK0_HALF -.-> EMMC
    SCLK1_1_HALF -.-> EMMC_TMR

    classDef cgu0 fill:#e1f5ff,stroke:#01579b,stroke-width:2px
    classDef cgu1 fill:#fff3e0,stroke:#e65100,stroke-width:2px
    classDef pll3 fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
    classDef cdu fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px

    class CCLK0_0,SYSCLK0,DCLK0,OCLK0,SCLK0_0,SCLK1_0,CCLK2_0,DCLK0_HALF cgu0
    class CCLK0_1,SYSCLK1,DCLK1,OCLK1,SCLK0_1,SCLK1_1,CCLK2_1,SCLK1_1_HALF cgu1
    class PLL3_OUT pll3
    class SHARC0,SHARC1,ARM,DDR,CAN,SPDIF,SPI,GIGE,LP,LP_DDR,OSPI,TRACE,EMMC,EMMC_TMR cdu
    
  • Solid lines: Clock flow through dividers

  • Dashed lines: CDU mux selection to peripherals

  • Blue boxes: CGU0 outputs (Main CGU)

  • Orange boxes: CGU1 outputs (Secondary CGU)

  • Purple boxes: 3rd PLL outputs (DDR-specific)

  • Green boxes: CDU peripheral outputs