From f486f86c6c1aff3248fb556541fe1a18ca456c46 Mon Sep 17 00:00:00 2001
From: ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Wed, 1 Jul 2009 10:15:53 +0000
Subject: [PATCH] - correct stm32 connectivity line programming as per latest
 manual

git-svn-id: svn://svn.berlios.de/openocd/trunk@2439 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/flash/stm32x.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/flash/stm32x.c b/src/flash/stm32x.c
index e9f121fc8..774b7d375 100644
--- a/src/flash/stm32x.c
+++ b/src/flash/stm32x.c
@@ -304,14 +304,15 @@ static int stm32x_protect_check(struct flash_bank_s *bank)
 
 	if (stm32x_info->ppage_size == 2)
 	{
-		/* high density flash */
+		/* high density flash/connectivity line protection */
 
 		set = 1;
 
 		if (protection & (1 << 31))
 			set = 0;
 
-		/* bit 31 controls sector 62 - 255 protection */
+		/* bit 31 controls sector 62 - 255 protection for high density
+		 * bit 31 controls sector 62 - 127 protection for connectivity line */
 		for (s = 62; s < bank->num_sectors; s++)
 		{
 			bank->sectors[s].is_protected = set;
@@ -333,7 +334,7 @@ static int stm32x_protect_check(struct flash_bank_s *bank)
 	}
 	else
 	{
-		/* medium density flash */
+		/* low/medium density flash protection */
 		for (i = 0; i < num_bits; i++)
 		{
 			set = 1;
@@ -776,10 +777,10 @@ static int stm32x_probe(struct flash_bank_s *bank)
 	}
 	else if ((device_id & 0x7ff) == 0x418)
 	{
-		/* connectivity line density - we have 1k pages
-		 * 4 pages for a protection area */
-		page_size = 1024;
-		stm32x_info->ppage_size = 4;
+		/* connectivity line density - we have 2k pages
+		 * 2 pages for a protection area */
+		page_size = 2048;
+		stm32x_info->ppage_size = 2;
 
 		/* check for early silicon */
 		if (num_pages == 0xffff)
@@ -921,6 +922,10 @@ static int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size)
 				snprintf(buf, buf_size, "A");
 				break;
 
+			case 0x1001:
+				snprintf(buf, buf_size, "Z");
+				break;
+
 			default:
 				snprintf(buf, buf_size, "unknown");
 				break;
-- 
GitLab