提交 529284a0 编写于 作者: L Linus Torvalds

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

* master.kernel.org:/home/rmk/linux-2.6-arm:
  [ARM] 4263/1: fix IXP4XX_NPE[ABC]_BASE_VIRT address
  [ARM] 4256/1: i.MX/MX1 SDHC fix/workaround of SD card recognition problems
  [ARM] 4255/1: i.MX/MX1 Correct MPU PLL reference clock value.
  [ARM] 4254/1: i.MX/MX1 CPU Frequency scaling honor boot loader set BCLK_DIV.
  [ARM] 4251/1: Fix sharpsl_pm dependency
  [ARM] 4250/1: Fix locomo backlight conversion error/compile failure
  [ARM] 4249/1: Fix tosa compile failure
  [ARM] 4248/1: lh7a40x: fix missing definitions for get_irqnr_preamble
  [ARM] 4247/1: Fix long name for cc9p9360dev
  ARM: OMAP: Fix OMAP2 dss2 so clk_set_parent works
  ARM: OMAP: Fix missing workqueue include in board-h2.c
  ARM: OMAP: Include missing header
...@@ -28,6 +28,7 @@ config SHARP_PARAM ...@@ -28,6 +28,7 @@ config SHARP_PARAM
config SHARPSL_PM config SHARPSL_PM
bool bool
select APM_EMULATION
config SHARP_SCOOP config SHARP_SCOOP
bool bool
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#define CR_920T_ASYNC_MODE 0xC0000000 #define CR_920T_ASYNC_MODE 0xC0000000
static u32 mpctl0_at_boot; static u32 mpctl0_at_boot;
static u32 bclk_div_at_boot;
static void imx_set_async_mode(void) static void imx_set_async_mode(void)
{ {
...@@ -82,13 +83,13 @@ static void imx_set_mpctl0(u32 mpctl0) ...@@ -82,13 +83,13 @@ static void imx_set_mpctl0(u32 mpctl0)
* imx_compute_mpctl - compute new PLL parameters * imx_compute_mpctl - compute new PLL parameters
* @new_mpctl: pointer to location assigned by new PLL control register value * @new_mpctl: pointer to location assigned by new PLL control register value
* @cur_mpctl: current PLL control register parameters * @cur_mpctl: current PLL control register parameters
* @f_ref: reference source frequency Hz
* @freq: required frequency in Hz * @freq: required frequency in Hz
* @relation: is one of %CPUFREQ_RELATION_L (supremum) * @relation: is one of %CPUFREQ_RELATION_L (supremum)
* and %CPUFREQ_RELATION_H (infimum) * and %CPUFREQ_RELATION_H (infimum)
*/ */
long imx_compute_mpctl(u32 *new_mpctl, u32 cur_mpctl, unsigned long freq, int relation) long imx_compute_mpctl(u32 *new_mpctl, u32 cur_mpctl, u32 f_ref, unsigned long freq, int relation)
{ {
u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
u32 mfi; u32 mfi;
u32 mfn; u32 mfn;
u32 mfd; u32 mfd;
...@@ -182,7 +183,7 @@ static int imx_set_target(struct cpufreq_policy *policy, ...@@ -182,7 +183,7 @@ static int imx_set_target(struct cpufreq_policy *policy,
unsigned long flags; unsigned long flags;
long freq; long freq;
long sysclk; long sysclk;
unsigned int bclk_div = 1; unsigned int bclk_div = bclk_div_at_boot;
/* /*
* Some governors do not respects CPU and policy lower limits * Some governors do not respects CPU and policy lower limits
...@@ -202,8 +203,8 @@ static int imx_set_target(struct cpufreq_policy *policy, ...@@ -202,8 +203,8 @@ static int imx_set_target(struct cpufreq_policy *policy,
sysclk = imx_get_system_clk(); sysclk = imx_get_system_clk();
if (freq > sysclk + 1000000) { if (freq > sysclk / bclk_div_at_boot + 1000000) {
freq = imx_compute_mpctl(&mpctl0, mpctl0_at_boot, freq, relation); freq = imx_compute_mpctl(&mpctl0, mpctl0_at_boot, CLK32 * 512, freq, relation);
if (freq < 0) { if (freq < 0) {
printk(KERN_WARNING "imx: target frequency %ld Hz cannot be set\n", freq); printk(KERN_WARNING "imx: target frequency %ld Hz cannot be set\n", freq);
return -EINVAL; return -EINVAL;
...@@ -217,6 +218,8 @@ static int imx_set_target(struct cpufreq_policy *policy, ...@@ -217,6 +218,8 @@ static int imx_set_target(struct cpufreq_policy *policy,
if(bclk_div > 16) if(bclk_div > 16)
bclk_div = 16; bclk_div = 16;
if(bclk_div < bclk_div_at_boot)
bclk_div = bclk_div_at_boot;
} }
freq = (sysclk + bclk_div / 2) / bclk_div; freq = (sysclk + bclk_div / 2) / bclk_div;
} }
...@@ -285,7 +288,7 @@ static struct cpufreq_driver imx_driver = { ...@@ -285,7 +288,7 @@ static struct cpufreq_driver imx_driver = {
static int __init imx_cpufreq_init(void) static int __init imx_cpufreq_init(void)
{ {
bclk_div_at_boot = __mfld2val(CSCR_BCLK_DIV, CSCR) + 1;
mpctl0_at_boot = 0; mpctl0_at_boot = 0;
if((CSCR & CSCR_MPEN) && if((CSCR & CSCR_MPEN) &&
......
...@@ -102,7 +102,7 @@ EXPORT_SYMBOL(imx_gpio_mode); ...@@ -102,7 +102,7 @@ EXPORT_SYMBOL(imx_gpio_mode);
* f = 2 * f_ref * -------------------- * f = 2 * f_ref * --------------------
* pd + 1 * pd + 1
*/ */
static unsigned int imx_decode_pll(unsigned int pll) static unsigned int imx_decode_pll(unsigned int pll, u32 f_ref)
{ {
unsigned long long ll; unsigned long long ll;
unsigned long quot; unsigned long quot;
...@@ -111,7 +111,6 @@ static unsigned int imx_decode_pll(unsigned int pll) ...@@ -111,7 +111,6 @@ static unsigned int imx_decode_pll(unsigned int pll)
u32 mfn = pll & 0x3ff; u32 mfn = pll & 0x3ff;
u32 mfd = (pll >> 16) & 0x3ff; u32 mfd = (pll >> 16) & 0x3ff;
u32 pd = (pll >> 26) & 0xf; u32 pd = (pll >> 26) & 0xf;
u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
mfi = mfi <= 5 ? 5 : mfi; mfi = mfi <= 5 ? 5 : mfi;
...@@ -124,13 +123,15 @@ static unsigned int imx_decode_pll(unsigned int pll) ...@@ -124,13 +123,15 @@ static unsigned int imx_decode_pll(unsigned int pll)
unsigned int imx_get_system_clk(void) unsigned int imx_get_system_clk(void)
{ {
return imx_decode_pll(SPCTL0); u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
return imx_decode_pll(SPCTL0, f_ref);
} }
EXPORT_SYMBOL(imx_get_system_clk); EXPORT_SYMBOL(imx_get_system_clk);
unsigned int imx_get_mcu_clk(void) unsigned int imx_get_mcu_clk(void)
{ {
return imx_decode_pll(MPCTL0); return imx_decode_pll(MPCTL0, CLK32 * 512);
} }
EXPORT_SYMBOL(imx_get_mcu_clk); EXPORT_SYMBOL(imx_get_mcu_clk);
......
...@@ -32,7 +32,7 @@ static void __init mach_cc9p9360dev_init_machine(void) ...@@ -32,7 +32,7 @@ static void __init mach_cc9p9360dev_init_machine(void)
board_a9m9750dev_init_machine(); board_a9m9750dev_init_machine();
} }
MACHINE_START(CC9P9360DEV, "Connect Core 9P 9360 on an A9M9750 Devboard") MACHINE_START(CC9P9360DEV, "Digi ConnectCore 9P 9360 on an A9M9750 Devboard")
.map_io = mach_cc9p9360dev_map_io, .map_io = mach_cc9p9360dev_map_io,
.init_irq = mach_cc9p9360dev_init_irq, .init_irq = mach_cc9p9360dev_init_irq,
.init_machine = mach_cc9p9360dev_init_machine, .init_machine = mach_cc9p9360dev_init_machine,
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/mtd/nand.h> #include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/workqueue.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/arch/clock.h> #include <asm/arch/clock.h>
#include <asm/arch/sram.h> #include <asm/arch/sram.h>
#include <asm/div64.h>
#include "prcm-regs.h" #include "prcm-regs.h"
#include "memory.h" #include "memory.h"
......
...@@ -1013,7 +1013,8 @@ static struct clk dss2_fck = { /* Alt clk used in power management */ ...@@ -1013,7 +1013,8 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
.name = "dss2_fck", .name = "dss2_fck",
.parent = &sys_ck, /* fixed at sys_ck or 48MHz */ .parent = &sys_ck, /* fixed at sys_ck or 48MHz */
.flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |
RATE_CKCTL | CM_CORE_SEL1 | RATE_FIXED, RATE_CKCTL | CM_CORE_SEL1 | RATE_FIXED |
DELAYED_APP,
.enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE,
.enable_bit = 1, .enable_bit = 1,
.src_offset = 13, .src_offset = 13,
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/irda.h> #include <asm/arch/irda.h>
#include <asm/arch/mmc.h> #include <asm/arch/mmc.h>
#include <asm/arch/udc.h> #include <asm/arch/udc.h>
...@@ -35,8 +36,6 @@ ...@@ -35,8 +36,6 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/tosa.h> #include <asm/arch/tosa.h>
#include <asm/hardware/scoop.h> #include <asm/hardware/scoop.h>
......
...@@ -569,10 +569,12 @@ static int imxmci_cpu_driven_data(struct imxmci_host *host, unsigned int *pstat) ...@@ -569,10 +569,12 @@ static int imxmci_cpu_driven_data(struct imxmci_host *host, unsigned int *pstat)
if(host->dma_dir == DMA_FROM_DEVICE) { if(host->dma_dir == DMA_FROM_DEVICE) {
imxmci_busy_wait_for_status(host, &stat, imxmci_busy_wait_for_status(host, &stat,
STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE, STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE |
STATUS_TIME_OUT_READ,
50, "imxmci_cpu_driven_data read"); 50, "imxmci_cpu_driven_data read");
while((stat & (STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE)) && while((stat & (STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE)) &&
!(stat & STATUS_TIME_OUT_READ) &&
(host->data_cnt < 512)) { (host->data_cnt < 512)) {
udelay(20); /* required for clocks < 8MHz*/ udelay(20); /* required for clocks < 8MHz*/
...@@ -602,6 +604,12 @@ static int imxmci_cpu_driven_data(struct imxmci_host *host, unsigned int *pstat) ...@@ -602,6 +604,12 @@ static int imxmci_cpu_driven_data(struct imxmci_host *host, unsigned int *pstat)
if(host->dma_size & 0x1ff) if(host->dma_size & 0x1ff)
stat &= ~STATUS_CRC_READ_ERR; stat &= ~STATUS_CRC_READ_ERR;
if(stat & STATUS_TIME_OUT_READ) {
dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data read timeout STATUS = 0x%x\n",
stat);
trans_done = -1;
}
} else { } else {
imxmci_busy_wait_for_status(host, &stat, imxmci_busy_wait_for_status(host, &stat,
STATUS_APPL_BUFF_FE, STATUS_APPL_BUFF_FE,
...@@ -709,6 +717,9 @@ static void imxmci_tasklet_fnc(unsigned long data) ...@@ -709,6 +717,9 @@ static void imxmci_tasklet_fnc(unsigned long data)
*/ */
stat |= host->status_reg; stat |= host->status_reg;
if(test_bit(IMXMCI_PEND_CPU_DATA_b, &host->pending_events))
stat &= ~STATUS_CRC_READ_ERR;
if(test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) { if(test_bit(IMXMCI_PEND_WAIT_RESP_b, &host->pending_events)) {
imxmci_busy_wait_for_status(host, &stat, imxmci_busy_wait_for_status(host, &stat,
STATUS_END_CMD_RESP | STATUS_ERR_MASK, STATUS_END_CMD_RESP | STATUS_ERR_MASK,
......
...@@ -199,8 +199,8 @@ static int locomolcd_remove(struct locomo_dev *dev) ...@@ -199,8 +199,8 @@ static int locomolcd_remove(struct locomo_dev *dev)
{ {
unsigned long flags; unsigned long flags;
locomobl_data.brightness = 0; locomolcd_bl_device->props.brightness = 0;
locomobl_data.power = 0; locomolcd_bl_device->props.power = 0;
locomolcd_set_intensity(locomolcd_bl_device); locomolcd_set_intensity(locomolcd_bl_device);
backlight_device_unregister(locomolcd_bl_device); backlight_device_unregister(locomolcd_bl_device);
......
...@@ -144,9 +144,9 @@ ...@@ -144,9 +144,9 @@
#define IXP4XX_INTC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000) #define IXP4XX_INTC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000)
#define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000) #define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000)
#define IXP4XX_TIMER_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000) #define IXP4XX_TIMER_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000)
#define IXP4XX_NPEA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x6000) #define IXP4XX_NPEA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x6000)
#define IXP4XX_NPEB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x7000) #define IXP4XX_NPEB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x7000)
#define IXP4XX_NPEC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x8000) #define IXP4XX_NPEC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x8000)
#define IXP4XX_EthB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x9000) #define IXP4XX_EthB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x9000)
#define IXP4XX_EthC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xA000) #define IXP4XX_EthC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xA000)
#define IXP4XX_USB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xB000) #define IXP4XX_USB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xB000)
......
...@@ -86,6 +86,12 @@ branch_irq_lh7a400: b 1000f ...@@ -86,6 +86,12 @@ branch_irq_lh7a400: b 1000f
.macro disable_fiq .macro disable_fiq
.endm .endm
.macro get_irqnr_preamble, base, tmp
.endm
.macro arch_ret_to_user, tmp1, tmp2
.endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
mov \irqnr, #0 mov \irqnr, #0
mov \base, #io_p2v(0x80000000) @ APB registers mov \base, #io_p2v(0x80000000) @ APB registers
...@@ -105,6 +111,12 @@ branch_irq_lh7a400: b 1000f ...@@ -105,6 +111,12 @@ branch_irq_lh7a400: b 1000f
.macro disable_fiq .macro disable_fiq
.endm .endm
.macro get_irqnr_preamble, base, tmp
.endm
.macro arch_ret_to_user, tmp1, tmp2
.endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
mov \irqnr, #0 @ VIC1 irq base mov \irqnr, #0 @ VIC1 irq base
mov \base, #io_p2v(0x80000000) @ APB registers mov \base, #io_p2v(0x80000000) @ APB registers
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册