packages: openocd/openocd.spec, openocd/openocd-svf-handle-blank.patch (NEW...

kosmo kosmo at pld-linux.org
Thu Aug 20 12:01:44 CEST 2009


Author: kosmo                        Date: Thu Aug 20 10:01:44 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- added openocd-svf-handle-blank.patch which makes OpenOCD compatible with
  SVF files generated by Altera Quartus II v9.0.

---- Files affected:
packages/openocd:
   openocd.spec (1.3 -> 1.4) , openocd-svf-handle-blank.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/openocd/openocd.spec
diff -u packages/openocd/openocd.spec:1.3 packages/openocd/openocd.spec:1.4
--- packages/openocd/openocd.spec:1.3	Wed Aug 12 12:09:54 2009
+++ packages/openocd/openocd.spec	Thu Aug 20 12:01:38 2009
@@ -9,6 +9,7 @@
 Source0:	http://download.berlios.de/%{name}/%{name}-%{version}.tar.bz2
 # Source0-md5:	14cd477f65cc738be954a454f1593879
 Patch0:		%{name}-davinci-nand-cs.patch
+Patch1:		%{name}-svf-handle-blank.patch
 URL:		http://openocd.berlios.de/
 BuildRequires:	autoconf
 BuildRequires:	automake
@@ -37,6 +38,7 @@
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
 
 %build
 %{__libtoolize}
@@ -88,6 +90,10 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.4  2009/08/20 10:01:38  kosmo
+- added openocd-svf-handle-blank.patch which makes OpenOCD compatible with
+  SVF files generated by Altera Quartus II v9.0.
+
 Revision 1.3  2009/08/12 10:09:54  kosmo
 - added openocd-davinci-nand-cs.patch fixing DaVinci NAND driver.
 

================================================================
Index: packages/openocd/openocd-svf-handle-blank.patch
diff -u /dev/null packages/openocd/openocd-svf-handle-blank.patch:1.1
--- /dev/null	Thu Aug 20 12:01:44 2009
+++ packages/openocd/openocd-svf-handle-blank.patch	Thu Aug 20 12:01:37 2009
@@ -0,0 +1,144 @@
+From ae98eaa9ba23fce3ff8465d4892abcc2a6cdcfab Mon Sep 17 00:00:00 2001
+From: Piotr Ziecik <kosmo at semihalf.com>
+Date: Thu, 20 Aug 2009 09:56:16 +0200
+Subject: [PATCH] svf: Allow blank characters beetween hex digits.
+
+This patch adds handling blank characters between hex digits in
+SVF file, making OpenOCD compatible with files generated by
+Altera Quatrus II 9.0.
+
+Signed-off-by: Piotr Ziecik <kosmo at semihalf.com>
+---
+ src/svf/svf.c |   97 ++++++++++++++++++++++----------------------------------
+ 1 files changed, 38 insertions(+), 59 deletions(-)
+
+diff --git a/src/svf/svf.c b/src/svf/svf.c
+index 51edada..510b7b0 100644
+--- a/src/svf/svf.c
++++ b/src/svf/svf.c
+@@ -655,8 +655,8 @@ static int svf_adjust_array_length(uint8_t **arr, int orig_bit_len, int new_bit_
+ 
+ static int svf_copy_hexstring_to_binary(char *str, uint8_t **bin, int orig_bit_len, int bit_len)
+ {
+-	int i, str_len = strlen(str), str_byte_len = (bit_len + 3) >> 2, loop_cnt;
+-	uint8_t ch, need_write = 1;
++	int i, str_len = strlen(str), str_hbyte_len = (bit_len + 3) >> 2;
++	uint8_t ch;
+ 
+ 	if (ERROR_OK != svf_adjust_array_length(bin, orig_bit_len, bit_len))
+ 	{
+@@ -664,75 +664,54 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t **bin, int orig_bit_l
+ 		return ERROR_FAIL;
+ 	}
+ 
+-	if (str_byte_len > str_len)
++	for (i = 0; i < str_hbyte_len; i++)
+ 	{
+-		loop_cnt = str_byte_len;
+-	}
+-	else
+-	{
+-		loop_cnt = str_len;
+-	}
+-
+-	for (i = 0; i < loop_cnt; i++)
+-	{
+-		if (i < str_len)
++		ch = 0;
++		while (str_len > 0)
+ 		{
+-			ch = str[str_len - i - 1];
+-			if ((ch >= '0') && (ch <= '9'))
+-			{
+-				ch = ch - '0';
+-			}
+-			else if ((ch >= 'A') && (ch <= 'F'))
+-			{
+-				ch = ch - 'A' + 10;
+-			}
+-			else
++			ch = str[--str_len];
++
++			if (!isblank(ch))
+ 			{
+-				LOG_ERROR("invalid hex string");
+-				return ERROR_FAIL;
++				if ((ch >= '0') && (ch <= '9'))
++				{
++					ch = ch - '0';
++					break;
++				}
++				else if ((ch >= 'A') && (ch <= 'F'))
++				{
++					ch = ch - 'A' + 10;
++					break;
++				}
++				else
++				{
++					LOG_ERROR("invalid hex string");
++					return ERROR_FAIL;
++				}
+ 			}
+-		}
+-		else
+-		{
++
+ 			ch = 0;
+ 		}
+ 
+-		// check valid
+-		if (i >= str_byte_len)
++		// write bin
++		if (i % 2)
+ 		{
+-			// all data written, other data should be all '0's and needn't to be written
+-			need_write = 0;
+-			if (ch != 0)
+-			{
+-				LOG_ERROR("value execede length");
+-				return ERROR_FAIL;
+-			}
++			// MSB
++			(*bin)[i / 2] |= ch << 4;
+ 		}
+-		else if (i == (str_byte_len - 1))
++		else
+ 		{
+-			// last data byte, written if valid
+-			if ((ch & ~((1 << (bit_len - 4 * i)) - 1)) != 0)
+-			{
+-				LOG_ERROR("value execede length");
+-				return ERROR_FAIL;
+-			}
++			// LSB
++			(*bin)[i / 2] = 0;
++			(*bin)[i / 2] |= ch;
+ 		}
++	}
+ 
+-		if (need_write)
+-		{
+-			// write bin
+-			if (i % 2)
+-			{
+-				// MSB
+-				(*bin)[i / 2] |= ch << 4;
+-			}
+-			else
+-			{
+-				// LSB
+-				(*bin)[i / 2] = 0;
+-				(*bin)[i / 2] |= ch;
+-			}
+-		}
++	// check valid
++	if (str_len > 0 || (ch & ~((1 << (4 - (bit_len % 4))) - 1)) != 0)
++	{
++		LOG_ERROR("value execede length");
++		return ERROR_FAIL;
+ 	}
+ 
+ 	return ERROR_OK;
+-- 
+1.6.4
+
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/openocd/openocd.spec?r1=1.3&r2=1.4&f=u



More information about the pld-cvs-commit mailing list