提交 7420b73d 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  NVRAM depends on RTC_DRV_CMOS
  rename platform_driver name "flash" to "sa1100-mtd"
  annotate that [fp, #-4] is the saved lr
  Use __SPIN_LOCK_UNLOCKED to initialize bad_irq_desc.lock
  ARM: OMAP: fix fault in enter_full_retention()
  ARM: OMAP: Mask interrupts when disabling interrupts, v2
  ARM: OMAP: gptimer min_delta_ns corrected
  ARM: OMAP: Fix hsmmc init, v2
  ARM: OMAP: Fix omap34xx revision detection for ES3.1
  ARM: OMAP: DMA: Fix uninitialized channel flags
  ARM: OMAP: Fix race in OMAP2/3 DMA IRQ handling
  ARM: OMAP: Fix McBSP spin_lock deadlock
  [ARM] 5366/1: fix shared memory coherency with VIVT L1 + L2 caches
  [ARM] call undefined instruction exception handler with irqs enabled
  [ARM] msm: fix build errors
  [ARM] etherh: continue fixing build failure
...@@ -650,6 +650,7 @@ ENTRY(fp_enter) ...@@ -650,6 +650,7 @@ ENTRY(fp_enter)
no_fp: mov pc, lr no_fp: mov pc, lr
__und_usr_unknown: __und_usr_unknown:
enable_irq
mov r0, sp mov r0, sp
adr lr, ret_from_exception adr lr, ret_from_exception
b do_undefinstr b do_undefinstr
......
...@@ -136,7 +136,7 @@ ENTRY(mcount) ...@@ -136,7 +136,7 @@ ENTRY(mcount)
ldmia sp!, {r0-r3, pc} ldmia sp!, {r0-r3, pc}
trace: trace:
ldr r1, [fp, #-4] ldr r1, [fp, #-4] @ lr of instrumented routine
mov r0, lr mov r0, lr
sub r0, r0, #MCOUNT_INSN_SIZE sub r0, r0, #MCOUNT_INSN_SIZE
mov lr, pc mov lr, pc
......
...@@ -101,7 +101,7 @@ int show_interrupts(struct seq_file *p, void *v) ...@@ -101,7 +101,7 @@ int show_interrupts(struct seq_file *p, void *v)
/* Handle bad interrupts */ /* Handle bad interrupts */
static struct irq_desc bad_irq_desc = { static struct irq_desc bad_irq_desc = {
.handle_irq = handle_bad_irq, .handle_irq = handle_bad_irq,
.lock = SPIN_LOCK_UNLOCKED .lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock),
}; };
/* /*
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <mach/irqs.h>
#include <mach/board.h> #include <mach/board.h>
#include <mach/msm_iomap.h> #include <mach/msm_iomap.h>
......
...@@ -181,7 +181,7 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, ...@@ -181,7 +181,7 @@ void __init omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
} }
size = OMAP1_MMC_SIZE; size = OMAP1_MMC_SIZE;
omap_mmc_add(i, base, size, irq, mmc_data[i]); omap_mmc_add("mmci-omap", i, base, size, irq, mmc_data[i]);
}; };
} }
......
...@@ -28,81 +28,8 @@ ...@@ -28,81 +28,8 @@
#define DPS_RSTCT2_PER_EN (1 << 0) #define DPS_RSTCT2_PER_EN (1 << 0)
#define DSP_RSTCT2_WD_PER_EN (1 << 1) #define DSP_RSTCT2_WD_PER_EN (1 << 1)
struct mcbsp_internal_clk {
struct clk clk;
struct clk **childs;
int n_childs;
};
#if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX) #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
static void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk) const char *clk_names[] = { "dsp_ck", "api_ck", "dspxor_ck" };
{
const char *clk_names[] = { "dsp_ck", "api_ck", "dspxor_ck" };
int i;
mclk->n_childs = ARRAY_SIZE(clk_names);
mclk->childs = kzalloc(mclk->n_childs * sizeof(struct clk *),
GFP_KERNEL);
for (i = 0; i < mclk->n_childs; i++) {
/* We fake a platform device to get correct device id */
struct platform_device pdev;
pdev.dev.bus = &platform_bus_type;
pdev.id = mclk->clk.id;
mclk->childs[i] = clk_get(&pdev.dev, clk_names[i]);
if (IS_ERR(mclk->childs[i]))
printk(KERN_ERR "Could not get clock %s (%d).\n",
clk_names[i], mclk->clk.id);
}
}
static int omap_mcbsp_clk_enable(struct clk *clk)
{
struct mcbsp_internal_clk *mclk = container_of(clk,
struct mcbsp_internal_clk, clk);
int i;
for (i = 0; i < mclk->n_childs; i++)
clk_enable(mclk->childs[i]);
return 0;
}
static void omap_mcbsp_clk_disable(struct clk *clk)
{
struct mcbsp_internal_clk *mclk = container_of(clk,
struct mcbsp_internal_clk, clk);
int i;
for (i = 0; i < mclk->n_childs; i++)
clk_disable(mclk->childs[i]);
}
static struct mcbsp_internal_clk omap_mcbsp_clks[] = {
{
.clk = {
.name = "mcbsp_clk",
.id = 1,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
{
.clk = {
.name = "mcbsp_clk",
.id = 3,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
};
#define omap_mcbsp_clks_size ARRAY_SIZE(omap_mcbsp_clks)
#else
#define omap_mcbsp_clks_size 0
static struct mcbsp_internal_clk __initdata *omap_mcbsp_clks;
static inline void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk)
{ }
#endif #endif
static void omap1_mcbsp_request(unsigned int id) static void omap1_mcbsp_request(unsigned int id)
...@@ -167,8 +94,9 @@ static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = { ...@@ -167,8 +94,9 @@ static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = {
.rx_irq = INT_McBSP1RX, .rx_irq = INT_McBSP1RX,
.tx_irq = INT_McBSP1TX, .tx_irq = INT_McBSP1TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
}, .num_clks = 3,
},
{ {
.phys_base = OMAP1510_MCBSP2_BASE, .phys_base = OMAP1510_MCBSP2_BASE,
.dma_rx_sync = OMAP_DMA_MCBSP2_RX, .dma_rx_sync = OMAP_DMA_MCBSP2_RX,
...@@ -184,7 +112,8 @@ static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = { ...@@ -184,7 +112,8 @@ static struct omap_mcbsp_platform_data omap15xx_mcbsp_pdata[] = {
.rx_irq = INT_McBSP3RX, .rx_irq = INT_McBSP3RX,
.tx_irq = INT_McBSP3TX, .tx_irq = INT_McBSP3TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 3,
}, },
}; };
#define OMAP15XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap15xx_mcbsp_pdata) #define OMAP15XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap15xx_mcbsp_pdata)
...@@ -202,7 +131,8 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { ...@@ -202,7 +131,8 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
.rx_irq = INT_McBSP1RX, .rx_irq = INT_McBSP1RX,
.tx_irq = INT_McBSP1TX, .tx_irq = INT_McBSP1TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 3,
}, },
{ {
.phys_base = OMAP1610_MCBSP2_BASE, .phys_base = OMAP1610_MCBSP2_BASE,
...@@ -219,7 +149,8 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { ...@@ -219,7 +149,8 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
.rx_irq = INT_McBSP3RX, .rx_irq = INT_McBSP3RX,
.tx_irq = INT_McBSP3TX, .tx_irq = INT_McBSP3TX,
.ops = &omap1_mcbsp_ops, .ops = &omap1_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 3,
}, },
}; };
#define OMAP16XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap16xx_mcbsp_pdata) #define OMAP16XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap16xx_mcbsp_pdata)
...@@ -230,15 +161,6 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { ...@@ -230,15 +161,6 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
int __init omap1_mcbsp_init(void) int __init omap1_mcbsp_init(void)
{ {
int i;
for (i = 0; i < omap_mcbsp_clks_size; i++) {
if (cpu_is_omap15xx() || cpu_is_omap16xx()) {
omap_mcbsp_clk_init(&omap_mcbsp_clks[i]);
clk_register(&omap_mcbsp_clks[i].clk);
}
}
if (cpu_is_omap730()) if (cpu_is_omap730())
omap_mcbsp_count = OMAP730_MCBSP_PDATA_SZ; omap_mcbsp_count = OMAP730_MCBSP_PDATA_SZ;
if (cpu_is_omap15xx()) if (cpu_is_omap15xx())
......
...@@ -421,6 +421,7 @@ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, ...@@ -421,6 +421,7 @@ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers) int nr_controllers)
{ {
int i; int i;
char *name;
for (i = 0; i < nr_controllers; i++) { for (i = 0; i < nr_controllers; i++) {
unsigned long base, size; unsigned long base, size;
...@@ -450,12 +451,14 @@ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, ...@@ -450,12 +451,14 @@ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
continue; continue;
} }
if (cpu_is_omap2420()) if (cpu_is_omap2420()) {
size = OMAP2420_MMC_SIZE; size = OMAP2420_MMC_SIZE;
else name = "mmci-omap";
} else {
size = HSMMC_SIZE; size = HSMMC_SIZE;
name = "mmci-omap-hs";
omap_mmc_add(i, base, size, irq, mmc_data[i]); }
omap_mmc_add(name, i, base, size, irq, mmc_data[i]);
}; };
} }
......
...@@ -172,9 +172,13 @@ void __init omap34xx_check_revision(void) ...@@ -172,9 +172,13 @@ void __init omap34xx_check_revision(void)
omap_revision = OMAP3430_REV_ES3_0; omap_revision = OMAP3430_REV_ES3_0;
rev_name = "ES3.0"; rev_name = "ES3.0";
break; break;
case 4:
omap_revision = OMAP3430_REV_ES3_1;
rev_name = "ES3.1";
break;
default: default:
/* Use the latest known revision as default */ /* Use the latest known revision as default */
omap_revision = OMAP3430_REV_ES3_0; omap_revision = OMAP3430_REV_ES3_1;
rev_name = "Unknown revision\n"; rev_name = "Unknown revision\n";
} }
} }
......
...@@ -134,6 +134,7 @@ static struct irq_chip omap_irq_chip = { ...@@ -134,6 +134,7 @@ static struct irq_chip omap_irq_chip = {
.ack = omap_mask_ack_irq, .ack = omap_mask_ack_irq,
.mask = omap_mask_irq, .mask = omap_mask_irq,
.unmask = omap_unmask_irq, .unmask = omap_unmask_irq,
.disable = omap_mask_irq,
}; };
static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank) static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
......
...@@ -24,106 +24,7 @@ ...@@ -24,106 +24,7 @@
#include <mach/cpu.h> #include <mach/cpu.h>
#include <mach/mcbsp.h> #include <mach/mcbsp.h>
struct mcbsp_internal_clk { const char *clk_names[] = { "mcbsp_ick", "mcbsp_fck" };
struct clk clk;
struct clk **childs;
int n_childs;
};
#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
static void omap_mcbsp_clk_init(struct mcbsp_internal_clk *mclk)
{
const char *clk_names[] = { "mcbsp_ick", "mcbsp_fck" };
int i;
mclk->n_childs = ARRAY_SIZE(clk_names);
mclk->childs = kzalloc(mclk->n_childs * sizeof(struct clk *),
GFP_KERNEL);
for (i = 0; i < mclk->n_childs; i++) {
/* We fake a platform device to get correct device id */
struct platform_device pdev;
pdev.dev.bus = &platform_bus_type;
pdev.id = mclk->clk.id;
mclk->childs[i] = clk_get(&pdev.dev, clk_names[i]);
if (IS_ERR(mclk->childs[i]))
printk(KERN_ERR "Could not get clock %s (%d).\n",
clk_names[i], mclk->clk.id);
}
}
static int omap_mcbsp_clk_enable(struct clk *clk)
{
struct mcbsp_internal_clk *mclk = container_of(clk,
struct mcbsp_internal_clk, clk);
int i;
for (i = 0; i < mclk->n_childs; i++)
clk_enable(mclk->childs[i]);
return 0;
}
static void omap_mcbsp_clk_disable(struct clk *clk)
{
struct mcbsp_internal_clk *mclk = container_of(clk,
struct mcbsp_internal_clk, clk);
int i;
for (i = 0; i < mclk->n_childs; i++)
clk_disable(mclk->childs[i]);
}
static struct mcbsp_internal_clk omap_mcbsp_clks[] = {
{
.clk = {
.name = "mcbsp_clk",
.id = 1,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
{
.clk = {
.name = "mcbsp_clk",
.id = 2,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
{
.clk = {
.name = "mcbsp_clk",
.id = 3,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
{
.clk = {
.name = "mcbsp_clk",
.id = 4,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
{
.clk = {
.name = "mcbsp_clk",
.id = 5,
.enable = omap_mcbsp_clk_enable,
.disable = omap_mcbsp_clk_disable,
},
},
};
#define omap_mcbsp_clks_size ARRAY_SIZE(omap_mcbsp_clks)
#else
#define omap_mcbsp_clks_size 0
static struct mcbsp_internal_clk __initdata *omap_mcbsp_clks;
static inline void omap_mcbsp_clk_init(struct clk *clk)
{ }
#endif
static void omap2_mcbsp2_mux_setup(void) static void omap2_mcbsp2_mux_setup(void)
{ {
...@@ -156,7 +57,8 @@ static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = { ...@@ -156,7 +57,8 @@ static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP1_IRQ_RX, .rx_irq = INT_24XX_MCBSP1_IRQ_RX,
.tx_irq = INT_24XX_MCBSP1_IRQ_TX, .tx_irq = INT_24XX_MCBSP1_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP24XX_MCBSP2_BASE, .phys_base = OMAP24XX_MCBSP2_BASE,
...@@ -165,7 +67,8 @@ static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = { ...@@ -165,7 +67,8 @@ static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP2_IRQ_RX, .rx_irq = INT_24XX_MCBSP2_IRQ_RX,
.tx_irq = INT_24XX_MCBSP2_IRQ_TX, .tx_irq = INT_24XX_MCBSP2_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
}; };
#define OMAP2420_MCBSP_PDATA_SZ ARRAY_SIZE(omap2420_mcbsp_pdata) #define OMAP2420_MCBSP_PDATA_SZ ARRAY_SIZE(omap2420_mcbsp_pdata)
...@@ -183,7 +86,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { ...@@ -183,7 +86,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP1_IRQ_RX, .rx_irq = INT_24XX_MCBSP1_IRQ_RX,
.tx_irq = INT_24XX_MCBSP1_IRQ_TX, .tx_irq = INT_24XX_MCBSP1_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP24XX_MCBSP2_BASE, .phys_base = OMAP24XX_MCBSP2_BASE,
...@@ -192,7 +96,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { ...@@ -192,7 +96,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP2_IRQ_RX, .rx_irq = INT_24XX_MCBSP2_IRQ_RX,
.tx_irq = INT_24XX_MCBSP2_IRQ_TX, .tx_irq = INT_24XX_MCBSP2_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP2430_MCBSP3_BASE, .phys_base = OMAP2430_MCBSP3_BASE,
...@@ -201,7 +106,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { ...@@ -201,7 +106,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP3_IRQ_RX, .rx_irq = INT_24XX_MCBSP3_IRQ_RX,
.tx_irq = INT_24XX_MCBSP3_IRQ_TX, .tx_irq = INT_24XX_MCBSP3_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP2430_MCBSP4_BASE, .phys_base = OMAP2430_MCBSP4_BASE,
...@@ -210,7 +116,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { ...@@ -210,7 +116,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP4_IRQ_RX, .rx_irq = INT_24XX_MCBSP4_IRQ_RX,
.tx_irq = INT_24XX_MCBSP4_IRQ_TX, .tx_irq = INT_24XX_MCBSP4_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP2430_MCBSP5_BASE, .phys_base = OMAP2430_MCBSP5_BASE,
...@@ -219,7 +126,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { ...@@ -219,7 +126,8 @@ static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP5_IRQ_RX, .rx_irq = INT_24XX_MCBSP5_IRQ_RX,
.tx_irq = INT_24XX_MCBSP5_IRQ_TX, .tx_irq = INT_24XX_MCBSP5_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
}; };
#define OMAP2430_MCBSP_PDATA_SZ ARRAY_SIZE(omap2430_mcbsp_pdata) #define OMAP2430_MCBSP_PDATA_SZ ARRAY_SIZE(omap2430_mcbsp_pdata)
...@@ -237,7 +145,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -237,7 +145,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP1_IRQ_RX, .rx_irq = INT_24XX_MCBSP1_IRQ_RX,
.tx_irq = INT_24XX_MCBSP1_IRQ_TX, .tx_irq = INT_24XX_MCBSP1_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP34XX_MCBSP2_BASE, .phys_base = OMAP34XX_MCBSP2_BASE,
...@@ -246,7 +155,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -246,7 +155,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP2_IRQ_RX, .rx_irq = INT_24XX_MCBSP2_IRQ_RX,
.tx_irq = INT_24XX_MCBSP2_IRQ_TX, .tx_irq = INT_24XX_MCBSP2_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP34XX_MCBSP3_BASE, .phys_base = OMAP34XX_MCBSP3_BASE,
...@@ -255,7 +165,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -255,7 +165,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP3_IRQ_RX, .rx_irq = INT_24XX_MCBSP3_IRQ_RX,
.tx_irq = INT_24XX_MCBSP3_IRQ_TX, .tx_irq = INT_24XX_MCBSP3_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP34XX_MCBSP4_BASE, .phys_base = OMAP34XX_MCBSP4_BASE,
...@@ -264,7 +175,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -264,7 +175,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP4_IRQ_RX, .rx_irq = INT_24XX_MCBSP4_IRQ_RX,
.tx_irq = INT_24XX_MCBSP4_IRQ_TX, .tx_irq = INT_24XX_MCBSP4_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
{ {
.phys_base = OMAP34XX_MCBSP5_BASE, .phys_base = OMAP34XX_MCBSP5_BASE,
...@@ -273,7 +185,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -273,7 +185,8 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
.rx_irq = INT_24XX_MCBSP5_IRQ_RX, .rx_irq = INT_24XX_MCBSP5_IRQ_RX,
.tx_irq = INT_24XX_MCBSP5_IRQ_TX, .tx_irq = INT_24XX_MCBSP5_IRQ_TX,
.ops = &omap2_mcbsp_ops, .ops = &omap2_mcbsp_ops,
.clk_name = "mcbsp_clk", .clk_names = clk_names,
.num_clks = 2,
}, },
}; };
#define OMAP34XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap34xx_mcbsp_pdata) #define OMAP34XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap34xx_mcbsp_pdata)
...@@ -284,14 +197,6 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = { ...@@ -284,14 +197,6 @@ static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
static int __init omap2_mcbsp_init(void) static int __init omap2_mcbsp_init(void)
{ {
int i;
for (i = 0; i < omap_mcbsp_clks_size; i++) {
/* Once we call clk_get inside init, we do not register it */
omap_mcbsp_clk_init(&omap_mcbsp_clks[i]);
clk_register(&omap_mcbsp_clks[i].clk);
}
if (cpu_is_omap2420()) if (cpu_is_omap2420())
omap_mcbsp_count = OMAP2420_MCBSP_PDATA_SZ; omap_mcbsp_count = OMAP2420_MCBSP_PDATA_SZ;
if (cpu_is_omap2430()) if (cpu_is_omap2430())
......
...@@ -93,9 +93,8 @@ ENTRY(omap24xx_cpu_suspend) ...@@ -93,9 +93,8 @@ ENTRY(omap24xx_cpu_suspend)
orr r4, r4, #0x40 @ enable self refresh on idle req orr r4, r4, #0x40 @ enable self refresh on idle req
mov r5, #0x2000 @ set delay (DPLL relock + DLL relock) mov r5, #0x2000 @ set delay (DPLL relock + DLL relock)
str r4, [r2] @ make it so str r4, [r2] @ make it so
mov r2, #0
nop nop
mcr p15, 0, r2, c7, c0, 4 @ wait for interrupt mcr p15, 0, r3, c7, c0, 4 @ wait for interrupt
nop nop
loop: loop:
subs r5, r5, #0x1 @ awake, wait just a bit subs r5, r5, #0x1 @ awake, wait just a bit
......
...@@ -118,7 +118,8 @@ static void __init omap2_gp_clockevent_init(void) ...@@ -118,7 +118,8 @@ static void __init omap2_gp_clockevent_init(void)
clockevent_gpt.max_delta_ns = clockevent_gpt.max_delta_ns =
clockevent_delta2ns(0xffffffff, &clockevent_gpt); clockevent_delta2ns(0xffffffff, &clockevent_gpt);
clockevent_gpt.min_delta_ns = clockevent_gpt.min_delta_ns =
clockevent_delta2ns(1, &clockevent_gpt); clockevent_delta2ns(3, &clockevent_gpt);
/* Timer internal resynch latency. */
clockevent_gpt.cpumask = cpumask_of(0); clockevent_gpt.cpumask = cpumask_of(0);
clockevents_register_device(&clockevent_gpt); clockevents_register_device(&clockevent_gpt);
......
...@@ -289,7 +289,7 @@ static struct platform_device sa11x0pcmcia_device = { ...@@ -289,7 +289,7 @@ static struct platform_device sa11x0pcmcia_device = {
}; };
static struct platform_device sa11x0mtd_device = { static struct platform_device sa11x0mtd_device = {
.name = "flash", .name = "sa1100-mtd",
.id = -1, .id = -1,
}; };
......
...@@ -66,7 +66,10 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address) ...@@ -66,7 +66,10 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address)
* fault (ie, is old), we can safely ignore any issues. * fault (ie, is old), we can safely ignore any issues.
*/ */
if (ret && (pte_val(entry) & L_PTE_MT_MASK) != shared_pte_mask) { if (ret && (pte_val(entry) & L_PTE_MT_MASK) != shared_pte_mask) {
flush_cache_page(vma, address, pte_pfn(entry)); unsigned long pfn = pte_pfn(entry);
flush_cache_page(vma, address, pfn);
outer_flush_range((pfn << PAGE_SHIFT),
(pfn << PAGE_SHIFT) + PAGE_SIZE);
pte_val(entry) &= ~L_PTE_MT_MASK; pte_val(entry) &= ~L_PTE_MT_MASK;
pte_val(entry) |= shared_pte_mask; pte_val(entry) |= shared_pte_mask;
set_pte_at(vma->vm_mm, address, pte, entry); set_pte_at(vma->vm_mm, address, pte, entry);
......
...@@ -200,14 +200,15 @@ void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config, ...@@ -200,14 +200,15 @@ void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config,
/* /*
* Register MMC devices. Called from mach-omap1 and mach-omap2 device init. * Register MMC devices. Called from mach-omap1 and mach-omap2 device init.
*/ */
int __init omap_mmc_add(int id, unsigned long base, unsigned long size, int __init omap_mmc_add(const char *name, int id, unsigned long base,
unsigned int irq, struct omap_mmc_platform_data *data) unsigned long size, unsigned int irq,
struct omap_mmc_platform_data *data)
{ {
struct platform_device *pdev; struct platform_device *pdev;
struct resource res[OMAP_MMC_NR_RES]; struct resource res[OMAP_MMC_NR_RES];
int ret; int ret;
pdev = platform_device_alloc("mmci-omap", id); pdev = platform_device_alloc(name, id);
if (!pdev) if (!pdev)
return -ENOMEM; return -ENOMEM;
......
...@@ -709,6 +709,7 @@ int omap_request_dma(int dev_id, const char *dev_name, ...@@ -709,6 +709,7 @@ int omap_request_dma(int dev_id, const char *dev_name,
chan->dev_name = dev_name; chan->dev_name = dev_name;
chan->callback = callback; chan->callback = callback;
chan->data = data; chan->data = data;
chan->flags = 0;
#ifndef CONFIG_ARCH_OMAP1 #ifndef CONFIG_ARCH_OMAP1
if (cpu_class_is_omap2()) { if (cpu_class_is_omap2()) {
...@@ -1888,11 +1889,11 @@ static int omap2_dma_handle_ch(int ch) ...@@ -1888,11 +1889,11 @@ static int omap2_dma_handle_ch(int ch)
status = dma_read(CSR(ch)); status = dma_read(CSR(ch));
} }
dma_write(status, CSR(ch));
if (likely(dma_chan[ch].callback != NULL)) if (likely(dma_chan[ch].callback != NULL))
dma_chan[ch].callback(ch, status, dma_chan[ch].data); dma_chan[ch].callback(ch, status, dma_chan[ch].data);
dma_write(status, CSR(ch));
return 0; return 0;
} }
......
...@@ -339,6 +339,7 @@ IS_OMAP_TYPE(3430, 0x3430) ...@@ -339,6 +339,7 @@ IS_OMAP_TYPE(3430, 0x3430)
#define OMAP3430_REV_ES2_0 0x34301034 #define OMAP3430_REV_ES2_0 0x34301034
#define OMAP3430_REV_ES2_1 0x34302034 #define OMAP3430_REV_ES2_1 0x34302034
#define OMAP3430_REV_ES3_0 0x34303034 #define OMAP3430_REV_ES3_0 0x34303034
#define OMAP3430_REV_ES3_1 0x34304034
/* /*
* omap_chip bits * omap_chip bits
......
...@@ -344,7 +344,8 @@ struct omap_mcbsp_platform_data { ...@@ -344,7 +344,8 @@ struct omap_mcbsp_platform_data {
u8 dma_rx_sync, dma_tx_sync; u8 dma_rx_sync, dma_tx_sync;
u16 rx_irq, tx_irq; u16 rx_irq, tx_irq;
struct omap_mcbsp_ops *ops; struct omap_mcbsp_ops *ops;
char const *clk_name; char const **clk_names;
int num_clks;
}; };
struct omap_mcbsp { struct omap_mcbsp {
...@@ -376,7 +377,8 @@ struct omap_mcbsp { ...@@ -376,7 +377,8 @@ struct omap_mcbsp {
/* Protect the field .free, while checking if the mcbsp is in use */ /* Protect the field .free, while checking if the mcbsp is in use */
spinlock_t lock; spinlock_t lock;
struct omap_mcbsp_platform_data *pdata; struct omap_mcbsp_platform_data *pdata;
struct clk *clk; struct clk **clks;
int num_clks;
}; };
extern struct omap_mcbsp **mcbsp_ptr; extern struct omap_mcbsp **mcbsp_ptr;
extern int omap_mcbsp_count; extern int omap_mcbsp_count;
......
...@@ -115,8 +115,9 @@ void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, ...@@ -115,8 +115,9 @@ void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers); int nr_controllers);
void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers); int nr_controllers);
int omap_mmc_add(int id, unsigned long base, unsigned long size, int omap_mmc_add(const char *name, int id, unsigned long base,
unsigned int irq, struct omap_mmc_platform_data *data); unsigned long size, unsigned int irq,
struct omap_mmc_platform_data *data);
#else #else
static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers) int nr_controllers)
...@@ -126,8 +127,9 @@ static inline void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, ...@@ -126,8 +127,9 @@ static inline void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
int nr_controllers) int nr_controllers)
{ {
} }
static inline int omap_mmc_add(int id, unsigned long base, unsigned long size, static inline int omap_mmc_add(const char *name, int id, unsigned long base,
unsigned int irq, struct omap_mmc_platform_data *data) unsigned long size, unsigned int irq,
struct omap_mmc_platform_data *data)
{ {
return 0; return 0;
} }
......
...@@ -214,6 +214,7 @@ EXPORT_SYMBOL(omap_mcbsp_set_io_type); ...@@ -214,6 +214,7 @@ EXPORT_SYMBOL(omap_mcbsp_set_io_type);
int omap_mcbsp_request(unsigned int id) int omap_mcbsp_request(unsigned int id)
{ {
struct omap_mcbsp *mcbsp; struct omap_mcbsp *mcbsp;
int i;
int err; int err;
if (!omap_mcbsp_check_valid_id(id)) { if (!omap_mcbsp_check_valid_id(id)) {
...@@ -225,7 +226,8 @@ int omap_mcbsp_request(unsigned int id) ...@@ -225,7 +226,8 @@ int omap_mcbsp_request(unsigned int id)
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request) if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request)
mcbsp->pdata->ops->request(id); mcbsp->pdata->ops->request(id);
clk_enable(mcbsp->clk); for (i = 0; i < mcbsp->num_clks; i++)
clk_enable(mcbsp->clks[i]);
spin_lock(&mcbsp->lock); spin_lock(&mcbsp->lock);
if (!mcbsp->free) { if (!mcbsp->free) {
...@@ -276,6 +278,7 @@ EXPORT_SYMBOL(omap_mcbsp_request); ...@@ -276,6 +278,7 @@ EXPORT_SYMBOL(omap_mcbsp_request);
void omap_mcbsp_free(unsigned int id) void omap_mcbsp_free(unsigned int id)
{ {
struct omap_mcbsp *mcbsp; struct omap_mcbsp *mcbsp;
int i;
if (!omap_mcbsp_check_valid_id(id)) { if (!omap_mcbsp_check_valid_id(id)) {
printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1); printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
...@@ -286,7 +289,8 @@ void omap_mcbsp_free(unsigned int id) ...@@ -286,7 +289,8 @@ void omap_mcbsp_free(unsigned int id)
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
mcbsp->pdata->ops->free(id); mcbsp->pdata->ops->free(id);
clk_disable(mcbsp->clk); for (i = mcbsp->num_clks - 1; i >= 0; i--)
clk_disable(mcbsp->clks[i]);
spin_lock(&mcbsp->lock); spin_lock(&mcbsp->lock);
if (mcbsp->free) { if (mcbsp->free) {
...@@ -872,6 +876,7 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) ...@@ -872,6 +876,7 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev)
struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data; struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data;
struct omap_mcbsp *mcbsp; struct omap_mcbsp *mcbsp;
int id = pdev->id - 1; int id = pdev->id - 1;
int i;
int ret = 0; int ret = 0;
if (!pdata) { if (!pdata) {
...@@ -916,14 +921,25 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) ...@@ -916,14 +921,25 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev)
mcbsp->dma_rx_sync = pdata->dma_rx_sync; mcbsp->dma_rx_sync = pdata->dma_rx_sync;
mcbsp->dma_tx_sync = pdata->dma_tx_sync; mcbsp->dma_tx_sync = pdata->dma_tx_sync;
if (pdata->clk_name) if (pdata->num_clks) {
mcbsp->clk = clk_get(&pdev->dev, pdata->clk_name); mcbsp->num_clks = pdata->num_clks;
if (IS_ERR(mcbsp->clk)) { mcbsp->clks = kzalloc(mcbsp->num_clks * sizeof(struct clk *),
dev_err(&pdev->dev, GFP_KERNEL);
"Invalid clock configuration for McBSP%d.\n", if (!mcbsp->clks) {
mcbsp->id); ret = -ENOMEM;
ret = PTR_ERR(mcbsp->clk); goto exit;
goto err_clk; }
for (i = 0; i < mcbsp->num_clks; i++) {
mcbsp->clks[i] = clk_get(&pdev->dev, pdata->clk_names[i]);
if (IS_ERR(mcbsp->clks[i])) {
dev_err(&pdev->dev,
"Invalid %s configuration for McBSP%d.\n",
pdata->clk_names[i], mcbsp->id);
ret = PTR_ERR(mcbsp->clks[i]);
goto err_clk;
}
}
} }
mcbsp->pdata = pdata; mcbsp->pdata = pdata;
...@@ -932,6 +948,9 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) ...@@ -932,6 +948,9 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev)
return 0; return 0;
err_clk: err_clk:
while (i--)
clk_put(mcbsp->clks[i]);
kfree(mcbsp->clks);
iounmap(mcbsp->io_base); iounmap(mcbsp->io_base);
err_ioremap: err_ioremap:
mcbsp->free = 0; mcbsp->free = 0;
...@@ -942,6 +961,7 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) ...@@ -942,6 +961,7 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev)
static int __devexit omap_mcbsp_remove(struct platform_device *pdev) static int __devexit omap_mcbsp_remove(struct platform_device *pdev)
{ {
struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev); struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev);
int i;
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
if (mcbsp) { if (mcbsp) {
...@@ -950,12 +970,18 @@ static int __devexit omap_mcbsp_remove(struct platform_device *pdev) ...@@ -950,12 +970,18 @@ static int __devexit omap_mcbsp_remove(struct platform_device *pdev)
mcbsp->pdata->ops->free) mcbsp->pdata->ops->free)
mcbsp->pdata->ops->free(mcbsp->id); mcbsp->pdata->ops->free(mcbsp->id);
clk_disable(mcbsp->clk); for (i = mcbsp->num_clks - 1; i >= 0; i--) {
clk_put(mcbsp->clk); clk_disable(mcbsp->clks[i]);
clk_put(mcbsp->clks[i]);
}
iounmap(mcbsp->io_base); iounmap(mcbsp->io_base);
mcbsp->clk = NULL; if (mcbsp->num_clks) {
kfree(mcbsp->clks);
mcbsp->clks = NULL;
mcbsp->num_clks = 0;
}
mcbsp->free = 0; mcbsp->free = 0;
mcbsp->dev = NULL; mcbsp->dev = NULL;
} }
......
...@@ -761,7 +761,7 @@ source "drivers/char/hw_random/Kconfig" ...@@ -761,7 +761,7 @@ source "drivers/char/hw_random/Kconfig"
config NVRAM config NVRAM
tristate "/dev/nvram support" tristate "/dev/nvram support"
depends on ATARI || X86 || ARM || GENERIC_NVRAM depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
---help--- ---help---
If you say Y here and create a character special file /dev/nvram If you say Y here and create a character special file /dev/nvram
with major number 10 and minor number 144 using mknod ("man mknod"), with major number 10 and minor number 144 using mknod ("man mknod"),
......
...@@ -453,7 +453,7 @@ static struct platform_driver sa1100_mtd_driver = { ...@@ -453,7 +453,7 @@ static struct platform_driver sa1100_mtd_driver = {
.resume = sa1100_mtd_resume, .resume = sa1100_mtd_resume,
.shutdown = sa1100_mtd_shutdown, .shutdown = sa1100_mtd_shutdown,
.driver = { .driver = {
.name = "flash", .name = "sa1100-mtd",
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
}; };
...@@ -474,4 +474,4 @@ module_exit(sa1100_mtd_exit); ...@@ -474,4 +474,4 @@ module_exit(sa1100_mtd_exit);
MODULE_AUTHOR("Nicolas Pitre"); MODULE_AUTHOR("Nicolas Pitre");
MODULE_DESCRIPTION("SA1100 CFI map driver"); MODULE_DESCRIPTION("SA1100 CFI map driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:flash"); MODULE_ALIAS("platform:sa1100-mtd");
...@@ -646,7 +646,7 @@ static const struct net_device_ops etherh_netdev_ops = { ...@@ -646,7 +646,7 @@ static const struct net_device_ops etherh_netdev_ops = {
.ndo_get_stats = ei_get_stats, .ndo_get_stats = ei_get_stats,
.ndo_set_multicast_list = ei_set_multicast_list, .ndo_set_multicast_list = ei_set_multicast_list,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_set_mac_addr, .ndo_set_mac_address = eth_mac_addr,
.ndo_change_mtu = eth_change_mtu, .ndo_change_mtu = eth_change_mtu,
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = ei_poll, .ndo_poll_controller = ei_poll,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册