annotate Bootloader/flash.c @ 308:ab4515606277

Fix whitespace Use a consistent standard - Tabs in front for indenting, spaces after for anything else. This way everything stays nice and lined up while also letting users change there prefered indent level. Most of the new files from Haata where already in this format.
author Rowan Decker <Smasher816@gmail.com>
date Sun, 08 Mar 2015 18:40:01 -0700
parents 596d8e300a37
children f4d4cad283c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1 /* Copyright (c) 2011,2012 Simon Schubert <2@0x2c.org>.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
2 * Modifications by Jacob Alexander 2014 <haata@kiibohd.com>
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
3 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
4 * This program is free software: you can redistribute it and/or modify
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
6 * the Free Software Foundation, either version 3 of the License, or
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 * (at your option) any later version.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
8 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
12 * GNU General Public License for more details.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
13 *
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16 */
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18 // ----- Local Includes -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 #include "mchck.h"
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
21
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24 // ----- Variables -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
25
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26 uint32_t flash_ALLOW_BRICKABLE_ADDRESSES;
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
27
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
28
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
29
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
30 // ----- Functions -----
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
31
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
32 /* This will have to live in SRAM. */
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
33 __attribute__((section(".ramtext.ftfl_submit_cmd"), long_call))
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
34 int ftfl_submit_cmd(void)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
35 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
36 FTFL.fstat.raw = ((struct FTFL_FSTAT_t){
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
37 .ccif = 1,
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
38 .rdcolerr = 1,
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
39 .accerr = 1,
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
40 .fpviol = 1
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
41 }).raw;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
42 struct FTFL_FSTAT_t stat;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
43 while (!(stat = FTFL.fstat).ccif)
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
44 /* NOTHING */; /* XXX maybe WFI? */
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
45 return (!!stat.mgstat0);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
46 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
47
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
48 int flash_prepare_flashing(void)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
49 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
50 /* switch to FlexRAM */
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
51 if (!FTFL.fcnfg.ramrdy) {
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
52 FTFL.fccob.set_flexram.fcmd = FTFL_FCMD_SET_FLEXRAM;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
53 FTFL.fccob.set_flexram.flexram_function = FTFL_FLEXRAM_RAM;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
54 return (ftfl_submit_cmd());
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
55 }
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
56 return (0);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
57 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
58
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
59 int flash_erase_sector(uintptr_t addr)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
60 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
61 if (addr < (uintptr_t)&_app_rom &&
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
62 flash_ALLOW_BRICKABLE_ADDRESSES != 0x00023420)
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
63 return (-1);
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
64 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
65 FTFL.fccob.erase.addr = addr;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
66 return (ftfl_submit_cmd());
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
67 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
68
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
69 int flash_program_section(uintptr_t addr, size_t num_words)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
70 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
71 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
72 FTFL.fccob.program_section.addr = addr;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
73 FTFL.fccob.program_section.num_words = num_words;
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
74 return (ftfl_submit_cmd());
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
75 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
76
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
77 int flash_program_sector(uintptr_t addr, size_t len)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
78 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
79 return (len != FLASH_SECTOR_SIZE ||
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
80 (addr & (FLASH_SECTOR_SIZE - 1)) != 0 ||
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
81 flash_erase_sector(addr) ||
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
82 flash_program_section(addr, FLASH_SECTOR_SIZE/4));
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
83 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
84
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
85 void *flash_get_staging_area(uintptr_t addr, size_t len)
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
86 {
308
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
87 if ((addr & (FLASH_SECTOR_SIZE - 1)) != 0 ||
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
88 len != FLASH_SECTOR_SIZE)
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
89 return (NULL);
ab4515606277 Fix whitespace
Rowan Decker <Smasher816@gmail.com>
parents: 266
diff changeset
90 return (FlexRAM);
193
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
91 }
b091bb09c55f Adding McHCK DFU Bootloader
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
92