• Jon Hunter's avatar
    ARM: OMAP: Remove __omap_dm_timer_set_source function · b1538832
    Jon Hunter authored
    The __omap_dm_timer_set_source() function is only used by the system timer
    (clock-events and clock-source) code for OMAP2+ devices. Therefore, we can
    remove this code from the dmtimer driver and move it to the system timer
    code for OMAP2+ devices.
    
    The current __omap_dm_timer_set_source() function calls clk_disable() before
    calling clk_set_parent() and clk_enable() afterwards. We can avoid these calls
    to clk_disable/enable by moving the calls to omap_hwmod_setup_one() and
    omap_hwmod_enable() to after the call to clk_set_parent() in
    omap_dm_timer_init_one().
    
    The function omap_hwmod_setup_one() will enable the timers functional clock
    and therefore increment the use-count of the functional clock to 1.
    clk_set_parent() will fail if the use-count is not 0 when called. Hence, if
    omap_hwmod_setup_one() is called before clk_set_parent(), we will need to call
    clk_disable() before calling clk_set_parent() to decrement the use-count.
    Hence, avoid these extra calls to disable and enable the functional clock by
    moving the calls to omap_hwmod_setup_one() and omap_hwmod_enable() to after
    clk_set_parent().
    
    We can also remove the delay from the __omap_dm_timer_set_source() function
    because enabling the clock will now be handled via the HWMOD framework by
    calling omap_hwmod_setup_one(). Therefore, by moving the calls to
    omap_hwmod_setup_one() and omap_hwmod_enable() to after the call to
    clk_set_parent(), we can simply replace __omap_dm_timer_set_source() with
    clk_set_parent().
    
    It should be safe to move these hwmod calls to later in the
    omap_dm_timer_init_one() because other calls to the hwmod layer that occur
    before are just requesting resource information.
    
    Testing includes boot testing on OMAP2420 H4, OMAP3430 SDP and OMAP4430 Blaze
    with the following configurations:
    1. CONFIG_OMAP_32K_TIMER=y
    2. CONFIG_OMAP_32K_TIMER=y and boot parameter "clocksource=gp_timer"
    3. CONFIG_OMAP_32K_TIMER not set
    4. CONFIG_OMAP_32K_TIMER not set and boot parameter "clocksource=gp_timer"
    Signed-off-by: default avatarJon Hunter <jon-hunter@ti.com>
    Acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@ti.com>
    b1538832
dmtimer.h 14.4 KB