1. 09 1月, 2006 6 次提交
    • A
      [PATCH] cell: enable pause(0) in cpu_idle · c902be71
      Arnd Bergmann 提交于
      This patch enables support for pause(0) power management state
      for the Cell Broadband Processor, which is import for power efficient
      operation. The pervasive infrastructure will in the future enable
      us to introduce more functionality specific to the Cell's
      pervasive unit.
      
      From: Maximino Aguilar <maguilar@us.ibm.com>
      Signed-off-by: NArnd Bergmann <arndb@de.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      c902be71
    • H
      [PATCH] powerpc: Fix search for the main interrupt controller · 9da5cad6
      Haren Myneni 提交于
      At present, we are not looking at all interrupt controller nodes in the
      device tree even though the proper node was not found. This is causing
      the system panic. The attached patch will scan all nodes until it finds
      the proper interrupt controller type.
      Signed-off-by: NHaren Myneni <haren@us.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      9da5cad6
    • M
      [PATCH] powerpc: Add arch dependent basic infrastructure for Kdump. · cc532915
      Michael Ellerman 提交于
      Implementing the machine_crash_shutdown which will be called by
      crash_kexec (called in case of a panic, sysrq etc.). Disable the
      interrupts, shootdown cpus using debugger IPI and collect regs
      for all CPUs.
      
      elfcorehdr= specifies the location of elf core header stored by
      the crashed kernel. This command line option will be passed by
      the kexec-tools to capture kernel.
      
      savemaxmem= specifies the actual memory size that the first kernel
      has and this value will be used for dumping in the capture kernel.
      This command line option will be passed by the kexec-tools to
      capture kernel.
      Signed-off-by: NHaren Myneni <haren@us.ibm.com>
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      cc532915
    • M
      [PATCH] powerpc: Create a trampoline for the fwnmi vectors · 8c4f1f29
      Michael Ellerman 提交于
      The fwnmi vectors can be anywhere < 32 MB, so we need to use a trampoline
      for them. The kdump kernel will register the trampoline addresses, which will
      then jump up to the real code above 32 MB.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      8c4f1f29
    • B
      [PATCH] powerpc: serial port discovery (#2) · 463ce0e1
      Benjamin Herrenschmidt 提交于
      This moves the discovery of legacy serial ports to a separate file,
      makes it common to ppc32 and ppc64, and reworks it to use the new OF
      address translators to get to the ports early. This new version can also
      detect some PCI serial cards using legacy chips and will probably match
      those discovered port with the default console choice.
      
      Only ppc64 gets udbg still yet, unifying udbg isn't finished yet.
      
      It also adds some speed-probing code to udbg so that the default console
      can come up at the same speed it was set to by the firmware.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      463ce0e1
    • M
      [PATCH] powerpc: Merge kexec · 3d1229d6
      Michael Ellerman 提交于
      This patch merges, to some extent, the PPC32 and PPC64 kexec implementations.
      
      We adopt the PPC32 approach of having ppc_md callbacks for the kexec functions.
      The current PPC64 implementation becomes the "default" implementation for PPC64
      which platforms can select if they need no special treatment.
      
      I've added these default callbacks to pseries/maple/cell/powermac, this means
      iSeries no longer supports kexec - but it never worked anyway.
      
      I've renamed PPC32's machine_kexec_simple to default_machine_kexec, inline with
      PPC64. Judging by the comments it might be better named machine_kexec_non_of,
      or something, but at the moment it's the only implementation for PPC32 so it's
      the "default".
      
      Kexec requires machine_shutdown(), which is in machine_kexec.c on PPC32, but we
      already have in setup-common.c on powerpc. All this does is call
      ppc_md.nvram_sync, which only powermac implements, so instead make
      machine_shutdown a ppc_md member and have it call core99_nvram_sync directly
      on powermac.
      
      I've also stuck relocate_kernel.S into misc_32.S for powerpc.
      
      Built for ARCH=ppc, and 32 & 64 bit ARCH=powerpc, with KEXEC=y/n. Booted on
      P5 LPAR and successfully kexec'ed.
      
      Should apply on top of 493f25ef.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      3d1229d6
  2. 18 11月, 2005 1 次提交
  3. 14 11月, 2005 1 次提交
    • M
      [PATCH] powerpc: Turn cpu_irq_down into kexec_cpu_down · c5e24354
      Michael Ellerman 提交于
      We currently have a ppc_md member called cpu_irq_down, which disables IRQs
      for the cpu in question. The only caller of cpu_irq_down is the kexec code.
      
      On pSeries we need to do more than just teardown IRQs at kexec time, so rename
      the ppc_md member to kexec_cpu_down and expand it. The pSeries code needs to
      know, and other platforms might too, whether we're doing a crash shutdown (ie.
      panicking) or a regular kexec, so add a flag for that.
      
      The pSeries implementation of kexec_cpu_down does an unregister VPA call, which
      tells the Hypervisor to stop writing stuff into our pacas. Without this we can
      get weird memory corruption bugs when we kexec, caused by the Hypervisor
      writing into the first kernel's pacas which happens to be somewhere interesting
      in the second kernel's memory.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      c5e24354
  4. 11 11月, 2005 1 次提交
  5. 10 11月, 2005 1 次提交
  6. 09 11月, 2005 2 次提交
    • N
      [PATCH] sched: resched and cpu_idle rework · 64c7c8f8
      Nick Piggin 提交于
      Make some changes to the NEED_RESCHED and POLLING_NRFLAG to reduce
      confusion, and make their semantics rigid.  Improves efficiency of
      resched_task and some cpu_idle routines.
      
      * In resched_task:
      - TIF_NEED_RESCHED is only cleared with the task's runqueue lock held,
        and as we hold it during resched_task, then there is no need for an
        atomic test and set there. The only other time this should be set is
        when the task's quantum expires, in the timer interrupt - this is
        protected against because the rq lock is irq-safe.
      
      - If TIF_NEED_RESCHED is set, then we don't need to do anything. It
        won't get unset until the task get's schedule()d off.
      
      - If we are running on the same CPU as the task we resched, then set
        TIF_NEED_RESCHED and no further action is required.
      
      - If we are running on another CPU, and TIF_POLLING_NRFLAG is *not* set
        after TIF_NEED_RESCHED has been set, then we need to send an IPI.
      
      Using these rules, we are able to remove the test and set operation in
      resched_task, and make clear the previously vague semantics of
      POLLING_NRFLAG.
      
      * In idle routines:
      - Enter cpu_idle with preempt disabled. When the need_resched() condition
        becomes true, explicitly call schedule(). This makes things a bit clearer
        (IMO), but haven't updated all architectures yet.
      
      - Many do a test and clear of TIF_NEED_RESCHED for some reason. According
        to the resched_task rules, this isn't needed (and actually breaks the
        assumption that TIF_NEED_RESCHED is only cleared with the runqueue lock
        held). So remove that. Generally one less locked memory op when switching
        to the idle thread.
      
      - Many idle routines clear TIF_POLLING_NRFLAG, and only set it in the inner
        most polling idle loops. The above resched_task semantics allow it to be
        set until before the last time need_resched() is checked before going into
        a halt requiring interrupt wakeup.
      
        Many idle routines simply never enter such a halt, and so POLLING_NRFLAG
        can be always left set, completely eliminating resched IPIs when rescheduling
        the idle task.
      
        POLLING_NRFLAG width can be increased, to reduce the chance of resched IPIs.
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Con Kolivas <kernel@kolivas.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      64c7c8f8
    • N
      [PATCH] sched: disable preempt in idle tasks · 5bfb5d69
      Nick Piggin 提交于
      Run idle threads with preempt disabled.
      
      Also corrected a bugs in arm26's cpu_idle (make it actually call schedule()).
      How did it ever work before?
      
      Might fix the CPU hotplugging hang which Nigel Cunningham noted.
      
      We think the bug hits if the idle thread is preempted after checking
      need_resched() and before going to sleep, then the CPU offlined.
      
      After calling stop_machine_run, the CPU eventually returns from preemption and
      into the idle thread and goes to sleep.  The CPU will continue executing
      previous idle and have no chance to call play_dead.
      
      By disabling preemption until we are ready to explicitly schedule, this bug is
      fixed and the idle threads generally become more robust.
      
      From: alexs <ashepard@u.washington.edu>
      
        PPC build fix
      
      From: Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
      
        MIPS build fix
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Signed-off-by: NYoichi Yuasa <yuasa@hh.iij4u.or.jp>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      5bfb5d69
  7. 07 11月, 2005 2 次提交
  8. 03 11月, 2005 3 次提交
  9. 01 11月, 2005 1 次提交
  10. 28 10月, 2005 1 次提交
  11. 26 10月, 2005 2 次提交
    • P
      powerpc: Merge rtas.c into arch/powerpc/kernel · 033ef338
      Paul Mackerras 提交于
      This splits arch/ppc64/kernel/rtas.c into arch/powerpc/kernel/rtas.c,
      which contains generic RTAS functions useful on any CHRP platform,
      and arch/powerpc/platforms/pseries/rtas-fw.[ch], which contain
      some pSeries-specific firmware flashing bits.  The parts of rtas.c
      that are to do with pSeries-specific error logging are protected
      by a new CONFIG_RTAS_ERROR_LOGGING symbol.  The inclusion of rtas.o
      is controlled by the CONFIG_PPC_RTAS symbol, and the relevant
      platforms select that.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      033ef338
    • P
      powerpc: Merge i8259.c into arch/powerpc/sysdev · f9bd170a
      Paul Mackerras 提交于
      This changes the parameters for i8259_init so that it takes two
      parameters: a physical address for generating an interrupt
      acknowledge cycle, and an interrupt number offset.  i8259_init
      now sets the irq_desc[] for its interrupts; all the callers
      were doing this, and that code is gone now.  This also defines
      a CONFIG_PPC_I8259 symbol to select i8259.o for inclusion, and
      makes the platforms that need it select that symbol.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f9bd170a
  12. 20 10月, 2005 2 次提交
  13. 19 10月, 2005 1 次提交
    • P
      powerpc: Merge machdep.h · 143a1dec
      Paul Mackerras 提交于
      A few things change for consistency between ppc32 and ppc64:
      idle functions return void; *_get_boot_time functions return
      unsigned long (i.e. time_t) rather than filling in a struct rtc_time
      (since that's useful to the callers and easier for pmac to
      generate); *_get_rtc_time and *_set_rtc_time functions take
      a struct rtc_time; irq_canonicalize is gone; nvram_sync returns
      void.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      143a1dec
  14. 10 10月, 2005 1 次提交
  15. 28 9月, 2005 1 次提交
  16. 27 9月, 2005 1 次提交
  17. 13 9月, 2005 1 次提交
    • P
      [PATCH] ppc64: Make eeh_init function again · 0160f53e
      Paul Mackerras 提交于
      My patch "Separate pci bits out of struct device_node" (commit
      1635317f) had the unfortunate
      side-effect that it stopped eeh_init() from working correctly.
      
      It needs the pointers set up by find_and_init_phbs(), but it was being
      called just before find_and_init_phbs().  That meant that we didn't
      enable EEH (pSeries PCI error recovery) on any devices, and that meant
      that on POWER5 systems, the hypervisor wouldn't let us enable memory or
      I/O space access to any devices, and their drivers got somewhat
      confused.
      
      This fixes it by moving the eeh_init call after find_and_init_phbs.
      Tested on a POWER5 partition.
      Signed-of-by: NPaul Mackerras <paulus@samba.org>
      Signed-of-by: NLinus Torvalds <torvalds@osdl.org>
      0160f53e
  18. 12 9月, 2005 1 次提交
    • P
      ppc64: Set up PCI tree from Open Firmware device tree · 4267292b
      Paul Mackerras 提交于
      This adds code which gives us the option on ppc64 of instantiating the
      PCI tree (the tree of pci_bus and pci_dev structs) from the Open
      Firmware device tree rather than by probing PCI configuration space.
      The OF device tree has a node for each PCI device and bridge in the
      system, with properties that tell us what addresses the firmware has
      configured for them and other details.
      
      There are a couple of reasons why this is needed.  First, on systems
      with a hypervisor, there is a PCI-PCI bridge per slot under the PCI
      host bridges.  These PCI-PCI bridges have special isolation features
      for virtualization.  We can't write to their config space, and we are
      not supposed to be reading their config space either.  The firmware
      tells us about the address ranges that they pass in the OF device
      tree.
      
      Secondly, on powermacs, the interrupt controller is in a PCI device
      that may be behind a PCI-PCI bridge.  If we happened to take an
      interrupt just at the point when the device or a bridge on the path to
      it was disabled for probing, we would crash when we try to access the
      interrupt controller.
      
      I have implemented a platform-specific function which is called for
      each PCI bridge (host or PCI-PCI) to say whether the code should look
      in the device tree or use normal PCI probing for the devices under
      that bridge.  On pSeries machines we use the device tree if we're
      running under a hypervisor, otherwise we use normal probing.  On
      powermacs we use normal probing for the AGP bridge, since the device
      for the AGP bridge itself isn't shown in the device tree (at least on
      my G5), and the device tree for everything else.
      
      This has been tested on a dual G5 powermac, a partition on a POWER5
      machine (running under the hypervisor), and a legacy iSeries
      partition.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      4267292b
  19. 06 9月, 2005 2 次提交
  20. 29 8月, 2005 5 次提交
  21. 08 7月, 2005 3 次提交
  22. 26 6月, 2005 1 次提交
    • R
      [PATCH] ppc64: kexec support for ppc64 · fce0d574
      R Sharada 提交于
      This patch implements the kexec support for ppc64 platforms.
      
      A couple of notes:
      
      1)  We copy the pages in virtual mode, using the full base kernel
          and a statically allocated stack.   At kexec_prepare time we
          scan the pages and if any overlap our (0, _end[]) range we
          return -ETXTBSY.
      
          On PowerPC 64 systems running in LPAR (logical partitioning)
          mode, only a small region of memory, referred to as the RMO,
          can be accessed in real mode.  Since Linux runs with only one
          zone of memory in the memory allocator, and it can be orders of
          magnitude more memory than the RMO, looping until we allocate
          pages in the source region is not feasible.  Copying in virtual
          means we don't have to write a hash table generation and call
          hypervisor to insert translations, instead we rely on the pinned
          kernel linear mapping.  The kernel already has move to linked
          location built in, so there is no requirement to load it at 0.
      
          If we want to load something other than a kernel, then a stub
          can be written to copy a linear chunk in real mode.
      
      2)  The start entry point gets passed parameters from the kernel.
          Slaves are started at a fixed address after copying code from
          the entry point.
      
          All CPUs get passed their firmware assigned physical id in r3
          (most calling conventions use this register for the first
          argument).
      
          This is used to distinguish each CPU from all other CPUs.
          Since firmware is not around, there is no other way to obtain
          this information other than to pass it somewhere.
      
          A single CPU, referred to here as the master and the one executing
          the kexec call, branches to start with the address of start in r4.
          While this can be calculated, we have to load it through a gpr to
          branch to this point so defining the register this is contained
          in is free.  A stack of unspecified size is available at r1
          (also common calling convention).
      
          All remaining running CPUs are sent to start at absolute address
          0x60 after copying the first 0x100 bytes from start to address 0.
          This convention was chosen because it matches what the kernel
          has been doing itself.  (only gpr3 is defined).
      
          Note: This is not quite the convention of the kexec bootblock v2
          in the kernel.  A stub has been written to convert between them,
          and we may adjust the kernel in the future to allow this directly
          without any stub.
      
      3)  Destination pages can be placed anywhere, even where they
          would not be accessible in real mode.  This will allow us to
          place ram disks above the RMO if we choose.
      Signed-off-by: NMilton Miller <miltonm@bga.com>
      Signed-off-by: NR Sharada <sharada@in.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      fce0d574