title: Restriction on ARM linux phys_to_virt/virt_to_phys runtime patching
body: <p>I understand ARM linux supports runtime patching of phys_to_virt and virt_to_phys. 
  <a href="http://lists.infradead.org/pipermail/linux-arm-kernel/2011-January/037089.html" rel="nofollow" title="ARM linux P2V feature">http://lists.infradead.org/pipermail/linux-arm-kernel/2011-January/037089.html</a></p>
  
  <p>This enables the kernel image to support different physical base address without requiring recompilation. </p>
  
  <p>I have a 2GB board with physical memory from 0x8000_0000 to 0xFFFF_FFFF. 
  I see the following results when using the board:</p>
  
  <p>Kernel Load Physical Address: 0xC0008000 - OK (Kernel Boots up)</p>
  
  <p>Kernel Load Physical Address: 0xC8008000 - OK (Kernel Boots up)</p>
  
  <p>Kernel Load Physical Address: 0xD0008000 - NOT OK (Hang in starting kernel)</p>
  
  <p>Kernel Load Physical Address: 0xE0008000 - NOT OK (Hang in starting kernel)</p>
  
  <p>My linux kernel cmd line bootargs mem=512M.</p>
  
  <p>I would like to understand the restriction on valid load address of the kernel.
  This is documented at :  <a href="http://www.arm.linux.org.uk/developer/memory.txt" rel="nofollow" title="ARM linux Memory">www.arm.linux.org.uk/developer/memory.txt</a></p>
  
  <p>I am unable to copy-paste it here as the formatting gets messed up.</p>
  
  <p>Document mentions not following the restriction will result in a kernel that does not boot which is what I am facing but  I am unable to understand the restriction on kernel start address.</p>
  
  <p>I dont use highmem. </p>
  
  <p>Is the restriction Linux start address + lowmem_size should be &lt;= ff000000 - VMALLOC_SIZE.</p>