[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/emigenemi.pl b/mcu/tools/emigenemi.pl
new file mode 100644
index 0000000..42340d5
--- /dev/null
+++ b/mcu/tools/emigenemi.pl
@@ -0,0 +1,386 @@
+#!/usr/bin/perl
+
+my $DebugPrint = 0;
+
+#****************************************************************************
+# subroutine: custom_EMI_release_h_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_release_h_file_body
+{
+ my ($CUSTOM_MEM_DEV_OPTIONS_LOCAL, $COMM_MDL_INFO_LOCAL, $emi_clk_config_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api) = @_;
+ my $emi_clk_str;
+ my $emi_device_mode;
+
+ if (($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{FLASH_ACCESS_TYPE} eq 'SYNC_ACCESS') && ($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{RAM_ACCESS_TYPE} eq 'SYNC_ACCESS'))
+ {
+ $emi_clk_str = sprintf("#define __EMI_CLK_%sMHZ__", $emi_clk_config_LOCAL);
+ if ($emi_clk_str =~ /\./)
+ {
+ $emi_clk_str =~ s/\./_/;
+ }
+ }
+ if ($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{MEMORY_DEVICE_TYPE} =~ /LPDDR2/)
+ {
+ $emi_device_mode = "#define __EMI_DEVICE_LPDDR2__\n#define __EMI_MODE_2X__";
+ }
+ elsif ($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{MEMORY_DEVICE_TYPE} =~ /LPDDR/)
+ {
+ $emi_device_mode = "#define __EMI_DEVICE_LPDDR1__\n#define __EMI_MODE_1X__";
+ }
+ else
+ {
+ &error_handler("MEMORY_DEVICE_TYPE:$CUSTOM_MEM_DEV_OPTIONS_LOCAL->{MEMORY_DEVICE_TYPE} didn't support yet!", __FILE__, __LINE__);
+ }
+
+ print "MDL info:$COMM_MDL_INFO_LOCAL->{1}->{'Size (Mb)'}\n" if ($DebugPrint == 1);
+
+ my $template = <<"__TEMPLATE";
+#ifndef __CUSTOM_EMI_RELEASE_H__
+#define __CUSTOM_EMI_RELEASE_H__
+/********************************************
+ * Include.
+ ********************************************/
+#include "kal_general_types.h"
+$cus_include
+/********************************************
+ * Definition.
+ ********************************************/
+/**
+ * Define EMI's clock rate.
+ * comes from EMI_CLK definition in custom_MemoryDevice.h, or highest freq in MDL
+ */
+$emi_clk_str
+
+/**
+ * Define memory's mode.
+ */
+$emi_device_mode
+
+/**
+ * Define RAM size in Bytes.
+ */
+#define EMI_EXTSRAM_SIZE ((($COMM_MDL_INFO_LOCAL->{1}->{'Size (Mb)'})>>3)<<20)
+$cus_def
+/********************************************
+ * Enum.
+ ********************************************/
+$cus_enum
+/********************************************
+ * Struct.
+ ********************************************/
+$cus_struct
+/********************************************
+ * Exposed APIs.
+ ********************************************/
+$cus_api
+#endif /* __CUSTOM_EMI_RELEASE_H__ */
+
+__TEMPLATE
+
+ return $template;
+}
+
+
+#****************************************************************************
+# subroutine: custom_EMI_release_h_90_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_release_h_90_file_body
+{
+ my ($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $COMM_MDL_INFO_LOCAL, $LPSDRAM_CHIP_SELECT_LOCAL, $emi_clk_config_LOCAL) = @_;
+ my ($cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+
+ return &custom_EMI_release_h_file_body($CUSTOM_MEM_DEV_OPTIONS_LOCAL, $COMM_MDL_INFO_LOCAL, $emi_clk_config_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+}
+
+#****************************************************************************
+# subroutine: custom_EMI_h_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_h_file_body
+{
+ ### EMI register value for each MCP
+ my ($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api) = @_;
+ my ($combo_mem_emi_reg, $combo_mem_emi_reg_clk);
+ my $emi_reg_bb_key_ref;
+ my $clk, $first_parse_clk;
+ my $mtk_emi_info;
+
+ for (1..$CUSTOM_MEM_DEV_OPTIONS_LOCAL->{COMBO_MEM_ENTRY_COUNT})
+ {
+ my $combo_idx = $_ - 1;
+ my $def_pre = undef;
+ undef $mtk_emi_info;
+ undef $first_parse_clk;
+
+ $combo_mem_emi_reg .= <<"__TEMPLATE";
+/*
+ * EMI register value definition
+ * EMI/MEM configuration information of MCP$combo_idx
+ */
+__TEMPLATE
+ $def_pre = "#define DRAM_VENDOR_MCP$combo_idx";
+ $combo_mem_emi_reg .= $def_pre;
+ $combo_mem_emi_reg .= " " x (47 - length($def_pre));
+ $combo_mem_emi_reg .= " (\"$MDL_INFO_LIST_LOCAL->[$_]->{0}->{'Vendor'}\")\n";
+ $def_pre = "#define DRAM_PART_NUMBER_MCP$combo_idx";
+ $combo_mem_emi_reg .= $def_pre;
+ $combo_mem_emi_reg .= " " x (47 - length($def_pre));
+ $combo_mem_emi_reg .= " (\"$MDL_INFO_LIST_LOCAL->[$_]->{0}->{'Part Number'}\")\n";
+ my $emi_reg_bb_key_ref = $MDL_INFO_LIST_LOCAL->[$_]->{0}->{$MAKEFILE_OPTIONS_LOCAL->{'platform'}};
+ foreach my $emi_key (sort keys %{$emi_reg_bb_key_ref})
+ {
+ if ($emi_key =~ /(\d+)MHZ EMI Driving/)
+ {
+ $clk = $1;
+ if (! defined $first_parse_clk)
+ {
+ $first_parse_clk = $clk;
+ }
+ if (! defined $combo_mem_emi_reg_clk)
+ {
+ $combo_mem_emi_reg_clk = "#if defined(__EMI_CLK_$clk\MHZ__)\n";
+ }
+ else
+ {
+ $combo_mem_emi_reg_clk .= "#elif defined(__EMI_CLK_$clk\MHZ__)\n";
+ }
+ my $emi_clk_dri = $emi_key;
+ foreach my $emi_key (sort keys %{$emi_reg_bb_key_ref->{$emi_clk_dri}})
+ {
+ my $val = $emi_reg_bb_key_ref->{$emi_clk_dri}->{$emi_key};
+ if (($val ne 'x') && ($val ne 'X') && ($val ne ''))
+ {
+ $def_pre = "#define $emi_key\_MCP$combo_idx";
+ $combo_mem_emi_reg_clk .= $def_pre;
+ # for alignment
+ $combo_mem_emi_reg_clk .= " " x (47 - length($def_pre));
+ $combo_mem_emi_reg_clk .= " ($val)\n";
+ }
+
+ if ($first_parse_clk == $clk)
+ {
+ $mtk_emi_info .= " unsigned int " . lc($emi_key) . ";\n";
+ }
+ }
+ }
+ else
+ {
+ my $val = $emi_reg_bb_key_ref->{$emi_key};
+ $def_pre = "#define $emi_key\_MCP$combo_idx";
+ if (($val ne 'x') && ($val ne 'X') && ($val ne ''))
+ {
+ $combo_mem_emi_reg .= $def_pre;
+ # for alignment
+ $combo_mem_emi_reg .= " " x (47 - length($def_pre));
+ $combo_mem_emi_reg .= " ($val)\n";
+ }
+ $mtk_emi_info .= " unsigned int " . lc($emi_key) . ";\n";
+ }
+ }
+ $combo_mem_emi_reg_clk .= "#endif /* __EMI_CLK_$clk\MHZ__ */\n";
+
+ $combo_mem_emi_reg .= <<"__TEMPLATE";
+
+$combo_mem_emi_reg_clk
+/*
+ * End of EMI/MEM configuration information of MCP$combo_idx
+ */
+__TEMPLATE
+
+ undef $combo_mem_emi_reg_clk;
+ }
+
+ my $template = <<"__TEMPLATE";
+#ifndef __CUSTOM_EMI_H__
+#define __CUSTOM_EMI_H__
+/********************************************
+ * Include.
+ ********************************************/
+$cus_include
+/********************************************
+ * Definition.
+ ********************************************/
+$combo_mem_emi_reg
+$cus_def
+/********************************************
+ * Enum.
+ ********************************************/
+typedef enum {
+ DRAMType_Invalid = 0x0,
+ DRAMType_DDR,
+ DRAMType_DDR2,
+ DRAMType_DDR_166M,
+ DRAMType_DDR_200M,
+ DRAMType_DDR2_166M,
+ DRAMType_DDR2_200M,
+ DRAMType_LPDDR = 0x800,
+ DRAMType_LPDDR2,
+ DRAMType_LPDDR_166M,
+ DRAMType_LPDDR_200M,
+ DRAMType_LPDDR2_166M,
+ DRAMType_LPDDR2_200M,
+ DRAMType_DDR_166M_SIP = 0x1000,
+ DRAMType_DDR_200M_SIP,
+ DRAMType_DDR2_166M_SIP,
+ DRAMType_DDR2_200M_SIP,
+ DRAMType_LPDDR_SIP = 0x1800,
+ DRAMType_LPDDR2_SIP,
+ DRAMType_LPDDR_166M_SIP,
+ DRAMType_LPDDR_200M_SIP,
+ DRAMType_LPDDR2_166M_SIP,
+ DRAMType_LPDDR2_200M_SIP,
+ DRAMType_End = 0x42424242
+} DRAMType;
+$cus_enum
+/********************************************
+ * Struct.
+ ********************************************/
+typedef struct {
+ DRAMType ramType;
+$mtk_emi_info} MTK_EMI_Info;
+$cus_struct
+/********************************************
+ * Exposed APIs.
+ ********************************************/
+$cus_api
+#endif /* end of __CUSTOM_EMI_H__ */
+__TEMPLATE
+
+ return $template;
+}
+
+#****************************************************************************
+# subroutine: custom_EMI_h_90_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_h_90_file_body
+{
+ my ($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $COMM_MDL_INFO_LOCAL, $PART_NUMBER_LOCAL, $CUSTOM_MEMORY_DEVICE_HDR_LOCAL, $LPSDRAM_CHIP_SELECT_LOCAL, $emi_clk_config_LOCAL, $emi_nor_cmd_num_max_LOCAL, $emi_psram_cmd_num_max_LOCAL, $MCP_LIST_LOCAL) = @_;
+ my ($cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+
+ $cus_def = <<"__TEMPLATE";
+/* Initial EMI Definition */
+#define USE_DUAL_RANK_DDR
+#define DRAM_START (0x00000000)
+
+#define MAX_DQ_DATA_WIDTH (32)
+
+#define DQ_NUMBER_PER_DQS (8)
+#define DQS_NUMBER (dq_data_width / DQ_NUMBER_PER_DQS)
+#define TX_STEPS (8) // This value is obtained by measurement of waveform for the relationship between DQS and CLK.
+__TEMPLATE
+
+ $cus_api = <<"__TEMPLATE";
+kal_int8 custom_InitDRAM(void);
+__TEMPLATE
+
+ return &custom_EMI_h_file_body($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+}
+
+#****************************************************************************
+# subroutine: custom_EMI_info_h_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_info_h_file_body
+{
+ my ($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $emi_clk_config_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api) = @_;
+ my $combo_mem_emi_info_struct;
+ my $combo_mem_emi_type;
+
+ $combo_mem_emi_type = "DRAMType_";
+ if ($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{MEMORY_DEVICE_TYPE} =~ /[A-Za-z]*DDR[0-9]*/)
+ {
+ $combo_mem_emi_type .= $&;
+ }
+ if (($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{FLASH_ACCESS_TYPE} eq 'SYNC_ACCESS') && ($CUSTOM_MEM_DEV_OPTIONS_LOCAL->{RAM_ACCESS_TYPE} eq 'SYNC_ACCESS'))
+ {
+ $combo_mem_emi_type .= sprintf("_%sM", $emi_clk_config_LOCAL);
+ }
+ if ($MAKEFILE_OPTIONS_LOCAL->{'sip_ram_size'} ne "NONE") {
+ $combo_mem_emi_type .= "_SIP";
+ }
+ for (1..$CUSTOM_MEM_DEV_OPTIONS_LOCAL->{COMBO_MEM_ENTRY_COUNT})
+ {
+ my $combo_idx = $_ - 1;
+ $combo_mem_emi_info_struct .= <<"__TEMPLATE";
+ {
+ .ramType = $combo_mem_emi_type,
+__TEMPLATE
+ my $emi_reg_bb_key_ref = $MDL_INFO_LIST_LOCAL->[$_]->{0}->{$MAKEFILE_OPTIONS_LOCAL->{'platform'}};
+ foreach my $emi_key (sort keys %{$emi_reg_bb_key_ref})
+ {
+ if ($emi_key =~ /(\d+)MHZ EMI Driving/)
+ {
+ my $emi_clk_dri = $emi_key;
+ foreach my $emi_key (sort keys %{$emi_reg_bb_key_ref->{$emi_clk_dri}})
+ {
+ my $val = $emi_reg_bb_key_ref->{$emi_clk_dri}->{$emi_key};
+ if (($val ne 'x') && ($val ne 'X') && ($val ne ''))
+ {
+ my $emi_info_def = "$emi_key\_MCP$combo_idx";
+ $combo_mem_emi_info_struct .= " ." . lc($emi_key) . " = " . $emi_info_def . ",\n";
+ }
+ }
+ }
+ else
+ {
+ my $val = $emi_reg_bb_key_ref->{$emi_key};
+ if (($val ne 'x') && ($val ne 'X') && ($val ne ''))
+ {
+ my $emi_info_def = "$emi_key\_MCP$combo_idx";
+ $combo_mem_emi_info_struct .= " ." . lc($emi_key) . " = " . $emi_info_def . ",\n";
+ }
+ }
+ }
+ $combo_mem_emi_info_struct .= " },\n";
+ }
+ my $template = <<"__TEMPLATE";
+#ifndef __CUSTOM_EMI_INFO_H__
+#define __CUSTOM_EMI_INFO_H__
+/********************************************
+ * Include.
+ ********************************************/
+#include "custom_EMI_release.h"
+#include "custom_EMI.h"
+$cus_include
+/********************************************
+ * Definition.
+ ********************************************/
+$cus_def
+/********************************************
+ * Enum.
+ ********************************************/
+$cus_enum
+/********************************************
+ * Struct.
+ ********************************************/
+MTK_EMI_Info EMI_INFO[] = {
+$combo_mem_emi_info_struct
+}; /* End of EMI_INFO struct */
+$cus_struct
+/********************************************
+ * Exposed APIs.
+ ********************************************/
+$cus_api
+
+#endif /* __CUSTOM_EMI_INFO_H__ */
+__TEMPLATE
+
+ return $template;
+}
+
+#****************************************************************************
+# subroutine: custom_EMI_info_h_90_file_body
+# return:
+#****************************************************************************
+sub custom_EMI_info_h_90_file_body
+{
+ my ($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $COMM_MDL_INFO_LOCAL, $PART_NUMBER_LOCAL, $CUSTOM_MEMORY_DEVICE_HDR_LOCAL, $LPSDRAM_CHIP_SELECT_LOCAL, $emi_clk_config_LOCAL, $emi_nor_cmd_num_max_LOCAL, $emi_psram_cmd_num_max_LOCAL) = @_;
+ my ($cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+
+ return &custom_EMI_info_h_file_body($MAKEFILE_OPTIONS_LOCAL, $CUSTOM_MEM_DEV_OPTIONS_LOCAL, $MDL_INFO_LIST_LOCAL, $emi_clk_config_LOCAL, $cus_include, $cus_def, $cus_enum, $cus_struct, $cus_api);
+}
+
+return 1;