Mercurial > louis > kiibohd-controller
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 |
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 | 36 FTFL.fstat.raw = ((struct FTFL_FSTAT_t){ |
37 .ccif = 1, | |
38 .rdcolerr = 1, | |
39 .accerr = 1, | |
40 .fpviol = 1 | |
41 }).raw; | |
42 struct FTFL_FSTAT_t stat; | |
43 while (!(stat = FTFL.fstat).ccif) | |
44 /* NOTHING */; /* XXX maybe WFI? */ | |
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 | 50 /* switch to FlexRAM */ |
51 if (!FTFL.fcnfg.ramrdy) { | |
52 FTFL.fccob.set_flexram.fcmd = FTFL_FCMD_SET_FLEXRAM; | |
53 FTFL.fccob.set_flexram.flexram_function = FTFL_FLEXRAM_RAM; | |
54 return (ftfl_submit_cmd()); | |
55 } | |
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 | 61 if (addr < (uintptr_t)&_app_rom && |
62 flash_ALLOW_BRICKABLE_ADDRESSES != 0x00023420) | |
63 return (-1); | |
64 FTFL.fccob.erase.fcmd = FTFL_FCMD_ERASE_SECTOR; | |
65 FTFL.fccob.erase.addr = addr; | |
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 | 71 FTFL.fccob.program_section.fcmd = FTFL_FCMD_PROGRAM_SECTION; |
72 FTFL.fccob.program_section.addr = addr; | |
73 FTFL.fccob.program_section.num_words = num_words; | |
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 | 79 return (len != FLASH_SECTOR_SIZE || |
80 (addr & (FLASH_SECTOR_SIZE - 1)) != 0 || | |
81 flash_erase_sector(addr) || | |
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 | 87 if ((addr & (FLASH_SECTOR_SIZE - 1)) != 0 || |
88 len != FLASH_SECTOR_SIZE) | |
89 return (NULL); | |
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 |