1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0) 2*4882a593Smuzhiyun%YAML 1.2 3*4882a593Smuzhiyun--- 4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra30-emc.yaml# 5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml# 6*4882a593Smuzhiyun 7*4882a593Smuzhiyuntitle: NVIDIA Tegra30 SoC External Memory Controller 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunmaintainers: 10*4882a593Smuzhiyun - Dmitry Osipenko <digetx@gmail.com> 11*4882a593Smuzhiyun - Jon Hunter <jonathanh@nvidia.com> 12*4882a593Smuzhiyun - Thierry Reding <thierry.reding@gmail.com> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundescription: | 15*4882a593Smuzhiyun The EMC interfaces with the off-chip SDRAM to service the request stream 16*4882a593Smuzhiyun sent from Memory Controller. The EMC also has various performance-affecting 17*4882a593Smuzhiyun settings beyond the obvious SDRAM configuration parameters and initialization 18*4882a593Smuzhiyun settings. Tegra30 EMC supports multiple JEDEC standard protocols: LPDDR2, 19*4882a593Smuzhiyun LPDDR3, and DDR3. 20*4882a593Smuzhiyun 21*4882a593Smuzhiyunproperties: 22*4882a593Smuzhiyun compatible: 23*4882a593Smuzhiyun const: nvidia,tegra30-emc 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun reg: 26*4882a593Smuzhiyun maxItems: 1 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun clocks: 29*4882a593Smuzhiyun maxItems: 1 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun interrupts: 32*4882a593Smuzhiyun maxItems: 1 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun nvidia,memory-controller: 35*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/phandle 36*4882a593Smuzhiyun description: 37*4882a593Smuzhiyun Phandle of the Memory Controller node. 38*4882a593Smuzhiyun 39*4882a593SmuzhiyunpatternProperties: 40*4882a593Smuzhiyun "^emc-timings-[0-9]+$": 41*4882a593Smuzhiyun type: object 42*4882a593Smuzhiyun properties: 43*4882a593Smuzhiyun nvidia,ram-code: 44*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 45*4882a593Smuzhiyun description: 46*4882a593Smuzhiyun Value of RAM_CODE this timing set is used for. 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun patternProperties: 49*4882a593Smuzhiyun "^timing-[0-9]+$": 50*4882a593Smuzhiyun type: object 51*4882a593Smuzhiyun properties: 52*4882a593Smuzhiyun clock-frequency: 53*4882a593Smuzhiyun description: 54*4882a593Smuzhiyun Memory clock rate in Hz. 55*4882a593Smuzhiyun minimum: 1000000 56*4882a593Smuzhiyun maximum: 900000000 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun nvidia,emc-auto-cal-interval: 59*4882a593Smuzhiyun description: 60*4882a593Smuzhiyun Pad calibration interval in microseconds. 61*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 62*4882a593Smuzhiyun minimum: 0 63*4882a593Smuzhiyun maximum: 2097151 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun nvidia,emc-mode-1: 66*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 67*4882a593Smuzhiyun description: 68*4882a593Smuzhiyun Mode Register 1. 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun nvidia,emc-mode-2: 71*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 72*4882a593Smuzhiyun description: 73*4882a593Smuzhiyun Mode Register 2. 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun nvidia,emc-mode-reset: 76*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 77*4882a593Smuzhiyun description: 78*4882a593Smuzhiyun Mode Register 0. 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun nvidia,emc-zcal-cnt-long: 81*4882a593Smuzhiyun description: 82*4882a593Smuzhiyun Number of EMC clocks to wait before issuing any commands after 83*4882a593Smuzhiyun sending ZCAL_MRW_CMD. 84*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 85*4882a593Smuzhiyun minimum: 0 86*4882a593Smuzhiyun maximum: 1023 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun nvidia,emc-cfg-dyn-self-ref: 89*4882a593Smuzhiyun type: boolean 90*4882a593Smuzhiyun description: 91*4882a593Smuzhiyun Dynamic self-refresh enabled. 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun nvidia,emc-cfg-periodic-qrst: 94*4882a593Smuzhiyun type: boolean 95*4882a593Smuzhiyun description: 96*4882a593Smuzhiyun FBIO "read" FIFO periodic resetting enabled. 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun nvidia,emc-configuration: 99*4882a593Smuzhiyun description: 100*4882a593Smuzhiyun EMC timing characterization data. These are the registers 101*4882a593Smuzhiyun (see section "18.13.2 EMC Registers" in the TRM) whose values 102*4882a593Smuzhiyun need to be specified, according to the board documentation. 103*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32-array 104*4882a593Smuzhiyun items: 105*4882a593Smuzhiyun - description: EMC_RC 106*4882a593Smuzhiyun - description: EMC_RFC 107*4882a593Smuzhiyun - description: EMC_RAS 108*4882a593Smuzhiyun - description: EMC_RP 109*4882a593Smuzhiyun - description: EMC_R2W 110*4882a593Smuzhiyun - description: EMC_W2R 111*4882a593Smuzhiyun - description: EMC_R2P 112*4882a593Smuzhiyun - description: EMC_W2P 113*4882a593Smuzhiyun - description: EMC_RD_RCD 114*4882a593Smuzhiyun - description: EMC_WR_RCD 115*4882a593Smuzhiyun - description: EMC_RRD 116*4882a593Smuzhiyun - description: EMC_REXT 117*4882a593Smuzhiyun - description: EMC_WEXT 118*4882a593Smuzhiyun - description: EMC_WDV 119*4882a593Smuzhiyun - description: EMC_QUSE 120*4882a593Smuzhiyun - description: EMC_QRST 121*4882a593Smuzhiyun - description: EMC_QSAFE 122*4882a593Smuzhiyun - description: EMC_RDV 123*4882a593Smuzhiyun - description: EMC_REFRESH 124*4882a593Smuzhiyun - description: EMC_BURST_REFRESH_NUM 125*4882a593Smuzhiyun - description: EMC_PRE_REFRESH_REQ_CNT 126*4882a593Smuzhiyun - description: EMC_PDEX2WR 127*4882a593Smuzhiyun - description: EMC_PDEX2RD 128*4882a593Smuzhiyun - description: EMC_PCHG2PDEN 129*4882a593Smuzhiyun - description: EMC_ACT2PDEN 130*4882a593Smuzhiyun - description: EMC_AR2PDEN 131*4882a593Smuzhiyun - description: EMC_RW2PDEN 132*4882a593Smuzhiyun - description: EMC_TXSR 133*4882a593Smuzhiyun - description: EMC_TXSRDLL 134*4882a593Smuzhiyun - description: EMC_TCKE 135*4882a593Smuzhiyun - description: EMC_TFAW 136*4882a593Smuzhiyun - description: EMC_TRPAB 137*4882a593Smuzhiyun - description: EMC_TCLKSTABLE 138*4882a593Smuzhiyun - description: EMC_TCLKSTOP 139*4882a593Smuzhiyun - description: EMC_TREFBW 140*4882a593Smuzhiyun - description: EMC_QUSE_EXTRA 141*4882a593Smuzhiyun - description: EMC_FBIO_CFG6 142*4882a593Smuzhiyun - description: EMC_ODT_WRITE 143*4882a593Smuzhiyun - description: EMC_ODT_READ 144*4882a593Smuzhiyun - description: EMC_FBIO_CFG5 145*4882a593Smuzhiyun - description: EMC_CFG_DIG_DLL 146*4882a593Smuzhiyun - description: EMC_CFG_DIG_DLL_PERIOD 147*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS0 148*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS1 149*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS2 150*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS3 151*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS4 152*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS5 153*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS6 154*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQS7 155*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE0 156*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE1 157*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE2 158*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE3 159*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE4 160*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE5 161*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE6 162*4882a593Smuzhiyun - description: EMC_DLL_XFORM_QUSE7 163*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS0 164*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS1 165*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS2 166*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS3 167*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS4 168*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS5 169*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS6 170*4882a593Smuzhiyun - description: EMC_DLI_TRIM_TXDQS7 171*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQ0 172*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQ1 173*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQ2 174*4882a593Smuzhiyun - description: EMC_DLL_XFORM_DQ3 175*4882a593Smuzhiyun - description: EMC_XM2CMDPADCTRL 176*4882a593Smuzhiyun - description: EMC_XM2DQSPADCTRL2 177*4882a593Smuzhiyun - description: EMC_XM2DQPADCTRL2 178*4882a593Smuzhiyun - description: EMC_XM2CLKPADCTRL 179*4882a593Smuzhiyun - description: EMC_XM2COMPPADCTRL 180*4882a593Smuzhiyun - description: EMC_XM2VTTGENPADCTRL 181*4882a593Smuzhiyun - description: EMC_XM2VTTGENPADCTRL2 182*4882a593Smuzhiyun - description: EMC_XM2QUSEPADCTRL 183*4882a593Smuzhiyun - description: EMC_XM2DQSPADCTRL3 184*4882a593Smuzhiyun - description: EMC_CTT_TERM_CTRL 185*4882a593Smuzhiyun - description: EMC_ZCAL_INTERVAL 186*4882a593Smuzhiyun - description: EMC_ZCAL_WAIT_CNT 187*4882a593Smuzhiyun - description: EMC_MRS_WAIT_CNT 188*4882a593Smuzhiyun - description: EMC_AUTO_CAL_CONFIG 189*4882a593Smuzhiyun - description: EMC_CTT 190*4882a593Smuzhiyun - description: EMC_CTT_DURATION 191*4882a593Smuzhiyun - description: EMC_DYN_SELF_REF_CONTROL 192*4882a593Smuzhiyun - description: EMC_FBIO_SPARE 193*4882a593Smuzhiyun - description: EMC_CFG_RSV 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun required: 196*4882a593Smuzhiyun - clock-frequency 197*4882a593Smuzhiyun - nvidia,emc-auto-cal-interval 198*4882a593Smuzhiyun - nvidia,emc-mode-1 199*4882a593Smuzhiyun - nvidia,emc-mode-2 200*4882a593Smuzhiyun - nvidia,emc-mode-reset 201*4882a593Smuzhiyun - nvidia,emc-zcal-cnt-long 202*4882a593Smuzhiyun - nvidia,emc-configuration 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun additionalProperties: false 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun required: 207*4882a593Smuzhiyun - nvidia,ram-code 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun additionalProperties: false 210*4882a593Smuzhiyun 211*4882a593Smuzhiyunrequired: 212*4882a593Smuzhiyun - compatible 213*4882a593Smuzhiyun - reg 214*4882a593Smuzhiyun - interrupts 215*4882a593Smuzhiyun - clocks 216*4882a593Smuzhiyun - nvidia,memory-controller 217*4882a593Smuzhiyun 218*4882a593SmuzhiyunadditionalProperties: false 219*4882a593Smuzhiyun 220*4882a593Smuzhiyunexamples: 221*4882a593Smuzhiyun - | 222*4882a593Smuzhiyun external-memory-controller@7000f400 { 223*4882a593Smuzhiyun compatible = "nvidia,tegra30-emc"; 224*4882a593Smuzhiyun reg = <0x7000f400 0x400>; 225*4882a593Smuzhiyun interrupts = <0 78 4>; 226*4882a593Smuzhiyun clocks = <&tegra_car 57>; 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun nvidia,memory-controller = <&mc>; 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun emc-timings-1 { 231*4882a593Smuzhiyun nvidia,ram-code = <1>; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun timing-667000000 { 234*4882a593Smuzhiyun clock-frequency = <667000000>; 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun nvidia,emc-auto-cal-interval = <0x001fffff>; 237*4882a593Smuzhiyun nvidia,emc-mode-1 = <0x80100002>; 238*4882a593Smuzhiyun nvidia,emc-mode-2 = <0x80200018>; 239*4882a593Smuzhiyun nvidia,emc-mode-reset = <0x80000b71>; 240*4882a593Smuzhiyun nvidia,emc-zcal-cnt-long = <0x00000040>; 241*4882a593Smuzhiyun nvidia,emc-cfg-periodic-qrst; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun nvidia,emc-configuration = < 244*4882a593Smuzhiyun 0x00000020 /* EMC_RC */ 245*4882a593Smuzhiyun 0x0000006a /* EMC_RFC */ 246*4882a593Smuzhiyun 0x00000017 /* EMC_RAS */ 247*4882a593Smuzhiyun 0x00000007 /* EMC_RP */ 248*4882a593Smuzhiyun 0x00000005 /* EMC_R2W */ 249*4882a593Smuzhiyun 0x0000000c /* EMC_W2R */ 250*4882a593Smuzhiyun 0x00000003 /* EMC_R2P */ 251*4882a593Smuzhiyun 0x00000011 /* EMC_W2P */ 252*4882a593Smuzhiyun 0x00000007 /* EMC_RD_RCD */ 253*4882a593Smuzhiyun 0x00000007 /* EMC_WR_RCD */ 254*4882a593Smuzhiyun 0x00000002 /* EMC_RRD */ 255*4882a593Smuzhiyun 0x00000001 /* EMC_REXT */ 256*4882a593Smuzhiyun 0x00000000 /* EMC_WEXT */ 257*4882a593Smuzhiyun 0x00000007 /* EMC_WDV */ 258*4882a593Smuzhiyun 0x0000000a /* EMC_QUSE */ 259*4882a593Smuzhiyun 0x00000009 /* EMC_QRST */ 260*4882a593Smuzhiyun 0x0000000b /* EMC_QSAFE */ 261*4882a593Smuzhiyun 0x00000011 /* EMC_RDV */ 262*4882a593Smuzhiyun 0x00001412 /* EMC_REFRESH */ 263*4882a593Smuzhiyun 0x00000000 /* EMC_BURST_REFRESH_NUM */ 264*4882a593Smuzhiyun 0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */ 265*4882a593Smuzhiyun 0x00000002 /* EMC_PDEX2WR */ 266*4882a593Smuzhiyun 0x0000000e /* EMC_PDEX2RD */ 267*4882a593Smuzhiyun 0x00000001 /* EMC_PCHG2PDEN */ 268*4882a593Smuzhiyun 0x00000000 /* EMC_ACT2PDEN */ 269*4882a593Smuzhiyun 0x0000000c /* EMC_AR2PDEN */ 270*4882a593Smuzhiyun 0x00000016 /* EMC_RW2PDEN */ 271*4882a593Smuzhiyun 0x00000072 /* EMC_TXSR */ 272*4882a593Smuzhiyun 0x00000200 /* EMC_TXSRDLL */ 273*4882a593Smuzhiyun 0x00000005 /* EMC_TCKE */ 274*4882a593Smuzhiyun 0x00000015 /* EMC_TFAW */ 275*4882a593Smuzhiyun 0x00000000 /* EMC_TRPAB */ 276*4882a593Smuzhiyun 0x00000006 /* EMC_TCLKSTABLE */ 277*4882a593Smuzhiyun 0x00000007 /* EMC_TCLKSTOP */ 278*4882a593Smuzhiyun 0x00001453 /* EMC_TREFBW */ 279*4882a593Smuzhiyun 0x0000000b /* EMC_QUSE_EXTRA */ 280*4882a593Smuzhiyun 0x00000006 /* EMC_FBIO_CFG6 */ 281*4882a593Smuzhiyun 0x00000000 /* EMC_ODT_WRITE */ 282*4882a593Smuzhiyun 0x00000000 /* EMC_ODT_READ */ 283*4882a593Smuzhiyun 0x00005088 /* EMC_FBIO_CFG5 */ 284*4882a593Smuzhiyun 0xf00b0191 /* EMC_CFG_DIG_DLL */ 285*4882a593Smuzhiyun 0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */ 286*4882a593Smuzhiyun 0x00000008 /* EMC_DLL_XFORM_DQS0 */ 287*4882a593Smuzhiyun 0x00000008 /* EMC_DLL_XFORM_DQS1 */ 288*4882a593Smuzhiyun 0x00000008 /* EMC_DLL_XFORM_DQS2 */ 289*4882a593Smuzhiyun 0x00000008 /* EMC_DLL_XFORM_DQS3 */ 290*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQS4 */ 291*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQS5 */ 292*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQS6 */ 293*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQS7 */ 294*4882a593Smuzhiyun 0x00018000 /* EMC_DLL_XFORM_QUSE0 */ 295*4882a593Smuzhiyun 0x00018000 /* EMC_DLL_XFORM_QUSE1 */ 296*4882a593Smuzhiyun 0x00018000 /* EMC_DLL_XFORM_QUSE2 */ 297*4882a593Smuzhiyun 0x00018000 /* EMC_DLL_XFORM_QUSE3 */ 298*4882a593Smuzhiyun 0x00000000 /* EMC_DLL_XFORM_QUSE4 */ 299*4882a593Smuzhiyun 0x00000000 /* EMC_DLL_XFORM_QUSE5 */ 300*4882a593Smuzhiyun 0x00000000 /* EMC_DLL_XFORM_QUSE6 */ 301*4882a593Smuzhiyun 0x00000000 /* EMC_DLL_XFORM_QUSE7 */ 302*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS0 */ 303*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS1 */ 304*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS2 */ 305*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS3 */ 306*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS4 */ 307*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS5 */ 308*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS6 */ 309*4882a593Smuzhiyun 0x00000000 /* EMC_DLI_TRIM_TXDQS7 */ 310*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQ0 */ 311*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQ1 */ 312*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQ2 */ 313*4882a593Smuzhiyun 0x0000000a /* EMC_DLL_XFORM_DQ3 */ 314*4882a593Smuzhiyun 0x000002a0 /* EMC_XM2CMDPADCTRL */ 315*4882a593Smuzhiyun 0x0800013d /* EMC_XM2DQSPADCTRL2 */ 316*4882a593Smuzhiyun 0x22220000 /* EMC_XM2DQPADCTRL2 */ 317*4882a593Smuzhiyun 0x77fff884 /* EMC_XM2CLKPADCTRL */ 318*4882a593Smuzhiyun 0x01f1f501 /* EMC_XM2COMPPADCTRL */ 319*4882a593Smuzhiyun 0x07077404 /* EMC_XM2VTTGENPADCTRL */ 320*4882a593Smuzhiyun 0x54000000 /* EMC_XM2VTTGENPADCTRL2 */ 321*4882a593Smuzhiyun 0x080001e8 /* EMC_XM2QUSEPADCTRL */ 322*4882a593Smuzhiyun 0x0c000021 /* EMC_XM2DQSPADCTRL3 */ 323*4882a593Smuzhiyun 0x00000802 /* EMC_CTT_TERM_CTRL */ 324*4882a593Smuzhiyun 0x00020000 /* EMC_ZCAL_INTERVAL */ 325*4882a593Smuzhiyun 0x00000100 /* EMC_ZCAL_WAIT_CNT */ 326*4882a593Smuzhiyun 0x0155000c /* EMC_MRS_WAIT_CNT */ 327*4882a593Smuzhiyun 0xa0f10000 /* EMC_AUTO_CAL_CONFIG */ 328*4882a593Smuzhiyun 0x00000000 /* EMC_CTT */ 329*4882a593Smuzhiyun 0x00000000 /* EMC_CTT_DURATION */ 330*4882a593Smuzhiyun 0x800028a5 /* EMC_DYN_SELF_REF_CONTROL */ 331*4882a593Smuzhiyun 0xe8000000 /* EMC_FBIO_SPARE */ 332*4882a593Smuzhiyun 0xff00ff49 /* EMC_CFG_RSV */ 333*4882a593Smuzhiyun >; 334*4882a593Smuzhiyun }; 335*4882a593Smuzhiyun }; 336*4882a593Smuzhiyun }; 337