Skip to content
Snippets Groups Projects
Select Git revision
  • b51c05a331ff46d2b29e4007df938ec2dbbadfde
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

at91sam9g35.dtsi

Blame
  • memremap.c 12.26 KiB
    /*
     * Copyright(c) 2015 Intel Corporation. All rights reserved.
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of version 2 of the GNU General Public License as
     * published by the Free Software Foundation.
     *
     * This program is distributed in the hope that it will be useful, but
     * WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * General Public License for more details.
     */
    #include <linux/radix-tree.h>
    #include <linux/memremap.h>
    #include <linux/device.h>
    #include <linux/types.h>
    #include <linux/pfn_t.h>
    #include <linux/io.h>
    #include <linux/mm.h>
    #include <linux/memory_hotplug.h>
    
    #ifndef ioremap_cache
    /* temporary while we convert existing ioremap_cache users to memremap */
    __weak void __iomem *ioremap_cache(resource_size_t offset, unsigned long size)
    {
    	return ioremap(offset, size);
    }
    #endif
    
    #ifndef arch_memremap_wb
    static void *arch_memremap_wb(resource_size_t offset, unsigned long size)
    {
    	return (__force void *)ioremap_cache(offset, size);
    }
    #endif
    
    static void *try_ram_remap(resource_size_t offset, size_t size)
    {
    	unsigned long pfn = PHYS_PFN(offset);
    
    	/* In the simple case just return the existing linear address */
    	if (pfn_valid(pfn) && !PageHighMem(pfn_to_page(pfn)))
    		return __va(offset);
    	return NULL; /* fallback to arch_memremap_wb */
    }
    
    /**
     * memremap() - remap an iomem_resource as cacheable memory
     * @offset: iomem resource start address
     * @size: size of remap
     * @flags: any of MEMREMAP_WB, MEMREMAP_WT and MEMREMAP_WC
     *
     * memremap() is "ioremap" for cases where it is known that the resource
     * being mapped does not have i/o side effects and the __iomem
     * annotation is not applicable. In the case of multiple flags, the different
     * mapping types will be attempted in the order listed below until one of
     * them succeeds.
     *
     * MEMREMAP_WB - matches the default mapping for System RAM on
     * the architecture.  This is usually a read-allocate write-back cache.
     * Morever, if MEMREMAP_WB is specified and the requested remap region is RAM
     * memremap() will bypass establishing a new mapping and instead return
     * a pointer into the direct map.
     *
     * MEMREMAP_WT - establish a mapping whereby writes either bypass the
     * cache or are written through to memory and never exist in a
     * cache-dirty state with respect to program visibility.  Attempts to
     * map System RAM with this mapping type will fail.
     *
     * MEMREMAP_WC - establish a writecombine mapping, whereby writes may