Nicolas Pitre nico at cam.org The ECC data is automatically computed and written...
[fw/openocd] / src / flash / pic32mx.h
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   Copyright (C) 2008 by Spencer Oliver                                  *
6  *   spen@spen-soft.co.uk                                                  *
7  *                                                                         *
8  *   Copyright (C) 2008 by John McCarthy                                   *
9  *   jgmcc@magma.ca                                                        *
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  *   This program is distributed in the hope that it will be useful,       *
17  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
19  *   GNU General Public License for more details.                          *
20  *                                                                         *
21  *   You should have received a copy of the GNU General Public License     *
22  *   along with this program; if not, write to the                         *
23  *   Free Software Foundation, Inc.,                                       *
24  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
25  ***************************************************************************/
26 #ifndef PIC32MX_H
27 #define PIC32MX_H
28
29 #include "flash.h"
30 #include "target.h"
31
32 typedef struct pic32mx_flash_bank_s
33 {
34         working_area_t *write_algorithm;
35         int devid;
36         int ppage_size;
37         int probed;
38 } pic32mx_flash_bank_t;
39
40 #define PIC32MX_MANUF_ID        0x029
41
42 /* pic32mx memory locations */
43
44 #define PIC32MX_KUSEG_PGM_FLASH         0x7D000000
45 #define PIC32MX_KUSEG_RAM                       0x7F000000
46
47 #define PIC32MX_KSEG0_RAM                       0x80000000
48 #define PIC32MX_KSEG0_PGM_FLASH         0x9D000000
49 #define PIC32MX_KSEG0_BOOT_FLASH        0x9FC00000
50
51 #define PIC32MX_KSEG1_RAM                       0xA0000000
52 #define PIC32MX_KSEG1_PGM_FLASH         0xBD000000
53 #define PIC32MX_KSEG1_PERIPHERAL        0xBF800000
54 #define PIC32MX_KSEG1_BOOT_FLASH        0xBFC00000
55
56 #define PIC32MX_PHYS_RAM                        0x00000000
57 #define PIC32MX_PHYS_PGM_FLASH          0x1D000000
58 #define PIC32MX_PHYS_PERIPHERALS        0x1F800000
59 #define PIC32MX_PHYS_BOOT_FLASH         0x1FC00000
60
61 /*
62  * Translate Virtual and Physical addresses.
63  * Note: These macros only work for KSEG0/KSEG1 addresses.
64  */
65 #define KS1Virt2Phys(vaddr)                     ((vaddr)-0xA0000000)
66 #define Phys2KS1Virt(paddr)                     ((paddr)+0xA0000000)
67 #define KS0Virt2Phys(vaddr)                     ((vaddr)-0x80000000)
68 #define Phys2KS0Virt(paddr)                     ((paddr)+0x80000000)
69
70 /* pic32mx configuration register locations */
71
72 #define PIC32MX_DEVCFG0         0xBFC02FFC
73 #define PIC32MX_DEVCFG1         0xBFC02FF8
74 #define PIC32MX_DEVCFG2         0xBFC02FF4
75 #define PIC32MX_DEVCFG3         0XBFC02FF0
76 #define PIC32MX_DEVID           0xBF80F220
77
78 /* pic32mx flash controller register locations */
79
80 #define PIC32MX_NVMCON          0xBF80F400
81 #define PIC32MX_NVMCONCLR       0xBF80F404
82 #define PIC32MX_NVMCONSET       0xBF80F408
83 #define PIC32MX_NVMCONINV       0xBF80F40C
84 #define NVMCON_NVMWR            (1<<15)
85 #define NVMCON_NVMWREN          (1<<14)
86 #define NVMCON_NVMERR           (1<<13)
87 #define NVMCON_LVDERR           (1<<12)
88 #define NVMCON_LVDSTAT          (1<<11)
89 #define NVMCON_OP_PFM_ERASE             0x5
90 #define NVMCON_OP_PAGE_ERASE    0x4
91 #define NVMCON_OP_ROW_PROG              0x3
92 #define NVMCON_OP_WORD_PROG             0x1
93 #define NVMCON_OP_NOP                   0x0
94
95 #define PIC32MX_NVMKEY          0xBF80F410
96 #define PIC32MX_NVMADDR         0xBF80F420
97 #define PIC32MX_NVMADDRCLR      0xBF80F424
98 #define PIC32MX_NVMADDRSET      0xBF80F428
99 #define PIC32MX_NVMADDRINV      0xBF80F42C
100 #define PIC32MX_NVMDATA         0xBF80F430
101 #define PIC32MX_NVMSRCADDR      0xBF80F440
102
103 /* flash unlock keys */
104
105 #define NVMKEY1                 0xAA996655
106 #define NVMKEY2                 0x556699AA
107
108 typedef struct pic32mx_mem_layout_s {
109         u32 sector_start;
110         u32 sector_size;
111 } pic32mx_mem_layout_t;
112
113 #endif /* PIC32MX_H */
114