Explorar o código

2022-08-01 / ct_chen

Actions:
1. add local power sharing parameter for "DC" series

Files:
1.
ct_chen %!s(int64=2) %!d(string=hai) anos
pai
achega
b8c6d54a93

+ 310 - 3
EVSE/Modularization/Module_PowerSharing.c

@@ -6,6 +6,36 @@
  */
 #include "Module_PowerSharing.h"
 
+//-----------------------------------------------------------------------------
+//#define MODPS_FW_VER_TYPE_FORMAL	//V0.XX
+#define MODPS_FW_VER_TYPE_TEST		//T0.XX
+
+#define MODPS_FW_VER_NUM	(1)    //V/T0.01
+#define MODPS_FW_DATE		("20220730")
+
+//-----------------------------------------------------------------------------
+#if (MODPS_FW_VER_NUM >= 1)
+#define MODIFY_MODPS_BALANCE_CHECK_LOOP
+#define FUNC_MODPS_APPEND_LOG
+#endif
+
+//-----------------------------------------------------------------------------
+
+char Version_And_Date[2][10] = { 0 };
+
+void Init_FW_Info(void)
+{
+#ifdef MODPS_FW_VER_TYPE_FORMAL
+    sprintf(Version_And_Date[0], "V%4.2f", MODPS_FW_VER_NUM * 0.01);
+#endif
+
+#ifdef MODPS_FW_VER_TYPE_TEST
+    sprintf(Version_And_Date[0], "T%4.2f", MODPS_FW_VER_NUM * 0.01);
+#endif
+
+    sprintf(Version_And_Date[1], "%s", MODPS_FW_DATE);
+}
+
 struct SysConfigAndInfo		*ShmSysConfigAndInfo;
 struct StatusCodeData 		*ShmStatusCodeData;
 struct OCPP16Data			*ShmOCPP16Data;
@@ -735,18 +765,18 @@ int conn_update_status(int socketFd, Connector_Info *connectorInfo, uint8_t conn
 int conn_getOnHandCurrent(void)
 {
 	int result = 0;
-
 	for(uint8_t idx=0;idx<CONNECTION_LIMIT;idx++)
 	{
 		if(ShmPowerSharing->Connection_Info[idx].isSocketConnected)
 		{
 			for(uint8_t gun_index=0;gun_index<ShmPowerSharing->Connection_Info[idx].connectorCount;gun_index++)
 			{
-				result += (ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].connectorType == CONNECTOR_TYPE_AC_THREE?ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent*3:ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent);
+				result += (ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].connectorType == CONNECTOR_TYPE_AC_THREE?
+						ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent*3:
+						ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent);
 			}
 		}
 	}
-
 	result = checkChargingProfileLimit() - result;
 
 	if(ShmPowerSharing->onHandCurrent != result)
@@ -819,6 +849,11 @@ int tcpSocketServer(void)
 	serverInfo.sin_addr.s_addr = htonl(INADDR_ANY);
 	serverInfo.sin_port = htons(LISTEN_PORT_TCP);
 
+
+#ifdef FUNC_MODULE_POWER_SHARING_APPEND_LOG
+	DEBUG_INFO("==========[ tcpSocketServer begin ]==========\n");
+#endif
+
 	if(bind(sockFd, (struct sockaddr *)&serverInfo, sizeof(serverInfo)) < 0)
 		DEBUG_ERROR("TCP server socket bind fail.\n");
 
@@ -1240,6 +1275,272 @@ int tcpSocketClient(void)
 //==========================================
 // Local loading balance check
 //==========================================
+#ifdef MODIFY_MODPS_BALANCE_CHECK_LOOP
+
+Connector_Info* GetIsetMaxGun(void)
+{
+	struct CONNECTION_INFO* pDev = NULL;
+	Connector_Info* pGun = NULL;
+	uint16_t* pIset = NULL;
+	uint16_t* pIout = NULL;
+	uint16_t Imin = 0;
+	uint16_t IsetMax = 6;
+	Connector_Info* pGunIsetMax = NULL;
+
+	for (uint8_t i = 0; i < CONNECTION_LIMIT; i++)
+	{
+		pDev = &ShmPowerSharing->Connection_Info[i];
+		if (!pDev->isSocketConnected)
+		{
+			continue;
+		}
+		for (uint8_t j = 0; j < pDev->connectorCount; j++)
+		{
+			pGun = &pDev->connectorInfo[j];
+			if (pGun->isGunConnected)
+			{
+				pIset = &pGun->availableSharingCurrent;
+				pIout = &pGun->presentOutputCurrent;
+				Imin = pGun->connectorType==CONNECTOR_TYPE_DC ? SHARE_MIN_DC : SHARE_MIN_AC;
+				if (*pIset > Imin && *pIout > Imin && *pIset > IsetMax)
+				{
+					IsetMax = *pIset;
+					pGunIsetMax = pGun;
+				}
+			}
+		}
+	}
+
+//	if (pGunIsetMax)
+//	{
+//		DEBUG_INFO("GunIsetMax: %d / %d (%d)\n", pGunIsetMax->presentOutputCurrent,
+//				pGunIsetMax->availableSharingCurrent, pGunIsetMax->connectorType);
+//	}
+	return pGunIsetMax;
+}
+
+Connector_Info* GetIsetMinGun(void)
+{
+	struct CONNECTION_INFO* pDev = NULL;
+	Connector_Info* pGun = NULL;
+	uint16_t* pIset = NULL;
+	uint16_t* pIout = NULL;
+	uint16_t Imin = 0;
+	uint16_t IsetMin = 1000;
+	Connector_Info* pGunIsetMin = NULL;
+
+	for (uint8_t i = 0; i < CONNECTION_LIMIT; i++)
+	{
+		pDev = &ShmPowerSharing->Connection_Info[i];
+		if (!pDev->isSocketConnected)
+		{
+			continue;
+		}
+		for (uint8_t j = 0; j < pDev->connectorCount; j++)
+		{
+			pGun = &pDev->connectorInfo[j];
+			if (pGun->isGunConnected)
+			{
+				pIset = &pGun->availableSharingCurrent;
+				pIout = &pGun->presentOutputCurrent;
+				Imin = pGun->connectorType==CONNECTOR_TYPE_DC ? SHARE_MIN_DC : SHARE_MIN_AC;
+				if (*pIset >= Imin && *pIout >= Imin && *pIset < IsetMin)
+				{
+					IsetMin = *pIset;
+					pGunIsetMin = pGun;
+				}
+			}
+		}
+	}
+
+//	if (pGunIsetMin)
+//	{
+//		DEBUG_INFO("GunIsetMin: %d / %d (%d)\n", pGunIsetMin->presentOutputCurrent,
+//				pGunIsetMin->availableSharingCurrent, pGunIsetMin->connectorType);
+//	}
+	return pGunIsetMin;
+}
+
+int balance_check_loop(void)
+{
+	DEBUG_INFO("==========[ balance_check_loop begin ]==========\n");
+	for(;;)
+	{
+		// Get connection info
+		conn_getConectedQuantity();
+		conn_getOnHandCurrent();
+		conn_getConectedConnector();
+
+		// Check conn heart beat
+		for(uint8_t idx=0;idx<CONNECTION_LIMIT;idx++)
+		{
+			if(ShmPowerSharing->Connection_Info[idx].isSocketConnected &&
+			   (getDiffSecNow(ShmPowerSharing->Connection_Info[idx].timer[POWERSHARING_TMR_IDX_HEARTBEAT]) > TIMEOUT_SPEC_HEARTBEAT))
+			{
+				DEBUG_INFO("SocketFd-%d heart beat is over %d seconds.\n", ShmPowerSharing->Connection_Info[idx].socketFd, TIMEOUT_SPEC_HEARTBEAT);
+				for(uint8_t gun_index=0;gun_index<ShmPowerSharing->Connection_Info[idx].connectorCount;gun_index++)
+					ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].isGunConnected = FALSE;
+				ShmPowerSharing->Connection_Info[idx].isSocketConnected = FALSE;
+			}
+		}
+
+		// Check available power
+		if(ShmPowerSharing->isDetectNewConnected || (ShmPowerSharing->onHandCurrent < 0))
+		{
+			for(uint8_t idx=0;idx<CONNECTION_LIMIT;idx++)
+			{
+				for(uint8_t gun_index=0;gun_index<ShmPowerSharing->Connection_Info[idx].connectorCount;gun_index++)
+				{
+					if(ShmPowerSharing->Connection_Info[idx].isSocketConnected &&
+					   ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].isGunConnected)
+					{
+						ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent = (ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].connectorType==CONNECTOR_TYPE_DC?SHARE_MIN_DC:SHARE_MIN_AC);
+					}
+					else
+					{
+						ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].availableSharingCurrent = 0;
+					}
+				}
+			}
+
+			if(ShmPowerSharing->onHandCurrent < 0)
+				DEBUG_INFO("On hand current < 0 re-allocate available current to each connection.\n");
+
+			if(ShmPowerSharing->isDetectNewConnected)
+			{
+				DEBUG_INFO("Detect gun connected re-allocate available current to each connection.\n");
+				ShmPowerSharing->isDetectNewConnected = NO;
+			}
+		}
+
+		struct CONNECTION_INFO* pDev = NULL;
+		Connector_Info* pGun = NULL;
+		uint16_t* pIset = NULL;
+		uint16_t* pIout = NULL;
+		uint16_t Imin = 0;
+
+		for(uint8_t idx = 0; idx < CONNECTION_LIMIT; idx++)
+		{
+			pDev = &ShmPowerSharing->Connection_Info[idx];
+			for(uint8_t gun_index = 0; gun_index < pDev->connectorCount; gun_index++)
+			{
+				pGun = &pDev->connectorInfo[gun_index];
+				pIset = &pGun->availableSharingCurrent;
+				pIout = &pGun->presentOutputCurrent;
+				Imin = (pGun->connectorType == CONNECTOR_TYPE_DC ? SHARE_MIN_DC : SHARE_MIN_AC);
+
+				if(pDev->isSocketConnected && pGun->isGunConnected)
+				{
+					if((getDiffSecNow(pGun->tmrCheckCapacity) >= INTERVAL_SPEC_CHECK_CAPACITY))
+					{
+						int16_t Idiff = *pIset - *pIout;
+						if(Idiff > 3)
+						{
+							int32_t IsetAdd = - (Idiff >> 1);
+							uint16_t IsetNext = *pIset + IsetAdd;
+							if(IsetNext >= Imin)
+								*pIset = IsetNext;
+							else
+								*pIset = Imin;
+						}
+						else if((abs(Idiff) <= 1) && (ShmPowerSharing->onHandCurrent > 0))
+						{
+							int AvgCurr = ShmPowerSharing->onHandCurrent /
+								(ShmPowerSharing->connectedConnectorQty == 0 ? 1 : ShmPowerSharing->connectedConnectorQty);
+							*pIset += (pGun->connectorType == CONNECTOR_TYPE_AC_THREE ? AvgCurr / 3 : AvgCurr);
+						}
+						else
+						{
+						}
+
+						Connector_Info* pGunIsetMax = GetIsetMaxGun();
+						Connector_Info* pGunIsetMin = GetIsetMinGun();
+						if (pGun == pGunIsetMax && pGunIsetMax == pGunIsetMin)
+						{
+							if (pGun->connectorType == CONNECTOR_TYPE_AC_THREE)
+							{
+								if (ShmPowerSharing->onHandCurrent >= 3)
+								{
+									*pIset += 1;
+									conn_getOnHandCurrent();
+								}
+							}
+							else
+							{
+								for (uint8_t i = 1; i <= 1; i++)
+								{
+									if (ShmPowerSharing->onHandCurrent > 0)
+									{
+										*pIset += 1;
+										conn_getOnHandCurrent();
+									}
+									else
+									{
+										break;
+									}
+								}
+							}
+						}
+						else if (pGun == pGunIsetMin)
+						{
+							if (pGun->connectorType == CONNECTOR_TYPE_AC_THREE)
+							{
+								if (ShmPowerSharing->onHandCurrent >= 3)
+								{
+									*pIset += 1;
+									conn_getOnHandCurrent();
+								}
+							}
+							else
+							{
+								for (uint8_t i = 1; i <= 1; i++)
+								{
+									if (ShmPowerSharing->onHandCurrent > 0)
+									{
+										*pIset += 1;
+										conn_getOnHandCurrent();
+									}
+									else
+									{
+										break;
+									}
+								}
+							}
+						}
+						else if (pGun == pGunIsetMax)
+						{
+							if (pGun->connectorType == CONNECTOR_TYPE_AC_THREE)
+							{
+								*pIset -= 1;
+								conn_getOnHandCurrent();
+							}
+							else
+							{
+								*pIset -= 1;
+								conn_getOnHandCurrent();
+							}
+						}
+						refreshStartTimer(&ShmPowerSharing->Connection_Info[idx].connectorInfo[gun_index].tmrCheckCapacity);
+					}
+				}
+				else
+				{
+					if(*pIset != 0)
+					{
+						DEBUG_INFO("Dupfd-%d on conn-%d available current reset to 0A\n", ShmPowerSharing->Connection_Info[idx].socketFd, idx);
+					}
+					*pIset = 0;
+				}
+			}
+		}
+
+		usleep(100000);
+	}
+
+	return FAIL;
+}
+#else //MODIFY_MODPS_BALANCE_CHECK_LOOP
+
 int balance_check_loop(void)
 {
 	for(;;)
@@ -1334,6 +1635,7 @@ int balance_check_loop(void)
 
 	return FAIL;
 }
+#endif //MODIFY_MODPS_BALANCE_CHECK_LOOP
 
 //==========================================
 // Main process
@@ -1355,6 +1657,11 @@ int main(void)
 		return 0;
 	}
 
+	Init_FW_Info();
+	DEBUG_INFO("\n\n");
+	DEBUG_INFO("Latest Firmware Version : [ %s ]\n", Version_And_Date[0]);
+	DEBUG_INFO("Latest Upgrade Date : [ %s ]\n", Version_And_Date[1]);
+
 	// Enable server if rotary switch not slave mode
 	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing == 1)
 	{

+ 2 - 6
EVSE/Modularization/WebService.c

@@ -2642,12 +2642,10 @@ int main(int argc, char *argv[]) {
 		MaintainServerSecurityPassword = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.MaintainServerSecurityPassword);
 		chargePointVendor = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.chargePointVendor);
 		MaintainServerURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.MaintainServerURL);
-		if(strcmp(IsDO, "AX") == 0 ){
+		if(strcmp(IsDO, "AX") == 0 || strcmp(IsAcDc, "D") == 0){
 			isEnableLocalPowerSharging = json_object_new_int(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
 			PowerSharingCapacity = json_object_new_int(ShmSysConfigAndInfo->SysConfig.PowerSharingCapacityPower);
 			PowerSharingServerIP = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP);
-		}
-		if(strcmp(IsDO, "AX") == 0|| strcmp(IsAcDc, "D") == 0){
 			OcppReceiptrURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.OcppReceiptrURL);
 		}
 		/*for TTIA*/
@@ -3078,12 +3076,10 @@ int main(int argc, char *argv[]) {
 		json_object_object_add(jobj4,"MaintainServerSecurityProfile",MaintainServerSecurityProfile);
 		json_object_object_add(jobj4,"MaintainServerSecurityPassword",MaintainServerSecurityPassword);
 		json_object_object_add(jobj4,"MaintainServerURL",MaintainServerURL);
-		if(strcmp(IsDO, "AX") == 0){
+		if(strcmp(IsDO, "AX") == 0 || strcmp(IsAcDc, "D") == 0){
 			json_object_object_add(jobj4,"isEnableLocalPowerSharging",isEnableLocalPowerSharging);
 			json_object_object_add(jobj4,"PowerSharingCapacity",PowerSharingCapacity);
 			json_object_object_add(jobj4,"PowerSharingServerIP",PowerSharingServerIP);
-		}
-		if(strcmp(IsDO, "AX") == 0 || strcmp(IsAcDc, "D") == 0){
 			json_object_object_add(jobj4,"OcppReceiptrURL",OcppReceiptrURL);
 		}
 		/*for TTIA*/

+ 3 - 5
EVSE/rootfs/var/www/set_backend.php

@@ -262,7 +262,6 @@ CORE STYLES ABOVE - NO TOUCHY
 											<label><?php echo $lang->showWord("ocpp_receipt_url"); ?></label>
 											<input type="text" name="OcppReceiptrURL" id="OcppReceiptrURL" class="form-control" value="<?php echo $obj->{'OcppReceiptrURL'};?>">
 										</div>
-<?php } if(substr($ModelName,0,2)=="AX"){?>
 										<div class="form-group" style="display:block">
 											<label><?php echo $lang->showWord("local_loading_balance"); ?></label>
 											<select class="form-control" id="isEnableLocalPowerSharging" name="isEnableLocalPowerSharging" onChange="isEnableLocalPowerSharging_changed()">
@@ -367,7 +366,7 @@ CORE STYLES ABOVE - NO TOUCHY
 ?>
 
 <script type="text/JavaScript">
-<?php if(substr($ModelName,0,2)=="AX"){?>
+<?php if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
 	$(document).ready(function(){
 		isEnableLocalPowerSharging_changed();
 	});
@@ -402,11 +401,10 @@ CORE STYLES ABOVE - NO TOUCHY
 						"&OcppSecurityPassword=" + escape(document.getElementById("OcppSecurityPassword").value)+
 						"&MaintainServerSecurityProfile=" + document.getElementById("MaintainServerSecurityProfile").value+
 						"&MaintainServerSecurityPassword=" + escape(document.getElementById("MaintainServerSecurityPassword").value);
-<?php if(substr($ModelName,0,2)=="AX"){?>
+<?php if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
 				data += "&isEnableLocalPowerSharging=" + document.getElementById("isEnableLocalPowerSharging").value;
 				data += "&PowerSharingServerIP=" + document.getElementById("PowerSharingServerIP").value;
 				data += "&PowerSharingCapacity=" + document.getElementById("PowerSharingCapacity").value;
-<?php } if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
 				data += "&OcppReceiptrURL=" + document.getElementById("OcppReceiptrURL").value;
 <?php } ?>
 <?php if(substr($ModelName,0,1)=="D" && substr($ModelName,3,1)=="C"){?>
@@ -544,7 +542,7 @@ CORE STYLES ABOVE - NO TOUCHY
 		}
 	}
 
-<?php if(substr($ModelName,0,2)=="AX"){?>
+<?php if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
 	function isEnableLocalPowerSharging_changed(){
 		/*
 		if(document.getElementById("isEnableLocalPowerSharging").selectedIndex!=0){

+ 0 - 2
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/include/Kbuild

@@ -1,2 +0,0 @@
-# Top-level Makefile calls into asm-$(ARCH)
-# List only non-arch directories below

+ 0 - 175
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/include/memory/jedec_ddr.h

@@ -1,175 +0,0 @@
-/*
- * Definitions for DDR memories based on JEDEC specs
- *
- * Copyright (C) 2012 Texas Instruments, Inc.
- *
- * Aneesh V <aneesh@ti.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#ifndef __LINUX_JEDEC_DDR_H
-#define __LINUX_JEDEC_DDR_H
-
-#include <linux/types.h>
-
-/* DDR Densities */
-#define DDR_DENSITY_64Mb	1
-#define DDR_DENSITY_128Mb	2
-#define DDR_DENSITY_256Mb	3
-#define DDR_DENSITY_512Mb	4
-#define DDR_DENSITY_1Gb		5
-#define DDR_DENSITY_2Gb		6
-#define DDR_DENSITY_4Gb		7
-#define DDR_DENSITY_8Gb		8
-#define DDR_DENSITY_16Gb	9
-#define DDR_DENSITY_32Gb	10
-
-/* DDR type */
-#define DDR_TYPE_DDR2		1
-#define DDR_TYPE_DDR3		2
-#define DDR_TYPE_LPDDR2_S4	3
-#define DDR_TYPE_LPDDR2_S2	4
-#define DDR_TYPE_LPDDR2_NVM	5
-
-/* DDR IO width */
-#define DDR_IO_WIDTH_4		1
-#define DDR_IO_WIDTH_8		2
-#define DDR_IO_WIDTH_16		3
-#define DDR_IO_WIDTH_32		4
-
-/* Number of Row bits */
-#define R9			9
-#define R10			10
-#define R11			11
-#define R12			12
-#define R13			13
-#define R14			14
-#define R15			15
-#define R16			16
-
-/* Number of Column bits */
-#define C7			7
-#define C8			8
-#define C9			9
-#define C10			10
-#define C11			11
-#define C12			12
-
-/* Number of Banks */
-#define B1			0
-#define B2			1
-#define B4			2
-#define B8			3
-
-/* Refresh rate in nano-seconds */
-#define T_REFI_15_6		15600
-#define T_REFI_7_8		7800
-#define T_REFI_3_9		3900
-
-/* tRFC values */
-#define T_RFC_90		90000
-#define T_RFC_110		110000
-#define T_RFC_130		130000
-#define T_RFC_160		160000
-#define T_RFC_210		210000
-#define T_RFC_300		300000
-#define T_RFC_350		350000
-
-/* Mode register numbers */
-#define DDR_MR0			0
-#define DDR_MR1			1
-#define DDR_MR2			2
-#define DDR_MR3			3
-#define DDR_MR4			4
-#define DDR_MR5			5
-#define DDR_MR6			6
-#define DDR_MR7			7
-#define DDR_MR8			8
-#define DDR_MR9			9
-#define DDR_MR10		10
-#define DDR_MR11		11
-#define DDR_MR16		16
-#define DDR_MR17		17
-#define DDR_MR18		18
-
-/*
- * LPDDR2 related defines
- */
-
-/* MR4 register fields */
-#define MR4_SDRAM_REF_RATE_SHIFT			0
-#define MR4_SDRAM_REF_RATE_MASK				7
-#define MR4_TUF_SHIFT					7
-#define MR4_TUF_MASK					(1 << 7)
-
-/* MR4 SDRAM Refresh Rate field values */
-#define SDRAM_TEMP_NOMINAL				0x3
-#define SDRAM_TEMP_RESERVED_4				0x4
-#define SDRAM_TEMP_HIGH_DERATE_REFRESH			0x5
-#define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS	0x6
-#define SDRAM_TEMP_VERY_HIGH_SHUTDOWN			0x7
-
-#define NUM_DDR_ADDR_TABLE_ENTRIES			11
-#define NUM_DDR_TIMING_TABLE_ENTRIES			4
-
-/* Structure for DDR addressing info from the JEDEC spec */
-struct lpddr2_addressing {
-	u32 num_banks;
-	u32 tREFI_ns;
-	u32 tRFCab_ps;
-};
-
-/*
- * Structure for timings from the LPDDR2 datasheet
- * All parameters are in pico seconds(ps) unless explicitly indicated
- * with a suffix like tRAS_max_ns below
- */
-struct lpddr2_timings {
-	u32 max_freq;
-	u32 min_freq;
-	u32 tRPab;
-	u32 tRCD;
-	u32 tWR;
-	u32 tRAS_min;
-	u32 tRRD;
-	u32 tWTR;
-	u32 tXP;
-	u32 tRTP;
-	u32 tCKESR;
-	u32 tDQSCK_max;
-	u32 tDQSCK_max_derated;
-	u32 tFAW;
-	u32 tZQCS;
-	u32 tZQCL;
-	u32 tZQinit;
-	u32 tRAS_max_ns;
-};
-
-/*
- * Min value for some parameters in terms of number of tCK cycles(nCK)
- * Please set to zero parameters that are not valid for a given memory
- * type
- */
-struct lpddr2_min_tck {
-	u32 tRPab;
-	u32 tRCD;
-	u32 tWR;
-	u32 tRASmin;
-	u32 tRRD;
-	u32 tWTR;
-	u32 tXP;
-	u32 tRTP;
-	u32 tCKE;
-	u32 tCKESR;
-	u32 tFAW;
-};
-
-extern const struct lpddr2_addressing
-	lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES];
-extern const struct lpddr2_timings
-	lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES];
-extern const struct lpddr2_min_tck lpddr2_jedec_min_tck;
-
-#endif /* __LINUX_JEDEC_DDR_H */