1. 15 10月, 2008 1 次提交
    • B
      powerpc/pci: Improve detection of unassigned bridge resources · b5561511
      Benjamin Herrenschmidt 提交于
      When the powerpc PCI layer is not configured to re-assign everything,
      it currently fails to detect that a PCI to PCI bridge has been left
      unassigned by the firmware and tries to allocate resource for the
      default window values in the bridge (0...X) (with the notable exception
      of a hack we have in there that detects some Apple firmware unassigned
      bridge resources).
      
      This results in resource allocation failures, which are generally
      fixed up later on but it causes scary warnings in the logs and we
      have seen the fixup code fall over in some circumstances (a different
      issue to fix as well).
      
      This code improves that by providing a more complete & useful function
      to intuit that a bridge was left unassigned by the firmware, and thus
      force a full re-allocation by the PCI code without trying to allocate
      the existing useless resources first.
      
      The algorithm we use basically considers unassigned a window that
      starts at 0 (PCI address) if the corresponding address space enable
      bit is not set. In addition, for memory space, it considers such a
      resource unassigned also if the host bridge isn't configured to
      forward cycles to address 0 (ie, the resource basically overlaps
      main memory).
      
      This fixes a range of problems with things like Bare-Metal support
      on pSeries machines, or attempt to use partial firmware PCI setup.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      b5561511
  2. 14 10月, 2008 4 次提交
  3. 13 10月, 2008 1 次提交
  4. 10 10月, 2008 2 次提交
    • P
      powerpc: Sync RPA note in zImage with kernel's RPA note · 91a00302
      Paul Mackerras 提交于
      Commit 9b09c6d9 ("powerpc: Change the
      default link address for pSeries zImage kernels") changed the
      real-base value in the CHRP note added by the addnote program from
      12MB to 32MB to give more space for Open Firmware to load the zImage.
      (The real-base value says where we want OF to position itself in
      memory.)  However, this change was ineffective on most pSeries
      machines, because the RPA note added by addnote has the "ignore me"
      flag set to 1.  This was intended to tell OF to ignore just the RPA
      note, but has the side effect of also making OF ignore the CHRP note
      (at least on most pSeries machines).
      
      To solve this we have to set the "ignore me" flag to 0 in the RPA
      note.  (We can't just omit the RPA note because that is equivalent to
      having an RPA note with default values, and the default values are not
      what we want.)  However, then we have to make sure the values in the
      zImage's RPA note match up with the values that the kernel supplies
      later in prom_init.c with either the ibm,client-architecture-support
      call or the process-elf-header call in prom_send_capabilities().
      
      So this sets the "ignore me" flag in the RPA note in addnote to 0, and
      adjusts the RPA note values in addnote.c and in prom_init.c to be
      consistent with each other and with the values in ibm_architecture_vec.
      
      However, since the wrapper is independent of the kernel, this doesn't
      ensure that the notes will stay consistent.  To ensure that, this adds
      code to addnote.c so that it can extract the kernel's RPA note from
      the kernel binary and put that in the zImage.  To that end, we put the
      kernel's fake ELF header (which contains the kernel's RPA note) into
      its own section, and arrange for wrapper to pull out that section with
      objcopy and pass it to addnote, which then extracts the RPA note from
      it and transfers it to the zImage.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      91a00302
    • J
      powerpc: Fix error path in kernel_thread function · 41c2e949
      Josh Poimboeuf 提交于
      The powerpc 32-bit and 64-bit kernel_thread functions don't properly
      propagate errors being returned by the clone syscall.  (In the case of
      error, the syscall exit code returns a positive errno in r3 and sets
      the CR0[SO] bit.)
      
      This patch fixes that by negating r3 if CR0[SO] is set after the syscall.
      Signed-off-by: NJosh Poimboeuf <jpoimboe@us.ibm.com>
      Signed-off-by: NJosh Boyer <jwboyer@linux.vnet.ibm.com>
      Acked-by: NPaul Mackerras <paulus@samba.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      41c2e949
  5. 07 10月, 2008 3 次提交
  6. 25 9月, 2008 6 次提交
  7. 20 9月, 2008 1 次提交
  8. 19 9月, 2008 1 次提交
  9. 16 9月, 2008 9 次提交
    • M
      powerpc: Fix major revision number for Freescale cores · a501d8f3
      Martin Langer 提交于
      Some 74xx cores by Freescale are using the configuration field instead
      of the major revision field for their revision number.  This corrects
      the wrong behaviour for those ppc cores including my one.
      
      There is a reference document at Freecale.  It describes the PVR
      register.  This is based on that pdf.  You can find the document at:
      
      http://www.freescale.com/files/archives/doc/support_info/PPCPVR.pdfSigned-off-by: NMartin Langer <martin-langer@gmx.de>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      a501d8f3
    • S
      powerpc: Make the irq reverse mapping radix tree lockless · 150c6c8f
      Sebastien Dugue 提交于
      The radix trees used by interrupt controllers for their irq reverse
      mapping (currently only the XICS found on pSeries) have a complex
      locking scheme dating back to before the advent of the lockless radix
      tree.
      
      This takes advantage of the lockless radix tree and of the fact that
      the items of the tree are pointers to a static array (irq_map)
      elements which can never go under us to simplify the locking.
      
      Concurrency between readers and writers is handled by the intrinsic
      properties of the lockless radix tree.  Concurrency between writers is
      handled with a global mutex.
      Signed-off-by: NSebastien Dugue <sebastien.dugue@bull.net>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Michael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      150c6c8f
    • S
      powerpc: Separate the irq radix tree insertion and lookup · 967e012e
      Sebastien Dugue 提交于
      irq_radix_revmap() currently serves 2 purposes, irq mapping lookup
      and insertion which happen in interrupt and process context respectively.
      
      Separate the function into its 2 components, one for lookup only and one
      for insertion only.
      
      Fix the only user of the revmap tree (XICS) to use the new functions.
      
      Also, move the insertion into the radix tree of those irqs that were
      requested before it was initialized at said tree initialization.
      
      Mutual exclusion between the tree initialization and readers/writers is
      handled via a state variable (revmap_trees_allocated) set to 1 when the tree
      has been initialized and set to 2 after the already requested irqs have been
      inserted in the tree by the init path. This state is checked before any reader
      or writer access just like we used to check for tree.gfp_mask != 0 before.
      
      Finally, now that we're not any longer inserting nodes into the radix-tree
      in interrupt context, turn the GFP_ATOMIC allocations into GFP_KERNEL ones.
      Signed-off-by: NSebastien Dugue <sebastien.dugue@bull.net>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Michael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      967e012e
    • C
      powerpc: Use sys_pause for 32-bit pause entry point · d6c93adb
      Christoph Hellwig 提交于
      sys32_pause is a useless copy of the generic sys_pause.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Acked-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      d6c93adb
    • P
      powerpc: Make the 64-bit kernel as a position-independent executable · 549e8152
      Paul Mackerras 提交于
      This implements CONFIG_RELOCATABLE for 64-bit by making the kernel as
      a position-independent executable (PIE) when it is set.  This involves
      processing the dynamic relocations in the image in the early stages of
      booting, even if the kernel is being run at the address it is linked at,
      since the linker does not necessarily fill in words in the image for
      which there are dynamic relocations.  (In fact the linker does fill in
      such words for 64-bit executables, though not for 32-bit executables,
      so in principle we could avoid calling relocate() entirely when we're
      running a 64-bit kernel at the linked address.)
      
      The dynamic relocations are processed by a new function relocate(addr),
      where the addr parameter is the virtual address where the image will be
      run.  In fact we call it twice; once before calling prom_init, and again
      when starting the main kernel.  This means that reloc_offset() returns
      0 in prom_init (since it has been relocated to the address it is running
      at), which necessitated a few adjustments.
      
      This also changes __va and __pa to use an equivalent definition that is
      simpler.  With the relocatable kernel, PAGE_OFFSET and MEMORY_START are
      constants (for 64-bit) whereas PHYSICAL_START is a variable (and
      KERNELBASE ideally should be too, but isn't yet).
      
      With this, relocatable kernels still copy themselves down to physical
      address 0 and run there.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      549e8152
    • P
      powerpc: Use LOAD_REG_IMMEDIATE only for constants on 64-bit · e31aa453
      Paul Mackerras 提交于
      Using LOAD_REG_IMMEDIATE to get the address of kernel symbols
      generates 5 instructions where LOAD_REG_ADDR can do it in one,
      and will generate R_PPC64_ADDR16_* relocations in the output when
      we get to making the kernel as a position-independent executable,
      which we'd rather not have to handle.  This changes various bits
      of assembly code to use LOAD_REG_ADDR when we need to get the
      address of a symbol, or to use suitable position-independent code
      for cases where we can't access the TOC for various reasons, or
      if we're not running at the address we were linked at.
      
      It also cleans up a few minor things; there's no reason to save and
      restore SRR0/1 around RTAS calls, __mmu_off can get the return
      address from LR more conveniently than the caller can supply it in
      R4 (and we already assume elsewhere that EA == RA if the MMU is on
      in early boot), and enable_64b_mode was using 5 instructions where
      2 would do.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      e31aa453
    • P
      powerpc: Make it possible to move the interrupt handlers away from the kernel · 1f6a93e4
      Paul Mackerras 提交于
      This changes the way that the exception prologs transfer control to
      the handlers in 64-bit kernels with the aim of making it possible to
      have the prologs separate from the main body of the kernel.  Now,
      instead of computing the address of the handler by taking the top
      32 bits of the paca address (to get the 0xc0000000........ part) and
      ORing in something in the bottom 16 bits, we get the base address of
      the kernel by doing a load from the paca and add an offset.
      
      This also replaces an mfmsr and an ori to compute the MSR value for
      the handler with a load from the paca.  That makes it unnecessary to
      have a separate version of EXCEPTION_PROLOG_PSERIES that forces 64-bit
      mode.
      
      We can no longer use a direct branches in the exception prolog code,
      which means that the SLB miss handlers can't branch directly to
      .slb_miss_realmode any more.  Instead we have to compute the address
      and do an indirect branch.  This is conditional on CONFIG_RELOCATABLE;
      for non-relocatable kernels we use a direct branch as before.  (A later
      change will allow CONFIG_RELOCATABLE to be set on 64-bit powerpc.)
      
      Since the secondary CPUs on pSeries start execution in the first 0x100
      bytes of real memory and then have to get to wherever the kernel is,
      we can't use a direct branch to get there.  Instead this changes
      __secondary_hold_spinloop from a flag to a function pointer.  When it
      is set to a non-NULL value, the secondary CPUs jump to the function
      pointed to by that value.
      
      Finally this eliminates one code difference between 32-bit and 64-bit
      by making __secondary_hold be the text address of the secondary CPU
      spinloop rather than a function descriptor for it.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      1f6a93e4
    • P
      powerpc: Rearrange head_64.S to move interrupt handler code to the beginning · 9a955167
      Paul Mackerras 提交于
      This rearranges head_64.S so that we have all the first-level exception
      prologs together starting at 0x100, followed by all the second-level
      handlers that are invoked from the first-level prologs, followed by
      other code.  This doesn't make any functional change but will make
      following changes for relocatable kernel support easier.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      9a955167
    • C
      powerpc: Add support for dynamic reconfiguration memory in kexec/kdump kernels · cf00085d
      Chandru 提交于
      Kdump kernel needs to use only those memory regions that it is allowed
      to use (crashkernel, rtas, tce, etc.).  Each of these regions have
      their own sizes and are currently added under 'linux,usable-memory'
      property under each memory@xxx node of the device tree.
      
      The ibm,dynamic-memory property of ibm,dynamic-reconfiguration-memory
      node (on POWER6) now stores in it the representation for most of the
      logical memory blocks with the size of each memory block being a
      constant (lmb_size).  If one or more or part of the above mentioned
      regions lie under one of the lmb from ibm,dynamic-memory property,
      there is a need to identify those regions within the given lmb.
      
      This makes the kernel recognize a new 'linux,drconf-usable-memory'
      property added by kexec-tools.  Each entry in this property is of the
      form of a count followed by that many (base, size) pairs for the above
      mentioned regions.  The number of cells in the count value is given by
      the #size-cells property of the root node.
      Signed-off-by: NChandru Siddalingappa <chandru@in.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      cf00085d
  10. 10 9月, 2008 1 次提交
  11. 03 9月, 2008 4 次提交
  12. 20 8月, 2008 7 次提交