| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154 |
- #!/usr/local/bin/perl
- #
- #*****************************************************************************
- # Copyright Statement:
- # --------------------
- # This software is protected by Copyright and the information contained
- # herein is confidential. The software may not be copied and the information
- # contained herein may not be used or disclosed except with the written
- # permission of MediaTek Inc. (C) 2008
- #
- # BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- # THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- # RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
- # AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
- # NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
- # SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
- # SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
- # THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
- # NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
- # SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
- #
- # BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
- # LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
- # AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
- # OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
- # MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- #
- # THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
- # WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
- # LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
- # RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
- # THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
- #
- #****************************************************************************/
- #*
- #* Filename:
- #* ---------
- #* emigen_sp.pl
- #*
- #* Project:
- #* --------
- #*
- #*
- #* Description:
- #* ------------
- #* This script will
- #* 1. parse custom_MemoryDevice.h to get memory device type and part number
- #* 2. read a excel file to get appropriate emi setting based on the part number
- #* 3. based on the emi settings, generate custom_EMI.c if not exist
- #* 4. based on the emi settings, generate custom_EMI.h if not exist
- #*
- #* Author:
- #* -------
- #*
- #*============================================================================
- #* HISTORY
- #* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
- #*------------------------------------------------------------------------------
- #* $Revision$
- #* $Modtime$
- #* $Log$
- #*
- #*
- #*------------------------------------------------------------------------------
- #* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
- #*============================================================================
- #****************************************************************************/
- #****************************************************************************
- # Included Modules
- #****************************************************************************
- # original design, but perl does not support array of structure, really?
- #
- #my $CustomChip = () ;
- #
- #
- # an array of following structure:
- #
- # CustChip => NAND_ID
- # => CS0_PART_NUMBER
- # => CS1_PART_NUMBER
- #
- #
- #
- #
- #
- #
- use File::Basename;
- my $os = &OsName();
- my $build_opt = $ARGV[5];
- my $start_num;
- BEGIN
- {
- $LOCAL_PATH = dirname($0);
- }
- print "LOCAL_PATH: $LOCAL_PATH\n";
- #use lib "$LOCAL_PATH/../Spreadsheet";
- use lib "$LOCAL_PATH/../";
- #require 'ParseExcel.pm';
- use pack_dep_gen;
- if ($os eq "windows")
- {
- use strict;
- &gen_pm;
- require 'ForWindows.pm';
- $Win32::OLE::Warn = 3;
- $start_num = 1;
- }
- elsif ($os eq "linux")
- {
- print "Os = linux\n";
- use lib "$LOCAL_PATH/../Spreadsheet";
- require 'ParseExcel.pm';
- $start_num = 0;
- }
- else
- {
- die "unknow OS!\n";
- }
- #****************************************************************************
- # PLATFORM EMI support matrix
- #****************************************************************************
- my %BBtbl_LPSDRAM =
- (
- 'MT6580' => 1,
- );
- #****************************************************************************
- # Constants
- #****************************************************************************
- my $EMIGEN_VERNO = " V0.01";
- # V0.01, Zhen Jiang, Porting emigen to DUMA project
- #
- my $DebugPrint = 1; # 1 for debug; 0 for non-debug
- my $COLUMN_VENDOR = $start_num + 0;
- my $COLUMN_PART_NUMBER = $COLUMN_VENDOR + 1 ;
- my $COLUMN_TYPE = $COLUMN_PART_NUMBER + 1 ;
- my $COLUMN_DENSITY = $COLUMN_TYPE + 1 ;
- my $COLUMN_BOARD_ID = $COLUMN_DENSITY + 1 ;
- my $COLUMN_NAND_EMMC_ID = $COLUMN_BOARD_ID + 1 ;
- my $COLUMN_FW_ID = $COLUMN_NAND_EMMC_ID + 1 ;
- my $COLUMN_NAND_PAGE_SIZE = $COLUMN_FW_ID + 1 ;
- my $COLUMN_PLATFORM = $COLUMN_NAND_PAGE_SIZE + 1 ;
- my $CUSTOM_MEMORY_DEVICE_HDR = $ARGV[0]; # src\custom\<project>, need full path for now
- #my $MEMORY_DEVICE_LIST_XLS = Win32::GetCwd()."\\memorydevicelist\\".$ARGV[1];
- my $MEMORY_DEVICE_LIST_XLS = $ARGV[1];
- my $PLATFORM = $ARGV[2]; # MTxxxx
- my $PROJECT = $ARGV[3];
- my $MTK_EMIGEN_OUT_DIR = $ARGV[4];
- #my $MTK_EMIGEN_OUT_DIR = "$ENV{PRODUCT_OUT}/EMIGEN";
- print "$CUSTOM_MEMORY_DEVICE_HDR\n$MEMORY_DEVICE_LIST_XLS\n$PLATFORM\n" if ($DebugPrint == 1);
- print "$MTK_EMIGEN_OUT_DIR\n" if ($DebugPrint == 1);
- # following parameters come from $CUSTOM_MEMORY_DEVICE_HDR
- my $MEMORY_DEVICE_TYPE;
- # data structure of $part_number if ($MEMORY_DEVICE_TYPE eq 'LPSDRAM')
- #
- # my $part_info =
- # {
- # CS => { "0" => { PART_NUMBER => $part_number,
- # EXCEL_ROW => $excel_row,
- # VENDOR => $vendor,
- my $part_info = (); # has different data structures for different $MEMORY_DEVICE_TYPE
- my $bank_num = 0; # 0: No memory is attached
- # 1: 1 is attached
- # 2: 2 are attached
-
- # locations of output EMI settings
- # src\custom\<project>\DRV\bootloader\EMI
- my $CUSTOM_EMI_H = $CUSTOM_MEMORY_DEVICE_HDR;
- #my $CUSTOM_EMI_C = $CUSTOM_MEMORY_DEVICE_HDR;
- my $INFO_TAG = $CUSTOM_MEMORY_DEVICE_HDR;
- if ($os eq "windows")
- {
- $CUSTOM_EMI_H = "$MTK_EMIGEN_OUT_DIR/custom_emi.h";
- # $CUSTOM_EMI_C = "$MTK_EMIGEN_OUT_DIR/custom_emi.c";
- `mkdir output` unless (-d "output");
- }
- elsif ($os eq "linux")
- {
- $CUSTOM_EMI_H = "$MTK_EMIGEN_OUT_DIR/custom_emi.h";
- # $CUSTOM_EMI_C = "$MTK_EMIGEN_OUT_DIR/custom_emi.c";
- $INFO_TAG = "$MTK_EMIGEN_OUT_DIR/MTK_Loader_Info.tag";
- }
- # Pregen: after we load all perl module, it need to print all depend module
- PrintDependModule($0);
- print "$CUSTOM_EMI_H\n$INFO_TAG\n" if ($DebugPrint ==1);
- # check existance of custom_EMI.h and custom_EMI.c
- my $is_existed_h = (-e $CUSTOM_EMI_H)? 1 : 0;
- #my $is_existed_c = (-e $CUSTOM_EMI_C)? 1 : 0;
- #
- #if ( ($is_existed_h == 1) && ($is_existed_c == 1) )
- #{
- # print "\n\nALL custom_EMI\.h, custom_EMI\.c are existed!!!\n\n\n";
- # exit;
- #}
- #****************************************************************************
- # parse custom_MemoryDevice.h to extract MEMORY_DEVICE_TYPE & PART_NUMBER
- #****************************************************************************
- open CUSTOM_MEMORY_DEVICE_HDR, "<$CUSTOM_MEMORY_DEVICE_HDR" or &error_handler("$CUSTOM_MEMORY_DEVICE_HDR: file error!", __FILE__, __LINE__);
- #Pregen: print file name after we open a file which will be read
- PrintDependency($CUSTOM_MEMORY_DEVICE_HDR);
- # CustCS_CustemChips:
- # the number of part number which customer assigned
- # in mediatek/custom/$project/preloader/inc/custom_MemoryDevice.h
- # TotalCustemChips:
- # because one part number may match multiple emmc/nand ID, the TotalCustemChips >= CustCS_CustemChips
- # the final number of part number which will use to create emi_setting
- # in mediatek/custom/$project/preloader/inc/custom_emi.h
- #
- my $CustCS_CustemChips = 0 ;
- my $TotalCustemChips = 0 ;
- #
- # arrays
- #
- # this should be an array of structurs, but it is said perl does not support it.
- # these are input, except EMI_GEND
- #
- # CustCS_PART_NUMBER:
- # the content of part number which customer assigned
- # in mediatek/custom/$project/preloader/inc/custom_MemoryDevice.h
- # Total_PART_NUMBER:
- # the final part number which will show
- # in mediatek/custom/$project/preloader/inc/custom_emi.h
- my $CustCS_PART_NUMBER ;
- my $Total_PART_NUMBER ;
- ######################################################################################
- my $DEV_TYPE;
- my $DEV_TYPE1;
- my $DEV_TYPE2;
- my $NAND_EMMC_ID;
- my $FW_ID ;
- my $ID_String ;
- my $FW_ID_String ;
- my $Sub_version;
- my $USE_EMMC_ID_LEN=9;
- my $MAX_NAND_EMMC_ID_LEN=16;
- my $MAX_FW_ID_LEN=8;
- my $fw_id_len;
- my $NAND_PAGE_SIZE;
- my $EMI_CONA_VAL;
- my $DRAMC_DRVCTL0_VAL;
- my $DRAMC_DRVCTL1_VAL;
- my $DRAMC_ACTIM_VAL;
- my $DRAMC_GDDR3CTL1_VAL;
- my $DRAMC_CONF1_VAL;
- my $DRAMC_DDR2CTL_VAL;
- my $DRAMC_TEST2_3_VAL;
- my $DRAMC_CONF2_VAL;
- my $DRAMC_PD_CTRL_VAL;
- my $DRAMC_PADCTL3_VAL;
- my $DRAMC_DQODLY_VAL;
- my $DRAMC_ADDR_OUTPUT_DLY;
- my $DRAMC_CLK_OUTPUT_DLY;
- my $DRAMC_ACTIM1_VAL;
- my $DRAMC_MISCTL0_VAL;
- my $DRAMC_ACTIM05T_VAL;
- my $DRAM_RANK0_SIZE;
- my $DRAM_RANK1_SIZE;
- my $Discrete_DDR = 0;
- my $MCP_LPDDR2 = 0;
- my $MCP_LPDDR3 = 0;
- my $MCP_PCDDR3 = 0;
- my $DIS_LPDDR2 = 0;
- my $DIS_LPDDR3 = 0;
- my $DIS_PCDDR3 = 0;
- my $DDR1_2_3 ;
- #union
- #1
- my $LPDDR2_MODE_REG1;
- my $LPDDR2_MODE_REG2;
- my $LPDDR2_MODE_REG3;
- my $LPDDR2_MODE_REG5;
- my $LPDDR2_MODE_REG10;
- my $LPDDR2_MODE_REG63;
- #2
- my $DDR1_MODE_REG;
- my $DDR1_EXT_MODE_REG;
- #3
- my $PCDDR3_MODE_REG0;
- my $PCDDR3_MODE_REG1;
- my $PCDDR3_MODE_REG2;
- my $PCDDR3_MODE_REG3;
- my $PCDDR3_MODE_REG4;
- my $PCDDR3_MODE_REG5;
- #4
- my $LPDDR3_MODE_REG1;
- my $LPDDR3_MODE_REG2;
- my $LPDDR3_MODE_REG3;
- my $LPDDR3_MODE_REG5;
- my $LPDDR3_MODE_REG10;
- my $LPDDR3_MODE_REG63;
- my $EMI_SETTINGS ;
- #
- # all above are arrays, each represents an user defined chip.
- #
- # this is the ID of the custom board.
- my $CustBoard_ID ;
- while (<CUSTOM_MEMORY_DEVICE_HDR>)
- {
- # matching the following lines
- # "#define MEMORY_DEVICE_TYPE LPSDRAM"
- # "#define CS0_PART_NUMBER EDK1432CABH60"
-
- # error-checking
- if (/^#if|^#ifdef|^#ifndef|^#elif|^#else/)
- {
- &error_handler("$CUSTOM_MEMORY_DEVICE_HDR: Not allowed to set conditional keywords $_ in custom_MemoryDevice.h!", __FILE__, __LINE__)
- unless (/^#ifndef\s+__CUSTOM_MEMORYDEVICE__/);
- }
- if (/^#define\s+(\w+)\[(\d+)\]\s+\(([-\w]*)\)/ || /^#define\s+(\w+)\[(\d+)\]\s+([-\w]*)/ ||
- /^#define\s+(MEMORY_DEVICE_TYPE)\s+\((\w*)\)/ || /^#define\s+(MEMORY_DEVICE_TYPE)\s+(\w*)/ ||
- /^#define\s+(BOARD_ID)\s+\((\w*)\)/ || /^#define\s+(BOARD_ID)\s+(\w*)/)
- {
-
- if ($1 eq "BOARD_ID")
- {
- $CustBoard_ID = $2 ;
- }
- elsif ($1 eq "CS_PART_NUMBER")
- {
- print "\nCS0 $2, $3\n" ;
- $CustCS_PART_NUMBER[$2] = $3 ;
- $CustCS_CustemChips = $CustCS_CustemChips + 1 ;
-
- print "$CustCS_PART_NUMBER[$2]\n"
- }
- }
- }
- print "\n$CustCS_CustemChips\n" if ($DebugPrint ==1);
- close CUSTOM_MEMORY_DEVICE_HDR;
- #
- #
- # we now read in all the needed infomation form custom defination file,
- # so close it.
- #
- #
- #
- # check if data validate.
- #
- if ($CustCS_CustemChips > 10)
- {
- die "\n[Error]CustCS_CustemChips($CustCS_CustemChips) > 10\n" ;
- }
- if ($CustCS_CustemChips == 0)
- {
- die "\n[Error]CustCS_CustemChips($CustCS_CustemChips) = 0?\n" ;
- }
-
- #****************************************************************************
- # read a excel file to get emi settings
- #****************************************************************************
- # get already active Excel application or open new
- if ($os eq "windows")
- {
- $Excel = Win32::OLE->GetActiveObject('Excel.Application')
- || Win32::OLE->new('Excel.Application', 'Quit');
- # copy the Excel file to a temp file and open it;
- # this will prevent error due to simultaneous Excel access
- $Book = $Excel->Workbooks->Open($MEMORY_DEVICE_LIST_XLS);
- }
- else
- {
- my $parser = Spreadsheet::ParseExcel->new();
- $Book = $parser->Parse($MEMORY_DEVICE_LIST_XLS);
- }
- #Pregen: print file name after we open a file which will be read
- PrintDependency($MEMORY_DEVICE_LIST_XLS);
- # select worksheet
- my $Sheet;
- my $eos_flag = 5; # if this flag counts to '0', it means End Of Sheet
- my $iter = 0 ;
- my $CustCS_part_number_iter = 0;
- my $total_part_number_iter = 0;
- while ($iter<$CustCS_CustemChips)
- {
- $eos_flag = 5;
- $total_part_number_iter = &DeviceListParser_LPSDRAM($iter,$total_part_number_iter);
- $iter = $iter + 1 ;
- }
-
- # if the value read from excel validate
- $iter = 0 ;
- my $EMMC_NAND_MCP = "00" ;
- my $Page_size = "0" ;
- print "TotalCustemChips:$TotalCustemChips\n";
- while ($iter < $TotalCustemChips)
- {
-
- # only one Discrete is allowed
- if ($DEV_TYPE1[$iter] eq "00" || $DEV_TYPE1[$iter] eq "0F")
- {
- # if all discrete dram are LPDDR2 or LPDDR3, it is allowed
- if ($DEV_TYPE2[$iter] eq "02" || $DEV_TYPE2[$iter] eq "03")
- {
- my $iter_dis_dram;
- $iter_dis_dram = 0;
- while ($iter_dis_dram < $TotalCustemChips)
- {
- if ($iter_dis_dram == $iter)
- {
- $iter_dis_dram++;
- next;
- }
- {
- #comment to avoid build error for the same vendor ID
- #=head
- if ($DEV_TYPE2[0] eq "02")
- {
- # check the MODE_REG5(DRAM vendor_ID) are unique
- # if have same MODE5 in the list, send the build error
- if ( $LPDDR2_MODE_REG5[$iter] eq $LPDDR2_MODE_REG5[$iter_dis_dram])
- {
- print "[Error] MODE_REG5(DRAM vendor_ID) should not be the same in the Combo list, MODE_REG5($Total_PART_NUMBER[$iter])==MODE_REG6($Total_PART_NUMBER[$iter_dis_dram])\n" ;
- die "[Error] MODE_REG5(DRAM vendor_ID) should not be the same in the Combo list, MODE_REG5($Total_PART_NUMBER[$iter])==MODE_REG5($Total_PART_NUMBER[$iter_dis_dram])\n" ;
- }
- }
- elsif ($DEV_TYPE2[0] eq "03")
- {
- # check the MODE_REG5(DRAM vendor_ID) are unique
- # if have same MODE5 in the list, send the build error
- if ( $LPDDR3_MODE_REG5[$iter] eq $LPDDR3_MODE_REG5[$iter_dis_dram])
- {
- die "[Error] MODE_REG5(DRAM vendor_ID) should not be the same in the Combo list, MODE_REG5($Total_PART_NUMBER[$iter])==MODE_REG5($Total_PART_NUMBER[$iter_dis_dram])\n" ;
- }
- }
- #=cut
-
- }
- $iter_dis_dram++;
- }
- $Discrete_DDR = $Discrete_DDR + 1 ;
- }
- else{
- # DDR1,DDR3 only support one discrete DRAM in the Combo List
- # if more then one discrete DRAM in the list, send build error
- if ($Discrete_DDR == 0)
- {
- $Discrete_DDR = $Discrete_DDR + 1 ;
- if ($TotalCustemChips > 1)
- {
- print "[Error]At most one discrete PCDDR3 DRAM is allowed in the Combo MCP list\n" ;
- die "[Error]Combo discrete DRAM only support LPDDR2, LPDDR3\n" ;
- }
- }
- else
- {
- die "[Error]more than 1 Discrete DDR used!\n" ;
- }
- }
- }
- else{
-
- }
- unless($ENV{PROJECT} eq "mt6582_evb"){
- # nand emmc can't used together.
- if ($EMMC_NAND_MCP == "00")
- {
- $EMMC_NAND_MCP = $DEV_TYPE1[$iter] ;
- }
- elsif ($EMMC_NAND_MCP != $DEV_TYPE1[$iter] && $DEV_TYPE1[$iter] != "00")
- {
- die "[Error]Both NAND and eMMC are used!\n"
- }
- }
- # NAND can't use different page size.
- if ($DEV_TYPE1[$iter] == "01")
- {
- if ($Page_size == "0")
- {
- $Page_size = $NAND_PAGE_SIZE[$iter] ;
- }
- else
- {
- if ($Page_size != $NAND_PAGE_SIZE[$iter])
- {
- die "[Error]different MCP page size!$Page_size, $NAND_PAGE_SIZE[$iter]\n" ;
- }
- }
- }
-
- # Nand or eMMC's + FW ID must unique
- my $iter2 ;
- $iter2 = $iter + 1 ;
- while ($iter2 < $TotalCustemChips)
- {
- if ($DEV_TYPE1[$iter] != "00")
- {
- if ($NAND_EMMC_ID[$iter] eq $NAND_EMMC_ID[$iter2])
- {
- if ( $Total_PART_NUMBER[$iter] ne $Total_PART_NUMBER[$iter2] )
- {
- die "[Error]Different part number:$Total_PART_NUMBER[$iter],$Total_PART_NUMBER[$iter2] with same NAND/eMMC ID:$NAND_EMMC_ID[$iter]"
- }
- else
- { #$Total_PART_NUMBER[$iter] eq $Total_PART_NUMBER[$iter2] and $NAND_EMMC_ID[$iter] eq $NAND_EMMC_ID[$iter2] and $FW_ID[$iter] eq $FW_ID[$iter2]
- if ($FW_ID[$iter] eq $FW_ID[$iter2])
- {
- die "[Error]Two same part number:$Total_PART_NUMBER[$iter],$Total_PART_NUMBER[$iter2] with same NAND/eMMC ID:$NAND_EMMC_ID[$iter] and same FW ID:$FW_ID[$iter]"
- }
- }
- }
- }
- $iter2 = $iter2 + 1 ;
- }
-
- $iter = $iter + 1 ;
- }
- if ($DIS_LPDDR2 > 0 && (($DIS_LPDDR3 > 0) || ($MCP_LPDDR3 > 0) || ($DIS_PCDDR3 > 0)))
- {
- die "[Error] LPDDR2 and LPDDR3 are not allowed to be mixed in the Combo Discrete DRAM list.\n" ;
- }
- if ($DIS_LPDDR3 > 0 && (($DIS_LPDDR2 > 0) || ($MCP_LPDDR2 > 0) || ($DIS_PCDDR3 > 0)))
- {
- die "[Error] LPDDR2 and LPDDR3 are not allowed to be mixed in the Combo Discrete DRAM list.\n" ;
- }
- if ($DIS_PCDDR3 > 1)
- {
- die "[Error] PCDDR3 not support Combo Discrete DRAM feature.\n" ;
- }
- if (($DIS_PCDDR3 == 1) && ($CustCS_CustemChips>1) )
- {
- die "[Error] PCDDR3 not support Combo Discrete DRAM feature.\n" ;
- }
- # close the temp Excel file
- if ($os eq "windows")
- {
- $Book->Close(1);
- }
- #&error_handler("$CUSTOM_MEMORY_DEVICE_HDR: Incorrect memory device type!", __FILE__, __LINE__) unless $MEMORY_DEVICE_TYPE;
- #&error_handler("$CUSTOM_MEMORY_DEVICE_HDR: part number not supported!", __FILE__, __LINE__) if ($is_part_found <= 0);
- #&error_handler("$CUSTOM_MEMORY_DEVICE_HDR: Device not allowed to set NOR_RAM_MCP type!", __FILE__, __LINE__) if (($MEMORY_DEVICE_TYPE eq 'NOR_RAM_MCP') && ($part_info->{CS}->{1}->{DRAM} eq 'YES'));
- #&error_handler("$CUSTOM_MEMORY_DEVICE_HDR: Device not allowed to set NOR_LPSDRAM_MCP type!", __FILE__, __LINE__) if (($MEMORY_DEVICE_TYPE eq 'NOR_LPSDRAM_MCP') && ($part_info->{CS}->{1}->{DRAM} eq 'NO'));
- #****************************************************************************
- # generate custom_EMI.c
- #****************************************************************************
- #if ($is_existed_c == 0)
- #{
- # if ($is_existed_c == 1)
- # {
- # unlink ($CUSTOM_EMI_C);
- # }
- # my $temp_path = `dirname $CUSTOM_EMI_C`;
- # `mkdir -p $temp_path`;
- # open (CUSTOM_EMI_C, ">$CUSTOM_EMI_C") or &error_handler("$CUSTOM_EMI_C: file error!", __FILE__, __LINE__);
- # print CUSTOM_EMI_C ©right_file_header();
- # print CUSTOM_EMI_C &description_file_header( "custom_emi.c",
- # "This Module defines the EMI (external memory interface) related setting.",
- # "EMI auto generator". $EMIGEN_VERNO);
- # print CUSTOM_EMI_C &custom_EMI_c_file_body();
- # close CUSTOM_EMI_C or &error_handler("$CUSTOM_EMI_C: file error!", __FILE__, __LINE__);
- # print "\n$CUSTOM_EMI_C is generated\n";
- #} # if ($is_existed_c == 0)
- #****************************************************************************
- # generate custom_emi.h
- #****************************************************************************
- if ($build_opt == 0)
- {
- if ($is_existed_h == 1)
- {
- unlink ($CUSTOM_EMI_H);
- }
- my $temp_path = `dirname $CUSTOM_EMI_H`;
- `mkdir -p $temp_path`;
- open (CUSTOM_EMI_H, ">$CUSTOM_EMI_H") or &error_handler("CUSTOM_EMI_H: file error!", __FILE__, __LINE__);
- print CUSTOM_EMI_H ©right_file_header();
- print CUSTOM_EMI_H &description_file_header( "custom_emi.h",
- "This Module defines the EMI (external memory interface) related setting.",
- "EMI auto generator". $EMIGEN_VERNO);
- print CUSTOM_EMI_H &custom_EMI_h_file_body();
- close CUSTOM_EMI_H or &error_handler("$CUSTOM_EMI_H: file error!", __FILE__, __LINE__);
- print "\n$CUSTOM_EMI_H is generated\n";
- } # if ($build_opt == 0)
- if ($build_opt == 1) # Build Preloader TAG!
- {
- &write_tag($PROJECT);
- }
- exit;
- #****************************************************************************
- # subroutine: trim
- # input: $string: trim string
- #****************************************************************************
- sub trim($)
- {
- my $string = shift;
- $string =~ s/^\s+//;
- $string =~ s/\s+$//;
- return $string;
- }
- #****************************************************************************
- # subroutine: error_handler
- # input: $error_msg: error message
- #****************************************************************************
- sub error_handler
- {
- my ($error_msg, $file, $line_no) = @_;
-
- my $final_error_msg = "[Error]EMIGEN ERROR: $error_msg at $file line $line_no\n";
- print $final_error_msg;
- die $final_error_msg;
- }
- #****************************************************************************
- # subroutine: copyright_file_header
- # return: file header -- copyright
- #****************************************************************************
- sub copyright_file_header
- {
- my $template = <<"__TEMPLATE";
- /*****************************************************************************
- * Copyright Statement:
- * --------------------
- * This software is protected by Copyright and the information contained
- * herein is confidential. The software may not be copied and the information
- * contained herein may not be used or disclosed except with the written
- * permission of MediaTek Inc. (C) 2008
- *
- * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
- * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
- * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
- * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
- * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
- * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
- * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
- * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
- * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
- * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
- *
- * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
- * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
- * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
- * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
- * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
- *
- * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
- * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
- * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
- * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
- * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
- *
- *****************************************************************************/
- __TEMPLATE
- return $template;
- }
- #****************************************************************************
- # subroutine: description_file_header
- # return: file header -- description
- # input: $filename: filename
- # input: $description: one line description
- # input: $author: optional
- #****************************************************************************
- sub description_file_header
- {
- my ($filename, $description, $author) = @_;
- my @stat_ar = stat $MEMORY_DEVICE_LIST_XLS;
- my ($day, $month, $year) = (localtime($stat_ar[9]))[3,4,5]; $month++; $year+=1900;
- my $template = <<"__TEMPLATE";
- /*****************************************************************************
- *
- * Filename:
- * ---------
- * $filename
- *
- * Project:
- * --------
- * Android
- *
- * Description:
- * ------------
- * $description
- *
- * Author:
- * -------
- * $author
- *
- * Memory Device database last modified on $year/$month/$day
- *
- *============================================================================
- * HISTORY
- * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
- *------------------------------------------------------------------------------
- * \$Revision\$
- * \$Modtime\$
- * \$Log\$
- *
- *------------------------------------------------------------------------------
- * WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!!
- * This file is generated by EMI Auto-gen Tool.
- * Please do not modify the content directly!
- * It could be overwritten!
- *============================================================================
- * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
- *============================================================================
- ****************************************************************************/
- __TEMPLATE
- return $template;
- }
- #****************************************************************************
- # subroutine: HeaderBody_for_lpsdram
- # return: content for custom_EMI.h
- #****************************************************************************
- #sub custom_EMI_h_file_body
- #{
- ###
- # my $template = <<"__TEMPLATE";
- #ifndef __CUSTOM_EMI__
- #define __CUSTOM_EMI__
- #define COMBO_LPDDR2 ($MCP_LPDDR2+$DIS_LPDDR2)
- #define COMBO_LPDDR3 ($MCP_LPDDR3+$DIS_LPDDR3)
- #define COMBO_PCDDR3 ($MCP_PCDDR3+$DIS_PCDDR3)
- #endif /* __CUSTOM_EMI__ */
- #__TEMPLATE
- # return $template;
- #}
- #****************************************************************************
- # subroutine: custom_EMI_h_file_body
- # return:
- #****************************************************************************
- sub custom_EMI_h_file_body
- {
- ###
- my $EMI_SETTINGS_string = "" ;
- my $ddr = -1 ;
- $iter = 0 ;
- for $iter (0..$TotalCustemChips-1)
- {
- if ($DEV_TYPE1[$iter] != "00")
- {
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . $EMI_SETTINGS[$iter] ;
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . " ," ;
- }
- }
- for $iter (0..$TotalCustemChips-1)
- {
- if ($DEV_TYPE1[$iter] == "00")
- {
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . $EMI_SETTINGS[$iter] ;
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . " ," ;
- }
- }
- =head
- previous version
- while ($iter<$TotalCustemChips)
- {
- if ($DEV_TYPE1[$iter] == "00")
- {
- $ddr = $iter ;
- print "Discrete ddr found $ddr \n" ;
- $iter = $iter + 1 ;
- }
- else
- {
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . $EMI_SETTINGS[$iter] ;
- $iter = $iter + 1 ;
- if ($iter < $TotalCustemChips || $ddr != -1)
- {
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . " ," ;
- }
- }
- }
- # if we have discrete dram, we put them in the end
- if ($ddr != -1)
- {
- $EMI_SETTINGS_string = $EMI_SETTINGS_string . $EMI_SETTINGS[$ddr] ;
- }
- =cut
-
-
- my $template = <<"__TEMPLATE";
- #ifndef __CUSTOM_EMI__
- #define __CUSTOM_EMI__
- #include "emi.h"
- #define COMBO_LPDDR2 ($MCP_LPDDR2+$DIS_LPDDR2)
- #define COMBO_LPDDR3 ($MCP_LPDDR3+$DIS_LPDDR3)
- #define COMBO_PCDDR3 ($MCP_PCDDR3+$DIS_PCDDR3)
- #define NUM_EMI_RECORD ($TotalCustemChips)
- int num_of_emi_records = NUM_EMI_RECORD ;
- EMI_SETTINGS emi_settings[] =
- {
- $EMI_SETTINGS_string
- };
- #endif /* __CUSTOM_EMI__ */
- __TEMPLATE
- return $template ;
- }
- #****************************************************************************
- # subroutine: DeviceListParser_LPSDRAM
- # input: the number in array
- # return: string contain 1 set of EMI setting for input
- #****************************************************************************
- sub DeviceListParser_LPSDRAM
- {
- my ($id) ;
- my ($CustCS_id) ;
- my ($PartNum) ;
- my ($iter);
- my ($num_part_found);
-
-
- $num_part_found = 0 ;
- $CustCS_id = $_[0]; # CustCS_CustemChips_iter
- $id = $_[1] ; # total_part_number_iter
-
- $PartNum = $CustCS_PART_NUMBER[$CustCS_id] ;
- print "\nCustCS ID num is $CustCS_id, part number:$CustCS_PART_NUMBER[$CustCS_id]\n" ;
-
- my $row = $start_num + 0 ; # scan from row 2 when $MEMORY_DEVICE_TYPE eq 'LPSDRAM'
- my $col = $COLUMN_PART_NUMBER ; # scan column 2 for Part Number
- my $rows_part_found; # stores the part numbers found in MDL
-
-
- $Sheet = get_sheet("mt6580") ;
- # find cell address of the specified Nand ID
- my $scan_idx = &xls_cell_value($Sheet, $row, $col) ;
- print "[Bike Check] scan_idx= $scan_idx eos_flag=$eos_flag\n";
- while (defined ($scan_idx) && ($eos_flag > 0))
- {
- ++$row ;
- $scan_idx = &xls_cell_value($Sheet, $row, $col) ;
- print "[Bike Check] scan_idx= $scan_idx\n";
- unless (defined $scan_idx)
- {
- print "[$row][scan_idx]No Value, $eos_flag\n" if $DebugPrint == 1 ;
- $eos_flag -- ;
- next ;
- }
- if ($scan_idx eq "")
- {
- print "[$row][scan_idx]EQ null, $eos_flag\n" if $DebugPrint == 1 ;
- $eos_flag -- ;
- next ;
- }
- $eos_flag = 5 ;
- # remove leading and tailing spaces
- $scan_idx =~ s/^\s+// if $DebugPrint == 1 ;
- $scan_idx =~ s/\s+$// if $DebugPrint == 1 ;
-
- $scan_idx =~ s/^\s+// ;
- $scan_idx =~ s/\s+$// ;
-
- print "$scan_idx ?= $PartNum\n" ;
-
- if ($scan_idx eq $PartNum) # scan column 2 for Part Number
- {
- my $boardid ;
- $boardid = &xls_cell_value($Sheet, $row, $COLUMN_BOARD_ID) ;
- if ($CustBoard_ID eq $boardid)
- {
- $rows_part_found[$num_part_found] = $row;
- print "\nPartNum($PartNum==$scan_idx) found in row $row\n" ;
- $Total_PART_NUMBER[$TotalCustemChips] = $PartNum;
- $num_part_found += 1 ;
- $TotalCustemChips += 1;
- }
- }
- }
- print("[Bike Check]num_part_found $num_part_found");
- if ($num_part_found == 0)
- {
- print "\n[Error]unsupported part number $PartNum\n" ;
- die "\n[Error]unsupported part number $PartNum\n" ;
- }
-
- $iter = 0;
- while ($iter<$num_part_found)
- {
- $_ = $rows_part_found[$iter] ;
- $iter ++;
- $VENDOR[$id] = &xls_cell_value($Sheet, $_, $COLUMN_VENDOR) ;
- $DENSITY[$id] = &xls_cell_value($Sheet, $_, $COLUMN_DENSITY) ;
- # find the correct platform
- my $platform_scan_idx = $COLUMN_PLATFORM ; #First EMI controller
- my $tmp_platform = &xls_cell_value($Sheet, $start_num, $platform_scan_idx) ;
- while (!($tmp_platform =~ $PLATFORM))
- {
- $platform_scan_idx++;
- $tmp_platform = &xls_cell_value($Sheet, $start_num, $platform_scan_idx);
- if ($platform_scan_idx > 100)
- {
- die "[Error][Porting Error] It cannot find the right platform name.Please check platform name in XLS\n";
- }
- }
- &error_handler("$CUSTOM_MEMORY_DEVICE_HDR: $PLATFORM not support LPSDRAM!", __FILE__, __LINE__) if ($platform_scan_idx > $COLUMN_PLATFORM);
- $DEV_TYPE[$id] = &xls_cell_value($Sheet, $_, $COLUMN_TYPE) ;
- $NAND_EMMC_ID[$id] = &xls_cell_value($Sheet, $_, $COLUMN_NAND_EMMC_ID) ;
- $FW_ID[$id] = &xls_cell_value($Sheet, $_, $COLUMN_FW_ID) ;
- $NAND_PAGE_SIZE[$id] = &xls_cell_value($Sheet, $_, $COLUMN_NAND_PAGE_SIZE) ;
- $EMI_CONA_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_DRVCTL0_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_DRVCTL1_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_ACTIM_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_GDDR3CTL1_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_CONF1_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_DDR2CTL_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_TEST2_3_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_CONF2_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_PD_CTRL_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_PADCTL3_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_DQODLY_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_ADDR_OUTPUT_DLY[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_CLK_OUTPUT_DLY[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_ACTIM1_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_MISCTL0_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DRAMC_ACTIM05T_VAL[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DDR1_2_3[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- # openoffice saved file workaround START
- if ($DEV_TYPE[$id] =~ /DDR1/)
- {
- $DDR1_2_3[$id] = 'DDR1';
- }
- elsif ($DEV_TYPE[$id] =~ /LPDDR2/)
- {
- $DDR1_2_3[$id] = 'LPDDR2';
- }
- elsif ($DEV_TYPE[$id] =~ /PCDDR3/)
- {
- $DDR1_2_3[$id] = 'PCDDR3';
- }
- elsif ($DEV_TYPE[$id] =~ /LPDDR3/)
- {
- $DDR1_2_3[$id] = 'LPDDR3';
- }
- # openoffice saved file workaround END
- #union
- # LPDDR2
- if ($DDR1_2_3[$id] eq "LPDDR2")
- {
- $LPDDR2_MODE_REG1[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR2_MODE_REG2[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR2_MODE_REG3[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR2_MODE_REG5[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR2_MODE_REG10[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR2_MODE_REG63[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- }
- # DDR1
- elsif ($DDR1_2_3[$id] eq "DDR1")
- {
- $DDR1_MODE_REG[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $DDR1_EXT_MODE_REG[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- die "[Error][EMIgen] no support DDR1.";
- }
- # PCDDR3
- elsif ($DDR1_2_3[$id] eq "PCDDR3")
- {
- $PCDDR3_MODE_REG0[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $PCDDR3_MODE_REG1[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $PCDDR3_MODE_REG2[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $PCDDR3_MODE_REG3[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $PCDDR3_MODE_REG4[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $PCDDR3_MODE_REG5[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- }
- # LPDDR3
- elsif ($DDR1_2_3[$id] eq "LPDDR3")
- {
- $LPDDR3_MODE_REG1[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR3_MODE_REG2[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR3_MODE_REG3[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR3_MODE_REG5[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR3_MODE_REG10[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- $LPDDR3_MODE_REG63[$id] = &xls_cell_value($Sheet, $_, $platform_scan_idx++) ;
- }
- if ($DENSITY[$id] eq "8192+8192")
- {
- $DRAM_RANK0_SIZE[$id] = "0x40000000";
- $DRAM_RANK1_SIZE[$id] = "0x40000000";
- }
- elsif ($DENSITY[$id] eq "16384+8192")
- {
- $DRAM_RANK0_SIZE[$id] = "0x80000000";
- $DRAM_RANK1_SIZE[$id] = "0x40000000";
- }
- elsif ($DENSITY[$id] eq "8192+4096")
- {
- $DRAM_RANK0_SIZE[$id] = "0x40000000";
- $DRAM_RANK1_SIZE[$id] = "0x20000000";
- }
- elsif ($DENSITY[$id] eq "4096+4096")
- {
- $DRAM_RANK0_SIZE[$id] = "0x20000000";
- $DRAM_RANK1_SIZE[$id] = "0x20000000";
- }
- elsif ($DENSITY[$id] eq "2048+2048")
- {
- $DRAM_RANK0_SIZE[$id] = "0x10000000";
- $DRAM_RANK1_SIZE[$id] = "0x10000000";
- }
- elsif ($DENSITY[$id] eq "4096+2048")
- {
- $DRAM_RANK0_SIZE[$id] = "0x20000000";
- $DRAM_RANK1_SIZE[$id] = "0x10000000";
- }
- elsif ($DENSITY[$id] eq "12288+12288")
- {
- $DRAM_RANK0_SIZE[$id] = "0x60000000";
- $DRAM_RANK1_SIZE[$id] = "0x60000000";
- }
- elsif ($DENSITY[$id] eq "6144+6144")
- {
- $DRAM_RANK0_SIZE[$id] = "0x30000000";
- $DRAM_RANK1_SIZE[$id] = "0x30000000";
- }
- elsif ($DENSITY[$id] eq "16384+16384")
- {
- $DRAM_RANK0_SIZE[$id] = "0x80000000";
- $DRAM_RANK1_SIZE[$id] = "0x80000000";
- }
- elsif ($DENSITY[$id] eq "16384")
- {
- $DRAM_RANK0_SIZE[$id] = "0x80000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- elsif ($DENSITY[$id] eq "12288")
- {
- $DRAM_RANK0_SIZE[$id] = "0x60000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- elsif ($DENSITY[$id] eq "8192")
- {
- $DRAM_RANK0_SIZE[$id] = "0x40000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- elsif ($DENSITY[$id] eq "6144")
- {
- $DRAM_RANK0_SIZE[$id] = "0x30000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- elsif ($DENSITY[$id] eq "4096")
- {
- $DRAM_RANK0_SIZE[$id] = "0x20000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- elsif ($DENSITY[$id] eq "2048")
- {
- $DRAM_RANK0_SIZE[$id] = "0x10000000";
- $DRAM_RANK1_SIZE[$id] = "0";
- }
- else
- {
- die "[Error]Wrong Density size!!DENSITY:$DENSITY[$id], Please check Density in MDL.\n";
- }
- #the rank size check algorithim should double check with EMI owner when porting.
- #rank size check START
- $hex_val = hex($EMI_CONA_VAL[$id]);
- if ($DENSITY[$id] =~ /\+/)
- {
- if (!($hex_val & 0x20000))
- {
- die "[Error] Wrong CONA value with dual rank:$DENSITY[$id],$EMI_CONA_VAL[$id]"
- }
- }
- else
- {
- if ($hex_val & 0x20000)
- {
- die "[Error] Wrong CONA value with single rank:$DENSITY[$id],$EMI_CONA_VAL[$id]";
- }
- }
- #rank size check END
- if ($DEV_TYPE[$id] eq "Discrete DDR1")
- {
- $DEV_TYPE1[$id] = "00" ;
- $DEV_TYPE2[$id] = "01" ;
- die "[Error][EMIgen] no support DDR1.";
- $NAND_EMMC_ID[$id]="0x00";
- $FW_ID[$id]="0x00"
- }
- elsif ($DEV_TYPE[$id] eq "Discrete LPDDR2")
- {
- $DEV_TYPE1[$id] = "00" ;
- $DEV_TYPE2[$id] = "02" ;
- $DIS_LPDDR2 = $DIS_LPDDR2 + 1 ;
- $NAND_EMMC_ID[$id]="";
- $FW_ID[$id]=""
- }
- elsif ($DEV_TYPE[$id] eq "Discrete Tablet LPDDR2") # Rainier Tablet
- {
- $DEV_TYPE1[$id] = "0F" ;
- $DEV_TYPE2[$id] = "02" ;
- $DIS_LPDDR2 = $DIS_LPDDR2 + 1 ;
- $NAND_EMMC_ID[$id]="";
- $FW_ID[$id]=""
- }
- elsif ($DEV_TYPE[$id] eq "Discrete Tablet LPDDR3") # Rainier Tablet
- {
- $DEV_TYPE1[$id] = "0F" ;
- $DEV_TYPE2[$id] = "03" ;
- $DIS_LPDDR3 = $DIS_LPDDR3 + 1 ;
- $NAND_EMMC_ID[$id]="";
- $FW_ID[$id]=""
- }
- elsif ($DEV_TYPE[$id] eq "Discrete LPDDR3")
- {
- $DEV_TYPE1[$id] = "00" ;
- $DEV_TYPE2[$id] = "03" ;
- $DIS_LPDDR3 = $DIS_LPDDR3 + 1 ;
- $NAND_EMMC_ID[$id]="";
- $FW_ID[$id]=""
- }
- elsif ($DEV_TYPE[$id] eq "Discrete PCDDR3")
- {
- $DEV_TYPE1[$id] = "00" ;
- $DEV_TYPE2[$id] = "04" ;
- $DIS_PCDDR3 = $DIS_PCDDR3 + 1 ;
- }
- elsif ($DEV_TYPE[$id] eq "MCP(NAND+DDR1)")
- {
- $DEV_TYPE1[$id] = "01" ;
- $DEV_TYPE2[$id] = "01" ;
- die "[Error][EMIgen] no support NAND+DDR1.";
- }
- elsif ($DEV_TYPE[$id] eq "MCP(NAND+LPDDR2)")
- {
- $DEV_TYPE1[$id] = "01" ;
- $DEV_TYPE2[$id] = "02" ;
- $MCP_LPDDR2 = $MCP_LPDDR2 + 1 ;
- die "[Error][EMIgen] no support NAND+LPDDR2.";
- }
- elsif ($DEV_TYPE[$id] eq "MCP(NAND+LPDDR3)")
- {
- $DEV_TYPE1[$id] = "01" ;
- $DEV_TYPE2[$id] = "03" ;
- $MCP_LPDDR3 = $MCP_LPDDR3 + 1 ;
- die "[Error][EMIgen] no support NAND+LPDDR3.";
- }
- elsif ($DEV_TYPE[$id] eq "MCP(NAND+PCDDR3)")
- {
- $DEV_TYPE1[$id] = "01" ;
- $DEV_TYPE2[$id] = "04" ;
- $MCP_PCDDR3 = $MCP_PCDDR3 + 1 ;
- die "[Error][EMIgen] no support NAND+PCDDR3.";
- }
- elsif ($DEV_TYPE[$id] eq "MCP(eMMC+DDR1)")
- {
- $DEV_TYPE1[$id] = "02" ;
- $DEV_TYPE2[$id] = "01" ;
- }
- elsif ($DEV_TYPE[$id] eq "MCP(eMMC+LPDDR2)")
- {
- $DEV_TYPE1[$id] = "02" ;
- $DEV_TYPE2[$id] = "02" ;
- $MCP_LPDDR2 = $MCP_LPDDR2 + 1 ;
- }
- elsif ($DEV_TYPE[$id] eq "MCP(eMMC+LPDDR3)")
- {
- $DEV_TYPE1[$id] = "02" ;
- $DEV_TYPE2[$id] = "03" ;
- $MCP_LPDDR3 = $MCP_LPDDR3 + 1 ;
- }
- elsif ($DEV_TYPE[$id] eq "MCP(eMMC+PCDDR3)")
- {
- $DEV_TYPE1[$id] = "02" ;
- $DEV_TYPE2[$id] = "04" ;
- $MCP_PCDDR3 = $MCP_PCDDR3 + 1 ;
- }
- else
- {
- die "[Error] unknown mcp type $DEV_TYPE[$id] \n" ;
- }
- #LPDDR2 MODE_REG5 empty value check START
- if (($DEV_TYPE2[$id] eq "02") && ($LPDDR2_MODE_REG5[$id] eq ''))
- {
- die "[Error](".$id.")MDL error, LPDDR2 but no LPDDR2_MODE_REG5 information, please update the MDL\n";
- }
- if (($DEV_TYPE2[$id] eq "03") && ($LPDDR3_MODE_REG5[$id] eq ''))
- {
- die "[Error](".$id.")MDL error, LPDDR3 but no LPDDR3_MODE_REG5 information, please update the MDL\n";
- }
- #LPDDR2 MODE_REG5 empty value check END
- print "NAND_EMMC_ID:$NAND_EMMC_ID[$id]\n";
- # To parse NAND_EMMC_ID, we only support 12 bytes ID
- if (length($NAND_EMMC_ID[$id]) % 2)
- {
- die "[Error] The wrong NAND_EMMC_ID: $NAND_EMMC_ID[$id] !! It is not byte align";
- }
- if (length($FW_ID[$id]) % 2)
- {
- die "[Error] The wrong FW_ID: $FW_ID[$id] !! It is not byte align";
- }
- $ID_String[$id] = "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}" ;
- $FW_ID_String[$id] = "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}" ;
- $Sub_version[$id] = "0x0";
- $ID_Length[$id] = (length($NAND_EMMC_ID[$id])-2)/2;
- $FW_ID_Length[$id] = (length($FW_ID[$id])-2)/2;
- if ($ID_Length[$id] < 0)
- {
- $ID_Length[$id] = 0;
- }
- if ($FW_ID_Length[$id] < 0)
- {
- $FW_ID_Length[$id] = 0;
- }
- $nand_emmc_id_len = $ID_Length[$id];
- print $ID_Length[$id].$FW_ID_Length[$id];
- if ($ID_Length[$id]> 0)
- {
- my @NAND_VECTOR = ($NAND_EMMC_ID[$id] =~ m/([\dA-Fa-f]{2})/gs);
- #create NAND_EMMC_ID string
- $last = pop(@NAND_VECTOR);
- $ID_String[$id] = "{";
- foreach $a (@NAND_VECTOR)
- {
- $ID_String[$id] .= "0x$a,";
- }
- $ID_String[$id] .= "0x$last";
- # To add ZERO in the end
- if ($nand_emmc_id_len < $MAX_NAND_EMMC_ID_LEN)
- {
- for($i = 0; $i <($MAX_NAND_EMMC_ID_LEN - $ID_Length[$id]); $i++)
- {
- $ID_String[$id].= ",0x0"
- }
- }
- $ID_String[$id] .= "}";
- }
- else{
- $ID_Length[$id] = 0;
- }
- print "$ID_String[$id]\n" ;
- #create FW ID string
- if ($FW_ID_Length[$id] > 0)
- {
- my @FW_ID_VECTOR = ($FW_ID[$id] =~ m/([\dA-Fa-f]{2})/gs);
- $last = pop(@FW_ID_VECTOR);
- $FW_ID_String[$id] = "{";
- foreach $a (@FW_ID_VECTOR)
- {
- $FW_ID_String[$id] .= "0x$a,";
- }
- $FW_ID_String[$id] .= "0x$last";
- # To add ZERO in the end
- if ($fw_id_len < $MAX_FW_ID_LEN)
- {
- for($i = 0; $i <($MAX_FW_ID_LEN - $FW_ID_Length[$id]); $i++)
- {
- $FW_ID_String[$id].= ",0x0"
- }
- }
- $FW_ID_String[$id] .= "}";
- }
- else{
- $FW_ID_Length[$id] = 0;
- }
- print "$FW_ID_String[$id]\n" ;
- $EMI_SETTINGS[$id] = "\n\t//$PartNum\n\t{\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $Sub_version[$id] . ",\t\t/* sub_version */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . "0x" . $DEV_TYPE1[$id] . $DEV_TYPE2[$id] . ",\t\t/* TYPE */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $ID_Length[$id] . ",\t\t/* EMMC ID/FW ID checking length */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $FW_ID_Length[$id] . ",\t\t/* FW length */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $ID_String[$id] . ",\t\t/* NAND_EMMC_ID */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $FW_ID_String[$id] . ",\t\t/* FW_ID */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $EMI_CONA_VAL[$id] . ",\t\t/* EMI_CONA_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_DRVCTL0_VAL[$id] . ",\t\t/* DRAMC_DRVCTL0_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_DRVCTL1_VAL[$id] . ",\t\t/* DRAMC_DRVCTL1_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_ACTIM_VAL[$id] . ",\t\t/* DRAMC_ACTIM_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_GDDR3CTL1_VAL[$id] . ",\t\t/* DRAMC_GDDR3CTL1_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_CONF1_VAL[$id] . ",\t\t/* DRAMC_CONF1_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_DDR2CTL_VAL[$id] . ",\t\t/* DRAMC_DDR2CTL_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_TEST2_3_VAL[$id] . ",\t\t/* DRAMC_TEST2_3_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_CONF2_VAL[$id] . ",\t\t/* DRAMC_CONF2_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_PD_CTRL_VAL[$id] . ",\t\t/* DRAMC_PD_CTRL_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_PADCTL3_VAL[$id] . ",\t\t/* DRAMC_PADCTL3_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_DQODLY_VAL[$id] . ",\t\t/* DRAMC_DQODLY_VAL */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_ADDR_OUTPUT_DLY[$id] . ",\t\t/* DRAMC_ADDR_OUTPUT_DLY */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_CLK_OUTPUT_DLY[$id] . ",\t\t/* DRAMC_CLK_OUTPUT_DLY */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_ACTIM1_VAL[$id] . ",\t\t/* DRAMC_ACTIM1_VAL*/\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_MISCTL0_VAL[$id] . ",\t\t/* DRAMC_MISCTL0_VAL*/\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DRAMC_ACTIM05T_VAL[$id] . ",\t\t/* DRAMC_ACTIM05T_VAL*/\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . "{" . $DRAM_RANK0_SIZE[$id] . "," . $DRAM_RANK1_SIZE[$id] . ",0,0},\t\t/* DRAM RANK SIZE */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . "{0,0,0,0,0,0,0,0,0,0},\t\t/* reserved 10 */\n\t\t" ;
- #union
- #1 LPDDR2
- if ($DDR1_2_3[$id] eq "LPDDR2")
- {
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG1[$id] . ",\t\t/* LPDDR2_MODE_REG1 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG2[$id] . ",\t\t/* LPDDR2_MODE_REG2 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG3[$id] . ",\t\t/* LPDDR2_MODE_REG3 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG5[$id] . ",\t\t/* LPDDR2_MODE_REG5 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG10[$id] . ",\t\t/* LPDDR2_MODE_REG10 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR2_MODE_REG63[$id] . ",\t\t/* LPDDR2_MODE_REG63 */\n\t}" ;
- }
- #2 DDR1
- elsif ($DDR1_2_3[$id] eq "DDR1")
- {
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DDR1_MODE_REG[$id] . ",\t\t/* DDR1_MODE_REG */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $DDR1_EXT_MODE_REG[$id] . "\t\t/* DDR1_EXT_MODE_REG */\n\t}" ;
- }
- #3 PCDDR3
- elsif ($DDR1_2_3[$id] eq "PCDDR3")
- {
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG0[$id] . ",\t\t/* PCDDR3_MODE_REG0 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG1[$id] . ",\t\t/* PCDDR3_MODE_REG1 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG2[$id] . ",\t\t/* PCDDR3_MODE_REG2 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG3[$id] . ",\t\t/* PCDDR3_MODE_REG3 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG4[$id] . ",\t\t/* PCDDR3_MODE_REG4 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $PCDDR3_MODE_REG5[$id] . ",\t\t/* PCDDR3_MODE_REG5 */\n\t}" ;
- }
- #3 LPDDR3
- elsif ($DDR1_2_3[$id] eq "LPDDR3")
- {
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG1[$id] . ",\t\t/* LPDDR3_MODE_REG1 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG2[$id] . ",\t\t/* LPDDR3_MODE_REG2 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG3[$id] . ",\t\t/* LPDDR3_MODE_REG3 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG5[$id] . ",\t\t/* LPDDR3_MODE_REG5 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG10[$id] . ",\t\t/* LPDDR3_MODE_REG10 */\n\t\t" ;
- $EMI_SETTINGS[$id] = $EMI_SETTINGS[$id] . $LPDDR3_MODE_REG63[$id] . ",\t\t/* LPDDR3_MODE_REG63 */\n\t}" ;
- }
- print $EMI_SETTINGS[$id] ;
- print "\n\n" ;
- $id ++;
- }
- # return total_part_number_iter
- return $id;
-
- }
- #****************************************************************************************
- # subroutine: OsName
- # return: which os this script is running
- # input: no input
- #****************************************************************************************
- sub OsName {
- my $os = `set os`;
- if(!defined $os) {
- $os = "linux";
- }
- else {
- die "[Error]does not support windows now!!" ;
- $os = "windows";
- }
- }
- #*************************************************************************************************
- # subroutine: gen_pm
- # return: no return, but will generate a ForWindows.pm in "/perl/lib" where your perl install
- #*************************************************************************************************
- sub gen_pm {
- foreach (@INC) {
- if(/^.*:\/Perl\/lib$/) {
- open FILE, ">${_}\/ForWindows.pm";
- print FILE "package ForWindows;\n";
- print FILE "use Win32::OLE qw(in with);\n";
- print FILE "use Win32::OLE::Const 'Microsoft Excel';\n";
- print FILE "\$Win32::OLE::Warn = 3;\n";
- print FILE "1;";
- close(FILE);
- last;
- }
- }
- }
- #****************************************************************************************
- # subroutine: get_sheet
- # return: Excel worksheet no matter it's in merge area or not, and in windows or not
- # input: Specified Excel Sheetname
- #****************************************************************************************
- sub get_sheet {
- my $MEMORY_DEVICE_TYPE = $_[0];
- print $MEMORY_DEVICE_TYPE ;
- if ($os eq "windows") {
- return $Sheet = $Book->Worksheets($MEMORY_DEVICE_TYPE);
- }
- else {
- return $Sheet = $Book->Worksheet($MEMORY_DEVICE_TYPE);
- }
- }
- #****************************************************************************************
- # subroutine: xls_cell_value
- # return: Excel cell value no matter it's in merge area or not, and in windows or not
- # input: $Sheet: Specified Excel Sheet
- # input: $row: Specified row number
- # input: $col: Specified column number
- #****************************************************************************************
- sub xls_cell_value {
- my ($Sheet, $row, $col) = @_;
- if ($os eq "windows") {
- return &trim(&win_xls_cell_value($Sheet, $row, $col));
- }
- else {
- return &trim(&lin_xls_cell_value($Sheet, $row, $col));
- }
- }
- sub win_xls_cell_value
- {
- my ($Sheet, $row, $col) = @_;
- if ($Sheet->Cells($row, $col)->{'MergeCells'})
- {
- my $ma = $Sheet->Cells($row, $col)->{'MergeArea'};
- return ($ma->Cells(1, 1)->{'Value'});
- }
- else
- {
- return ($Sheet->Cells($row, $col)->{'Value'})
- }
- }
- sub lin_xls_cell_value
- {
- my ($Sheet, $row, $col) = @_;
- my $cell = $Sheet->get_cell($row, $col);
- return "" unless (defined $cell);
- my $value = $cell->Value();
- }
- sub write_tag()
- {
- my $project = lc($_[0]);
- my $filesize = 0x0 ;
- my $ddr = -1 ;
- if (-e $INFO_TAG)
- {
- unlink ($INFO_TAG);
- }
- my $temp_path = `dirname $INFO_TAG`;
- `mkdir -p $temp_path`;
-
- open FILE,">$INFO_TAG";
- print FILE pack("a24", "MTK_BLOADER_INFO_v21");
- # print FILE pack("a24", "MTK_BLOADER_INFO_v00");
- $filesize = $filesize + 24 ;
- seek(FILE, 0x1b, 0);
- $pre_bin = "preloader_${project}.bin";
- print "PROJECT = $project, pre_bin = $pre_bin\n";
- print FILE pack("a64", $pre_bin);
- $filesize = $filesize + 64 ;
- seek(FILE, 0x58, 0);
- print FILE pack("H8", 56313136);
- $filesize = $filesize + 4 ;
- print FILE pack("H8", 22884433);
- $filesize = $filesize + 4 ;
- print FILE pack("H8", "90007000");
- $filesize = $filesize + 4 ;
- print FILE pack("a8", "MTK_BIN");
- $filesize = $filesize + 8 ;
-
- # print FILE pack("H8", bc000000);
-
-
- seek(FILE,0x6c, 0);
- # 1.LPDDR2/LPDDR3 discrete dram number >= 2
- #[DEL] 2.LPDDR2 discrete dram > 0, LPDDR2 MCP > 0
- #[DEL] 3.LPDDR3 discrete dram > 0, LPDDR3 MCP > 0
- if (($Discrete_DDR >= 2))
- #if (($Discrete_DDR >= 2) || (($DIS_LPDDR2 > 0) && ($MCP_LPDDR2 > 0)) || (($DIS_LPDDR3 > 0) && ($MCP_LPDDR3 > 0)))
- {
- print "[EMIgen] Have multiple discrete dram\n";
- print FILE pack("L", $TotalCustemChips+1); # number of emi settings + 1 default value emi_settings.
- }else
- {
- print FILE pack("L", $TotalCustemChips); # number of emi settings.
- }
- $filesize = $filesize + 4 ;
-
- my $iter = 0 ;
- # 1.LPDDR2/LPDDR3 discrete dram number >= 2
- #[DEL] 2.LPDDR2 discrete dram > 0, LPDDR2 MCP > 0
- #[DEL] 3.LPDDR3 discrete dram > 0, LPDDR3 MCP > 0
- if (($Discrete_DDR >= 2))
- #if (($Discrete_DDR >= 2) || (($DIS_LPDDR2 > 0) && ($MCP_LPDDR2 > 0)) || (($DIS_LPDDR3 > 0) && ($MCP_LPDDR3 > 0)))
- {
- if ($DEV_TYPE2[0] eq "02")
- {
- $filesize = $filesize + &write_tag_one_element_default_LPDDR2() ;
- }
- elsif ($DEV_TYPE2[0] eq "03")
- {
- $filesize = $filesize + &write_tag_one_element_default_LPDDR3() ;
- }
- }
- for $iter (0..$TotalCustemChips-1)
- {
- # generate MCP dram
- if ($DEV_TYPE1[$iter] != "00")
- {
- $filesize = $filesize + &write_tag_one_element ($iter) ;
- }
- }
- for $iter (0..$TotalCustemChips-1)
- {
- # generate discrete dram
- if ($DEV_TYPE1[$iter] == "00")
- {
- $filesize = $filesize + &write_tag_one_element ($iter) ;
- }
- }
- # $filesize = $filesize + 4 ;
-
- # print "2.file size is $filesize \n";
- print FILE pack("L", $filesize) ;
-
- close (FILE) ;
- print "$INFO_TAG is generated!\n";
- return ;
- }
- sub write_tag_one_element_default_LPDDR2()
- {
- my $id = $_[0];
- my $fs = 0 ;
- print "in write_tag_one_element_default_LPDDR2";
- print FILE pack ("L", hex (lc("0x0"))) ; # Sub_version checking for flash tool
- $fs = $fs + 4 ;
- if ($DEV_TYPE1[0] eq "0F")
- {
- print FILE pack("L", hex("0x0F02")); #type
- }
- else
- {
- print FILE pack("L", hex("0x0002")); #type
- }
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar("0")) ; # EMMC ID checking length
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar("0")) ; # FW ID checking length
- $fs = $fs + 4 ;
-
- $_ = "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}" ;
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- print FILE pack ("C", hex ($9)) ;
- print FILE pack ("C", hex ($10)) ;
- print FILE pack ("C", hex ($11)) ;
- print FILE pack ("C", hex ($12)) ;
- print FILE pack ("C", hex ($13)) ;
- print FILE pack ("C", hex ($14)) ;
- print FILE pack ("C", hex ($15)) ;
- print FILE pack ("C", hex ($16)) ;
- $fs = $fs + 16 ;
- }
- $_= "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}";
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #fw id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- $fs = $fs + 8 ;
- }
-
- print FILE pack ("L", hex (lc("0x0000212E"))) ; # EMI_CONA_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xAA00AA00"))) ; # DRAMC_DRVCTL0_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xAA00AA00"))) ; # DRAMC_DRVCTL1_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x44584493"))) ; # DRAMC_ACTIM_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x01000000"))) ; # DRAMC_GDDR3CTL1_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xF0048683"))) ; # DRAMC_CONF1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0xA00632D1"))) ; # DRAMC_DDR2CTL_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0xBF080401"))) ; # DRAMC_TEST2_3_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x0340633F"))) ; # DRAMC_CONF2_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x51642342"))) ; # DRAMC_PD_CTRL_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x00008888"))) ; # DRAMC_PADCTL3_VAL
-
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x88888888"))) ; # DRAMC_DQODLY_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00000000"))) ; # DRAMC_ADDR_OUTPUT_DLY
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00000000"))) ; # DRAMC_CLK_OUTPUT_DLY
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x01000510"))) ; # $DRAMC_ACTIM1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x07800000"))) ; # DRAMC_MISCTL0_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x04002600"))) ; # $DRAMC_ACTIM05T_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ; # DRAM_RANK_SIZE[4]
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 16 ;
- print FILE pack ("L", hex ("0")) ; #reserved[10]
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 40 ;
-
- if (1)
- {
- #ddr2
- print FILE pack ("L", hex (lc("0x00C30001"))) ; # DDR2_MODE_REG1
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00060002"))) ; # DDR2_MODE_REG2
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00020003"))) ; # DDR2_MODE_REG3
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x0"))) ; # DDR2_MODE_REG5
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00FF000A"))) ; # DDR2_MODE_REG10
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x0000003F"))) ; # DDR2_MODE_REG63
- $fs = $fs + 4 ;
- }
- # print "1.file size is $fs \n";
- return $fs;
- }
- sub write_tag_one_element_default_LPDDR3()
- {
- my $id = $_[0];
- my $fs = 0 ;
- print "in write_tag_one_element_default_LPDDR3";
- print FILE pack ("L", hex (lc("0x0"))) ; # Sub_version checking for flash tool
- $fs = $fs + 4 ;
- if ($DEV_TYPE1[0] eq "0F")
- {
- print FILE pack("L", hex("0x0F03")); #type
- }
- else
- {
- print FILE pack("L", hex("0x0003")); #type
- }
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar("0")) ; # EMMC ID checking length
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar("0")) ; # FW ID checking length
- $fs = $fs + 4 ;
-
- $_ = "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}" ;
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- print FILE pack ("C", hex ($9)) ;
- print FILE pack ("C", hex ($10)) ;
- print FILE pack ("C", hex ($11)) ;
- print FILE pack ("C", hex ($12)) ;
- print FILE pack ("C", hex ($13)) ;
- print FILE pack ("C", hex ($14)) ;
- print FILE pack ("C", hex ($15)) ;
- print FILE pack ("C", hex ($16)) ;
- $fs = $fs + 16 ;
- }
- $_= "{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}";
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #fw id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- $fs = $fs + 8 ;
- }
-
- print FILE pack ("L", hex (lc("0x0000212E"))) ; # EMI_CONA_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xAA00AA00"))) ; # DRAMC_DRVCTL0_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xAA00AA00"))) ; # DRAMC_DRVCTL1_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x44584493"))) ; # DRAMC_ACTIM_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x01000000"))) ; # DRAMC_GDDR3CTL1_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0xF0048683"))) ; # DRAMC_CONF1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0xA00632F1"))) ; # DRAMC_DDR2CTL_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0xBF080401"))) ; # DRAMC_TEST2_3_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x0340633F"))) ; # DRAMC_CONF2_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x51642342"))) ; # DRAMC_PD_CTRL_VAL
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x00008888"))) ; # DRAMC_PADCTL3_VAL
-
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x88888888"))) ; # DRAMC_DQODLY_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00000000"))) ; # DRAMC_ADDR_OUTPUT_DLY
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00000000"))) ; # DRAMC_CLK_OUTPUT_DLY
- $fs = $fs + 4 ;
-
- print FILE pack ("L", hex (lc("0x11000510"))) ; # $DRAMC_ACTIM1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x07800000"))) ; # DRAMC_MISCTL0_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x04002600"))) ; # $DRAMC_ACTIM05T_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ; # DRAM_RANK_SIZE[4]
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 16 ;
- print FILE pack ("L", hex ("0")) ; #reserved[10]
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 40 ;
-
- if (1)
- {
- #ddr2
- print FILE pack ("L", hex (lc("0x00C30001"))) ; # DDR2_MODE_REG1
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00060002"))) ; # DDR2_MODE_REG2
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00020003"))) ; # DDR2_MODE_REG3
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x0"))) ; # DDR2_MODE_REG5
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x00FF000A"))) ; # DDR2_MODE_REG10
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc("0x0000003F"))) ; # DDR2_MODE_REG63
- $fs = $fs + 4 ;
- }
- # print "1.file size is $fs \n";
- return $fs;
- }
- sub write_tag_one_element()
- {
- my $id = $_[0];
- my $type = "0x$DEV_TYPE1[$id]$DEV_TYPE2[$id]" ;
- my $fs = 0 ;
- print FILE pack ("L", hex (lc($Sub_version[$id]))) ; # Sub_version checking for flash tool
- $fs = $fs + 4 ;
- print FILE pack("L", hex($type)); #type
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar($ID_Length[$id])) ; # EMMC ID checking length
- $fs = $fs + 4 ;
- print FILE pack ("L", scalar($FW_ID_Length[$id])) ; # FW ID checking length
- $fs = $fs + 4 ;
- $_ = $ID_String[$id] ;
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- print FILE pack ("C", hex ($9)) ;
- print FILE pack ("C", hex ($10)) ;
- print FILE pack ("C", hex ($11)) ;
- print FILE pack ("C", hex ($12)) ;
- print FILE pack ("C", hex ($13)) ;
- print FILE pack ("C", hex ($14)) ;
- print FILE pack ("C", hex ($15)) ;
- print FILE pack ("C", hex ($16)) ;
- $fs = $fs + 16 ;
- }
- $_= $FW_ID_String[$id];
- if (/(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+),(\w+)/)
- {
- print FILE pack ("C", hex ($1)) ; #fw id
- print FILE pack ("C", hex ($2)) ;
- print FILE pack ("C", hex ($3)) ;
- print FILE pack ("C", hex ($4)) ;
- print FILE pack ("C", hex ($5)) ;
- print FILE pack ("C", hex ($6)) ;
- print FILE pack ("C", hex ($7)) ;
- print FILE pack ("C", hex ($8)) ;
- $fs = $fs + 8 ;
- }
- print FILE pack ("L", hex (lc($EMI_CONA_VAL[$id]))) ; # EMI_CONA_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_DRVCTL0_VAL[$id]))) ; # DRAMC_DRVCTL0_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_DRVCTL1_VAL[$id]))) ; # DRAMC_DRVCTL1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_ACTIM_VAL[$id]))) ; # DRAMC_ACTIM_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_GDDR3CTL1_VAL[$id]))) ; # DRAMC_GDDR3CTL1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_CONF1_VAL[$id]))) ; # DRAMC_CONF1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_DDR2CTL_VAL[$id]))) ; # DRAMC_DDR2CTL_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_TEST2_3_VAL[$id]))) ; # DRAMC_TEST2_3_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_CONF2_VAL[$id]))) ; # DRAMC_CONF2_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_PD_CTRL_VAL[$id]))) ; # DRAMC_PD_CTRL_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_PADCTL3_VAL[$id]))) ; # DRAMC_PADCTL3_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_DQODLY_VAL[$id]))) ; # DRAMC_DQODLY_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_ADDR_OUTPUT_DLY[$id]))) ; # DRAMC_ADDR_OUTPUT_DLY
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_CLK_OUTPUT_DLY[$id]))) ; # DRAMC_CLK_OUTPUT_DLY
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_ACTIM1_VAL[$id]))) ; # $DRAMC_ACTIM1_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_MISCTL0_VAL[$id]))) ; # DRAMC_MISCTL0_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAMC_ACTIM05T_VAL[$id]))) ; # $DRAMC_ACTIM05T_VAL
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DRAM_RANK0_SIZE[$id]))) ; # DRAM_RANK_SIZE[4]
- print FILE pack ("L", hex (lc($DRAM_RANK1_SIZE[$id]))) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 16 ;
- print FILE pack ("L", hex ("0")) ; #reserved[10]
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 40 ;
- if ($DEV_TYPE2[$id] == "02")
- {
- #ddr2
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG1[$id]))) ; # LPDDR2_MODE_REG1
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG2[$id]))) ; # LPDDR2_MODE_REG2
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG3[$id]))) ; # LPDDR2_MODE_REG3
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG5[$id]))) ; # LPDDR2_MODE_REG5
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG10[$id]))) ; # LPDDR2_MODE_REG10
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR2_MODE_REG63[$id]))) ; # LPDDR2_MODE_REG63
- $fs = $fs + 4 ;
- }
- elsif ($DEV_TYPE2[$id] == "01")
- { # ddr1
- print FILE pack ("L", hex (lc($DDR1_MODE_REG[$id]))) ; # DDR1_MODE_REG;
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($DDR1_EXT_MODE_REG[$id]))) ; # DDR1_EXT_MODE_REG
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 4 ;
- print FILE pack ("L", hex ("0")) ;
- $fs = $fs + 4 ;
- }
- elsif ($DEV_TYPE2[$id] == "04")
- { # ddr3
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG0[$id]))) ; # PCDDR3_MODE_REG0
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG1[$id]))) ; # PCDDR3_MODE_REG1
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG2[$id]))) ; # PCDDR3_MODE_REG2
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG3[$id]))) ; # PCDDR3_MODE_REG3
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG4[$id]))) ; # PCDDR3_MODE_TESTB
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($PCDDR3_MODE_REG5[$id]))) ;
- $fs = $fs + 4 ;
- }
- elsif ($DEV_TYPE2[$id] == "03")
- {
- #ddr3
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG1[$id]))) ; # LPDDR3_MODE_REG1
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG2[$id]))) ; # LPDDR3_MODE_REG2
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG3[$id]))) ; # LPDDR3_MODE_REG3
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG5[$id]))) ; # LPDDR3_MODE_REG5
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG10[$id]))) ; #LPDDR3_MODE_REG10
- $fs = $fs + 4 ;
- print FILE pack ("L", hex (lc($LPDDR3_MODE_REG63[$id]))) ; #LPDDR3_MODE_REG63
- $fs = $fs + 4 ;
- }
- # print "1.file size is $fs \n";
- return $fs;
- }
|