Cannot initialize NRF_FICR_NS on nRF9160

I wish to access the device info registers from a non-secure application. It seems like the intended method of doing this is through the NRF_FICR_NS struct, which is populated during system initialization. However, it seems that this variable is never populated on the nrf9160.

I'm looking at the file modules/hal/nordic/nrfx/mdk/system_nrf9160.c

The function SystemInit(void)

line 121-123

#if !defined(NRF_SKIP_FICR_NS_COPY_TO_RAM)
SystemStoreFICRNS();
#endif

The SystemStoreFICRNS() function is what populates the NRF_FICR_NS variable. It is only called when NRF_SKIP_FICR_NS_COPY_TO_RAM is undefined. Makes sense. Now lets see where that is defined...

see the file zephyr/modules/hal_nordic/nrfx/CMakeLists.txt

line 47-48

zephyr_compile_definitions_ifdef(CONFIG_SOC_NRF9160
NRF_SKIP_FICR_NS_COPY_TO_RAM)

So the function is disabled on any build for the nRF9160? Why have the function call in the 9160's initialization call if it just gets skipped every time? Is there no way to access these registers from a secure application?

Related