Lines Matching +full:write +full:- +full:protect

3  * Reinhard Meyer, EMK Elektronik, reinhard.meyer@emk-elektronik.de
5 * SPDX-License-Identifier: GPL-2.0+
18 * Regions can be write/erase protected.
22 * The flash is presented to u-boot with each region being a sector,
24 * Each sector can be hardware protected (protect on/off).
28 * by u-Boot commands.
44 * do a read-modify-write for partially programmed pages
74 if ((readl(&dbu->cidr) & AT91_DBU_CID_ARCH_MASK) != AT91_DBU_CID_ARCH_9XExx) { in flash_init()
80 writel(AT91_EEFC_FCR_KEY | AT91_EEFC_FCR_FCMD_GETD, &eefc->fcr); in flash_init()
81 while ((readl(&eefc->fsr) & AT91_EEFC_FSR_FRDY) == 0) in flash_init()
83 id = readl(&eefc->frr); /* word 0 */ in flash_init()
84 size = readl(&eefc->frr); /* word 1 */ in flash_init()
85 pagesize = readl(&eefc->frr); /* word 2 */ in flash_init()
86 nplanes = readl(&eefc->frr); /* word 3 */ in flash_init()
87 planesize = readl(&eefc->frr); /* word 4 */ in flash_init()
91 tmp = readl(&eefc->frr); /* words 5..4+nplanes-1 */ in flash_init()
93 nlocks = readl(&eefc->frr); /* word 4+nplanes */ in flash_init()
108 tmp = readl(&eefc->frr); /* words 4+nplanes+1.. */ in flash_init()
110 flash_info[0].protect[i] = 0; in flash_init()
115 writel(AT91_EEFC_FCR_KEY | AT91_EEFC_FCR_FCMD_GLB, &eefc->fcr); in flash_init()
116 while ((readl(&eefc->fsr) & AT91_EEFC_FSR_FRDY) == 0) in flash_init()
120 tmp = readl(&eefc->frr); in flash_init()
121 flash_info[0].protect[i] = (tmp >> (i%32)) & 1; in flash_init()
124 flash_info[0].protect[i] = 1; in flash_init()
136 print_size(info->size, " in "); in flash_print_info()
137 printf("%d Sectors\n", info->sector_count); in flash_print_info()
140 for (i=0; i<info->sector_count; ++i) { in flash_print_info()
144 info->start[i], in flash_print_info()
145 info->protect[i] ? " (RO)" : " " in flash_print_info()
155 u32 pagenum = (info->start[sector]-ATMEL_BASE_FLASH)/pagesize; in flash_real_protect()
158 debug("protect sector=%ld prot=%d\n", sector, prot); in flash_real_protect()
171 (pagenum << AT91_EEFC_FCR_FARG_SHIFT), &eefc->fcr); in flash_real_protect()
174 (pagenum << AT91_EEFC_FCR_FARG_SHIFT), &eefc->fcr); in flash_real_protect()
176 while ((readl(&eefc->fsr) & AT91_EEFC_FSR_FRDY) == 0) in flash_real_protect()
178 /* now re-read the protection information for all regions */ in flash_real_protect()
179 writel(AT91_EEFC_FCR_KEY | AT91_EEFC_FCR_FCMD_GLB, &eefc->fcr); in flash_real_protect()
180 while ((readl(&eefc->fsr) & AT91_EEFC_FSR_FRDY) == 0) in flash_real_protect()
182 for (i=0; i<info->sector_count; i++) { in flash_real_protect()
184 tmp = readl(&eefc->frr); in flash_real_protect()
185 info->protect[i] = (tmp >> (i%32)) & 1; in flash_real_protect()
194 debug("erase+write page=%u\n", pagenum); in erase_write_page()
196 /* give erase and write page command */ in erase_write_page()
198 (pagenum << AT91_EEFC_FCR_FARG_SHIFT), &eefc->fcr); in erase_write_page()
199 while ((readl(&eefc->fsr) & AT91_EEFC_FSR_FRDY) == 0) in erase_write_page()
202 return readl(&eefc->fsr) in erase_write_page()
215 * 0 - OK
216 * 1 - write timeout
225 debug("write src=%08lx addr=%08lx cnt=%lx\n", in write_buff()
231 " write aborted\n", addr); in write_buff()
236 pagenum = (addr-ATMEL_BASE_FLASH)/pagesize; in write_buff()
242 while (i--) in write_buff()
244 /* write page */ in write_buff()
249 cnt -= pagesize; in write_buff()