1. 21 Jan, 2010 4 commits
    • Paul Mundt's avatar
      sh: Kill off the special uncached section and fixmap. · 2dc2f8e0
      Paul Mundt authored
      Now that cached_to_uncached works as advertized in 32-bit mode and we're
      never going to be able to map < 16MB anyways, there's no need for the
      special uncached section. Kill it off.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      2dc2f8e0
    • Paul Mundt's avatar
      sh: Track the uncached mapping size. · 3125ee72
      Paul Mundt authored
      This provides a variable for tracking the uncached mapping size, and uses
      it for pretty printing the uncached lowmem range. Beyond this, we'll also
      be building on top of this for figuring out from where the remainder of
      P2 becomes usable when constructing unrelated mappings.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      3125ee72
    • Paul Mundt's avatar
      sh: Rework P2 to only include kernel text. · 2023b843
      Paul Mundt authored
      This effectively neutralizes P2 by getting rid of P1 identity mapping
      for all available memory and instead only establishes a single unbuffered
      PMB entry (16MB -- the smallest available) that covers the kernel.
      
      As using segmentation for abusing caching attributes in drivers is no
      longer supported (and there are no drivers that can be enabled in 32-bit
      mode that do this), this provides us with all of the uncached access
      needs by the kernel itself.
      
      Drivers and their ilk need to specify their caching attributes when
      remapping through page tables, as usual.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      2023b843
    • Paul Mundt's avatar
      sh: initial PMB mapping iteration by helper macro. · 77c2019f
      Paul Mundt authored
      All of the cached/uncached mapping setup is duplicated for each size, and
      also misses out on the 16MB case. Rather than duplicating the same iter
      code for that we just consolidate it in to a helper macro that builds an
      iter for each size. The 16MB case is then trivially bolted on at the end.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      77c2019f
  2. 20 Jan, 2010 8 commits
    • Paul Mundt's avatar
      sh: pretty print virtual memory map on boot. · 35f99c0d
      Paul Mundt authored
      This cribs the pretty printing from arch/x86/mm/init_32.c to dump the
      virtual memory layout on boot. This is primarily intended as a debugging
      aid, given that the newer CPUs have full control over their address space
      and as such have little to nothing in common with the legacy layout.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      35f99c0d
    • Paul Mundt's avatar
      sh: mach-sdk7786: Probe system FPGA area mapping. · d9116d07
      Paul Mundt authored
      This implements dynamic probing for the system FPGA. The system reset
      controller contains a fixed magic read word in order to identify the
      FPGA. This just utilizes a simple loop that scans across all of the fixed
      physical areas (area 0 through area 6) to locate the FPGA.
      
      The FPGA also contains register information detailing the area mappings
      and chip select settings for all of the other blocks, so this needs to be
      done before we can set up anything else.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      d9116d07
    • Paul Mundt's avatar
      sh: Correct iounmap fixmap teardown. · 920efaab
      Paul Mundt authored
      iounmap_fixed() had a couple of bugs in it that caused it to effectively
      fail at life. The total number of pages to unmap factored in the mapping
      offset and aligned up to the next page boundary, which doesn't match the
      ioremap_fixed() behaviour.
      
      When ioremap_fixed() pegs a slot, the address in the mapping data already
      contains the offset displacement, and the size is recorded verbatim given
      that we're only interested in total number of pages required. As such, we
      need to calculate the total number from the original size in the unmap
      path as well.
      
      At the same time, there was also an off-by-1 problem in the fixmap index
      calculation which has also been corrected.
      
      Previously subsequent remaps of an identical fixmap index would trigger
      the pte_ERROR() in set_pte_phys():
      
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      	arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506).
      
      With this patch in place, the iounmap-driven fixmap teardown actually
      does what it's supposed to do.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      920efaab
    • Paul Mundt's avatar
      sh: mach-sdk7786: reset controller reboot support. · b51989b8
      Paul Mundt authored
      This wires up the machine_ops reboot call to use the system reset
      controller.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      b51989b8
    • Paul Mundt's avatar
      sh: machine_ops based reboot support. · fbb82b03
      Paul Mundt authored
      This provides a machine_ops-based reboot interface loosely cloned from
      x86, and converts the native sh32 and sh64 cases over to it.
      
      Necessary both for tying in SMP support and also enabling platforms like
      SDK7786 to add support for their microcontroller-based power managers.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      fbb82b03
    • Paul Mundt's avatar
      sh: Make 29/32-bit mode check helper generally available. · 2efa53b2
      Paul Mundt authored
      Presently __in_29bit_mode() is only defined for the PMB case, but
      it's also easily derived from the CONFIG_29BIT and CONFIG_32BIT &&
      CONFIG_PMB=n cases.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      2efa53b2
    • Paul Mundt's avatar
      sh: mach-sdk7786: Split out FPGA IRQ controller setup. · 5f240718
      Paul Mundt authored
      This moves out the FPGA IRQ controller setup code to its own file, in
      preparation for switching off of IRL mode and having it provide its own
      irq_chip.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      5f240718
    • Paul Mundt's avatar
      sh: mach-sdk7786: FPGA updates. · efd590d5
      Paul Mundt authored
      This does a bit of refactoring of the FPGA management code. The primary
      FPGA initialization is moved out to its own file in preparation for
      implementing some of the more complex capabilities, a complete set of
      register definitions is provided, and all of the existing users in the
      board code are moved over to use the new interface instead of setting up
      overlapping mappings. This also corrects the FPGA size, which previously
      was chomped off at the SDIF control register.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      efd590d5
  3. 19 Jan, 2010 19 commits
  4. 18 Jan, 2010 9 commits