1*85231c08SMichal Simek /* 2*85231c08SMichal Simek * (c) Copyright 2015 Xilinx, Inc. All rights reserved. 3*85231c08SMichal Simek * 4*85231c08SMichal Simek * SPDX-License-Identifier: GPL-2.0+ 5*85231c08SMichal Simek */ 6*85231c08SMichal Simek 7*85231c08SMichal Simek #include <asm/arch/psu_init_gpl.h> 8*85231c08SMichal Simek #include <xil_io.h> 9*85231c08SMichal Simek 10*85231c08SMichal Simek static unsigned long psu_pll_init_data(void) 11*85231c08SMichal Simek { 12*85231c08SMichal Simek psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E60EC6CU); 13*85231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00013000U); 14*85231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); 15*85231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); 16*85231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); 17*85231c08SMichal Simek mask_poll(0xFF5E0040, 0x00000002U); 18*85231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); 19*85231c08SMichal Simek psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000200U); 20*85231c08SMichal Simek psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); 21*85231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); 22*85231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); 23*85231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); 24*85231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); 25*85231c08SMichal Simek mask_poll(0xFF5E0040, 0x00000001U); 26*85231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); 27*85231c08SMichal Simek psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); 28*85231c08SMichal Simek psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); 29*85231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014200U); 30*85231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); 31*85231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); 32*85231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); 33*85231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000001U); 34*85231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); 35*85231c08SMichal Simek psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); 36*85231c08SMichal Simek psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); 37*85231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00014800U); 38*85231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); 39*85231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); 40*85231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); 41*85231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000002U); 42*85231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); 43*85231c08SMichal Simek psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000300U); 44*85231c08SMichal Simek psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C62U); 45*85231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00014000U); 46*85231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); 47*85231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); 48*85231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); 49*85231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000004U); 50*85231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); 51*85231c08SMichal Simek psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000200U); 52*85231c08SMichal Simek 53*85231c08SMichal Simek return 1; 54*85231c08SMichal Simek } 55*85231c08SMichal Simek 56*85231c08SMichal Simek static unsigned long psu_clock_init_data(void) 57*85231c08SMichal Simek { 58*85231c08SMichal Simek psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010500U); 59*85231c08SMichal Simek psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); 60*85231c08SMichal Simek psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); 61*85231c08SMichal Simek psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000300U); 62*85231c08SMichal Simek psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000900U); 63*85231c08SMichal Simek psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); 64*85231c08SMichal Simek psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); 65*85231c08SMichal Simek psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); 66*85231c08SMichal Simek psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); 67*85231c08SMichal Simek psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010802U); 68*85231c08SMichal Simek psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011D02U); 69*85231c08SMichal Simek psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); 70*85231c08SMichal Simek psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000104U); 71*85231c08SMichal Simek psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); 72*85231c08SMichal Simek psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); 73*85231c08SMichal Simek psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000600U); 74*85231c08SMichal Simek psu_mask_write(0xFD1A0084, 0x07003F07U, 0x07000203U); 75*85231c08SMichal Simek psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000203U); 76*85231c08SMichal Simek psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000203U); 77*85231c08SMichal Simek psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000202U); 78*85231c08SMichal Simek psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); 79*85231c08SMichal Simek psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); 80*85231c08SMichal Simek psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); 81*85231c08SMichal Simek psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); 82*85231c08SMichal Simek psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); 83*85231c08SMichal Simek psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); 84*85231c08SMichal Simek 85*85231c08SMichal Simek return 1; 86*85231c08SMichal Simek } 87*85231c08SMichal Simek 88*85231c08SMichal Simek static unsigned long psu_ddr_init_data(void) 89*85231c08SMichal Simek { 90*85231c08SMichal Simek psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); 91*85231c08SMichal Simek psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040001U); 92*85231c08SMichal Simek psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); 93*85231c08SMichal Simek psu_mask_write(0xFD070020, 0x000003F3U, 0x00000100U); 94*85231c08SMichal Simek psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); 95*85231c08SMichal Simek psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); 96*85231c08SMichal Simek psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00403210U); 97*85231c08SMichal Simek psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); 98*85231c08SMichal Simek psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); 99*85231c08SMichal Simek psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); 100*85231c08SMichal Simek psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x00308034U); 101*85231c08SMichal Simek psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); 102*85231c08SMichal Simek psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); 103*85231c08SMichal Simek psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); 104*85231c08SMichal Simek psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0030051FU); 105*85231c08SMichal Simek psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020063U); 106*85231c08SMichal Simek psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00290000U); 107*85231c08SMichal Simek psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00000E05U); 108*85231c08SMichal Simek psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x05200004U); 109*85231c08SMichal Simek psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00000000U); 110*85231c08SMichal Simek psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00110004U); 111*85231c08SMichal Simek psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x00000000U); 112*85231c08SMichal Simek psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x00000000U); 113*85231c08SMichal Simek psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); 114*85231c08SMichal Simek psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); 115*85231c08SMichal Simek psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x07080D07U); 116*85231c08SMichal Simek psu_mask_write(0xFD070104, 0x001F1F7FU, 0x0005020BU); 117*85231c08SMichal Simek psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x03030607U); 118*85231c08SMichal Simek psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x00502006U); 119*85231c08SMichal Simek psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x13020204U); 120*85231c08SMichal Simek psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x03030202U); 121*85231c08SMichal Simek psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010003U); 122*85231c08SMichal Simek psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000303U); 123*85231c08SMichal Simek psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x02020909U); 124*85231c08SMichal Simek psu_mask_write(0xFD070124, 0x40070F3FU, 0x0004040DU); 125*85231c08SMichal Simek psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x440C011CU); 126*85231c08SMichal Simek psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); 127*85231c08SMichal Simek psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x80800020U); 128*85231c08SMichal Simek psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x02009896U); 129*85231c08SMichal Simek psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x04828202U); 130*85231c08SMichal Simek psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00020304U); 131*85231c08SMichal Simek psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); 132*85231c08SMichal Simek psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); 133*85231c08SMichal Simek psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); 134*85231c08SMichal Simek psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x003800D4U); 135*85231c08SMichal Simek psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); 136*85231c08SMichal Simek psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x0000003DU); 137*85231c08SMichal Simek psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000000U); 138*85231c08SMichal Simek psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); 139*85231c08SMichal Simek psu_mask_write(0xFD070204, 0x001F1F1FU, 0x00080808U); 140*85231c08SMichal Simek psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x00000000U); 141*85231c08SMichal Simek psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x00000000U); 142*85231c08SMichal Simek psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); 143*85231c08SMichal Simek psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); 144*85231c08SMichal Simek psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x0F070707U); 145*85231c08SMichal Simek psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); 146*85231c08SMichal Simek psu_mask_write(0xFD070220, 0x00001F1FU, 0x00000000U); 147*85231c08SMichal Simek psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); 148*85231c08SMichal Simek psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); 149*85231c08SMichal Simek psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); 150*85231c08SMichal Simek psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x06000604U); 151*85231c08SMichal Simek psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); 152*85231c08SMichal Simek psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); 153*85231c08SMichal Simek psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); 154*85231c08SMichal Simek psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); 155*85231c08SMichal Simek psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); 156*85231c08SMichal Simek psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); 157*85231c08SMichal Simek psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); 158*85231c08SMichal Simek psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); 159*85231c08SMichal Simek psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); 160*85231c08SMichal Simek psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); 161*85231c08SMichal Simek psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); 162*85231c08SMichal Simek psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); 163*85231c08SMichal Simek psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); 164*85231c08SMichal Simek psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); 165*85231c08SMichal Simek psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); 166*85231c08SMichal Simek psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); 167*85231c08SMichal Simek psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); 168*85231c08SMichal Simek psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); 169*85231c08SMichal Simek psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); 170*85231c08SMichal Simek psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); 171*85231c08SMichal Simek psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); 172*85231c08SMichal Simek psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); 173*85231c08SMichal Simek psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); 174*85231c08SMichal Simek psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); 175*85231c08SMichal Simek psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); 176*85231c08SMichal Simek psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); 177*85231c08SMichal Simek psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); 178*85231c08SMichal Simek psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); 179*85231c08SMichal Simek psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); 180*85231c08SMichal Simek psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); 181*85231c08SMichal Simek psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); 182*85231c08SMichal Simek psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); 183*85231c08SMichal Simek psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); 184*85231c08SMichal Simek psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); 185*85231c08SMichal Simek psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); 186*85231c08SMichal Simek psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); 187*85231c08SMichal Simek psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); 188*85231c08SMichal Simek psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); 189*85231c08SMichal Simek psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); 190*85231c08SMichal Simek psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); 191*85231c08SMichal Simek psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); 192*85231c08SMichal Simek psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); 193*85231c08SMichal Simek psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); 194*85231c08SMichal Simek psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); 195*85231c08SMichal Simek psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); 196*85231c08SMichal Simek psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); 197*85231c08SMichal Simek psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); 198*85231c08SMichal Simek psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); 199*85231c08SMichal Simek psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); 200*85231c08SMichal Simek psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); 201*85231c08SMichal Simek psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); 202*85231c08SMichal Simek psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); 203*85231c08SMichal Simek psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); 204*85231c08SMichal Simek psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); 205*85231c08SMichal Simek psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); 206*85231c08SMichal Simek psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); 207*85231c08SMichal Simek psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); 208*85231c08SMichal Simek psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F05D90U); 209*85231c08SMichal Simek psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); 210*85231c08SMichal Simek psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); 211*85231c08SMichal Simek psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x64032010U); 212*85231c08SMichal Simek psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0x38801C20U); 213*85231c08SMichal Simek psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x06124000U); 214*85231c08SMichal Simek psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04061U); 215*85231c08SMichal Simek psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x000000D3U); 216*85231c08SMichal Simek psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040BU); 217*85231c08SMichal Simek psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x040E0604U); 218*85231c08SMichal Simek psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28100004U); 219*85231c08SMichal Simek psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x00040200U); 220*85231c08SMichal Simek psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x82000800U); 221*85231c08SMichal Simek psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x00682B0AU); 222*85231c08SMichal Simek psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00152504U); 223*85231c08SMichal Simek psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000506U); 224*85231c08SMichal Simek psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); 225*85231c08SMichal Simek psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); 226*85231c08SMichal Simek psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); 227*85231c08SMichal Simek psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000000U); 228*85231c08SMichal Simek psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000520U); 229*85231c08SMichal Simek psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000004U); 230*85231c08SMichal Simek psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000000U); 231*85231c08SMichal Simek psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000000U); 232*85231c08SMichal Simek psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); 233*85231c08SMichal Simek psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x00000000U); 234*85231c08SMichal Simek psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000000U); 235*85231c08SMichal Simek psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); 236*85231c08SMichal Simek psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); 237*85231c08SMichal Simek psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); 238*85231c08SMichal Simek psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); 239*85231c08SMichal Simek psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); 240*85231c08SMichal Simek psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800081C7U); 241*85231c08SMichal Simek psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); 242*85231c08SMichal Simek psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); 243*85231c08SMichal Simek psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); 244*85231c08SMichal Simek psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12340800U); 245*85231c08SMichal Simek psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); 246*85231c08SMichal Simek psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); 247*85231c08SMichal Simek psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); 248*85231c08SMichal Simek psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); 249*85231c08SMichal Simek psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); 250*85231c08SMichal Simek psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0B0U); 251*85231c08SMichal Simek psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF1032019U); 252*85231c08SMichal Simek psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); 253*85231c08SMichal Simek psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); 254*85231c08SMichal Simek psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); 255*85231c08SMichal Simek psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); 256*85231c08SMichal Simek psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); 257*85231c08SMichal Simek psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); 258*85231c08SMichal Simek psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); 259*85231c08SMichal Simek psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x0088E858U); 260*85231c08SMichal Simek psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000077BBU); 261*85231c08SMichal Simek psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); 262*85231c08SMichal Simek psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); 263*85231c08SMichal Simek psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x000076BBU); 264*85231c08SMichal Simek psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); 265*85231c08SMichal Simek psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B00CU); 266*85231c08SMichal Simek psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09093030U); 267*85231c08SMichal Simek psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); 268*85231c08SMichal Simek psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); 269*85231c08SMichal Simek psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B00CU); 270*85231c08SMichal Simek psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09093030U); 271*85231c08SMichal Simek psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); 272*85231c08SMichal Simek psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); 273*85231c08SMichal Simek psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); 274*85231c08SMichal Simek psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B00CU); 275*85231c08SMichal Simek psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09093030U); 276*85231c08SMichal Simek psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); 277*85231c08SMichal Simek psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); 278*85231c08SMichal Simek psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); 279*85231c08SMichal Simek psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B00CU); 280*85231c08SMichal Simek psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09093030U); 281*85231c08SMichal Simek psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); 282*85231c08SMichal Simek psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); 283*85231c08SMichal Simek psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); 284*85231c08SMichal Simek psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B00CU); 285*85231c08SMichal Simek psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09093030U); 286*85231c08SMichal Simek psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); 287*85231c08SMichal Simek psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); 288*85231c08SMichal Simek psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); 289*85231c08SMichal Simek psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B00CU); 290*85231c08SMichal Simek psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09093030U); 291*85231c08SMichal Simek psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); 292*85231c08SMichal Simek psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); 293*85231c08SMichal Simek psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); 294*85231c08SMichal Simek psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B00CU); 295*85231c08SMichal Simek psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09093030U); 296*85231c08SMichal Simek psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); 297*85231c08SMichal Simek psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); 298*85231c08SMichal Simek psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); 299*85231c08SMichal Simek psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B00CU); 300*85231c08SMichal Simek psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09093030U); 301*85231c08SMichal Simek psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); 302*85231c08SMichal Simek psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x40800624U); 303*85231c08SMichal Simek psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x00007F00U); 304*85231c08SMichal Simek psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0E00B00CU); 305*85231c08SMichal Simek psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09093030U); 306*85231c08SMichal Simek psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); 307*85231c08SMichal Simek psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); 308*85231c08SMichal Simek psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x06124000U); 309*85231c08SMichal Simek psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); 310*85231c08SMichal Simek psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); 311*85231c08SMichal Simek psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70000000U); 312*85231c08SMichal Simek psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); 313*85231c08SMichal Simek psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x06124000U); 314*85231c08SMichal Simek psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); 315*85231c08SMichal Simek psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); 316*85231c08SMichal Simek psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70000000U); 317*85231c08SMichal Simek psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); 318*85231c08SMichal Simek psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x06124000U); 319*85231c08SMichal Simek psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); 320*85231c08SMichal Simek psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); 321*85231c08SMichal Simek psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70000000U); 322*85231c08SMichal Simek psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); 323*85231c08SMichal Simek psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x06124000U); 324*85231c08SMichal Simek psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); 325*85231c08SMichal Simek psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); 326*85231c08SMichal Simek psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70000000U); 327*85231c08SMichal Simek psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x2A019FFEU); 328*85231c08SMichal Simek psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x06124000U); 329*85231c08SMichal Simek psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01264300U); 330*85231c08SMichal Simek psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); 331*85231c08SMichal Simek psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70000000U); 332*85231c08SMichal Simek psu_mask_write(0xFD0817C4, 0xFFFFFFFFU, 0x06124000U); 333*85231c08SMichal Simek psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); 334*85231c08SMichal Simek 335*85231c08SMichal Simek return 1; 336*85231c08SMichal Simek } 337*85231c08SMichal Simek 338*85231c08SMichal Simek static unsigned long psu_mio_init_data(void) 339*85231c08SMichal Simek { 340*85231c08SMichal Simek psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); 341*85231c08SMichal Simek psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); 342*85231c08SMichal Simek psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); 343*85231c08SMichal Simek psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); 344*85231c08SMichal Simek psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); 345*85231c08SMichal Simek psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); 346*85231c08SMichal Simek psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); 347*85231c08SMichal Simek psu_mask_write(0xFF180088, 0x000000FEU, 0x000000C0U); 348*85231c08SMichal Simek psu_mask_write(0xFF18008C, 0x000000FEU, 0x000000C0U); 349*85231c08SMichal Simek psu_mask_write(0xFF180204, 0x0000007FU, 0x00000000U); 350*85231c08SMichal Simek psu_mask_write(0xFF180208, 0x0000000CU, 0x00000004U); 351*85231c08SMichal Simek psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); 352*85231c08SMichal Simek psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); 353*85231c08SMichal Simek psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); 354*85231c08SMichal Simek psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); 355*85231c08SMichal Simek psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); 356*85231c08SMichal Simek psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); 357*85231c08SMichal Simek psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); 358*85231c08SMichal Simek psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); 359*85231c08SMichal Simek psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); 360*85231c08SMichal Simek psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); 361*85231c08SMichal Simek psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); 362*85231c08SMichal Simek psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); 363*85231c08SMichal Simek psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); 364*85231c08SMichal Simek psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); 365*85231c08SMichal Simek psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); 366*85231c08SMichal Simek psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); 367*85231c08SMichal Simek psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); 368*85231c08SMichal Simek psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); 369*85231c08SMichal Simek psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); 370*85231c08SMichal Simek 371*85231c08SMichal Simek return 1; 372*85231c08SMichal Simek } 373*85231c08SMichal Simek 374*85231c08SMichal Simek static unsigned long psu_peripherals_init_data(void) 375*85231c08SMichal Simek { 376*85231c08SMichal Simek psu_mask_write(0xFD1A0100, 0x0000007CU, 0x00000000U); 377*85231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); 378*85231c08SMichal Simek psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); 379*85231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); 380*85231c08SMichal Simek psu_mask_write(0xFF180390, 0x00000004U, 0x00000000U); 381*85231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); 382*85231c08SMichal Simek psu_mask_write(0xFF000034, 0x000000FFU, 0x00000005U); 383*85231c08SMichal Simek psu_mask_write(0xFF000018, 0x0000FFFFU, 0x0000008FU); 384*85231c08SMichal Simek psu_mask_write(0xFF000000, 0x000001FFU, 0x00000017U); 385*85231c08SMichal Simek psu_mask_write(0xFF000004, 0x000003FFU, 0x00000020U); 386*85231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); 387*85231c08SMichal Simek psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); 388*85231c08SMichal Simek psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); 389*85231c08SMichal Simek psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); 390*85231c08SMichal Simek psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); 391*85231c08SMichal Simek psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x01FC9F08U); 392*85231c08SMichal Simek psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); 393*85231c08SMichal Simek 394*85231c08SMichal Simek return 1; 395*85231c08SMichal Simek } 396*85231c08SMichal Simek 397*85231c08SMichal Simek static unsigned long psu_afi_config(void) 398*85231c08SMichal Simek { 399*85231c08SMichal Simek psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); 400*85231c08SMichal Simek psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); 401*85231c08SMichal Simek psu_mask_write(0xFD615000, 0x00000300U, 0x00000000U); 402*85231c08SMichal Simek 403*85231c08SMichal Simek return 1; 404*85231c08SMichal Simek } 405*85231c08SMichal Simek 406*85231c08SMichal Simek static unsigned long psu_ddr_phybringup_data(void) 407*85231c08SMichal Simek { 408*85231c08SMichal Simek unsigned int regval = 0; 409*85231c08SMichal Simek unsigned int pll_retry = 10; 410*85231c08SMichal Simek unsigned int pll_locked = 0; 411*85231c08SMichal Simek 412*85231c08SMichal Simek while ((pll_retry > 0) && (!pll_locked)) { 413*85231c08SMichal Simek Xil_Out32(0xFD080004, 0x00040010); 414*85231c08SMichal Simek Xil_Out32(0xFD080004, 0x00040011); 415*85231c08SMichal Simek 416*85231c08SMichal Simek while ((Xil_In32(0xFD080030) & 0x1) != 1) 417*85231c08SMichal Simek ; 418*85231c08SMichal Simek 419*85231c08SMichal Simek pll_locked = (Xil_In32(0xFD080030) & 0x80000000) >> 31; 420*85231c08SMichal Simek pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) >> 16; 421*85231c08SMichal Simek pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; 422*85231c08SMichal Simek pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) >> 16; 423*85231c08SMichal Simek pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) >> 16; 424*85231c08SMichal Simek pll_retry--; 425*85231c08SMichal Simek } 426*85231c08SMichal Simek Xil_Out32(0xFD0800C0, Xil_In32(0xFD0800C0) | (pll_retry << 16)); 427*85231c08SMichal Simek Xil_Out32(0xFD080004U, 0x00040063U); 428*85231c08SMichal Simek 429*85231c08SMichal Simek while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) 430*85231c08SMichal Simek ; 431*85231c08SMichal Simek prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); 432*85231c08SMichal Simek 433*85231c08SMichal Simek while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) 434*85231c08SMichal Simek ; 435*85231c08SMichal Simek Xil_Out32(0xFD0701B0U, 0x00000001U); 436*85231c08SMichal Simek Xil_Out32(0xFD070320U, 0x00000001U); 437*85231c08SMichal Simek while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) 438*85231c08SMichal Simek ; 439*85231c08SMichal Simek prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); 440*85231c08SMichal Simek Xil_Out32(0xFD080004, 0x0004FE01); 441*85231c08SMichal Simek regval = Xil_In32(0xFD080030); 442*85231c08SMichal Simek while (regval != 0x80000FFF) 443*85231c08SMichal Simek regval = Xil_In32(0xFD080030); 444*85231c08SMichal Simek Xil_Out32(0xFD070180U, 0x00800020U); 445*85231c08SMichal Simek Xil_Out32(0xFD070060U, 0x00000000U); 446*85231c08SMichal Simek prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); 447*85231c08SMichal Simek 448*85231c08SMichal Simek return 1; 449*85231c08SMichal Simek } 450*85231c08SMichal Simek 451*85231c08SMichal Simek int psu_init(void) 452*85231c08SMichal Simek { 453*85231c08SMichal Simek int status = 1; 454*85231c08SMichal Simek 455*85231c08SMichal Simek status &= psu_mio_init_data(); 456*85231c08SMichal Simek status &= psu_pll_init_data(); 457*85231c08SMichal Simek status &= psu_clock_init_data(); 458*85231c08SMichal Simek status &= psu_ddr_init_data(); 459*85231c08SMichal Simek status &= psu_ddr_phybringup_data(); 460*85231c08SMichal Simek status &= psu_peripherals_init_data(); 461*85231c08SMichal Simek 462*85231c08SMichal Simek status &= psu_afi_config(); 463*85231c08SMichal Simek 464*85231c08SMichal Simek if (status == 0) 465*85231c08SMichal Simek return 1; 466*85231c08SMichal Simek return 0; 467*85231c08SMichal Simek } 468