1. 29 5月, 2009 5 次提交
    • M
      davinci: Add compare register support to timer code · 3abd5acf
      Mark A. Greer 提交于
      The Timer64p timer has 8 compare registers that can
      be used to generate interrupts when the timer value
      matches the compare reg's value.  They do not disturb
      the timer itself.  This can be useful when there is
      only one timer available for both clock events and
      clocksource.
      
      When enabled, the clocksource remains a continuous
      32-bit counter but the clock event will no longer
      support periodic interrupts.  Instead only oneshot
      timers will be supported and implemented by setting
      the compare register to the current timer value plus
      the period that the clock event subsystem is requesting.
      
      Compare registers support is enabled automatically
      when the following conditions are met:
      1) The same timer is being used for clock events
         and clocksource.
      2) The timer is the bottom half (32 bits) of the
         64-bit timer (hardware limitation).
      3) The the compare register offset and irq are
         not zero.
      
      Since the timer is always running, there is a hardware
      race in timer32_config() between reading the current
      timer value, and adding the period to the current
      timer value and writing the compare register.
      Testing on a da830 evm board with the timer clocked
      at 24 MHz and the processor clocked at 300 MHz,
      showed the number of counter ticks to do this ranged
      from 20-53 (~1-2.2 usecs) but usually around 41 ticks.
      This includes some artifacts from collecting the
      information.  So, the minimum period should be
      at least 5 usecs to be safe.
      
      There is also an non-critical lower limit that
      the period should be since there is no point in
      setting an event that is much shorter than the
      time it takes to set the event, and get & handle
      the timer interrupt for that event.  There can
      also be all sorts of delays from activities
      occuring elsewhere in the system (including
      hardware activitis like cache & TLB management).
      These are virtually impossible to quantify so a
      minimum period of 50 usecs was chosen.  That will
      certianly be enough to avoid the actual hardware
      race but hopefully not large enough to cause
      unreasonably course-grained timers.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      3abd5acf
    • M
      davinci: Integrate cp_intc support into low-level irq code · 0b0c4c2a
      Mark A. Greer 提交于
      Integrate the Common Platform Interrupt Controller (cp_intc)
      support into the low-level irq handling for davinci and similar
      platforms.  Do it such that support for cp_intc and the original
      aintc can coexist in the same kernel binary.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      0b0c4c2a
    • M
      davinci: Move emac platform_data to SoC-specific files · 972412b6
      Mark A. Greer 提交于
      Since most of the emac platform_data is really SoC specific
      and not board specific, move it to the SoC-specific files.
      Put a pointer to the platform_data in the soc_info structure
      so the board-specific code can set some of the platform_data
      if it needs to.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      972412b6
    • M
      davinci: Move serial platform_device into SoC-specific files · 65e866a9
      Mark A. Greer 提交于
      Currently, there is one set of platform_device and platform_data
      structures for all DaVinci SoCs.  The differences in the data
      between the various SoCs is handled by davinci_serial_init()
      by checking the SoC type.  However, as new SoCs appear, this
      routine will become more & more cluttered.
      
      To clean up the routine and make it easier to add support for new
      SoCs, move the platform_device and platform_data structures into the
      SoC-specific code and use the SoC infrastructure to provide access
      to the data.
      
      In the process, fix a bug where the wrong irq is used for uart2
      of the dm646x.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      65e866a9
    • M
      davinci: Make GPIO code more generic · a994955c
      Mark A. Greer 提交于
      The current gpio code needs to know the number of
      gpio irqs there are and what the bank irq number is.
      To determine those values, it checks the SoC type.
      
      It also assumes that the base address and the number
      of irqs the interrupt controller uses is fixed.
      
      To clean up the SoC checks and make it support
      different base addresses and interrupt controllers,
      have the SoC-specific code set those values in
      the soc_info structure and have the gpio code
      reference them there.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      a994955c
  2. 26 5月, 2009 8 次提交
    • M
      davinci: Add watchdog base address flexibility · 951d6f6d
      Mark A. Greer 提交于
      The watchdog code currently hardcodes the base address
      of the timer its using.  To support new SoCs, make it
      support timers at any address.  Use the soc_info structure
      to do this.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      951d6f6d
    • M
      davinci: Add base address and timer flexibility · f64691b3
      Mark A. Greer 提交于
      The davinci timer code currently hardcodes the timer register
      base addresses, the timer irq numbers, and the timers to use
      for clock events and clocksource.  This won't work for some
      a new SoC so put those values into the soc_info structure
      and set them up in the SoC-specific files.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      f64691b3
    • M
      davinci: Move interrupt ctlr info to SoC infrastructure · 673dd36f
      Mark A. Greer 提交于
      Use the SoC infrastructure to hold the interrupt controller
      information (i.e., base address, default priorities,
      interrupt controller type, and the number of IRQs).
      
      The interrupt controller base, although initially put
      in the soc_info structure's intc_base field, is eventually
      put in the global 'davinci_intc_base' so the low-level
      interrupt code can access it without a dereference.
      
      These changes enable the SoC default irq priorities to be
      put in the SoC-specific files, and the interrupt controller
      to be at any base address.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      673dd36f
    • M
      davinci: Move pinmux setup info to SoC infrastructure · 0e585952
      Mark A. Greer 提交于
      The pinmux register base and setup can be different for different
      SoCs so move the pinmux reg base, pinmux table (and its size) to
      the SoC infrastructure.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      0e585952
    • M
      davinci: Add support for multiple PSCs · d81d188c
      Mark A. Greer 提交于
      The current code to support the DaVinci Power and Sleep Controller (PSC)
      assumes that there is only one controller.  This assumption is no longer
      valid so expand the support to allow greater than one PSC.
      
      To accomplish this, put the base addresses for the PSCs in the SoC
      infrastructure so it can be referenced by the PSC code.  This also
      requires adding an extra parameter to davinci_psc_config() to specify
      the PSC that is to be enabled/disabled.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      d81d188c
    • M
      davinci: Add clock init call to common init routine · 66e0c399
      Mark A. Greer 提交于
      All of the davinci SoCs need to call davinci_clk_init() so
      put the call in the common init routine.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      66e0c399
    • M
      davinci: Support JTAG ID register at any address · b9ab1279
      Mark A. Greer 提交于
      The Davinci cpu_is_davinci_*() macros use the SoC part number
      and variant retrieved from the JTAG ID register to determine the
      type of cpu that the kernel is running on.  Currently, the code to
      read the JTAG ID register assumes that the register is always at
      the same base address.  This isn't true on some newer SoCs.
      
      To solve this, have the SoC-specific code set the JTAG ID register
      base address in soc_info structure and add a 'cpu_id' member to it.
      'cpu_id' will be used by the cpu_is_davinci_*() macros to match
      the cpu id.  Also move the info used to identify the cpu type into
      the SoC-specific code to keep all SoC-specific code together.
      
      The common code will read the JTAG ID register, search through
      an array of davinci_id structures to identify the cpu type.
      Once identified, it will set the 'cpu_id' member of the soc_info
      structure to the proper value and the cpu_is_davinci_*() macros
      will now work.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      b9ab1279
    • M
      davinci: Encapsulate SoC-specific data in a structure · 79c3c0b7
      Mark A. Greer 提交于
      Create a structure to encapsulate SoC-specific information.
      This will assist in generalizing code so it can be used by
      different SoCs that have similar hardware but with minor
      differences such as having a different base address.
      
      The idea is that the code for each SoC fills out a structure
      with the correct information.  The board-specific code then
      calls the SoC init routine which in turn will call a common
      init routine that makes a copy of the structure, maps in I/O
      regions, etc.
      
      After initialization, code can get a pointer to the structure
      by calling davinci_get_soc_info().  Eventually, the common
      init routine will make a copy of all of the data pointed to
      by the structure so the original data can be made __init_data.
      That way the data for SoC's that aren't being used won't consume
      memory for the entire life of the kernel.
      
      The structure will be extended in subsequent patches but
      initially, it holds the map_desc structure for any I/O
      regions the SoC/board wants statically mapped.
      Signed-off-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      79c3c0b7
  3. 28 4月, 2009 1 次提交
  4. 17 9月, 2008 1 次提交
  5. 07 8月, 2008 1 次提交
  6. 12 5月, 2007 1 次提交