1be7064f8SJoseph Chen/* 2be7064f8SJoseph Chen * (C) Copyright 2020 Rockchip Electronics Co., Ltd 3be7064f8SJoseph Chen * 4be7064f8SJoseph Chen * SPDX-License-Identifier: GPL-2.0+ 5be7064f8SJoseph Chen */ 6be7064f8SJoseph Chen 7be7064f8SJoseph Chen/ { 8be7064f8SJoseph Chen aliases { 934ddf661SDavid Wu ethernet0 = &gmac0; 1034ddf661SDavid Wu ethernet1 = &gmac1; 11be7064f8SJoseph Chen mmc0 = &sdhci; 12be7064f8SJoseph Chen mmc1 = &sdmmc0; 13be7064f8SJoseph Chen mmc2 = &sdmmc1; 14be7064f8SJoseph Chen }; 15be7064f8SJoseph Chen 16be7064f8SJoseph Chen chosen { 17be7064f8SJoseph Chen stdout-path = &uart2; 18a2304477SJason Zhu u-boot,spl-boot-order = &sdmmc0, &sdhci, &nandc0, &spi_nand, &spi_nor; 19be7064f8SJoseph Chen }; 208ef34838SXuhui Lin 218ef34838SXuhui Lin secure-otp@fe3a0000 { 228ef34838SXuhui Lin compatible = "rockchip,rk3568-secure-otp"; 238ef34838SXuhui Lin reg = <0x0 0xfe3a0000 0x0 0x4000>; 248ef34838SXuhui Lin secure_conf = <0xfdd18008>; 258ef34838SXuhui Lin mask_addr = <0xfe880000>; 268ef34838SXuhui Lin cru_rst_addr = <0xfdd20470>; 278ef34838SXuhui Lin u-boot,dm-spl; 288ef34838SXuhui Lin }; 29be7064f8SJoseph Chen}; 30be7064f8SJoseph Chen 31fbf3603bSJoseph Chen&psci { 32fbf3603bSJoseph Chen u-boot,dm-pre-reloc; 33fbf3603bSJoseph Chen status = "okay"; 34fbf3603bSJoseph Chen}; 35fbf3603bSJoseph Chen 36*fa284b34SWilliam Wu&combphy0_us { 37*fa284b34SWilliam Wu u-boot,dm-pre-reloc; 38*fa284b34SWilliam Wu status = "okay"; 39*fa284b34SWilliam Wu}; 40*fa284b34SWilliam Wu 4194d677daSLin Jinhan&crypto { 42f4033648SJoseph Chen u-boot,dm-spl; 4394d677daSLin Jinhan}; 4494d677daSLin Jinhan 45be7064f8SJoseph Chen&uart2 { 46be7064f8SJoseph Chen clock-frequency = <24000000>; 47e6b32526SJoseph Chen u-boot,dm-spl; 48a2304477SJason Zhu /delete-property/ pinctrl-names; 49a2304477SJason Zhu /delete-property/ pinctrl-0; 50be7064f8SJoseph Chen status = "okay"; 51be7064f8SJoseph Chen}; 52be7064f8SJoseph Chen 53be7064f8SJoseph Chen&grf { 54f4033648SJoseph Chen u-boot,dm-spl; 55be7064f8SJoseph Chen status = "okay"; 56be7064f8SJoseph Chen}; 57be7064f8SJoseph Chen 58*fa284b34SWilliam Wu&pipegrf { 59*fa284b34SWilliam Wu u-boot,dm-pre-reloc; 60*fa284b34SWilliam Wu}; 61*fa284b34SWilliam Wu 62*fa284b34SWilliam Wu&pipe_phy_grf0 { 63*fa284b34SWilliam Wu u-boot,dm-pre-reloc; 64*fa284b34SWilliam Wu}; 65*fa284b34SWilliam Wu 66be7064f8SJoseph Chen&pmugrf { 67f4033648SJoseph Chen u-boot,dm-spl; 68be7064f8SJoseph Chen status = "okay"; 69be7064f8SJoseph Chen}; 70be7064f8SJoseph Chen 71782f7efbSRen Jianing&usb2phy0_grf { 72782f7efbSRen Jianing u-boot,dm-pre-reloc; 73782f7efbSRen Jianing status = "okay"; 74782f7efbSRen Jianing}; 75782f7efbSRen Jianing 76782f7efbSRen Jianing&usb2phy0 { 77782f7efbSRen Jianing u-boot,dm-pre-reloc; 78782f7efbSRen Jianing status = "okay"; 79782f7efbSRen Jianing}; 80782f7efbSRen Jianing 81782f7efbSRen Jianing&u2phy0_otg { 82782f7efbSRen Jianing u-boot,dm-pre-reloc; 83782f7efbSRen Jianing status = "okay"; 84782f7efbSRen Jianing}; 85782f7efbSRen Jianing 86782f7efbSRen Jianing&u2phy0_host { 87782f7efbSRen Jianing u-boot,dm-pre-reloc; 88782f7efbSRen Jianing status = "okay"; 89782f7efbSRen Jianing}; 90782f7efbSRen Jianing 91be7064f8SJoseph Chen&cru { 92f4033648SJoseph Chen u-boot,dm-spl; 93be7064f8SJoseph Chen status = "okay"; 94be7064f8SJoseph Chen}; 95be7064f8SJoseph Chen 96be7064f8SJoseph Chen&pmucru { 97f4033648SJoseph Chen u-boot,dm-spl; 98be7064f8SJoseph Chen status = "okay"; 99be7064f8SJoseph Chen}; 100be7064f8SJoseph Chen 101529dfdedSLin Jinhan&rng { 102529dfdedSLin Jinhan u-boot,dm-pre-reloc; 103529dfdedSLin Jinhan status = "okay"; 104529dfdedSLin Jinhan}; 105529dfdedSLin Jinhan 106b50fa296SJon Lin&sfc { 107b50fa296SJon Lin u-boot,dm-spl; 108a2304477SJason Zhu /delete-property/ pinctrl-names; 109a2304477SJason Zhu /delete-property/ pinctrl-0; 110b50fa296SJon Lin /delete-property/ assigned-clocks; 111b50fa296SJon Lin /delete-property/ assigned-clock-rates; 112b50fa296SJon Lin status = "okay"; 113b50fa296SJon Lin 114b50fa296SJon Lin #address-cells = <1>; 115b50fa296SJon Lin #size-cells = <0>; 116b50fa296SJon Lin spi_nand: flash@0 { 117b50fa296SJon Lin u-boot,dm-spl; 118b50fa296SJon Lin compatible = "spi-nand"; 119b50fa296SJon Lin reg = <0>; 120b50fa296SJon Lin spi-tx-bus-width = <1>; 121b50fa296SJon Lin spi-rx-bus-width = <4>; 12283dea211SJon Lin spi-max-frequency = <75000000>; 123b50fa296SJon Lin }; 124b50fa296SJon Lin 125b50fa296SJon Lin spi_nor: flash@1 { 126b50fa296SJon Lin u-boot,dm-spl; 127b50fa296SJon Lin compatible = "jedec,spi-nor"; 128b50fa296SJon Lin label = "sfc_nor"; 129b50fa296SJon Lin reg = <0>; 130b50fa296SJon Lin spi-tx-bus-width = <1>; 131b50fa296SJon Lin spi-rx-bus-width = <4>; 132b50fa296SJon Lin spi-max-frequency = <100000000>; 133b50fa296SJon Lin }; 134b50fa296SJon Lin}; 135b50fa296SJon Lin 136be7064f8SJoseph Chen&saradc { 137f4033648SJoseph Chen u-boot,dm-pre-reloc; 138be7064f8SJoseph Chen status = "okay"; 139be7064f8SJoseph Chen}; 140be7064f8SJoseph Chen 141be7064f8SJoseph Chen&sdmmc0 { 142e6b32526SJoseph Chen u-boot,dm-spl; 143be7064f8SJoseph Chen status = "okay"; 144be7064f8SJoseph Chen}; 145be7064f8SJoseph Chen 146a2304477SJason Zhu&sdmmc0_pins { 147a2304477SJason Zhu u-boot,dm-spl; 148a2304477SJason Zhu}; 149a2304477SJason Zhu 150a2304477SJason Zhu&sdmmc0_bus4 { 151a2304477SJason Zhu u-boot,dm-spl; 152a2304477SJason Zhu}; 153a2304477SJason Zhu 154a2304477SJason Zhu&sdmmc0_clk { 155a2304477SJason Zhu u-boot,dm-spl; 156a2304477SJason Zhu}; 157a2304477SJason Zhu 158a2304477SJason Zhu&sdmmc0_cmd { 159a2304477SJason Zhu u-boot,dm-spl; 160a2304477SJason Zhu}; 161a2304477SJason Zhu 162a2304477SJason Zhu&sdmmc0_det { 163a2304477SJason Zhu u-boot,dm-spl; 164a2304477SJason Zhu}; 165a2304477SJason Zhu 166be7064f8SJoseph Chen&sdmmc1 { 167e6b32526SJoseph Chen u-boot,dm-spl; 168a2304477SJason Zhu /delete-property/ pinctrl-names; 169a2304477SJason Zhu /delete-property/ pinctrl-0; 170be7064f8SJoseph Chen status = "okay"; 171be7064f8SJoseph Chen}; 172be7064f8SJoseph Chen 173be7064f8SJoseph Chen&sdhci { 174b48cb5c2SJason Zhu bus-width = <8>; 175e6b32526SJoseph Chen u-boot,dm-spl; 176a2304477SJason Zhu /delete-property/ pinctrl-names; 177a2304477SJason Zhu /delete-property/ pinctrl-0; 178311b34e2SYifeng Zhao mmc-hs200-1_8v; 179be7064f8SJoseph Chen status = "okay"; 180be7064f8SJoseph Chen}; 181be7064f8SJoseph Chen 1825d96bba9SYifeng Zhao&nandc0 { 1835d96bba9SYifeng Zhao u-boot,dm-spl; 1845d96bba9SYifeng Zhao status = "okay"; 1855d96bba9SYifeng Zhao #address-cells = <1>; 1865d96bba9SYifeng Zhao #size-cells = <0>; 187a2304477SJason Zhu /delete-property/ pinctrl-names; 188a2304477SJason Zhu /delete-property/ pinctrl-0; 1895d96bba9SYifeng Zhao 1905d96bba9SYifeng Zhao nand@0 { 1915d96bba9SYifeng Zhao u-boot,dm-spl; 1925d96bba9SYifeng Zhao reg = <0>; 1935aadc595SJon Lin nand-ecc-mode = "hw"; 1945d96bba9SYifeng Zhao nand-ecc-strength = <16>; 1955d96bba9SYifeng Zhao nand-ecc-step-size = <1024>; 1965d96bba9SYifeng Zhao }; 1975d96bba9SYifeng Zhao}; 198a2304477SJason Zhu 19934ddf661SDavid Wu&gmac0_clkin { 20034ddf661SDavid Wu u-boot,dm-pre-reloc; 20134ddf661SDavid Wu}; 20234ddf661SDavid Wu 20334ddf661SDavid Wu&gmac1_clkin { 20434ddf661SDavid Wu u-boot,dm-pre-reloc; 20534ddf661SDavid Wu}; 20634ddf661SDavid Wu 20734ddf661SDavid Wu&gmac0 { 20834ddf661SDavid Wu u-boot,dm-pre-reloc; 20934ddf661SDavid Wu phy-mode = "rgmii"; 21034ddf661SDavid Wu clock_in_out = "output"; 21134ddf661SDavid Wu 21234ddf661SDavid Wu snps,reset-gpio = <&gpio2 RK_PD3 GPIO_ACTIVE_LOW>; 21334ddf661SDavid Wu snps,reset-active-low; 21434ddf661SDavid Wu /* Reset time is 20ms, 100ms for rtl8211f */ 21534ddf661SDavid Wu snps,reset-delays-us = <0 20000 100000>; 21634ddf661SDavid Wu assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>; 21734ddf661SDavid Wu assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>; 21834ddf661SDavid Wu assigned-clock-rates = <0>, <125000000>; 21934ddf661SDavid Wu 22034ddf661SDavid Wu pinctrl-names = "default"; 22134ddf661SDavid Wu pinctrl-0 = <&gmac0_miim 22234ddf661SDavid Wu &gmac0_tx_bus2 22334ddf661SDavid Wu &gmac0_rx_bus2 22434ddf661SDavid Wu &gmac0_rgmii_clk 22534ddf661SDavid Wu &gmac0_rgmii_bus>; 22634ddf661SDavid Wu 22734ddf661SDavid Wu tx_delay = <0x3c>; 22834ddf661SDavid Wu rx_delay = <0x2f>; 22934ddf661SDavid Wu 23034ddf661SDavid Wu phy-handle = <&rgmii_phy0>; 23134ddf661SDavid Wu status = "disabled"; 23234ddf661SDavid Wu}; 23334ddf661SDavid Wu 23434ddf661SDavid Wu&gmac1 { 23534ddf661SDavid Wu u-boot,dm-pre-reloc; 23634ddf661SDavid Wu phy-mode = "rgmii"; 23734ddf661SDavid Wu clock_in_out = "output"; 23834ddf661SDavid Wu 23934ddf661SDavid Wu snps,reset-gpio = <&gpio2 RK_PD1 GPIO_ACTIVE_LOW>; 24034ddf661SDavid Wu snps,reset-active-low; 24134ddf661SDavid Wu /* Reset time is 20ms, 100ms for rtl8211f */ 24234ddf661SDavid Wu snps,reset-delays-us = <0 20000 100000>; 24334ddf661SDavid Wu 24434ddf661SDavid Wu assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>; 24534ddf661SDavid Wu assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>; 24634ddf661SDavid Wu assigned-clock-rates = <0>, <125000000>; 24734ddf661SDavid Wu 24834ddf661SDavid Wu pinctrl-names = "default"; 24934ddf661SDavid Wu pinctrl-0 = <&gmac1m1_miim 25034ddf661SDavid Wu &gmac1m1_tx_bus2 25134ddf661SDavid Wu &gmac1m1_rx_bus2 25234ddf661SDavid Wu &gmac1m1_rgmii_clk 25334ddf661SDavid Wu &gmac1m1_rgmii_bus>; 25434ddf661SDavid Wu 25534ddf661SDavid Wu tx_delay = <0x4f>; 25634ddf661SDavid Wu rx_delay = <0x26>; 25734ddf661SDavid Wu 25834ddf661SDavid Wu phy-handle = <&rgmii_phy1>; 25934ddf661SDavid Wu status = "disabled"; 26034ddf661SDavid Wu}; 26134ddf661SDavid Wu 26234ddf661SDavid Wu&gmac0_stmmac_axi_setup { 26334ddf661SDavid Wu u-boot,dm-pre-reloc; 26434ddf661SDavid Wu}; 26534ddf661SDavid Wu 26634ddf661SDavid Wu&gmac0_mtl_rx_setup { 26734ddf661SDavid Wu u-boot,dm-pre-reloc; 26834ddf661SDavid Wu queue0 { 26934ddf661SDavid Wu u-boot,dm-pre-reloc; 27034ddf661SDavid Wu }; 27134ddf661SDavid Wu}; 27234ddf661SDavid Wu 27334ddf661SDavid Wu&gmac0_mtl_tx_setup { 27434ddf661SDavid Wu u-boot,dm-pre-reloc; 27534ddf661SDavid Wu queue0 { 27634ddf661SDavid Wu u-boot,dm-pre-reloc; 27734ddf661SDavid Wu }; 27834ddf661SDavid Wu}; 27934ddf661SDavid Wu 28034ddf661SDavid Wu&gmac1_stmmac_axi_setup { 28134ddf661SDavid Wu u-boot,dm-pre-reloc; 28234ddf661SDavid Wu}; 28334ddf661SDavid Wu 28434ddf661SDavid Wu&gmac1_mtl_rx_setup { 28534ddf661SDavid Wu u-boot,dm-pre-reloc; 28634ddf661SDavid Wu queue0 { 28734ddf661SDavid Wu u-boot,dm-pre-reloc; 28834ddf661SDavid Wu }; 28934ddf661SDavid Wu}; 29034ddf661SDavid Wu 29134ddf661SDavid Wu&gmac1_mtl_tx_setup { 29234ddf661SDavid Wu u-boot,dm-pre-reloc; 29334ddf661SDavid Wu queue0 { 29434ddf661SDavid Wu u-boot,dm-pre-reloc; 29534ddf661SDavid Wu }; 29634ddf661SDavid Wu}; 29734ddf661SDavid Wu 29834ddf661SDavid Wu&mdio0 { 29934ddf661SDavid Wu u-boot,dm-pre-reloc; 30034ddf661SDavid Wu rgmii_phy0: phy@0 { 30134ddf661SDavid Wu compatible = "ethernet-phy-ieee802.3-c22"; 30234ddf661SDavid Wu u-boot,dm-pre-reloc; 30334ddf661SDavid Wu reg = <0x0>; 30434ddf661SDavid Wu }; 30534ddf661SDavid Wu}; 30634ddf661SDavid Wu 30734ddf661SDavid Wu&mdio1 { 30834ddf661SDavid Wu u-boot,dm-pre-reloc; 30934ddf661SDavid Wu rgmii_phy1: phy@0 { 31034ddf661SDavid Wu compatible = "ethernet-phy-ieee802.3-c22"; 31134ddf661SDavid Wu u-boot,dm-pre-reloc; 31234ddf661SDavid Wu reg = <0x0>; 31334ddf661SDavid Wu }; 31434ddf661SDavid Wu}; 31534ddf661SDavid Wu 31634ddf661SDavid Wu&gmac0_miim { 31734ddf661SDavid Wu u-boot,dm-pre-reloc; 31834ddf661SDavid Wu}; 31934ddf661SDavid Wu 32034ddf661SDavid Wu&gmac0_clkinout { 32134ddf661SDavid Wu u-boot,dm-pre-reloc; 32234ddf661SDavid Wu}; 32334ddf661SDavid Wu 32434ddf661SDavid Wu&gmac0_rx_bus2 { 32534ddf661SDavid Wu u-boot,dm-pre-reloc; 32634ddf661SDavid Wu}; 32734ddf661SDavid Wu 32834ddf661SDavid Wu&gmac0_tx_bus2 { 32934ddf661SDavid Wu u-boot,dm-pre-reloc; 33034ddf661SDavid Wu}; 33134ddf661SDavid Wu 33234ddf661SDavid Wu&gmac0_rgmii_clk { 33334ddf661SDavid Wu u-boot,dm-pre-reloc; 33434ddf661SDavid Wu}; 33534ddf661SDavid Wu 33634ddf661SDavid Wu&gmac0_rgmii_bus { 33734ddf661SDavid Wu u-boot,dm-pre-reloc; 33834ddf661SDavid Wu}; 33934ddf661SDavid Wu 34034ddf661SDavid Wu&gmac1m1_miim { 34134ddf661SDavid Wu u-boot,dm-pre-reloc; 34234ddf661SDavid Wu}; 34334ddf661SDavid Wu 34434ddf661SDavid Wu&gmac1m1_clkinout { 34534ddf661SDavid Wu u-boot,dm-pre-reloc; 34634ddf661SDavid Wu}; 34734ddf661SDavid Wu 34834ddf661SDavid Wu&gmac1m1_rx_bus2 { 34934ddf661SDavid Wu u-boot,dm-pre-reloc; 35034ddf661SDavid Wu}; 35134ddf661SDavid Wu 35234ddf661SDavid Wu&gmac1m1_tx_bus2 { 35334ddf661SDavid Wu u-boot,dm-pre-reloc; 35434ddf661SDavid Wu}; 35534ddf661SDavid Wu 35634ddf661SDavid Wu&gmac1m1_rgmii_clk { 35734ddf661SDavid Wu u-boot,dm-pre-reloc; 35834ddf661SDavid Wu}; 35934ddf661SDavid Wu 36034ddf661SDavid Wu&gmac1m1_rgmii_bus { 36134ddf661SDavid Wu u-boot,dm-pre-reloc; 36234ddf661SDavid Wu}; 36334ddf661SDavid Wu 36434ddf661SDavid Wuð0_clkout_pins { 36534ddf661SDavid Wu u-boot,dm-pre-reloc; 36634ddf661SDavid Wu}; 36734ddf661SDavid Wu 36834ddf661SDavid Wuð1m1_clkout_pins { 36934ddf661SDavid Wu u-boot,dm-pre-reloc; 37034ddf661SDavid Wu}; 37134ddf661SDavid Wu 3720b686703SShawn Lin&pcie30phy { 3730b686703SShawn Lin u-boot,dm-pre-reloc; 3740b686703SShawn Lin status = "okay"; 3750b686703SShawn Lin}; 3760b686703SShawn Lin 3770b686703SShawn Lin&pcie3x2 { 3780b686703SShawn Lin u-boot,dm-pre-reloc; 3790b686703SShawn Lin status = "okay"; 3800b686703SShawn Lin}; 3810b686703SShawn Lin 382a2304477SJason Zhu&pinctrl { 38305891810SZain Wang u-boot,dm-spl; 384a2304477SJason Zhu status = "okay"; 385a2304477SJason Zhu}; 386a2304477SJason Zhu 387a2304477SJason Zhu&gpio0 { 388a2304477SJason Zhu u-boot,dm-spl; 389a2304477SJason Zhu}; 390a2304477SJason Zhu 391a2304477SJason Zhu&gpio1 { 392a2304477SJason Zhu u-boot,dm-spl; 393a2304477SJason Zhu}; 394a2304477SJason Zhu 395a2304477SJason Zhu&gpio2 { 396f4033648SJoseph Chen u-boot,dm-spl; 39734ddf661SDavid Wu}; 39834ddf661SDavid Wu 39934ddf661SDavid Wu&pcfg_pull_none_drv_level_1 { 400f4033648SJoseph Chen u-boot,dm-spl; 40134ddf661SDavid Wu}; 40234ddf661SDavid Wu 40334ddf661SDavid Wu&pcfg_pull_none_drv_level_2 { 404f4033648SJoseph Chen u-boot,dm-spl; 40534ddf661SDavid Wu}; 40634ddf661SDavid Wu 40734ddf661SDavid Wu 40834ddf661SDavid Wu&pcfg_pull_up_drv_level_1 { 409a2304477SJason Zhu u-boot,dm-spl; 410a2304477SJason Zhu}; 411a2304477SJason Zhu 412a2304477SJason Zhu&pcfg_pull_up_drv_level_2 { 413a2304477SJason Zhu u-boot,dm-spl; 414a2304477SJason Zhu}; 415a2304477SJason Zhu 416b0760df8SJason Zhu&pcfg_pull_up { 417b0760df8SJason Zhu u-boot,dm-spl; 418b0760df8SJason Zhu}; 419b0760df8SJason Zhu 420a2304477SJason Zhu&pcfg_pull_none { 421f4033648SJoseph Chen u-boot,dm-spl; 422a2304477SJason Zhu}; 423ab1a0b8dSJason Zhu 424e197a0baSSimon Xue&wdt { 425e197a0baSSimon Xue u-boot,dm-pre-reloc; 426e197a0baSSimon Xue status = "okay"; 427e197a0baSSimon Xue}; 42855c91f78SJoseph Chen 42955c91f78SJoseph Chen#if 0 43055c91f78SJoseph Chen&i2c0 { 43155c91f78SJoseph Chen u-boot,dm-pre-reloc; 43255c91f78SJoseph Chen status = "okay"; 43355c91f78SJoseph Chen}; 43455c91f78SJoseph Chen 43555c91f78SJoseph Chen&i2c0_xfer { 43655c91f78SJoseph Chen u-boot,dm-pre-reloc; 43755c91f78SJoseph Chen status = "okay"; 43855c91f78SJoseph Chen}; 43955c91f78SJoseph Chen 44055c91f78SJoseph Chen&i2c1 { 44155c91f78SJoseph Chen u-boot,dm-pre-reloc; 44255c91f78SJoseph Chen status = "okay"; 44355c91f78SJoseph Chen}; 44455c91f78SJoseph Chen 44555c91f78SJoseph Chen&i2c1_xfer { 44655c91f78SJoseph Chen u-boot,dm-pre-reloc; 44755c91f78SJoseph Chen status = "okay"; 44855c91f78SJoseph Chen}; 44955c91f78SJoseph Chen 45055c91f78SJoseph Chen&pcfg_pull_none_smt { 45155c91f78SJoseph Chen u-boot,dm-pre-reloc; 45255c91f78SJoseph Chen status = "okay"; 45355c91f78SJoseph Chen}; 45455c91f78SJoseph Chen#endif 45555c91f78SJoseph Chen 456