Skip to content
  • Dave Gerlach's avatar
    misc: sram: Introduce support code for protect-exec sram type · 728bbe75
    Dave Gerlach authored
    
    
    Some platforms, like many ARM SoCs, require the ability to run code from
    on-chip memory like SRAM for tasks like reconfiguring the SDRAM
    controller or entering low-power sleep modes. In order to do this we
    must be able to allocate memory that the code can be copied to but then
    change the mapping to be read-only and executable so that no memory is
    both writable and executable at the same time to avoid opening any
    unneccesary security holes.
    
    By using the existing "pool" partition type that the SRAM driver allows
    we can create a memory space that will already be exposed by the
    genalloc framework to allow for allocating memory but we must extend
    this to meet the executable requirements. By making use of various
    set_memory_* APIs we can change the attributes of pages to make them
    writable for code upload but then read-only and executable when we want
    to actually run code.  Because SRAM is a shared resource we need a
    centralized manager of these set memory calls. Because the SRAM driver
    itself is responsible for allocating the memory we can introduce a
    sram_copy_exec API for the driver that works like memcpy but also
    manages the page attributes and locking to allow multiple users of the
    same SRAM space to all copy their code over independent of other each
    before starting execution.
    
    It is maintained in a separate file from the core SRAM driver to allow
    it to be selectively built depending on whether or not a platform has
    the appropriate set_memory_* APIs. A future patch will integrate it with
    the core SRAM driver.
    
    Signed-off-by: default avatarDave Gerlach <d-gerlach@ti.com>
    Acked-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    728bbe75