1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 285231c08SMichal Simek /* 385231c08SMichal Simek * (c) Copyright 2015 Xilinx, Inc. All rights reserved. 485231c08SMichal Simek */ 585231c08SMichal Simek 685231c08SMichal Simek #include <asm/arch/psu_init_gpl.h> 785231c08SMichal Simek #include <xil_io.h> 885231c08SMichal Simek 985231c08SMichal Simek static unsigned long psu_pll_init_data(void) 1085231c08SMichal Simek { 1185231c08SMichal Simek psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E60EC6CU); 1285231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00013000U); 1385231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); 1485231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); 1585231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); 1685231c08SMichal Simek mask_poll(0xFF5E0040, 0x00000002U); 1785231c08SMichal Simek psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); 1885231c08SMichal Simek psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000200U); 1985231c08SMichal Simek psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); 2085231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); 2185231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); 2285231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); 2385231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); 2485231c08SMichal Simek mask_poll(0xFF5E0040, 0x00000001U); 2585231c08SMichal Simek psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); 2685231c08SMichal Simek psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); 2785231c08SMichal Simek psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); 2885231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014200U); 2985231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); 3085231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); 3185231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); 3285231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000001U); 3385231c08SMichal Simek psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); 3485231c08SMichal Simek psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); 3585231c08SMichal Simek psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); 3685231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00014800U); 3785231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); 3885231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); 3985231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); 4085231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000002U); 4185231c08SMichal Simek psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); 4285231c08SMichal Simek psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000300U); 4385231c08SMichal Simek psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C62U); 4485231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00014000U); 4585231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); 4685231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); 4785231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); 4885231c08SMichal Simek mask_poll(0xFD1A0044, 0x00000004U); 4985231c08SMichal Simek psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); 5085231c08SMichal Simek psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000200U); 5185231c08SMichal Simek 5285231c08SMichal Simek return 1; 5385231c08SMichal Simek } 5485231c08SMichal Simek 5585231c08SMichal Simek static unsigned long psu_clock_init_data(void) 5685231c08SMichal Simek { 5785231c08SMichal Simek psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010500U); 5885231c08SMichal Simek psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); 5985231c08SMichal Simek psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); 6085231c08SMichal Simek psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000300U); 6185231c08SMichal Simek psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000900U); 6285231c08SMichal Simek psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); 6385231c08SMichal Simek psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); 6485231c08SMichal Simek psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); 6585231c08SMichal Simek psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); 6685231c08SMichal Simek psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010802U); 6785231c08SMichal Simek psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011D02U); 6885231c08SMichal Simek psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); 6985231c08SMichal Simek psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000104U); 7085231c08SMichal Simek psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); 7185231c08SMichal Simek psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); 7285231c08SMichal Simek psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000600U); 7385231c08SMichal Simek psu_mask_write(0xFD1A0084, 0x07003F07U, 0x07000203U); 7485231c08SMichal Simek psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000203U); 7585231c08SMichal Simek psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000203U); 7685231c08SMichal Simek psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000202U); 7785231c08SMichal Simek psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); 7885231c08SMichal Simek psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); 7985231c08SMichal Simek psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); 8085231c08SMichal Simek psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); 8185231c08SMichal Simek psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); 8285231c08SMichal Simek psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); 8385231c08SMichal Simek 8485231c08SMichal Simek return 1; 8585231c08SMichal Simek } 8685231c08SMichal Simek 8785231c08SMichal Simek static unsigned long psu_ddr_init_data(void) 8885231c08SMichal Simek { 8985231c08SMichal Simek psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); 9085231c08SMichal Simek psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040001U); 9185231c08SMichal Simek psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); 9285231c08SMichal Simek psu_mask_write(0xFD070020, 0x000003F3U, 0x00000100U); 9385231c08SMichal Simek psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); 9485231c08SMichal Simek psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); 9585231c08SMichal Simek psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00403210U); 9685231c08SMichal Simek psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); 9785231c08SMichal Simek psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); 9885231c08SMichal Simek psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); 9985231c08SMichal Simek psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x00308034U); 10085231c08SMichal Simek psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); 10185231c08SMichal Simek psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); 10285231c08SMichal Simek psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); 10385231c08SMichal Simek psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0030051FU); 10485231c08SMichal Simek psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020063U); 10585231c08SMichal Simek psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00290000U); 10685231c08SMichal Simek psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00000E05U); 10785231c08SMichal Simek psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x05200004U); 10885231c08SMichal Simek psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00000000U); 10985231c08SMichal Simek psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00110004U); 11085231c08SMichal Simek psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x00000000U); 11185231c08SMichal Simek psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x00000000U); 11285231c08SMichal Simek psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); 11385231c08SMichal Simek psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); 11485231c08SMichal Simek psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x07080D07U); 11585231c08SMichal Simek psu_mask_write(0xFD070104, 0x001F1F7FU, 0x0005020BU); 11685231c08SMichal Simek psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x03030607U); 11785231c08SMichal Simek psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x00502006U); 11885231c08SMichal Simek psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x13020204U); 11985231c08SMichal Simek psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x03030202U); 12085231c08SMichal Simek psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010003U); 12185231c08SMichal Simek psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000303U); 12285231c08SMichal Simek psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x02020909U); 12385231c08SMichal Simek psu_mask_write(0xFD070124, 0x40070F3FU, 0x0004040DU); 12485231c08SMichal Simek psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x440C011CU); 12585231c08SMichal Simek psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); 12685231c08SMichal Simek psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x80800020U); 12785231c08SMichal Simek psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x02009896U); 12885231c08SMichal Simek psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x04828202U); 12985231c08SMichal Simek psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00020304U); 13085231c08SMichal Simek psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); 13185231c08SMichal Simek psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); 13285231c08SMichal Simek psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); 13385231c08SMichal Simek psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x003800D4U); 13485231c08SMichal Simek psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); 13585231c08SMichal Simek psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x0000003DU); 13685231c08SMichal Simek psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000000U); 13785231c08SMichal Simek psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); 13885231c08SMichal Simek psu_mask_write(0xFD070204, 0x001F1F1FU, 0x00080808U); 13985231c08SMichal Simek psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x00000000U); 14085231c08SMichal Simek psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x00000000U); 14185231c08SMichal Simek psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); 14285231c08SMichal Simek psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); 14385231c08SMichal Simek psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x0F070707U); 14485231c08SMichal Simek psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); 14585231c08SMichal Simek psu_mask_write(0xFD070220, 0x00001F1FU, 0x00000000U); 14685231c08SMichal Simek psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); 14785231c08SMichal Simek psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); 14885231c08SMichal Simek psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); 14985231c08SMichal Simek psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x06000604U); 15085231c08SMichal Simek psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); 15185231c08SMichal Simek psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); 15285231c08SMichal Simek psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); 15385231c08SMichal Simek psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); 15485231c08SMichal Simek psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); 15585231c08SMichal Simek psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); 15685231c08SMichal Simek psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); 15785231c08SMichal Simek psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); 15885231c08SMichal Simek psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); 15985231c08SMichal Simek psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); 16085231c08SMichal Simek psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); 16185231c08SMichal Simek psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); 16285231c08SMichal Simek psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); 16385231c08SMichal Simek psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); 16485231c08SMichal Simek psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); 16585231c08SMichal Simek psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); 16685231c08SMichal Simek psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); 16785231c08SMichal Simek psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); 16885231c08SMichal Simek psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); 16985231c08SMichal Simek psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); 17085231c08SMichal Simek psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); 17185231c08SMichal Simek psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); 17285231c08SMichal Simek psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); 17385231c08SMichal Simek psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); 17485231c08SMichal Simek psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); 17585231c08SMichal Simek psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); 17685231c08SMichal Simek psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); 17785231c08SMichal Simek psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); 17885231c08SMichal Simek psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); 17985231c08SMichal Simek psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); 18085231c08SMichal Simek psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); 18185231c08SMichal Simek psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); 18285231c08SMichal Simek psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); 18385231c08SMichal Simek psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); 18485231c08SMichal Simek psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); 18585231c08SMichal Simek psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); 18685231c08SMichal Simek psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); 18785231c08SMichal Simek psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); 18885231c08SMichal Simek psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); 18985231c08SMichal Simek psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); 19085231c08SMichal Simek psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); 19185231c08SMichal Simek psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); 19285231c08SMichal Simek psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); 19385231c08SMichal Simek psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); 19485231c08SMichal Simek psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); 19585231c08SMichal Simek psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); 19685231c08SMichal Simek psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); 19785231c08SMichal Simek psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); 19885231c08SMichal Simek psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); 19985231c08SMichal Simek psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); 20085231c08SMichal Simek psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); 20185231c08SMichal Simek psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); 20285231c08SMichal Simek psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); 20385231c08SMichal Simek psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); 20485231c08SMichal Simek psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); 20585231c08SMichal Simek psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); 20685231c08SMichal Simek psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); 20785231c08SMichal Simek psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F05D90U); 20885231c08SMichal Simek psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); 20985231c08SMichal Simek psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); 21085231c08SMichal Simek psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x64032010U); 21185231c08SMichal Simek psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0x38801C20U); 21285231c08SMichal Simek psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x06124000U); 21385231c08SMichal Simek psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04061U); 21485231c08SMichal Simek psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x000000D3U); 21585231c08SMichal Simek psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040BU); 21685231c08SMichal Simek psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x040E0604U); 21785231c08SMichal Simek psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28100004U); 21885231c08SMichal Simek psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x00040200U); 21985231c08SMichal Simek psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x82000800U); 22085231c08SMichal Simek psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x00682B0AU); 22185231c08SMichal Simek psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00152504U); 22285231c08SMichal Simek psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000506U); 22385231c08SMichal Simek psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); 22485231c08SMichal Simek psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); 22585231c08SMichal Simek psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); 22685231c08SMichal Simek psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000000U); 22785231c08SMichal Simek psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000520U); 22885231c08SMichal Simek psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000004U); 22985231c08SMichal Simek psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000000U); 23085231c08SMichal Simek psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000000U); 23185231c08SMichal Simek psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); 23285231c08SMichal Simek psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x00000000U); 23385231c08SMichal Simek psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000000U); 23485231c08SMichal Simek psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); 23585231c08SMichal Simek psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); 23685231c08SMichal Simek psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); 23785231c08SMichal Simek psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); 23885231c08SMichal Simek psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); 23985231c08SMichal Simek psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800081C7U); 24085231c08SMichal Simek psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); 24185231c08SMichal Simek psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); 24285231c08SMichal Simek psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); 24385231c08SMichal Simek psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12340800U); 24485231c08SMichal Simek psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); 24585231c08SMichal Simek psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); 24685231c08SMichal Simek psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); 24785231c08SMichal Simek psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); 24885231c08SMichal Simek psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); 24985231c08SMichal Simek psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0B0U); 25085231c08SMichal Simek psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF1032019U); 25185231c08SMichal Simek psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); 25285231c08SMichal Simek psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); 25385231c08SMichal Simek psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); 25485231c08SMichal Simek psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); 25585231c08SMichal Simek psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); 25685231c08SMichal Simek psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); 25785231c08SMichal Simek psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); 25885231c08SMichal Simek psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x0088E858U); 25985231c08SMichal Simek psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000077BBU); 26085231c08SMichal Simek psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); 26185231c08SMichal Simek psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); 26285231c08SMichal Simek psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x000076BBU); 26385231c08SMichal Simek psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); 26485231c08SMichal Simek psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B00CU); 26585231c08SMichal Simek psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09093030U); 26685231c08SMichal Simek psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); 26785231c08SMichal Simek psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); 26885231c08SMichal Simek psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B00CU); 26985231c08SMichal Simek psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09093030U); 27085231c08SMichal Simek psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); 27185231c08SMichal Simek psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); 27285231c08SMichal Simek psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); 27385231c08SMichal Simek psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B00CU); 27485231c08SMichal Simek psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09093030U); 27585231c08SMichal Simek psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); 27685231c08SMichal Simek psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); 27785231c08SMichal Simek psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); 27885231c08SMichal Simek psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B00CU); 27985231c08SMichal Simek psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09093030U); 28085231c08SMichal Simek psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); 28185231c08SMichal Simek psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); 28285231c08SMichal Simek psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); 28385231c08SMichal Simek psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B00CU); 28485231c08SMichal Simek psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09093030U); 28585231c08SMichal Simek psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); 28685231c08SMichal Simek psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); 28785231c08SMichal Simek psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); 28885231c08SMichal Simek psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B00CU); 28985231c08SMichal Simek psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09093030U); 29085231c08SMichal Simek psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); 29185231c08SMichal Simek psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); 29285231c08SMichal Simek psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); 29385231c08SMichal Simek psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B00CU); 29485231c08SMichal Simek psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09093030U); 29585231c08SMichal Simek psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); 29685231c08SMichal Simek psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); 29785231c08SMichal Simek psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); 29885231c08SMichal Simek psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B00CU); 29985231c08SMichal Simek psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09093030U); 30085231c08SMichal Simek psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); 30185231c08SMichal Simek psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x40800624U); 30285231c08SMichal Simek psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x00007F00U); 30385231c08SMichal Simek psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0E00B00CU); 30485231c08SMichal Simek psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09093030U); 30585231c08SMichal Simek psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); 30685231c08SMichal Simek psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); 30785231c08SMichal Simek psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x06124000U); 30885231c08SMichal Simek psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); 30985231c08SMichal Simek psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); 31085231c08SMichal Simek psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70000000U); 31185231c08SMichal Simek psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); 31285231c08SMichal Simek psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x06124000U); 31385231c08SMichal Simek psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); 31485231c08SMichal Simek psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); 31585231c08SMichal Simek psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70000000U); 31685231c08SMichal Simek psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); 31785231c08SMichal Simek psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x06124000U); 31885231c08SMichal Simek psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); 31985231c08SMichal Simek psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); 32085231c08SMichal Simek psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70000000U); 32185231c08SMichal Simek psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); 32285231c08SMichal Simek psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x06124000U); 32385231c08SMichal Simek psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); 32485231c08SMichal Simek psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); 32585231c08SMichal Simek psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70000000U); 32685231c08SMichal Simek psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x2A019FFEU); 32785231c08SMichal Simek psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x06124000U); 32885231c08SMichal Simek psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01264300U); 32985231c08SMichal Simek psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); 33085231c08SMichal Simek psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70000000U); 33185231c08SMichal Simek psu_mask_write(0xFD0817C4, 0xFFFFFFFFU, 0x06124000U); 33285231c08SMichal Simek psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); 33385231c08SMichal Simek 33485231c08SMichal Simek return 1; 33585231c08SMichal Simek } 33685231c08SMichal Simek 33785231c08SMichal Simek static unsigned long psu_mio_init_data(void) 33885231c08SMichal Simek { 33985231c08SMichal Simek psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); 34085231c08SMichal Simek psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); 34185231c08SMichal Simek psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); 34285231c08SMichal Simek psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); 34385231c08SMichal Simek psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); 34485231c08SMichal Simek psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); 34585231c08SMichal Simek psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); 34685231c08SMichal Simek psu_mask_write(0xFF180088, 0x000000FEU, 0x000000C0U); 34785231c08SMichal Simek psu_mask_write(0xFF18008C, 0x000000FEU, 0x000000C0U); 34885231c08SMichal Simek psu_mask_write(0xFF180204, 0x0000007FU, 0x00000000U); 34985231c08SMichal Simek psu_mask_write(0xFF180208, 0x0000000CU, 0x00000004U); 35085231c08SMichal Simek psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); 35185231c08SMichal Simek psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); 35285231c08SMichal Simek psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); 35385231c08SMichal Simek psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); 35485231c08SMichal Simek psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); 35585231c08SMichal Simek psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); 35685231c08SMichal Simek psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); 35785231c08SMichal Simek psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); 35885231c08SMichal Simek psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); 35985231c08SMichal Simek psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); 36085231c08SMichal Simek psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); 36185231c08SMichal Simek psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); 36285231c08SMichal Simek psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); 36385231c08SMichal Simek psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); 36485231c08SMichal Simek psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); 36585231c08SMichal Simek psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); 36685231c08SMichal Simek psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); 36785231c08SMichal Simek psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); 36885231c08SMichal Simek psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); 36985231c08SMichal Simek 37085231c08SMichal Simek return 1; 37185231c08SMichal Simek } 37285231c08SMichal Simek 37385231c08SMichal Simek static unsigned long psu_peripherals_init_data(void) 37485231c08SMichal Simek { 37585231c08SMichal Simek psu_mask_write(0xFD1A0100, 0x0000007CU, 0x00000000U); 37685231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); 37785231c08SMichal Simek psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); 37885231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); 37985231c08SMichal Simek psu_mask_write(0xFF180390, 0x00000004U, 0x00000000U); 38085231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); 38185231c08SMichal Simek psu_mask_write(0xFF000034, 0x000000FFU, 0x00000005U); 38285231c08SMichal Simek psu_mask_write(0xFF000018, 0x0000FFFFU, 0x0000008FU); 38385231c08SMichal Simek psu_mask_write(0xFF000000, 0x000001FFU, 0x00000017U); 38485231c08SMichal Simek psu_mask_write(0xFF000004, 0x000003FFU, 0x00000020U); 38585231c08SMichal Simek psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); 38685231c08SMichal Simek psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); 38785231c08SMichal Simek psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); 38885231c08SMichal Simek psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); 38985231c08SMichal Simek psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); 39085231c08SMichal Simek psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x01FC9F08U); 39185231c08SMichal Simek psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); 39285231c08SMichal Simek 39385231c08SMichal Simek return 1; 39485231c08SMichal Simek } 39585231c08SMichal Simek 39685231c08SMichal Simek static unsigned long psu_afi_config(void) 39785231c08SMichal Simek { 39885231c08SMichal Simek psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); 39985231c08SMichal Simek psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); 40085231c08SMichal Simek psu_mask_write(0xFD615000, 0x00000300U, 0x00000000U); 40185231c08SMichal Simek 40285231c08SMichal Simek return 1; 40385231c08SMichal Simek } 40485231c08SMichal Simek 40585231c08SMichal Simek static unsigned long psu_ddr_phybringup_data(void) 40685231c08SMichal Simek { 40785231c08SMichal Simek unsigned int regval = 0; 40885231c08SMichal Simek unsigned int pll_retry = 10; 40985231c08SMichal Simek unsigned int pll_locked = 0; 41085231c08SMichal Simek 41185231c08SMichal Simek while ((pll_retry > 0) && (!pll_locked)) { 41285231c08SMichal Simek Xil_Out32(0xFD080004, 0x00040010); 41385231c08SMichal Simek Xil_Out32(0xFD080004, 0x00040011); 41485231c08SMichal Simek 41585231c08SMichal Simek while ((Xil_In32(0xFD080030) & 0x1) != 1) 41685231c08SMichal Simek ; 41785231c08SMichal Simek 41885231c08SMichal Simek pll_locked = (Xil_In32(0xFD080030) & 0x80000000) >> 31; 41985231c08SMichal Simek pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) >> 16; 42085231c08SMichal Simek pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; 42185231c08SMichal Simek pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) >> 16; 42285231c08SMichal Simek pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) >> 16; 42385231c08SMichal Simek pll_retry--; 42485231c08SMichal Simek } 42585231c08SMichal Simek Xil_Out32(0xFD0800C0, Xil_In32(0xFD0800C0) | (pll_retry << 16)); 42685231c08SMichal Simek Xil_Out32(0xFD080004U, 0x00040063U); 42785231c08SMichal Simek 42885231c08SMichal Simek while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) 42985231c08SMichal Simek ; 43085231c08SMichal Simek prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); 43185231c08SMichal Simek 43285231c08SMichal Simek while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) 43385231c08SMichal Simek ; 43485231c08SMichal Simek Xil_Out32(0xFD0701B0U, 0x00000001U); 43585231c08SMichal Simek Xil_Out32(0xFD070320U, 0x00000001U); 43685231c08SMichal Simek while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) 43785231c08SMichal Simek ; 43885231c08SMichal Simek prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); 43985231c08SMichal Simek Xil_Out32(0xFD080004, 0x0004FE01); 44085231c08SMichal Simek regval = Xil_In32(0xFD080030); 44185231c08SMichal Simek while (regval != 0x80000FFF) 44285231c08SMichal Simek regval = Xil_In32(0xFD080030); 44385231c08SMichal Simek Xil_Out32(0xFD070180U, 0x00800020U); 44485231c08SMichal Simek Xil_Out32(0xFD070060U, 0x00000000U); 44585231c08SMichal Simek prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); 44685231c08SMichal Simek 44785231c08SMichal Simek return 1; 44885231c08SMichal Simek } 44985231c08SMichal Simek 45085231c08SMichal Simek int psu_init(void) 45185231c08SMichal Simek { 45285231c08SMichal Simek int status = 1; 45385231c08SMichal Simek 45485231c08SMichal Simek status &= psu_mio_init_data(); 45585231c08SMichal Simek status &= psu_pll_init_data(); 45685231c08SMichal Simek status &= psu_clock_init_data(); 45785231c08SMichal Simek status &= psu_ddr_init_data(); 45885231c08SMichal Simek status &= psu_ddr_phybringup_data(); 45985231c08SMichal Simek status &= psu_peripherals_init_data(); 46085231c08SMichal Simek 46185231c08SMichal Simek status &= psu_afi_config(); 46285231c08SMichal Simek 46385231c08SMichal Simek if (status == 0) 46485231c08SMichal Simek return 1; 46585231c08SMichal Simek return 0; 46685231c08SMichal Simek } 467