1527701edSPalmer Dabbelt // SPDX-License-Identifier: GPL-2.0-only 2527701edSPalmer Dabbelt /* 3527701edSPalmer Dabbelt * A generic version of devmem_is_allowed. 4527701edSPalmer Dabbelt * 5527701edSPalmer Dabbelt * Based on arch/arm64/mm/mmap.c 6527701edSPalmer Dabbelt * 7527701edSPalmer Dabbelt * Copyright (C) 2020 Google, Inc. 8527701edSPalmer Dabbelt * Copyright (C) 2012 ARM Ltd. 9527701edSPalmer Dabbelt */ 10527701edSPalmer Dabbelt 11527701edSPalmer Dabbelt #include <linux/mm.h> 12527701edSPalmer Dabbelt #include <linux/ioport.h> 13*6b76ca2aSArnd Bergmann #include <linux/io.h> 14527701edSPalmer Dabbelt 15527701edSPalmer Dabbelt /* 16527701edSPalmer Dabbelt * devmem_is_allowed() checks to see if /dev/mem access to a certain address 17527701edSPalmer Dabbelt * is valid. The argument is a physical page number. We mimic x86 here by 18527701edSPalmer Dabbelt * disallowing access to system RAM as well as device-exclusive MMIO regions. 19527701edSPalmer Dabbelt * This effectively disable read()/write() on /dev/mem. 20527701edSPalmer Dabbelt */ devmem_is_allowed(unsigned long pfn)21527701edSPalmer Dabbeltint devmem_is_allowed(unsigned long pfn) 22527701edSPalmer Dabbelt { 23854f3264SLiang Wang if (iomem_is_exclusive(PFN_PHYS(pfn))) 24527701edSPalmer Dabbelt return 0; 25527701edSPalmer Dabbelt if (!page_is_ram(pfn)) 26527701edSPalmer Dabbelt return 1; 27527701edSPalmer Dabbelt return 0; 28527701edSPalmer Dabbelt } 29