1*413ab5b0STom McLeod /****************************************************************************** 2*413ab5b0STom McLeod * (c) Copyright 2010-2014 Xilinx, Inc. All rights reserved. 3*413ab5b0STom McLeod * (c) Copyright 2017 Opal Kelly Inc. 4*413ab5b0STom McLeod * 5*413ab5b0STom McLeod * SPDX-License-Identifier: GPL-2.0+ 6*413ab5b0STom McLeod *****************************************************************************/ 7*413ab5b0STom McLeod 8*413ab5b0STom McLeod #include "ps7_init_gpl.h" 9*413ab5b0STom McLeod #include "asm/io.h" 10*413ab5b0STom McLeod 11*413ab5b0STom McLeod unsigned long ps7_pll_init_data_3_0[] = { 12*413ab5b0STom McLeod EMIT_WRITE(0XF8000008, 0x0000DF0DU), 13*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000110, 0x003FFFF0U, 0x001772C0U), 14*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000100, 0x0007F000U, 0x0001A000U), 15*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000100, 0x00000010U, 0x00000010U), 16*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000100, 0x00000001U, 0x00000001U), 17*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000100, 0x00000001U, 0x00000000U), 18*413ab5b0STom McLeod EMIT_MASKPOLL(0XF800010C, 0x00000001U), 19*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000100, 0x00000010U, 0x00000000U), 20*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000120, 0x1F003F30U, 0x1F000200U), 21*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000114, 0x003FFFF0U, 0x001DB2C0U), 22*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000104, 0x0007F000U, 0x00015000U), 23*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000104, 0x00000010U, 0x00000010U), 24*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000104, 0x00000001U, 0x00000001U), 25*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000104, 0x00000001U, 0x00000000U), 26*413ab5b0STom McLeod EMIT_MASKPOLL(0XF800010C, 0x00000002U), 27*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000104, 0x00000010U, 0x00000000U), 28*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000124, 0xFFF00003U, 0x0C200003U), 29*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000118, 0x003FFFF0U, 0x001F42C0U), 30*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000108, 0x0007F000U, 0x00014000U), 31*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000108, 0x00000010U, 0x00000010U), 32*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000108, 0x00000001U, 0x00000001U), 33*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000108, 0x00000001U, 0x00000000U), 34*413ab5b0STom McLeod EMIT_MASKPOLL(0XF800010C, 0x00000004U), 35*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000108, 0x00000010U, 0x00000000U), 36*413ab5b0STom McLeod EMIT_WRITE(0XF8000004, 0x0000767BU), 37*413ab5b0STom McLeod EMIT_EXIT(), 38*413ab5b0STom McLeod }; 39*413ab5b0STom McLeod 40*413ab5b0STom McLeod unsigned long ps7_clock_init_data_3_0[] = { 41*413ab5b0STom McLeod EMIT_WRITE(0XF8000008, 0x0000DF0DU), 42*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000128, 0x03F03F01U, 0x00203401U), 43*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000138, 0x00000011U, 0x00000001U), 44*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000140, 0x03F03F71U, 0x00100801U), 45*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800014C, 0x00003F31U, 0x00000501U), 46*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000150, 0x00003F33U, 0x00000A01U), 47*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000154, 0x00003F33U, 0x00000A01U), 48*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000168, 0x00003F31U, 0x00000501U), 49*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000170, 0x03F03F30U, 0x00400500U), 50*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80001C4, 0x00000001U, 0x00000001U), 51*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800012C, 0x01FFCCCDU, 0x01DC044DU), 52*413ab5b0STom McLeod EMIT_WRITE(0XF8000004, 0x0000767BU), 53*413ab5b0STom McLeod EMIT_EXIT(), 54*413ab5b0STom McLeod }; 55*413ab5b0STom McLeod 56*413ab5b0STom McLeod unsigned long ps7_ddr_init_data_3_0[] = { 57*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006000, 0x0001FFFFU, 0x00000080U), 58*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006004, 0x0007FFFFU, 0x00001081U), 59*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006008, 0x03FFFFFFU, 0x03C0780FU), 60*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800600C, 0x03FFFFFFU, 0x02001001U), 61*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006010, 0x03FFFFFFU, 0x00014001U), 62*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006014, 0x001FFFFFU, 0x0004281AU), 63*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006018, 0xF7FFFFFFU, 0x44E458D2U), 64*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800601C, 0xFFFFFFFFU, 0x720238E5U), 65*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006020, 0x7FDFFFFCU, 0x270872D0U), 66*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006024, 0x0FFFFFC3U, 0x00000000U), 67*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006028, 0x00003FFFU, 0x00002007U), 68*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800602C, 0xFFFFFFFFU, 0x00000008U), 69*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006030, 0xFFFFFFFFU, 0x00040930U), 70*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006034, 0x13FF3FFFU, 0x000116D4U), 71*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006038, 0x00000003U, 0x00000000U), 72*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800603C, 0x000FFFFFU, 0x00000777U), 73*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006040, 0xFFFFFFFFU, 0xFFF00000U), 74*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006044, 0x0FFFFFFFU, 0x0F666666U), 75*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006048, 0x0003F03FU, 0x0003C008U), 76*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006050, 0xFF0F8FFFU, 0x77010800U), 77*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006058, 0x00010000U, 0x00000000U), 78*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800605C, 0x0000FFFFU, 0x00005003U), 79*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006060, 0x000017FFU, 0x0000003EU), 80*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006064, 0x00021FE0U, 0x00020000U), 81*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006068, 0x03FFFFFFU, 0x00284141U), 82*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800606C, 0x0000FFFFU, 0x00001610U), 83*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006078, 0x03FFFFFFU, 0x00466111U), 84*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800607C, 0x000FFFFFU, 0x00032222U), 85*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060A4, 0xFFFFFFFFU, 0x10200802U), 86*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060A8, 0x0FFFFFFFU, 0x0690CB73U), 87*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060AC, 0x000001FFU, 0x000001FEU), 88*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060B0, 0x1FFFFFFFU, 0x1CFFFFFFU), 89*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060B4, 0x00000200U, 0x00000200U), 90*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060B8, 0x01FFFFFFU, 0x00200066U), 91*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060C4, 0x00000003U, 0x00000000U), 92*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060C8, 0x000000FFU, 0x00000000U), 93*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060DC, 0x00000001U, 0x00000000U), 94*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060F0, 0x0000FFFFU, 0x00000000U), 95*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80060F4, 0x0000000FU, 0x00000008U), 96*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006114, 0x000000FFU, 0x00000000U), 97*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006118, 0x7FFFFFCFU, 0x40000001U), 98*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800611C, 0x7FFFFFCFU, 0x40000001U), 99*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006120, 0x7FFFFFCFU, 0x40000001U), 100*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006124, 0x7FFFFFCFU, 0x40000001U), 101*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800612C, 0x000FFFFFU, 0x00029000U), 102*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006130, 0x000FFFFFU, 0x00029000U), 103*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006134, 0x000FFFFFU, 0x00029000U), 104*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006138, 0x000FFFFFU, 0x00029000U), 105*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006140, 0x000FFFFFU, 0x00000035U), 106*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006144, 0x000FFFFFU, 0x00000035U), 107*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006148, 0x000FFFFFU, 0x00000035U), 108*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800614C, 0x000FFFFFU, 0x00000035U), 109*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006154, 0x000FFFFFU, 0x00000080U), 110*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006158, 0x000FFFFFU, 0x00000080U), 111*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800615C, 0x000FFFFFU, 0x00000080U), 112*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006160, 0x000FFFFFU, 0x00000080U), 113*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006168, 0x001FFFFFU, 0x000000F9U), 114*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800616C, 0x001FFFFFU, 0x000000F9U), 115*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006170, 0x001FFFFFU, 0x000000F9U), 116*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006174, 0x001FFFFFU, 0x000000F9U), 117*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800617C, 0x000FFFFFU, 0x000000C0U), 118*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006180, 0x000FFFFFU, 0x000000C0U), 119*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006184, 0x000FFFFFU, 0x000000C0U), 120*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006188, 0x000FFFFFU, 0x000000C0U), 121*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006190, 0x6FFFFEFEU, 0x00040080U), 122*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006194, 0x000FFFFFU, 0x0001FC82U), 123*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006204, 0xFFFFFFFFU, 0x00000000U), 124*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006208, 0x000703FFU, 0x000003FFU), 125*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800620C, 0x000703FFU, 0x000003FFU), 126*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006210, 0x000703FFU, 0x000003FFU), 127*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006214, 0x000703FFU, 0x000003FFU), 128*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006218, 0x000F03FFU, 0x000003FFU), 129*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800621C, 0x000F03FFU, 0x000003FFU), 130*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006220, 0x000F03FFU, 0x000003FFU), 131*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006224, 0x000F03FFU, 0x000003FFU), 132*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80062A8, 0x00000FF5U, 0x00000000U), 133*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80062AC, 0xFFFFFFFFU, 0x00000000U), 134*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80062B0, 0x003FFFFFU, 0x00005125U), 135*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80062B4, 0x0003FFFFU, 0x000012A8U), 136*413ab5b0STom McLeod EMIT_MASKPOLL(0XF8000B74, 0x00002000U), 137*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8006000, 0x0001FFFFU, 0x00000081U), 138*413ab5b0STom McLeod EMIT_MASKPOLL(0XF8006054, 0x00000007U), 139*413ab5b0STom McLeod EMIT_EXIT(), 140*413ab5b0STom McLeod }; 141*413ab5b0STom McLeod 142*413ab5b0STom McLeod unsigned long ps7_mio_init_data_3_0[] = { 143*413ab5b0STom McLeod EMIT_WRITE(0XF8000008, 0x0000DF0DU), 144*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B40, 0x00000FFFU, 0x00000600U), 145*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B44, 0x00000FFFU, 0x00000600U), 146*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B48, 0x00000FFFU, 0x00000672U), 147*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B4C, 0x00000FFFU, 0x00000672U), 148*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B50, 0x00000FFFU, 0x00000674U), 149*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B54, 0x00000FFFU, 0x00000674U), 150*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B58, 0x00000FFFU, 0x00000600U), 151*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B5C, 0xFFFFFFFFU, 0x0018C61CU), 152*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B60, 0xFFFFFFFFU, 0x00F9861CU), 153*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B64, 0xFFFFFFFFU, 0x00F9861CU), 154*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B68, 0xFFFFFFFFU, 0x00F9861CU), 155*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B6C, 0x00007FFFU, 0x00000260U), 156*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B70, 0x00000001U, 0x00000001U), 157*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B70, 0x00000021U, 0x00000020U), 158*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B70, 0x07FEFFFFU, 0x00000823U), 159*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000700, 0x00003FFFU, 0x00001600U), 160*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000704, 0x00003FFFU, 0x00001602U), 161*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000708, 0x00003FFFU, 0x00000602U), 162*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800070C, 0x00003FFFU, 0x00000602U), 163*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000710, 0x00003FFFU, 0x00000602U), 164*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000714, 0x00003FFFU, 0x00000602U), 165*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000718, 0x00003FFFU, 0x00000602U), 166*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800071C, 0x00003FFFU, 0x00000600U), 167*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000720, 0x00003FFFU, 0x00000600U), 168*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000724, 0x00003FFFU, 0x00001600U), 169*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000728, 0x00003FFFU, 0x00001600U), 170*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800072C, 0x00003FFFU, 0x00001600U), 171*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000730, 0x00003FFFU, 0x00001640U), 172*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000734, 0x00003FFFU, 0x00001640U), 173*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000738, 0x00003FFFU, 0x000016E1U), 174*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800073C, 0x00003FFFU, 0x000016E0U), 175*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000740, 0x00003FFFU, 0x00001202U), 176*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000744, 0x00003FFFU, 0x00001202U), 177*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000748, 0x00003FFFU, 0x00001202U), 178*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800074C, 0x00003FFFU, 0x00001202U), 179*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000750, 0x00003FFFU, 0x00001202U), 180*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000754, 0x00003FFFU, 0x00001202U), 181*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000758, 0x00003FFFU, 0x00001203U), 182*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800075C, 0x00003FFFU, 0x00001203U), 183*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000760, 0x00003FFFU, 0x00001203U), 184*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000764, 0x00003FFFU, 0x00001203U), 185*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000768, 0x00003FFFU, 0x00001203U), 186*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800076C, 0x00003FFFU, 0x00001203U), 187*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000770, 0x00003FFFU, 0x00001204U), 188*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000774, 0x00003FFFU, 0x00001205U), 189*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000778, 0x00003FFFU, 0x00001204U), 190*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800077C, 0x00003FFFU, 0x00001205U), 191*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000780, 0x00003FFFU, 0x00001204U), 192*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000784, 0x00003FFFU, 0x00001204U), 193*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000788, 0x00003FFFU, 0x00001204U), 194*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800078C, 0x00003FFFU, 0x00001204U), 195*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000790, 0x00003FFFU, 0x00001205U), 196*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000794, 0x00003FFFU, 0x00001204U), 197*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000798, 0x00003FFFU, 0x00001204U), 198*413ab5b0STom McLeod EMIT_MASKWRITE(0XF800079C, 0x00003FFFU, 0x00001204U), 199*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007A0, 0x00003FFFU, 0x00001280U), 200*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007A4, 0x00003FFFU, 0x00001280U), 201*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007A8, 0x00003FFFU, 0x00001280U), 202*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007AC, 0x00003FFFU, 0x00001280U), 203*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007B0, 0x00003FFFU, 0x00001280U), 204*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007B4, 0x00003FFFU, 0x00001280U), 205*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007B8, 0x00003F01U, 0x00001201U), 206*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007BC, 0x00003FFFU, 0x00001200U), 207*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007C0, 0x00003FFFU, 0x00001200U), 208*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007C4, 0x00003FFFU, 0x00001200U), 209*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007C8, 0x00003FFFU, 0x00001200U), 210*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007CC, 0x00003FFFU, 0x00001200U), 211*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007D0, 0x00003FFFU, 0x00001280U), 212*413ab5b0STom McLeod EMIT_MASKWRITE(0XF80007D4, 0x00003FFFU, 0x00001280U), 213*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000830, 0x003F003FU, 0x002E0037U), 214*413ab5b0STom McLeod EMIT_WRITE(0XF8000004, 0x0000767BU), 215*413ab5b0STom McLeod EMIT_EXIT(), 216*413ab5b0STom McLeod }; 217*413ab5b0STom McLeod 218*413ab5b0STom McLeod unsigned long ps7_peripherals_init_data_3_0[] = { 219*413ab5b0STom McLeod EMIT_WRITE(0XF8000008, 0x0000DF0DU), 220*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B48, 0x00000180U, 0x00000180U), 221*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B4C, 0x00000180U, 0x00000180U), 222*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B50, 0x00000180U, 0x00000180U), 223*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000B54, 0x00000180U, 0x00000180U), 224*413ab5b0STom McLeod EMIT_WRITE(0XF8000004, 0x0000767BU), 225*413ab5b0STom McLeod EMIT_MASKWRITE(0XE0000034, 0x000000FFU, 0x00000006U), 226*413ab5b0STom McLeod EMIT_MASKWRITE(0XE0000018, 0x0000FFFFU, 0x0000007CU), 227*413ab5b0STom McLeod EMIT_MASKWRITE(0XE0000000, 0x000001FFU, 0x00000017U), 228*413ab5b0STom McLeod EMIT_MASKWRITE(0XE0000004, 0x000003FFU, 0x00000020U), 229*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000D000, 0x00080000U, 0x00080000U), 230*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8007000, 0x20000000U, 0x00000000U), 231*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A244, 0x003FFFFFU, 0x00088000U), 232*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A008, 0xFFFFFFFFU, 0x7FFF8000U), 233*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A248, 0x003FFFFFU, 0x00088000U), 234*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A008, 0xFFFFFFFFU, 0x7FFF0000U), 235*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 236*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A008, 0xFFFFFFFFU, 0x7FFF8000U), 237*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 238*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A244, 0x003FFFFFU, 0x00088000U), 239*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A00C, 0x003F003FU, 0x00370008U), 240*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A248, 0x003FFFFFU, 0x00088000U), 241*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A00C, 0x003F003FU, 0x00370000U), 242*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 243*413ab5b0STom McLeod EMIT_MASKWRITE(0XE000A00C, 0x003F003FU, 0x00370008U), 244*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 245*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 246*413ab5b0STom McLeod EMIT_MASKDELAY(0XF8F00200, 1), 247*413ab5b0STom McLeod EMIT_EXIT(), 248*413ab5b0STom McLeod }; 249*413ab5b0STom McLeod 250*413ab5b0STom McLeod unsigned long ps7_post_config_3_0[] = { 251*413ab5b0STom McLeod EMIT_WRITE(0XF8000008, 0x0000DF0DU), 252*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000900, 0x0000000FU, 0x0000000FU), 253*413ab5b0STom McLeod EMIT_MASKWRITE(0XF8000240, 0xFFFFFFFFU, 0x00000000U), 254*413ab5b0STom McLeod EMIT_WRITE(0XF8000004, 0x0000767BU), 255*413ab5b0STom McLeod EMIT_EXIT(), 256*413ab5b0STom McLeod }; 257*413ab5b0STom McLeod 258*413ab5b0STom McLeod unsigned long ps7_debug_3_0[] = { 259*413ab5b0STom McLeod EMIT_WRITE(0XF8898FB0, 0xC5ACCE55U), 260*413ab5b0STom McLeod EMIT_WRITE(0XF8899FB0, 0xC5ACCE55U), 261*413ab5b0STom McLeod EMIT_WRITE(0XF8809FB0, 0xC5ACCE55U), 262*413ab5b0STom McLeod EMIT_EXIT(), 263*413ab5b0STom McLeod }; 264*413ab5b0STom McLeod 265*413ab5b0STom McLeod unsigned long ps7_reset_apu_3_0[] = { 266*413ab5b0STom McLeod EMIT_MASKWRITE(0xF8000244, 0x00000022U, 0x00000022U), 267*413ab5b0STom McLeod EMIT_EXIT(), 268*413ab5b0STom McLeod }; 269*413ab5b0STom McLeod 270*413ab5b0STom McLeod #define PS7_MASK_POLL_TIME 100000000 271*413ab5b0STom McLeod 272*413ab5b0STom McLeod static inline void iowrite(unsigned long val, unsigned long addr) 273*413ab5b0STom McLeod { 274*413ab5b0STom McLeod __raw_writel(val, addr); 275*413ab5b0STom McLeod } 276*413ab5b0STom McLeod 277*413ab5b0STom McLeod static inline unsigned long ioread(unsigned long addr) 278*413ab5b0STom McLeod { 279*413ab5b0STom McLeod return __raw_readl(addr); 280*413ab5b0STom McLeod } 281*413ab5b0STom McLeod 282*413ab5b0STom McLeod int ps7_config(unsigned long *ps7_config_init) 283*413ab5b0STom McLeod { 284*413ab5b0STom McLeod unsigned long *ptr = ps7_config_init; 285*413ab5b0STom McLeod 286*413ab5b0STom McLeod unsigned long opcode; /* current instruction .. */ 287*413ab5b0STom McLeod unsigned long args[16]; /* no opcode has so many args ... */ 288*413ab5b0STom McLeod int numargs; /* number of arguments of this instruction */ 289*413ab5b0STom McLeod int j; /* general purpose index */ 290*413ab5b0STom McLeod 291*413ab5b0STom McLeod unsigned long addr; 292*413ab5b0STom McLeod unsigned long val, mask; 293*413ab5b0STom McLeod 294*413ab5b0STom McLeod int finish = -1; /* loop while this is negative ! */ 295*413ab5b0STom McLeod int i = 0; /* Timeout variable */ 296*413ab5b0STom McLeod 297*413ab5b0STom McLeod while (finish < 0) { 298*413ab5b0STom McLeod numargs = ptr[0] & 0xF; 299*413ab5b0STom McLeod opcode = ptr[0] >> 4; 300*413ab5b0STom McLeod 301*413ab5b0STom McLeod for (j = 0; j < numargs; j++) 302*413ab5b0STom McLeod args[j] = ptr[j + 1]; 303*413ab5b0STom McLeod ptr += numargs + 1; 304*413ab5b0STom McLeod 305*413ab5b0STom McLeod switch (opcode) { 306*413ab5b0STom McLeod case OPCODE_EXIT: 307*413ab5b0STom McLeod finish = PS7_INIT_SUCCESS; 308*413ab5b0STom McLeod break; 309*413ab5b0STom McLeod 310*413ab5b0STom McLeod case OPCODE_WRITE: 311*413ab5b0STom McLeod addr = args[0]; 312*413ab5b0STom McLeod val = args[1]; 313*413ab5b0STom McLeod iowrite(val, addr); 314*413ab5b0STom McLeod break; 315*413ab5b0STom McLeod 316*413ab5b0STom McLeod case OPCODE_MASKWRITE: 317*413ab5b0STom McLeod addr = args[0]; 318*413ab5b0STom McLeod mask = args[1]; 319*413ab5b0STom McLeod val = args[2]; 320*413ab5b0STom McLeod iowrite((val & mask) | (ioread(addr) & ~mask) , addr); 321*413ab5b0STom McLeod break; 322*413ab5b0STom McLeod 323*413ab5b0STom McLeod case OPCODE_MASKPOLL: 324*413ab5b0STom McLeod addr = args[0]; 325*413ab5b0STom McLeod mask = args[1]; 326*413ab5b0STom McLeod i = 0; 327*413ab5b0STom McLeod while (!(ioread(addr) & mask)) { 328*413ab5b0STom McLeod if (i == PS7_MASK_POLL_TIME) { 329*413ab5b0STom McLeod finish = PS7_INIT_TIMEOUT; 330*413ab5b0STom McLeod break; 331*413ab5b0STom McLeod } 332*413ab5b0STom McLeod i++; 333*413ab5b0STom McLeod } 334*413ab5b0STom McLeod break; 335*413ab5b0STom McLeod case OPCODE_MASKDELAY: 336*413ab5b0STom McLeod addr = args[0]; 337*413ab5b0STom McLeod mask = args[1]; 338*413ab5b0STom McLeod int delay = get_number_of_cycles_for_delay(mask); 339*413ab5b0STom McLeod perf_reset_and_start_timer(); 340*413ab5b0STom McLeod while (ioread(addr) < delay) 341*413ab5b0STom McLeod ; 342*413ab5b0STom McLeod break; 343*413ab5b0STom McLeod default: 344*413ab5b0STom McLeod finish = PS7_INIT_CORRUPT; 345*413ab5b0STom McLeod break; 346*413ab5b0STom McLeod } 347*413ab5b0STom McLeod } 348*413ab5b0STom McLeod return finish; 349*413ab5b0STom McLeod } 350*413ab5b0STom McLeod 351*413ab5b0STom McLeod int ps7_post_config(void) 352*413ab5b0STom McLeod { 353*413ab5b0STom McLeod return ps7_config(ps7_post_config_3_0); 354*413ab5b0STom McLeod } 355*413ab5b0STom McLeod 356*413ab5b0STom McLeod int ps7_debug(void) 357*413ab5b0STom McLeod { 358*413ab5b0STom McLeod return ps7_config(ps7_debug_3_0); 359*413ab5b0STom McLeod } 360*413ab5b0STom McLeod 361*413ab5b0STom McLeod int ps7_reset_apu(void) 362*413ab5b0STom McLeod { 363*413ab5b0STom McLeod return ps7_config(ps7_reset_apu_3_0); 364*413ab5b0STom McLeod } 365*413ab5b0STom McLeod 366*413ab5b0STom McLeod int ps7_init(void) 367*413ab5b0STom McLeod { 368*413ab5b0STom McLeod int ret; 369*413ab5b0STom McLeod 370*413ab5b0STom McLeod ret = ps7_reset_apu(); 371*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 372*413ab5b0STom McLeod return ret; 373*413ab5b0STom McLeod 374*413ab5b0STom McLeod ret = ps7_config(ps7_mio_init_data_3_0); 375*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 376*413ab5b0STom McLeod return ret; 377*413ab5b0STom McLeod 378*413ab5b0STom McLeod ret = ps7_config(ps7_pll_init_data_3_0); 379*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 380*413ab5b0STom McLeod return ret; 381*413ab5b0STom McLeod 382*413ab5b0STom McLeod ret = ps7_config(ps7_clock_init_data_3_0); 383*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 384*413ab5b0STom McLeod return ret; 385*413ab5b0STom McLeod 386*413ab5b0STom McLeod ret = ps7_config(ps7_ddr_init_data_3_0); 387*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 388*413ab5b0STom McLeod return ret; 389*413ab5b0STom McLeod 390*413ab5b0STom McLeod ret = ps7_config(ps7_peripherals_init_data_3_0); 391*413ab5b0STom McLeod if (ret != PS7_INIT_SUCCESS) 392*413ab5b0STom McLeod return ret; 393*413ab5b0STom McLeod return PS7_INIT_SUCCESS; 394*413ab5b0STom McLeod } 395*413ab5b0STom McLeod 396*413ab5b0STom McLeod /* For delay calculation using global timer */ 397*413ab5b0STom McLeod 398*413ab5b0STom McLeod /* start timer */ 399*413ab5b0STom McLeod void perf_start_clock(void) 400*413ab5b0STom McLeod { 401*413ab5b0STom McLeod iowrite((1 << 0) | /* Timer Enable */ 402*413ab5b0STom McLeod (1 << 3) | /* Auto-increment */ 403*413ab5b0STom McLeod (0 << 8), /* Pre-scale */ 404*413ab5b0STom McLeod SCU_GLOBAL_TIMER_CONTROL); 405*413ab5b0STom McLeod } 406*413ab5b0STom McLeod 407*413ab5b0STom McLeod /* stop timer and reset timer count regs */ 408*413ab5b0STom McLeod void perf_reset_clock(void) 409*413ab5b0STom McLeod { 410*413ab5b0STom McLeod perf_disable_clock(); 411*413ab5b0STom McLeod iowrite(0, SCU_GLOBAL_TIMER_COUNT_L32); 412*413ab5b0STom McLeod iowrite(0, SCU_GLOBAL_TIMER_COUNT_U32); 413*413ab5b0STom McLeod } 414*413ab5b0STom McLeod 415*413ab5b0STom McLeod /* Compute mask for given delay in miliseconds*/ 416*413ab5b0STom McLeod int get_number_of_cycles_for_delay(unsigned int delay) 417*413ab5b0STom McLeod { 418*413ab5b0STom McLeod return APU_FREQ * delay / (2 * 1000); 419*413ab5b0STom McLeod } 420*413ab5b0STom McLeod 421*413ab5b0STom McLeod /* stop timer */ 422*413ab5b0STom McLeod void perf_disable_clock(void) 423*413ab5b0STom McLeod { 424*413ab5b0STom McLeod iowrite(0, SCU_GLOBAL_TIMER_CONTROL); 425*413ab5b0STom McLeod } 426*413ab5b0STom McLeod 427*413ab5b0STom McLeod void perf_reset_and_start_timer(void) 428*413ab5b0STom McLeod { 429*413ab5b0STom McLeod perf_reset_clock(); 430*413ab5b0STom McLeod perf_start_clock(); 431*413ab5b0STom McLeod } 432