More OMAP hwmod and clock fixes for v3.10-rc. Fixes the AM33xx UART2.
Also fixes some CCF-related breakage on OMAP36xx/37xx, affecting DSS at the very least. Basic test logs for this branch are here: http://www.pwsan.com/omap/testlogs/fixes_b_v3.10-rc/20130606093449/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRsMp7AAoJEMePsQ0LvSpL9bsP/0gRY5Vb9qXQPEiUz+UqtwBr TjugjMmCOlvU8MkHKVI3Cp5qxfvBIsDT7x74AjA6q5E7In3+1njIxLwoa81osgTU s97LkjbBo4RuB6G9EWTQCedYLgyyIzqTQA3JCUx46K6E0ERonjf+viPZl3GvYb+Z cl9oZYya0DC+5QBJzZlodMu/5JHGpFrqgs505KFovVcxnWCRcZGx3hMH9Be6pSsD je24xjpjMWfhTToQMpbW58ZDWSTh5GLnu87blff8C8ojWlwmF+iwfECSZQfrPHCA 9g1aSsA37DWUB1krOZ1nUUdQ7eP6fjR4lWpz1mNOT5cBlncDqT/2M4lumkjCIsie +Nv24xGQwpJRzAyYzJGJqedB1j7i8/HbCVzCkAqJnNCiimW7LKUwDqzHBYiZAhcI Gs2/xUDBhLNfjSbGeCj+nnRMP5VpiT2ZEWtk1W+Icld/tG3//7TF3OYm1gzG57Xg Dza6uAeO9ZxTZtGkYQtnzwT9Wm19i87ExD9nORclr5vT//uqKWHye9JaddXFL86Z oePaTikhZK2HJIUP2JgDYGDB7PBAE9gMJ16JeKd6OfGn8ISJD6TPsuJ8wM98FKXQ CRblPO6i0NTOe1Gsfy2Z+9gLZi2HxDLLNcVTnx+V/VXg1Srpjg2ZQ8yLDfOPHFYm /IuIiZTq97dmTicqm5dj =HWUH -----END PGP SIGNATURE----- Merge tag 'omap-fixes-b-for-3.10-rc' of git://git.kernel.org/pub/scm/linux/kernel/git/pjw/omap-pending into omap-for-v3.10/fixes More OMAP hwmod and clock fixes for v3.10-rc. Fixes the AM33xx UART2. Also fixes some CCF-related breakage on OMAP36xx/37xx, affecting DSS at the very least. Basic test logs for this branch are here: http://www.pwsan.com/omap/testlogs/fixes_b_v3.10-rc/20130606093449/
This commit is contained in:
commit
03c0d27119
2 changed files with 17 additions and 10 deletions
|
@ -20,11 +20,12 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "clock36xx.h"
|
||||
|
||||
#define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw)
|
||||
|
||||
/**
|
||||
* omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering
|
||||
|
@ -39,29 +40,28 @@
|
|||
*/
|
||||
int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk)
|
||||
{
|
||||
struct clk_hw_omap *parent;
|
||||
struct clk_divider *parent;
|
||||
struct clk_hw *parent_hw;
|
||||
u32 dummy_v, orig_v, clksel_shift;
|
||||
u32 dummy_v, orig_v;
|
||||
int ret;
|
||||
|
||||
/* Clear PWRDN bit of HSDIVIDER */
|
||||
ret = omap2_dflt_clk_enable(clk);
|
||||
|
||||
parent_hw = __clk_get_hw(__clk_get_parent(clk->clk));
|
||||
parent = to_clk_hw_omap(parent_hw);
|
||||
parent = to_clk_divider(parent_hw);
|
||||
|
||||
/* Restore the dividers */
|
||||
if (!ret) {
|
||||
clksel_shift = __ffs(parent->clksel_mask);
|
||||
orig_v = __raw_readl(parent->clksel_reg);
|
||||
orig_v = __raw_readl(parent->reg);
|
||||
dummy_v = orig_v;
|
||||
|
||||
/* Write any other value different from the Read value */
|
||||
dummy_v ^= (1 << clksel_shift);
|
||||
__raw_writel(dummy_v, parent->clksel_reg);
|
||||
dummy_v ^= (1 << parent->shift);
|
||||
__raw_writel(dummy_v, parent->reg);
|
||||
|
||||
/* Write the original divider */
|
||||
__raw_writel(orig_v, parent->clksel_reg);
|
||||
__raw_writel(orig_v, parent->reg);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -2007,6 +2007,13 @@ static struct omap_hwmod am33xx_uart1_hwmod = {
|
|||
},
|
||||
};
|
||||
|
||||
/* uart2 */
|
||||
static struct omap_hwmod_dma_info uart2_edma_reqs[] = {
|
||||
{ .name = "tx", .dma_req = 28, },
|
||||
{ .name = "rx", .dma_req = 29, },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
static struct omap_hwmod_irq_info am33xx_uart2_irqs[] = {
|
||||
{ .irq = 73 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
|
@ -2018,7 +2025,7 @@ static struct omap_hwmod am33xx_uart2_hwmod = {
|
|||
.clkdm_name = "l4ls_clkdm",
|
||||
.flags = HWMOD_SWSUP_SIDLE_ACT,
|
||||
.mpu_irqs = am33xx_uart2_irqs,
|
||||
.sdma_reqs = uart1_edma_reqs,
|
||||
.sdma_reqs = uart2_edma_reqs,
|
||||
.main_clk = "dpll_per_m2_div4_ck",
|
||||
.prcm = {
|
||||
.omap4 = {
|
||||
|
|
Loading…
Reference in a new issue