Lines Matching +full:data +full:- +full:sheet

2  * Nordic Semiconductor nRF51 non-volatile memory
9 * See nRF51 reference manual and product sheet sections:
10 * + Non-Volatile Memory Controller (NVMC)
14 * Copyright 2018 Steffen Görtz <contrib@steffen-goertz.de>
17 * the COPYING file in the top-level directory.
26 #include "hw/qdev-properties.h"
175 assert(offset < sizeof(s->uicr_content)); in uicr_read()
176 return s->uicr_content[offset / 4]; in uicr_read()
184 assert(offset < sizeof(s->uicr_content)); in uicr_write()
185 s->uicr_content[offset / 4] = value; in uicr_write()
207 r = s->config; in io_read()
225 s->config = value & NRF51_NVMC_CONFIG_MASK; in io_write()
229 if (s->config & NRF51_NVMC_CONFIG_EEN) { in io_write()
230 /* Mask in-page sub address */ in io_write()
231 value &= ~(NRF51_PAGE_SIZE - 1); in io_write()
232 if (value <= (s->flash_size - NRF51_PAGE_SIZE)) { in io_write()
233 memset(s->storage + value, 0xFF, NRF51_PAGE_SIZE); in io_write()
234 memory_region_flush_rom_device(&s->flash, value, in io_write()
245 if (s->config & NRF51_NVMC_CONFIG_EEN) { in io_write()
246 memset(s->storage, 0xFF, s->flash_size); in io_write()
247 memory_region_flush_rom_device(&s->flash, 0, s->flash_size); in io_write()
248 memset(s->uicr_content, 0xFF, sizeof(s->uicr_content)); in io_write()
257 memset(s->uicr_content, 0xFF, sizeof(s->uicr_content)); in io_write()
290 if (s->config & NRF51_NVMC_CONFIG_WEN) { in flash_write()
293 assert(offset + size <= s->flash_size); in flash_write()
296 oldval = ldl_le_p(s->storage + offset); in flash_write()
298 stl_le_p(s->storage + offset, oldval); in flash_write()
300 memory_region_flush_rom_device(&s->flash, offset, size); in flash_write()
323 memory_region_init_io(&s->mmio, obj, &io_ops, s, "nrf51_soc.nvmc", in nrf51_nvm_init()
325 sysbus_init_mmio(sbd, &s->mmio); in nrf51_nvm_init()
327 memory_region_init_io(&s->ficr, obj, &ficr_ops, s, "nrf51_soc.ficr", in nrf51_nvm_init()
329 sysbus_init_mmio(sbd, &s->ficr); in nrf51_nvm_init()
331 memory_region_init_io(&s->uicr, obj, &uicr_ops, s, "nrf51_soc.uicr", in nrf51_nvm_init()
332 sizeof(s->uicr_content)); in nrf51_nvm_init()
333 sysbus_init_mmio(sbd, &s->uicr); in nrf51_nvm_init()
340 if (!memory_region_init_rom_device(&s->flash, OBJECT(dev), &flash_ops, s, in nrf51_nvm_realize()
341 "nrf51_soc.flash", s->flash_size, errp)) { in nrf51_nvm_realize()
345 s->storage = memory_region_get_ram_ptr(&s->flash); in nrf51_nvm_realize()
346 sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->flash); in nrf51_nvm_realize()
353 s->config = 0x00; in nrf51_nvm_reset()
354 memset(s->uicr_content, 0xFF, sizeof(s->uicr_content)); in nrf51_nvm_reset()
358 DEFINE_PROP_UINT32("flash-size", NRF51NVMState, flash_size, 0x40000),
373 static void nrf51_nvm_class_init(ObjectClass *klass, const void *data) in nrf51_nvm_class_init() argument
378 dc->vmsd = &vmstate_nvm; in nrf51_nvm_class_init()
379 dc->realize = nrf51_nvm_realize; in nrf51_nvm_class_init()