- 20 10月, 2017 3 次提交
-
-
由 Geert Uytterhoeven 提交于
Remove driver matching support for the unused "renesas,cmt-32" and "renesas,cmt-32-fast" compatible values, cfr. commit 203bb347 ("devicetree: bindings: Remove unused 32-bit CMT bindings"). As this removes the last user of SH_CMT_32BIT_FAST, all support for this variant is removed from the driver. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
由 Magnus Damm 提交于
Add support for the new R-Car Gen2 CMT0 and CMT1 bindings. Support for the old DT binding is still kept around, however devices using such binding will be treated as a low-feature CMT0 device. If users want to make use of CMT1-specific features then they need to update their DTBs. No special CMT1-specific features are however implemented by his patch, only DT bindings are redone as groundwork for future feature patches. Signed-off-by: NMagnus Damm <damm+renesas@opensource.se> Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
由 Magnus Damm 提交于
Always use 0x3f as channel mask for the SH_CMT_48BIT type of devices. Once this patch is applied the "renesas,channels-mask" property will be ignored by the driver for older devices matching SH_CMT_48BIT. In the future when all CMT types store channel mask in the driver then we will be able to deprecate and remove "renesas,channels-mask" from DTS. Signed-off-by: NMagnus Damm <damm+renesas@opensource.se> Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
- 15 4月, 2017 1 次提交
-
-
由 Nicolai Stange 提交于
In preparation for making the clockevents core NTP correction aware, all clockevent device drivers must set ->min_delta_ticks and ->max_delta_ticks rather than ->min_delta_ns and ->max_delta_ns: a clockevent device's rate is going to change dynamically and thus, the ratio of ns to ticks ceases to stay invariant. Make the sh_cmt clockevent driver initialize these fields properly. This patch alone doesn't introduce any change in functionality as the clockevents core still looks exclusively at the (untouched) ->min_delta_ns and ->max_delta_ns. As soon as this has changed, a followup patch will purge the initialization of ->min_delta_ns and ->max_delta_ns from this driver. Cc: Ingo Molnar <mingo@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Richard Cochran <richardcochran@gmail.com> Cc: Prarit Bhargava <prarit@redhat.com> Cc: Stephen Boyd <sboyd@codeaurora.org> Acked-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: NNicolai Stange <nicstange@gmail.com> Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
-
- 24 3月, 2017 1 次提交
-
-
由 Nicolai Stange 提交于
With the upcoming NTP correction related rate adjustments to be implemented in the clockevents core, the latter needs to get informed about every rate change of a clockevent device made after its registration. Currently, sh_cmt violates this requirement in that it registers its clockevent device with a dummy rate and sets its final ->mult and ->shift values from its ->set_state_oneshot() and ->set_state_periodic() functions respectively. This patch moves the setting of the clockevent device's ->mult and ->shift values to before its registration. Note that there has been some back and forth regarding this question with respect to the clocksource also provided by this driver: commit f4d7c356 ("clocksource: sh_cmt: compute mult and shift before registration") moves the rate determination from the clocksource's ->enable() function to before its registration. OTOH, the later commit 3593f5fe ("clocksource: sh_cmt: __clocksource_updatefreq_hz() update") basically reverts this, saying "Without this patch the old code uses clocksource_register() together with a hack that assumes a never changing clock rate." However, I checked all current sh_cmt users in arch/sh as well as in arch/arm/mach-shmobile carefully and right now, none of them changes any rate in any clock tree relevant to sh_cmt after their respective time_init(). Since all sh_cmt instances are created after time_init(), none of them should ever observe any clock rate changes. What's more, both, a clocksource as well as a clockevent device, can immediately get selected for use at their registration and thus, enabled at this point already. So it's probably safer to assume a "never changing clock rate" here. - Move the struct sh_cmt_channel's ->rate member to struct sh_cmt_device: it's a property of the underlying clock which is in turn specific to the sh_cmt_device. - Determine the ->rate value in sh_cmt_setup() at device probing rather than at first usage. - Set the clockevent device's ->mult and ->shift values right before its registration. - Although not strictly necessary for the upcoming clockevent core changes, set the clocksource's rate at its registration for consistency. Signed-off-by: NNicolai Stange <nicstange@gmail.com> Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
-
- 25 12月, 2016 1 次提交
-
-
由 Thomas Gleixner 提交于
There is no point in having an extra type for extra confusion. u64 is unambiguous. Conversion was done with the following coccinelle script: @rem@ @@ -typedef u64 cycle_t; @fix@ typedef cycle_t; @@ -cycle_t +u64 Signed-off-by: NThomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: John Stultz <john.stultz@linaro.org>
-
- 15 10月, 2015 1 次提交
-
-
由 Alexey Klimov 提交于
Memory for cmt struct is allocated by kzalloc() in sh_cmt_setup. Signed-off-by: NAlexey Klimov <alexey.klimov@linaro.org> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
- 10 8月, 2015 4 次提交
-
-
由 Geert Uytterhoeven 提交于
Since the removal of the r8a7740 legacy SoC code in commit 44d88c75 ("ARM: shmobile: Remove legacy SoC code for R-Mobile A1"), all former users of the "sh-cmt-48-gen2" platform device name are only supported in generic DT-only ARM multi-platform builds. The driver doesn't need to match platform devices by name anymore, hence remove the corresponding platform_device_id entry. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Acked-by: NSimon Horman <horms+renesas@verge.net.au>
-
由 Viresh Kumar 提交于
Migrate sh_cmt driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now. This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED. Cc: Magnus Damm <damm+renesas@opensource.se> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Cc: Paul Mundt <lethal@linux-sh.org> Signed-off-by: NViresh Kumar <viresh.kumar@linaro.org> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Acked-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-
由 Geert Uytterhoeven 提交于
Since commit 914d7d14 ("ARM: shmobile: r8a73a4: Remove legacy code"), all former users of the "sh-cmt-48-gen2" platform device name are only supported in generic DT-only ARM multi-platform builds. The driver doesn't need to match platform devices by name anymore, hence remove the corresponding platform_device_id entry. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Acked-by: NSimon Horman <horms+renesas@verge.net.au>
-
由 Geert Uytterhoeven 提交于
Since commit 59b89af1 ("ARM: shmobile: sh7372: Remove Legacy C SoC code"), there are no more users left of the "sh-cmt-32-fast" platform device name. Hence remove the corresponding platform_device_id entry from the driver. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Acked-by: NSimon Horman <horms+renesas@verge.net.au>
-
- 08 8月, 2015 1 次提交
-
-
由 Geert Uytterhoeven 提交于
Currently the sh_cmt clocksource timer is disabled or enabled unconditionally on clocksource suspend resp. resume, even if a better clocksource is present (e.g. arch_sys_counter) and the sh_cmt clocksource is not enabled. As sh_cmt is a syscore device when its timer is enabled, this may lead to a genpd.prepared_count imbalance in the presence of PM Domains, which may cause a lock-up during reboot after s2ram. During suspend: - pm_genpd_prepare() is called for all non-syscore devices (incl. sh_cmt), increasing genpd.prepared_count for each device, - clocksource.suspend() is called for all clocksource devices, - sh_cmt_clocksource_suspend() calls sh_cmt_stop(), which is a no-op as the clocksource was not enabled. During resume: - clocksource.resume() is called for all clocksource devices, - sh_cmt_clocksource_resume() calls sh_cmt_start(), which enables the clocksource timer, and turns sh_cmt into a syscore device, - pm_genpd_complete() is called for all non-syscore devices (excl. sh_cmt now!), decreasing genpd.prepared_count for each device but sh_cmt. Now genpd.prepared_count of the PM Domain containing sh_cmt is still 1 instead of zero. On subsequent suspend/resume cycles, sh_cmt is still a syscore device, hence it's skipped for pm_genpd_{prepare,complete}(), keeping the imbalance of genpd.prepared_count at 1. During reboot: - platform_drv_shutdown() is called for any platform device that has a driver with a .shutdown() method (only rcar-dmac on R-Car Gen2), - platform_drv_shutdown() calls dev_pm_domain_detach(), which calls genpd_dev_pm_detach(), - genpd_dev_pm_detach() keeps calling pm_genpd_remove_device() until it doesn't return -EAGAIN[*], - If the device is part of the same PM Domain as sh_cmt, pm_genpd_remove_device() always fails with -EAGAIN due to genpd.prepared_count > 0. - Infinite loop in genpd_dev_pm_detach()[*]. [*] Commit 93af5e93 ("PM / Domains: Avoid infinite loops in attach/detach code") already limited the number of loop iterations, avoiding the lock-up. To fix this, only disable or enable the clocksource timer on clocksource suspend resp. resume if the clocksource was enabled. This was tested on r8a7791/koelsch with the CPG Clock Domain: - using arch_sys_counter as the clocksource, which is the default, and which showed the problem, - using sh_cmt as a clocksource ("echo ffca0000.timer > \ /sys/devices/system/clocksource/clocksource0/current_clocksource"), which behaves the same as before. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1438875126-12596-2-git-send-email-daniel.lezcano@linaro.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
-
- 13 3月, 2015 1 次提交
-
-
由 John Stultz 提交于
Ingo requested this function be renamed to improve readability, so I've renamed __clocksource_updatefreq_scale() as well as the __clocksource_updatefreq_hz/khz() functions to avoid squishedtogethernames. This touches some of the sh clocksources, which I've not tested. The arch/arm/plat-omap change is just a comment change for consistency. Signed-off-by: NJohn Stultz <john.stultz@linaro.org> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Dave Jones <davej@codemonkey.org.uk> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Prarit Bhargava <prarit@redhat.com> Cc: Richard Cochran <richardcochran@gmail.com> Cc: Stephen Boyd <sboyd@codeaurora.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1426133800-29329-13-git-send-email-john.stultz@linaro.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
-
- 04 7月, 2014 1 次提交
-
-
由 Laurent Pinchart 提交于
Document DT bindings and parse them in the CMT driver. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Tested-by: NSimon Horman <horms+renesas@verge.net.au>
-
- 02 7月, 2014 2 次提交
-
-
由 Laurent Pinchart 提交于
The global spinlock is used to protect the shared start/stop register. Now that all CMT channels are handled by a single device instance, use a per-device spinlock. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Tested-by: NSimon Horman <horms+renesas@verge.net.au>
-
由 Laurent Pinchart 提交于
Now that all platforms have switched to the new-style platform data, drop support for the legacy version. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Tested-by: NSimon Horman <horms+renesas@verge.net.au>
-
- 23 5月, 2014 1 次提交
-
-
由 Jingoo Han 提交于
The site-specific OOM messages are unnecessary, because they duplicate the MM subsystem generic OOM message. [dlezcano] : refreshed against latest modifications: kmalloc -> kzalloc Signed-off-by: NJingoo Han <jg1.han@samsung.com> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
- 16 4月, 2014 20 次提交
-
-
由 Laurent Pinchart 提交于
Clock sources don't need an IRQ, request the IRQ only for channels used as clock event devices. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
This helps locating duplicates and inserting new headers. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The sh_cmt driver gets the CMT functional clock using a connection ID of "cmt_fck". While all SH SoCs create clock lookup entries with a NULL device ID and a "cmt_fck" connection ID, the ARM SoCs use the device ID only with a NULL connection ID. This works on legacy platforms but will break on ARM with DT boot. Fix the situation by using a connection ID of "fck" in the non-legacy platform data case. Clock lookup entries will be renamed to use the device ID as well as the connection ID as platforms get moved to new platform data. The legacy code will eventually be dropped, leaving us with device ID based clock lookup, compatible with DT boot. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
CMT hardware devices can support multiple channels, with global registers and per-channel registers. The sh_cmt driver currently models the hardware with one Linux device per channel. This model makes it difficult to handle global registers in a clean way. Add support for a new model that uses one Linux device per timer with multiple channels per device. This requires changes to platform data, add new channel configuration fields. Support for the legacy model is kept and will be removed after all platforms switch to the new model. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
All boards use or should use a clock source rating of 125 for the CMT, hardcode it in the driver. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
All boards use or should use a clock event rating of 125 for the CMT, hardcode it in the driver. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The CMT is a global timer not restricted to a single CPU. It has a lower rating than the TMU or ARM architected timer, but is still useful on systems where the other timers are stopped during CPU sleep. When multiple timers are available the timers core selects which timer to use based on timer ratings. On SMP systems where timer broadcasting is required, one dummy timer is instantiated per CPU with a rating of 100. On those systems the CMT timer has a rating of 80, which makes the dummy timer selected by default on all CPUs. The CMT is then available, and will be used as a broadcast timer. On UP systems no dummy timer is instantiated. The CMT timer has a rating of 125 on those systems and is used directly as a clock event device for CPU0 without broadcasting. The CMT rating shouldn't depend on whether we boot a UP or SMP system. We can't raise the CMT rating to 125 on SMP systems. This would select CMT as the clock event device for CPU0 as its rating is higher than the dummy timer rating, and would leave the system without a broadcast timer. We could instead lower the rating to 80 on all systems, but that wouldn't reflect reality as ratings between 1 and 99 are documented as "unfit for real use". We should raise the rating above 99 and still have the CMT selected as a broadcast timer. This can be done by changing the cpumask from cpumask_of(0) to cpu_possible_mask. In that case the timer selection logic will prefer the previously probed and already selected dummy timer for all CPUs based on the fact that already selected per-cpu timers are preferred over new global timers, regardless of their respective ratings. This also better reflects reality, as the CMT is not tied to the boot CPU. Ideally the timer selection logic should realize that the CMT needs to be used as a broadcast timer on SMP systems as no other broadcast timer is available, regardless of the cpumask and rating. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Define symbolic macros for all used registers bits. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Create a new sh_cmt_info structure to hold static information about the device model and reference that structure from the sh_cmt_device structure. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
This prepares the driver for multi-channel support. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
One kzalloc a day keeps the bugs away. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Use the index when printing messages to identify the channel. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The channel memory base is channel-specific, add it to the channel structure in preparation for support of multiple channels per device. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The mapbase variable points to the mapped base address of the channel, rename it to mapbase_sh. mapbase_str points to the mapped base address of the CMT device, rename it to mapbase. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The name argument is assigned to const structure fields only, constify it. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Move the channel setup code from sh_cmt_setup to a new sh_cmt_setup_channel function and call it from sh_cmt_setup. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Channel data is private as well, rename priv to device to make the distrinction between the core device and the channels clearer. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
Create a new sh_cmt_channel structure to hold the channel-specific field in preparation for multiple channels per device support. Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> -
由 Laurent Pinchart 提交于
The driver claims it needs to register an interrupt handler too early for request_irq(). This might have been true in the past, but the only meaningful difference between request_irq() and setup_irq() today is an additional kzalloc() call in request_irq(). As the driver calls kmalloc() itself we know that the slab allocator is available, we can thus switch to request_irq(). Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-
- 18 12月, 2013 1 次提交
-
-
由 Laurent Pinchart 提交于
Prepare the clock at probe time, as there is no other appropriate place in the driver where we're allowed to sleep. Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: linux-kernel@vger.kernel.org Signed-off-by: NLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: NSimon Horman <horms+renesas@verge.net.au> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
- 11 12月, 2013 1 次提交
-
-
由 Michael Opdenacker 提交于
This patch removes the use of the IRQF_DISABLED flag It's a NOOP since 2.6.35 and it will be removed one day. [dlezcano] : slightly changed the changelog Signed-off-by: NMichael Opdenacker <michael.opdenacker@free-electrons.com> Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
-
- 22 8月, 2013 1 次提交
-
-
由 Magnus Damm 提交于
Add support for CMT hardware with 32-bit control and counter registers, as found on r8a73a4 and r8a7790. To use the CMT with 32-bit hardware a second I/O memory resource needs to point out the CMSTR register and it needs to be 32 bit wide. Signed-off-by: NMagnus Damm <damm@opensource.se> Reviewed-by: NDaniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: NSimon Horman <horms+renesas@verge.net.au>
-