I tested on Hikey960 Development Board using busybox devmem, there are some MMIO registers (GPU_ID, GPU_FEATURE, etc.) which are not writable from CPU side. I wonder how does hardware implement read-only/write-only permissions on this registers?
busybox devmem
GPU_ID
GPU_FEATURE
Config registers are physically read-only hardware, they are not programmable.
As they are memory mapped, read permission is controlled by CPU page tables.