1. 01 8月, 2015 1 次提交
  2. 29 4月, 2014 1 次提交
    • S
      sparc32: fix sparse warnings in sun4d_irq.c · 5ac75688
      Sam Ravnborg 提交于
      Fix following warnings:
      sun4d_irq.c:146:6: warning: symbol 'sun4d_handler_irq' was not declared. Should it be static?
      sun4d_irq.c:239:17: warning: symbol 'sun4d_irq' was not declared. Should it be static?
      sun4d_irq.c:288:14: warning: symbol '_sun4d_build_device_irq' was not declared. Should it be static?
      sun4d_irq.c:323:14: warning: symbol 'sun4d_build_device_irq' was not declared. Should it be static?
      sun4d_irq.c:386:14: warning: symbol 'sun4d_build_timer_irq' was not declared. Should it be static?
      sun4d_irq.c:482:13: warning: symbol 'sun4d_init_sbi_irq' was not declared. Should it be static?
      
      Apply static when applicable, otherwise add prototype
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5ac75688
  3. 30 4月, 2013 1 次提交
  4. 15 5月, 2012 2 次提交
  5. 14 5月, 2012 3 次提交
  6. 16 4月, 2012 2 次提交
    • T
      sparc32: generic clockevent support · 62f08283
      Tkhai Kirill 提交于
      The kernel uses l14 timers as clockevents. l10 timer is used
      as clocksource if platform master_l10_counter isn't constantly
      zero. The clocksource is continuous, so it's possible to use
      high resolution timers. l10 timer is also used as clockevent
      on UP configurations.
      
      This realization is for sun4m, sun4d, sun4c, microsparc-IIep
      and LEON platforms. The appropriate LEON changes was made by
      Konrad Eisele.
      
      In case of sun4m's oneshot mode, profile irq is zeroed in
      smp4m_percpu_timer_interrupt(). It is maybe
      needless (double, triple etc overflow does nothing).
      
      sun4d is able to have oneshot mode too, but I haven't
      any way to test it. So code of its percpu timer handler
      is made as much equal to the current code as possible.
      
      The patch is tested on sun4m box in SMP mode by me,
      and tested by Konrad on leon in up mode (leon smp
      is broken atm - due to other reasons).
      Signed-off-by: NTkhai Kirill <tkhai@yandex.ru>
      Tested-by: Konrad Eisele <konrad@gaisler.com> [leon up]
      [sam: revised patch to provide generic support for leon]
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      62f08283
    • S
      sparc32: rename sparc_irq_config to sparc_config · 472bc4f2
      Sam Ravnborg 提交于
      This struct holds platform specific config and is thus not
      limited to irq stuff.
      Do not let the name confuse us to think this is irq only.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      472bc4f2
  7. 08 6月, 2011 3 次提交
    • O
      Add support for allocating irqs for bootbus devices · 9eeb0898
      oftedal 提交于
      Some devices that can generate interrupts are connected directly to the
      CPU through the bootbus on sun4d. This patch allows IRQs to be allocated
      for such devices. The information used for allocating interrupts for
      sbus devices are present at the corresponding SBI node. For bootbus
      devices this information is present in the bootbus node.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9eeb0898
    • O
      Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts correctly · ea160584
      oftedal 提交于
      During the introduction of genirq on sparc32 bugs were introduced in
      the interrupt handler for sun4d. The interrupts handler checks the status
      of the various sbus interfaces in the system and generates a virtual
      interrupt, based upon the location of the interrupt source. This lookup
      was broken by restructuring the code in such a way that index and shift
      operations were performed prior to comparing this against the values
      read from the interrupt controllers.
      
      This could cause the handler to loop eternally as the interrupt source
      could be skipped before any check was performed. Additionally
      sun4d_encode_irq performs shifting internally, so it should not be performed
      twice.
      
      In sun4d_unmask interrupts were not correctly acknowledged, as the
      corresponding bit it the interrupt mask was not actually cleared.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ea160584
    • O
      Restructure sun4d_build_device_irq so that timer interrupts can be allocated · 5fba1708
      oftedal 提交于
      sun4d_build_device_irq was called without a valid platform_device when
      the system timer was initialized on sun4d systems. This caused a NULL
      pointer crash.
      
      Josip Rodin suggested that the current sun4d_build_device_irq should be
      split into two functions. So that the timer initialization could skip
      the slot and sbus interface detection code in sun4d_build_device_irq, as
      this does not make sence due to the timer interrupts not being generated
      from a device located on sbus.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5fba1708
  8. 17 5月, 2011 1 次提交
    • D
      sparc32, sun4d: Implemented SMP IPIs support for SUN4D machines · 55dd23ec
      Daniel Hellstrom 提交于
      The sun4d does not seem to have a distingstion between soft and hard
      IRQs. When generating IPIs the generated IRQ looks like a hard IRQ,
      this patch adds a "IPI check" in the sun4d irq trap handler at a
      predefined IRQ number (SUN4D_IPI_IRQ). Before generating an IPI
      a per-cpu memory structure is modified for the "IPI check" to
      successfully detect a IPI request to a specific processor, the check
      clears the IPI work requested.
      
      All three IPIs (resched, single and cpu-mask) use the same IRQ
      number.
      
      The IPI IRQ should preferrably be on a separate IRQ and definitly
      not shared with IRQ handlers requesting IRQ with IRQF_SHARED.
      Signed-off-by: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      55dd23ec
  9. 22 4月, 2011 1 次提交
    • D
      sparc32: always define boot_cpu_id · 5fcafb7a
      Daniel Hellstrom 提交于
      Define boot_cpu_id in single-processor kernels as well. This is
      to support architectures which can boot on other than CPU0.
      
      Sam Ravnborg has written the cleanup parts by extracting
      boot_cpu_id from smp_32.c into setup_32.c and cleaned up
      sun4d_irq.c.
      
      boot_cpu_id was initialized before BSS was cleared in
      sun4c_continue_boot, instead boot_cpu_id is set to 0xff to
      avoid BSS. If boot_cpu_id is untouched (0xff) by bootup code
      it will be overwritten to 0. boot_cpu_id4 is automatically
      calculated in common code.
      Signed-off-by: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5fcafb7a
  10. 20 4月, 2011 2 次提交
    • S
      sparc32: genirq support · 6baa9b20
      Sam Ravnborg 提交于
      The conversion of sparc32 to genirq is based on original work done
      by David S. Miller.
      Daniel Hellstrom has helped in the conversion and implemented
      the shutdowm functionality.
      Marcel van Nies <morcles@gmail.com> has tested this on Sparc Station 20
      
      Test status:
      sun4c      - not tested
      sun4m,pci  - not tested
      sun4m,sbus - tested (Sparc Classic, Sparc Station 5, Sparc Station 20)
      sun4d      - not tested
      leon       - tested on various combinations of leon boards,
                   including SMP variants
      
      generic
         Introduce use of GENERIC_HARDIRQS and GENERIC_IRQ_SHOW
         Allocate 64 IRQs - which is enough even for SS2000
         Use a table of irq_bucket to maintain uses IRQs
            irq_bucket is also used to chain several irq's that
            must be called when the same intrrupt is asserted
         Use irq_link to link a interrupt source to the irq
         All plafforms must now supply their own build_device_irq method
         handler_irq rewriten to use generic irq support
      
      floppy
         Read FLOPPY_IRQ from platform device
         Use generic request_irq to register the floppy interrupt
         Rewrote sparc_floppy_irq to use the generic irq support
      
      pcic:
         Introduce irq_chip
         Store mask in chip_data for use in mask/unmask functions
         Add build_device_irq for pcic
         Use pcic_build_device_irq in pci_time_init
         allocate virtual irqs in pcic_fill_irq
      
      sun4c:
         Introduce irq_chip
         Store mask in chip_data for use in mask/unmask functions
         Add build_device_irq for sun4c
         Use sun4c_build_device_irq in sun4c_init_timers
      
      sun4m:
         Introduce irq_chip
         Introduce dedicated mask/unmask methods
         Introduce sun4m_handler_data that allow easy access to necessary
           data in the mask/unmask functions
         Add a helper method to enable profile_timer (used from smp)
         Added sun4m_build_device_irq
         Use sun4m_build_device_irq in sun4m_init_timers
      
         TODO:
            There is no replacement for smp_rotate that always scheduled
            next CPU as interrupt target upon an interrupt
      
      sun4d:
         Introduce irq_chip
         Introduce dedicated mask/unmask methods
         Introduce sun4d_handler_data that allow easy access to
         necessary data in mask/unmask fuctions
         Rewrote sun4d_handler_irq to use generic irq support
      
         TODO:
            The original implmentation of enable/disable had:
      
                if (irq < NR_IRQS)
                     return;
      
            The new implmentation does not distingush between SBUS and cpu
            interrupts.
            I am no sure what is right here. I assume we need to do
            something for the cpu interrupts.
      
            I have not succeeded booting my sun4d box (with or without this patch)
            and my understanding of this platfrom is limited.
            So I would be a bit suprised if this works.
      
      leon:
         Introduce irq_chip
         Store mask in chip_data for use in mask/unmask functions
         Add build_device_irq for leon
         Use leon_build_device_irq in leon_init_timers
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Acked-by: NDaniel Hellstrom <daniel@gaisler.com>
      Tested-by: NDaniel Hellstrom <daniel@gaisler.com>
      Tested-by: NMarcel van Nies <morcles@gmail.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6baa9b20
    • S
      sparc32,sun4d: rename sbus_tid to board_to_cpu in irq support · db1cdd14
      Sam Ravnborg 提交于
      The new name reflects the actual usage much better.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      db1cdd14
  11. 17 3月, 2011 6 次提交
  12. 05 6月, 2010 1 次提交
  13. 30 3月, 2009 1 次提交
  14. 08 12月, 2008 1 次提交
    • S
      sparc: fix sparse warnings in irq_32.c · 81265fd9
      Sam Ravnborg 提交于
      Fix following sparse warnings:
      symbol 'static_irqaction' was not declared. Should it be static?
      symbol 'static_irq_count' was not declared. Should it be static?
      symbol 'irq_action_lock' was not declared. Should it be static?
      symbol 'unexpected_irq' was not declared. Should it be static?
      symbol 'handler_irq' was not declared. Should it be static?
      returning void-valued expression
      returning void-valued expression
      returning void-valued expression
      symbol 'init_IRQ' was not declared. Should it be static?
      
      Warnings were fixed by addding proper declarations
      and fixing return path of a few functions.
      
      There remains several warnings all related to the floppy driver.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      81265fd9
  15. 05 12月, 2008 1 次提交
    • N
      sparc: Add missing of_node_put · c2e27c35
      Nicolas Palix 提交于
      of_node_put is needed before discarding a value received from
      of_find_node_by_name, eg in error handling code or when the device
      node is no longer used.
      
      The semantic match that catches the bug is as follows:
      (http://www.emn.fr/x-info/coccinelle/)
      
      // <smpl>
      @r exists@
      local idexpression struct device_node *n;
      position p1, p2;
      struct device_node *n1;
      statement S;
      identifier f;
      expression E;
      expression *ptr != NULL;
      @@
      
      n@p1 = of_find_node_by_name(...)
      ...
      if (!n) S
      ... when != of_node_put(n)
          when != n1 = f(n,...)
          when != E = n
          when any
          when strict
      (
        return \(0\|<+...n...+>\|ptr\);
      |
      return@p2 ...;
      |
        of_node_put(n);
      |
        n1 = f(n,...)
      |
        E = n
      )
      
      @script:python@
      p1 << r.p1;
      p2 << r.p2;
      @@
      
      print "* file: %s of_find_node_by_name %s return %s" % (p1[0].file,p1[0].line,p2[0].line)
      // </smpl>
      Signed-off-by: NNicolas Palix <npalix@diku.dk>
      Signed-off-by: NJulia Lawall <julia@diku.dk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c2e27c35
  16. 20 9月, 2008 4 次提交
  17. 09 9月, 2008 1 次提交
  18. 29 8月, 2008 3 次提交
  19. 18 7月, 2008 1 次提交
    • A
      sparc/kernel/: possible cleanups · c61c65cd
      Adrian Bunk 提交于
      This patch contains the following possible cleanups:
      - make the following needlessly global code static:
        - apc.c: apc_swift_idle()
        - ebus.c: ebus_blacklist_irq()
        - ebus.c: fill_ebus_child()
        - ebus.c: fill_ebus_device()
        - entry.S: syscall_is_too_hard
        - etra: tsetup_sun4c_stackchk
        - head.S: cputyp
        - head.S: prom_vector_p
        - idprom.c: Sun_Machines[]
        - ioport.c: _sparc_find_resource()
        - ioport.c: create_proc_read_entry()
        - irq.c: struct sparc_irq[]
        - rtrap.S: sun4c_rett_stackchk
        - setup.c: prom_sync_me()
        - setup.c: boot_flags
        - sun4c_irq.c: sun4c_sbint_to_irq()
        - sun4d_irq.c: sbus_tid[]
        - sun4d_irq.c: struct sbus_actions
        - sun4d_irq.c: sun4d_sbint_to_irq()
        - sun4m_irq.c: sun4m_sbint_to_irq()
        - sun4m_irq.c: sun4m_get_irqmask()
        - sun4m_irq.c: sun4m_timers
        - sun4m_smp.c: smp4m_cross_call()
        - sun4m_smp.c: smp4m_blackbox_id()
        - sun4m_smp.c: smp4m_blackbox_current()
        - time.c: sp_clock_typ
        - time.c: sbus_time_init()
        - traps.c: instruction_dump()
        - wof.S: spwin_sun4c_stackchk
        - wuf.S: sun4c_fwin_stackchk
      - #if 0 the following unused code:
        - process.c: sparc_backtrace_lock
        - process.c: __show_backtrace()
        - process.c: show_backtrace()
        - process.c: smp_show_backtrace_all_cpus()
      - remove the following unused code:
        - entry.S: __handle_exception
        - smp.c: smp_num_cpus
        - smp.c: smp_activated
        - smp.c: __cpu_number_map[]
        - smp.c: __cpu_logical_map[]
        - smp.c: bitops_spinlock
        - traps.c: trap_curbuf
        - traps.c: trapbuf[]
        - traps.c: linux_smp_still_initting
        - traps.c: thiscpus_tbr
        - traps.c: thiscpus_mid
      Signed-off-by: NAdrian Bunk <bunk@kernel.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c61c65cd
  20. 20 5月, 2008 1 次提交
  21. 22 7月, 2007 2 次提交
  22. 12 5月, 2007 1 次提交