This is an automated email from Gerrit.
psocprogrammer ([email protected]) just uploaded a new patch set to
Gerrit, which you can find at http://openocd.zylin.com/4061
-- gerrit
commit d21979674b73b088593868bc0a42862b449a30c2
Author: Yuriy Vynnychek <[email protected]>
Date: Wed Mar 15 10:21:26 2017 +0200
Added support for new PSoC 6 device (License comments).
Change-Id: I518d5910e3cd5e62e629e8102c2f8c9b232519e5
Signed-off-by: Yuriy Vynnychek <[email protected]>
diff --git a/src/flash/nor/psoc6.c b/src/flash/nor/psoc6.c
index e9bd999..54b5bcc 100755
--- a/src/flash/nor/psoc6.c
+++ b/src/flash/nor/psoc6.c
@@ -1,21 +1,20 @@
-/***************************************************************************
-� (2016), Cypress Semiconductor Corporation or a subsidiary of Cypress
Semiconductor Corporation. All rights reserved.
-This software, including source code, documentation and related materials
(�Software�), is owned by Cypress Semiconductor
-Corporation or one of its subsidiaries (�Cypress�) and is protected by and
subject to worldwide patent protection
-(United States and foreign), United States copyright laws and international
treaty provisions. Therefore, you may use this
-Software only as provided in the license agreement accompanying the software
package from which you obtained this Software (�EULA�).
-If no EULA applies, Cypress hereby grants you a personal, non-exclusive,
non-transferable license to copy, modify, and
-compile the Software source code solely for use in connection with Cypress�s
integrated circuit products. Any reproduction,
-modification, translation, compilation, or representation of this Software
except as specified above is prohibited without the
-express written permission of Cypress.
-Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-NONINFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. Cypress reserves the right to make
-changes to the Software without notice. Cypress does not assume any liability
arising out of the application or use of the
-Software or any product or circuit described in the Software. Cypress does not
authorize its products for use in any products
-where a malfunction or failure of the Cypress product may reasonably be
expected to result in significant property damage,
-injury or death (�High Risk Product�). By including Cypress�s product in a
High Risk Product, the manufacturer of such system
-or application assumes all risk of such use and in doing so agrees to
indemnify Cypress against all liability.
- ***************************************************************************/
+/*******************************************************************************
+ * Copyright (C) 2017 by Yuriy Vynnychek (PSoC 6 support derived from PSoC
4)*
+ * Yuriy.Vynnychek.cypress.com
*
+ *
*
+ * This program is free software; you can redistribute it and/or modify
*
+ * it under the terms of the GNU General Public License as published by
*
+ * the Free Software Foundation; either version 2 of the License, or
*
+ * (at your option) any later version.
*
+ *
*
+ * This program is distributed in the hope that it will be useful,
*
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
*
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*
+ * GNU General Public License for more details.
*
+ *
*
+ * You should have received a copy of the GNU General Public License
*
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
+
******************************************************************************/
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -29,7 +28,7 @@ or application assumes all risk of such use and in doing so
agrees to indemnify
/* device documets:
PSoC(R) 6: PSoC CY8C6XXX Family Datasheet
- Document Number:
+ Document Number:
PSoC CY8C6XXX Family PSoC(R) 6 Architecture TRM
Document No. 002-15785 Rev. ** xx/xx/2016
@@ -44,17 +43,17 @@ or application assumes all risk of such use and in doing so
agrees to indemnify
*--------------------------------------------------------------------------------------------
*/
/* 256kB System RAM */
-#define MEM_BASE_SRAM0
0x08000000u
+#define MEM_BASE_SRAM0
0x08000000u
/* 1024kB FLASH Main Region */
-#define MEM_BASE_FLASH
0x10000000u
+#define MEM_BASE_FLASH
0x10000000u
/* Peripheral Interconnect */
#define MEM_BASE_MMIO
0x40000000u
/* 0x40200000: Core platform peripherals */
-#define MEM_BASE_MMIO2
(MEM_BASE_MMIO + 0x200000u)
+#define MEM_BASE_MMIO2
(MEM_BASE_MMIO + 0x200000u)
/* 0x40230000: Base address for IPC structs */
-#define MEM_BASE_IPC
(MEM_BASE_MMIO2 + 0x30000u)
+#define MEM_BASE_IPC
(MEM_BASE_MMIO2 + 0x30000u)
/* 0x40231000: Base address for IPC_INTR struct */
-#define MEM_BASE_IPCINTR
(MEM_BASE_MMIO2 + 0x31000u)
+#define MEM_BASE_IPCINTR
(MEM_BASE_MMIO2 + 0x31000u)
#define PSOC6_CHIP_PROT_UNKNOWN 0x0u
#define PSOC6_CHIP_PROT_VIRGIN 0x1u
@@ -66,82 +65,82 @@ or application assumes all risk of such use and in doing so
agrees to indemnify
#define IPC_INTR_STRUCT_SIZE 0x20u
#define IPC_STRUCT_SIZE
0x20u
/* 0x40230000: CM0+ IPC_STRUCT absolute address */
-#define IPC_STRUCT0
MEM_BASE_IPC
-/* 0x40230020: CM4 IPC_STRUCT absolute address */
-#define IPC_STRUCT1
(IPC_STRUCT0 + IPC_STRUCT_SIZE)
+#define IPC_STRUCT0
MEM_BASE_IPC
+/* 0x40230020: CM4 IPC_STRUCT absolute address */
+#define IPC_STRUCT1
(IPC_STRUCT0 + IPC_STRUCT_SIZE)
/* 0x40230040: DAP IPC_STRUCT absolute address */
-#define IPC_STRUCT2
(IPC_STRUCT1 + IPC_STRUCT_SIZE)
+#define IPC_STRUCT2
(IPC_STRUCT1 + IPC_STRUCT_SIZE)
/* 0x40231000: IPC_INTR struct absolute address */
-#define IPC_INTR_STRUCT
MEM_BASE_IPCINTR
+#define IPC_INTR_STRUCT
MEM_BASE_IPCINTR
#define FLASH_SECTOR_LENGTH 256u
#define PSOC6_SPCIF_GEOMETRY
(MEM_BASE_MMIO2+0x5f00cu)
/* Registers offsets in IPC_STRUCT[x]
* This register is used to acquire a lock. This register is NOT SW writable.*/
-#define IPC_STRUCT_ACQUIRE_OFFSET 0x00u
+#define IPC_STRUCT_ACQUIRE_OFFSET 0x00u
/* This field allows for the generation of notification events to the IPC
interrupt structures. */
-#define IPC_STRUCT_NOTIFY_OFFSET 0x08u
+#define IPC_STRUCT_NOTIFY_OFFSET 0x08u
/* This field holds a 32-bit data element that is associated with the IPC
structure. */
#define IPC_STRUCT_DATA_OFFSET 0x0Cu
-/* IPC lock status */
-#define IPC_STRUCT_LOCK_STATUS_OFFSET 0x10u
+/* IPC lock status */
+#define IPC_STRUCT_LOCK_STATUS_OFFSET 0x10u
/* Registers offsets in IPC_INTR_STRUCT
* IPC interrupt mask */
#define IPC_INTR_STRUCT_INTR_IPC_MASK_OFFSET 0x08u
-/* Specifies if the lock is successfully acquired or not: '0': Not
successfully acquired, '1': Successfully acquired.*/
+/* Specifies if the lock is successfully acquired or not: '0': Not
successfully acquired, '1': Successfully acquired.*/
#define IPC_STRUCT_ACQUIRE_SUCCESS_MSK 0x80000000u
/* Specifies if the lock is acquired. */
-#define IPC_STRUCT_LOCK_STATUS_ACQUIRED_MSK 0x80000000u
+#define IPC_STRUCT_LOCK_STATUS_ACQUIRED_MSK 0x80000000u
/* Misc
* Timeout attempts of IPC_STRUCT acuire*/
#define IPC_STRUCT_ACQUIRE_TIMEOUT_ATTEMPTS 250u
/* Timeout attempts of IPC_STRUCT data */
-#define IPC_STRUCT_DATA_TIMEOUT_ATTEMPTS 250u
+#define IPC_STRUCT_DATA_TIMEOUT_ATTEMPTS 250u
/* 0x08001000: Address of SRAM where the API�s parameters are stored by SW. */
-#define SRAM_SCRATCH_ADDR
(MEM_BASE_SRAM0 + 0x00001000u)
+#define SRAM_SCRATCH_ADDR
(MEM_BASE_SRAM0 + 0x00001000u)
#define ROW_SIZE
512u
/* Timemout 10 ms */
-#define DELAY_10_MS
10000u
+#define DELAY_10_MS
10000u
/*--------------------------------------------------------------------------------------------
*SROM APIs
*--------------------------------------------------------------------------------------------
*SROM APIs masks
*[0]: 1 - arguments are passed in IPC.DATA. 0 - arguments are passed in SRAM*/
-#define MXS40_SROMAPI_DATA_LOCATION_MSK 0x00000001u
+#define MXS40_SROMAPI_DATA_LOCATION_MSK 0x00000001u
/* Status Code: 4 bits [31:28] of the data register */
-#define MXS40_SROMAPI_STATUS_MSK 0xF0000000u
+#define MXS40_SROMAPI_STATUS_MSK 0xF0000000u
/* Status Code = 0xA */
-#define MXS40_SROMAPI_STAT_SUCCESS 0xA0000000u
+#define MXS40_SROMAPI_STAT_SUCCESS 0xA0000000u
/* Sys calls IDs (SROM API Op code)
* [31:24]: Opcode = 0x00; [0]: 1 - arguments are passed in IPC.DATA*/
-#define MXS40_SROMAPI_SILID_CODE 0x00000001u
+#define MXS40_SROMAPI_SILID_CODE 0x00000001u
/* [15:8]: ID type */
-#define MXS40_SROMAPI_SILID_TYPE_MSK 0x0000FF00u
+#define MXS40_SROMAPI_SILID_TYPE_MSK 0x0000FF00u
#define MXS40_SROMAPI_SILID_TYPE_ROL 0x08u
/* [15:8]: Family Id Hi */
-#define MXS40_SROMAPI_SILID_FAMID_HI_MSK 0x0000FF00u
+#define MXS40_SROMAPI_SILID_FAMID_HI_MSK 0x0000FF00u
#define MXS40_SROMAPI_SILID_FAMID_HI_ROR 0x08u
/* [7:0]: Family Id Lo */
#define MXS40_SROMAPI_SILID_FAMID_LO_MSK 0x000000FFu
#define MXS40_SROMAPI_SILID_FAMID_LO_ROR 0u
/* [19:16]: Protection state */
-#define MXS40_SROMAPI_SILID_PROT_MSK 0x000F0000u
+#define MXS40_SROMAPI_SILID_PROT_MSK 0x000F0000u
#define MXS40_SROMAPI_SILID_PROT_ROR 0x10u
/* [15:8]: Silicon Id Hi */
-#define MXS40_SROMAPI_SILID_SILID_HI_MSK 0x0000FF00u
+#define MXS40_SROMAPI_SILID_SILID_HI_MSK 0x0000FF00u
#define MXS40_SROMAPI_SILID_SILID_HI_ROR 0x08u
/* [15:8]: Silicon Id Lo */
-#define MXS40_SROMAPI_SILID_SILID_LO_MSK 0x000000FFu
+#define MXS40_SROMAPI_SILID_SILID_LO_MSK 0x000000FFu
#define MXS40_SROMAPI_SILID_SILID_LO_ROR 0x00u
/* [31:24]: Opcode = 0x06; [0]: 0 - arguments are passed in SRAM */
-#define MXS40_SROMAPI_PROGRAMROW_CODE 0x06000100u
+#define MXS40_SROMAPI_PROGRAMROW_CODE 0x06000100u
/* [31:24]: Opcode = 0x14; [0]: 0 - arguments are passed in SRAM */
-#define MXS40_SROMAPI_ERASESECTOR_CODE 0x14000100u
+#define MXS40_SROMAPI_ERASESECTOR_CODE 0x14000100u
/* [31:24]: Opcode = 0x1C; [0]: 0 - arguments are passed in SRAM */
#define MXS40_SROMAPI_ERASEROW_CODE 0x1C000100u
#define IPC_ID
2u
@@ -173,11 +172,43 @@ struct Psoc6ChipDetails {
* flashSizeInKb is not necessary as it can be decoded from SPCIF_GEOMETRY*/
const struct Psoc6ChipDetails psoc6Devices[] = {
/* PSoC 6 BLE II */
- { 0x6666, "CY8C6x6", .flashSizeInKb = 512 },
- { 0x6666, "CY8C6x7", .flashSizeInKb = 1024 },
+ { 0xE2071100, "CY8C616FMI-BL603", .flashSizeInKb = 512 },
+ { 0xE2081100, "CY8C616FMI-BL673", .flashSizeInKb = 512 },
+ { 0xE2091100, "CY8C616LQI-BL601", .flashSizeInKb = 512 },
+ { 0xE20A1100, "CY8C616LQI-BL671", .flashSizeInKb = 512 },
+ { 0xE20B1100, "CY8C617FMI-BL603", .flashSizeInKb = 1024 },
+ { 0xE20C1100, "CY8C617FMI-BLD73", .flashSizeInKb = 1024 },
+ { 0xE20D1100, "CY8C626FMI-BL603", .flashSizeInKb = 512 },
+ { 0xE20E1100, "CY8C626BZI-BL604", .flashSizeInKb = 512 },
+ { 0xE20F1100, "CY8C626BZI-BL674", .flashSizeInKb = 512 },
+ { 0xE2111100, "CY8C627BZI-BL604", .flashSizeInKb = 1024 },
+ { 0xE2121100, "CY8C627FMI-BLD73", .flashSizeInKb = 1024 },
+ { 0xE2131100, "CY8C627BZI-BLD74", .flashSizeInKb = 1024 },
+ { 0xE2141100, "CY8C636BZI-BL604", .flashSizeInKb = 512 },
+ { 0xE2151100, "CY8C636BZI-BL674", .flashSizeInKb = 512 },
+ { 0xE2161100, "CY8C636FMI-BL603", .flashSizeInKb = 512 },
+ { 0xE2171100, "CY8C636FMI-BL673", .flashSizeInKb = 512 },
+ { 0xE2181100, "CY8C636LQI-BL601", .flashSizeInKb = 512 },
+ { 0xE2191100, "CY8C636LQI-BL671", .flashSizeInKb = 512 },
+ { 0xE21A1100, "CY8C637BZI-BLD04", .flashSizeInKb = 1024 },
+ { 0xE2011100, "CY8C637BZI-BLD74", .flashSizeInKb = 1024 },
+ { 0xE21C1100, "CY8C637FMI-BLD03", .flashSizeInKb = 1024 },
+ { 0xE2021100, "CY8C637FMI-BLD73", .flashSizeInKb = 1024 },
+ { 0xE21E1100, "CY8C637LQI-BLD01", .flashSizeInKb = 1024 },
+ { 0xE2031100, "CY8C637LQI-BLD71", .flashSizeInKb = 1024 },
+ { 0xE2041100, "CY8C68237FM-BLE", .flashSizeInKb = 1024 },
+ { 0xE2051100, "CY8C68237BZ-BLE", .flashSizeInKb = 1024 },
- /* PSoC 6 BLE II - PSVP part number*/
- { 0xe2000100, "CY8C622PSVP", .flashSizeInKb = 1024 },
+ /* PSoC 6 M */
+ { 0xE2001100, "CY8C637BZI-MD76", .flashSizeInKb = 1024 },
+ { 0xE2201100, "CY8C616BZI-M606", .flashSizeInKb = 512 },
+ { 0xE2211100, "CY8C616BZI-M676", .flashSizeInKb = 512 },
+ { 0xE2221100, "CY8C617BZI-MD76", .flashSizeInKb = 1024 },
+ { 0xE2231100, "CY8C626BZI-M606", .flashSizeInKb = 512 },
+ { 0xE2241100, "CY8C627BZI-MD76", .flashSizeInKb = 1024 },
+ { 0xE2251100, "CY8C636BZI-MD06", .flashSizeInKb = 512 },
+ { 0xE2261100, "CY8C636BZI-MD76", .flashSizeInKb = 512 },
+ { 0xE2271100, "CY8C637BZI-MD06", .flashSizeInKb = 1024 },
};
struct psoc6FlashBank {
@@ -196,8 +227,7 @@ static const struct Psoc6ChipDetails
*psoc6_details_by_id(uint32_t siliconId)
uint16_t i;
uint16_t id = siliconId >> LENGHT_SILICON_ID; /* ignore die revision */
for (i = 0; i < sizeof(psoc6Devices)/sizeof(psoc6Devices[0]); i++) {
- if (p->id == id)
- {
+ if (p->id == id) {
chipInfo = p;
}
p++;
@@ -239,12 +269,9 @@ FLASH_BANK_COMMAND_HANDLER(psoc6_flash_bank_command)
struct psoc6FlashBank *psoc6_info;
int hr = ERROR_OK;
- if (CMD_ARGC < 6)
- {
+ if (CMD_ARGC < 6){
hr = ERROR_COMMAND_SYNTAX_ERROR;
- }
- else
- {
+ }else{
psoc6_info = calloc(1, sizeof(struct psoc6FlashBank));
bank->driver_priv = psoc6_info;
psoc6_info->userBankSize = bank->size;
@@ -278,21 +305,16 @@ int Ipc_PollLockStatus(struct target *target, uint32_t
ipcId, bool lockExpected,
bool isExpectedStatus = false;
uint32_t readData;
uint32_t ipcAddr = IPC_STRUCT0 + IPC_STRUCT_SIZE * ipcId;
- do
- {
+ do {
/* Check lock status*/
hr = target_read_u32(target, ipcAddr + IPC_STRUCT_LOCK_STATUS_OFFSET,
&readData);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK) {
bool isLocked = (readData &
IPC_STRUCT_LOCK_STATUS_ACQUIRED_MSK) != 0;
isExpectedStatus = (lockExpected && isLocked) ||
(!lockExpected && !isLocked);
}
-
/* Check for timeout*/
- if (!isExpectedStatus)
- {
- if (attemptsElapsed > timeOutAttempts)
- {
+ if (!isExpectedStatus) {
+ if (attemptsElapsed > timeOutAttempts){
LOG_ERROR("Timeout polling lock status of
IPC_STRUCT");
hr = ERROR_FAIL;
break;
@@ -325,36 +347,30 @@ int Ipc_Acquire(struct target *target, char ipcId, int
timeOutAttempts)
bool isAcquired = false;
uint32_t readData;
uint32_t ipcAddr = IPC_STRUCT0 + IPC_STRUCT_SIZE * ipcId;
-
- do
- {
+
+ do{
/* Acquire the lock in DAP IPC struct (IPC_STRUCT.ACQUIRE).*/
hr = target_write_u32(target, ipcAddr + IPC_STRUCT_ACQUIRE_OFFSET,
IPC_STRUCT_ACQUIRE_SUCCESS_MSK);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Check if data is writed on first step */
hr = target_read_u32(target, ipcAddr +
IPC_STRUCT_ACQUIRE_OFFSET, &readData);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
isAcquired = (readData &
IPC_STRUCT_ACQUIRE_SUCCESS_MSK) != 0;
}
}
/* Check for timeout */
- if (!isAcquired)
- {
- if (attemptsElapsed > timeOutAttempts)
- {
+ if (!isAcquired){
+ if (attemptsElapsed > timeOutAttempts){
LOG_ERROR("Timeout acquiring IPC_STRUCT");
hr = ERROR_FAIL;
break;
}
usleep(DELAY_10_MS);
- attemptsElapsed++;
+ attemptsElapsed++;
}
} while (!isAcquired);
- if (isAcquired)
- {
+ if (isAcquired){
/* If IPC structure is acquired, the lock status should be set */
hr = Ipc_PollLockStatus(target, ipcId, true, timeOutAttempts);
}
@@ -380,19 +396,15 @@ int PollSromApiStatus(struct target *target, int address,
int timeOutAttempts, u
int attemptsElapsed = 0x00;
bool isAcquired = false;
- do
- {
+ do{
/* Poll data */
hr = target_read_u32(target, address, dataOut);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
isAcquired = (*dataOut & MXS40_SROMAPI_STATUS_MSK) ==
MXS40_SROMAPI_STAT_SUCCESS;
}
/* Check for timeout */
- if (!isAcquired)
- {
- if (attemptsElapsed > timeOutAttempts)
- {
+ if (!isAcquired){
+ if (attemptsElapsed > timeOutAttempts){
LOG_DEBUG("PollSromApiStatus - FAIL status - 0x%08x",
(unsigned int)*dataOut);
LOG_ERROR("Timeout waiting for SROM API execution
complete");
hr = ERROR_FAIL;
@@ -436,41 +448,30 @@ int CallSromApi(struct target *target, uint32_t
callIdAndParams, uint32_t *dataO
unsigned long IPC_STRUC = IPC_STRUCT2;
/* Acquire IPC_STRUCT[0] for CM0+ */
hr = Ipc_Acquire(target, IPC_ID, IPC_STRUCT_ACQUIRE_TIMEOUT_ATTEMPTS);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Write to IPC_STRUCT0.DATA - Sys call ID and Parameters
OR address in SRAM, where they are located */
- if (isDataInRam)
- {
+ if (isDataInRam){
LOG_DEBUG("CallSromApi: isDataInRam = true: address -> 0x%x,
data -> 0x%x", (unsigned int)(IPC_STRUC + IPC_STRUCT_DATA_OFFSET),
SRAM_SCRATCH_ADDR);
hr = target_write_u32(target, (unsigned int)(IPC_STRUC +
IPC_STRUCT_DATA_OFFSET), SRAM_SCRATCH_ADDR);
- }
- else
- {
+ }else{
LOG_DEBUG("CallSromApi: isDataInRam = false: address -> 0x%x,
data -> 0x%x", (unsigned int)(IPC_STRUC + IPC_STRUCT_DATA_OFFSET),
callIdAndParams);
hr = target_write_u32(target, (unsigned int)(IPC_STRUC +
IPC_STRUCT_DATA_OFFSET), callIdAndParams);
}
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Enable notification interrupt of IPC_INTR_STRUCT0(CM0+)
for IPC_STRUCT2 */
hr = target_write_u32(target, (IPC_INTR_STRUCT +
IPC_INTR_STRUCT_INTR_IPC_MASK_OFFSET), 1 << (16 + IPC_ID));
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Notify to IPC_INTR_STRUCT0. IPC_STRUCT2.MASK <-
Notify */
hr = target_write_u32(target, IPC_STRUC +
IPC_STRUCT_NOTIFY_OFFSET, 1);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Poll lock status */
hr = Ipc_PollLockStatus(target, IPC_ID,
false, IPC_STRUCT_ACQUIRE_TIMEOUT_ATTEMPTS);
- if (hr == ERROR_OK)
- {
+ if (hr == ERROR_OK){
/* Poll Data byte */
- if (isDataInRam)
- {
+ if (isDataInRam){
hr =
PollSromApiStatus(target, SRAM_SCRATCH_ADDR, IPC_STRUCT_DATA_TIMEOUT_ATTEMPTS,
dataOut);
- }
- else
- {
+ } else {
hr =
PollSromApiStatus(target, IPC_STRUC + IPC_STRUCT_DATA_OFFSET,
IPC_STRUCT_DATA_TIMEOUT_ATTEMPTS, dataOut);
}
}
@@ -624,7 +625,7 @@ static int Psoc6Probe(struct flash_bank *bank)
/* failed reading flash size or flash size invalid
(early silicon),
default to max target family */
- if (hr != ERROR_OK || flashSizeInKb == 0xffff ||
flashSizeInKb == 0)
+ if (hr != ERROR_OK || flashSizeInKb == 0xffff ||
flashSizeInKb == 0)
{
LOG_WARNING("PSoC 6 flash size failed, probe
inaccurate - assuming %" PRIu32 " k flash",
maxFlashSizeInKb);
@@ -633,7 +634,7 @@ static int Psoc6Probe(struct flash_bank *bank)
/* if the user sets the size manually then ignore the
probed value
this allows us to work around devices that have a
invalid flash size register value */
- if (psoc6Info->userBankSize)
+ if (psoc6Info->userBankSize)
{
LOG_INFO("ignoring flash probed value, using
configured bank size");
flashSizeInKb = psoc6Info->userBankSize / 1024;
@@ -663,7 +664,7 @@ static int Psoc6Probe(struct flash_bank *bank)
bank->default_padded_value = bank->erased_value = 0x00;
uint32_t i;
- for (i = 0; i < num_rows; i++)
+ for (i = 0; i < num_rows; i++)
{
bank->sectors[i].offset = i * rowSize;
bank->sectors[i].size = rowSize;
@@ -780,7 +781,7 @@ static int psoc6_mass_erase(struct flash_bank *bank)
LOG_INFO("sectors-> 0x%x", sectors);
- if (bank->target->state != TARGET_HALTED)
+ if (bank->target->state != TARGET_HALTED)
{
LOG_ERROR("Target not halted");
hr = ERROR_TARGET_NOT_HALTED;
@@ -816,7 +817,7 @@ static int Psoc6Erase(struct flash_bank *bank, int first,
int last)
if ((unsigned)(last - 1) !=
(psoc6Info->flashSizeInKb/FLASH_SECTOR_LENGTH))
{
- LOG_INFO("Count of sector is more then real present");
+ LOG_INFO("Count of sector is more then real present");
}else
{
hr = EraseSector(target, first, last - 1);
diff --git a/tcl/target/psoc6.cfg b/tcl/target/psoc6.cfg
index 60d9178..c61f1ea 100755
--- a/tcl/target/psoc6.cfg
+++ b/tcl/target/psoc6.cfg
@@ -1,12 +1,10 @@
source [find target/swj-dp.tcl]
-adapter_khz 3000
-
global CORE_ID
if { [info exists CORE] } {
set CORE_ID $CORE
} else {
- set CORE_ID M0
+ set CORE_ID M0
}
echo [format "CORE in %s" $CORE_ID]
@@ -47,7 +45,7 @@ target create $TARGET cortex_m -chain-position $TARGET
-ap-num 1
echo [format "CORE_ID in %s" $CORE_ID]
}
-$TARGET configure -work-area-phys 0x08002000 -work-area-size $_WORKAREASIZE
-work-area-backup 0
+$TARGET configure -work-area-phys 0x08002000 -work-area-size $_WORKAREASIZE
-work-area-backup 0
$TARGET configure -event gdb-attach {
echo [format "GDB_ATTACH_BEFORE_CPU in %s" [$TARGET curstate]]
@@ -102,7 +100,7 @@ proc ocd_process_reset_inner { MODE } {
$target arp_reset deassert 0
}
$target invoke-event reset-deassert-post
-
+
#Pass 2 - if needed "init"
if { 0 == [string compare init $MODE] } {
set err [catch "$target arp_waitstate halted 5000"]
@@ -110,10 +108,10 @@ proc ocd_process_reset_inner { MODE } {
if { $err == 0 } {
$target invoke-event reset-init
}
-
+
}
- $target invoke-event reset-end
-
+ $target invoke-event reset-end
+
# Pass 1 - Now wait for any halt (requested as part of reset
# assert/deassert) to happen. Ideally it takes effect without
# first executing any instructions.
@@ -123,28 +121,28 @@ proc ocd_process_reset_inner { MODE } {
set halted [mread32 0xE000EDF0]
echo [format "OCD_PROCESS_RESET_INNER FORMAT HALTED IN 0x%x" $halted]
if { 0x00000003 != [expr ($halted & 0x00000003)] } {
- return
+ return
}
echo "Load infinite for loop code in SRAM address"
mww 0x08001010 0xE7FEE7FE
-
+
echo "Load PC with address of infinite for loop SRAM address"
reg pc 0x08001011
-
+
echo "Load LR with address of infinite for loop SRAM address"
reg lr 0x08001010
-
+
echo "Load SP with top of SRAM address"
reg sp 0x0801C000
-
+
echo "Read xPSR register, set the thumb bit, and restore modified
value to xPSR register"
set xPSR [ocd_reg xPSR]
regsub {xPSR[^:]*: } $xPSR "" xPSR
set xPSR [expr ($xPSR | 0x01000000)]
echo [format "FORMAT xPSR in 0x%x" $xPSR]
reg xPSR $xPSR
-
+
resume
}
echo [format "APSEL - 2 in %s" [$target dap apsel]]
--
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel