You need to sign in or sign up before continuing.
提交 376fdd2a 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6:
  Blackfin arch: fix a broken define in dma-mapping
  Blackfin arch: fix bug - Turn on DEBUG_DOUBLEFAULT, booting SMP kernel crash
  Blackfin arch: fix bug - shared lib function in L2 failed be called
  Blackfin arch: fix incorrect limit check for bf54x check_gpio
  Blackfin arch: fix bug - Cpufreq assumes clocks in kHz and not Hz.
  Blackfin arch: dont warn when running a kernel on the oldest supported silicon
  Blackfin arch: fix bug - kernel build with write back policy fails to be booted up
  Blackfin arch: fix bug - dmacopy test case fail on all platform
  Blackfin arch: Fix typo when adding CONFIG_DEBUG_VERBOSE
  Blackfin arch: don't copy bss when copying L1
  Blackfin arch: fix bug - Fail to boot jffs2 kernel for BF561 with SMP patch
  Blackfin arch: handle case of d_path() returning error in decode_address()
...@@ -101,7 +101,7 @@ extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */ ...@@ -101,7 +101,7 @@ extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */
extern unsigned long _ramstart, _ramend, _rambase; extern unsigned long _ramstart, _ramend, _rambase;
extern unsigned long memory_start, memory_end, physical_mem_end; extern unsigned long memory_start, memory_end, physical_mem_end;
extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[], extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[],
_ebss_l1[], _l1_lma_start[], _sdata_b_l1[], _ebss_b_l1[], _ebss_l1[], _l1_lma_start[], _sdata_b_l1[], _sbss_b_l1[], _ebss_b_l1[],
_stext_l2[], _etext_l2[], _sdata_l2[], _edata_l2[], _sbss_l2[], _stext_l2[], _etext_l2[], _sdata_l2[], _edata_l2[], _sbss_l2[],
_ebss_l2[], _l2_lma_start[]; _ebss_l2[], _l2_lma_start[];
......
...@@ -15,7 +15,11 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr, ...@@ -15,7 +15,11 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
#define dma_mapping_error static inline
int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
{
return 0;
}
/* /*
* Map a single buffer of the indicated size for DMA in streaming mode. * Map a single buffer of the indicated size for DMA in streaming mode.
......
...@@ -218,7 +218,7 @@ inline int check_gpio(unsigned gpio) ...@@ -218,7 +218,7 @@ inline int check_gpio(unsigned gpio)
if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15 if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15
|| gpio == GPIO_PH14 || gpio == GPIO_PH15 || gpio == GPIO_PH14 || gpio == GPIO_PH15
|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15 || gpio == GPIO_PJ14 || gpio == GPIO_PJ15
|| gpio > MAX_BLACKFIN_GPIOS) || gpio >= MAX_BLACKFIN_GPIOS)
return -EINVAL; return -EINVAL;
return 0; return 0;
} }
......
...@@ -188,10 +188,11 @@ static struct cplb_desc cplb_data[] = { ...@@ -188,10 +188,11 @@ static struct cplb_desc cplb_data[] = {
static u16 __init lock_kernel_check(u32 start, u32 end) static u16 __init lock_kernel_check(u32 start, u32 end)
{ {
if ((end <= (u32) _end && end >= (u32)_stext) || if (start >= (u32)_end || end <= (u32)_stext)
(start <= (u32) _end && start >= (u32)_stext)) return 0;
return IN_KERNEL;
return 0; /* This cplb block overlapped with kernel area. */
return IN_KERNEL;
} }
static unsigned short __init static unsigned short __init
......
...@@ -351,9 +351,14 @@ int _access_ok(unsigned long addr, unsigned long size) ...@@ -351,9 +351,14 @@ int _access_ok(unsigned long addr, unsigned long size)
return 1; return 1;
#endif #endif
#if L1_DATA_B_LENGTH != 0 #if L1_DATA_B_LENGTH != 0
if (addr >= L1_DATA_B_START if (addr >= L1_DATA_B_START + (_ebss_b_l1 - _sdata_b_l1)
&& addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH) && addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)
return 1; return 1;
#endif
#if L2_LENGTH != 0
if (addr >= L2_START + (_ebss_l2 - _stext_l2)
&& addr + size <= L2_START + L2_LENGTH)
return 1;
#endif #endif
return 0; return 0;
} }
......
...@@ -119,23 +119,23 @@ void __init bfin_relocate_l1_mem(void) ...@@ -119,23 +119,23 @@ void __init bfin_relocate_l1_mem(void)
/* Copy _stext_l1 to _etext_l1 to L1 instruction SRAM */ /* Copy _stext_l1 to _etext_l1 to L1 instruction SRAM */
dma_memcpy(_stext_l1, _l1_lma_start, l1_code_length); dma_memcpy(_stext_l1, _l1_lma_start, l1_code_length);
l1_data_a_length = _ebss_l1 - _sdata_l1; l1_data_a_length = _sbss_l1 - _sdata_l1;
if (l1_data_a_length > L1_DATA_A_LENGTH) if (l1_data_a_length > L1_DATA_A_LENGTH)
panic("L1 Data SRAM Bank A Overflow\n"); panic("L1 Data SRAM Bank A Overflow\n");
/* Copy _sdata_l1 to _ebss_l1 to L1 data bank A SRAM */ /* Copy _sdata_l1 to _sbss_l1 to L1 data bank A SRAM */
dma_memcpy(_sdata_l1, _l1_lma_start + l1_code_length, l1_data_a_length); dma_memcpy(_sdata_l1, _l1_lma_start + l1_code_length, l1_data_a_length);
l1_data_b_length = _ebss_b_l1 - _sdata_b_l1; l1_data_b_length = _sbss_b_l1 - _sdata_b_l1;
if (l1_data_b_length > L1_DATA_B_LENGTH) if (l1_data_b_length > L1_DATA_B_LENGTH)
panic("L1 Data SRAM Bank B Overflow\n"); panic("L1 Data SRAM Bank B Overflow\n");
/* Copy _sdata_b_l1 to _ebss_b_l1 to L1 data bank B SRAM */ /* Copy _sdata_b_l1 to _sbss_b_l1 to L1 data bank B SRAM */
dma_memcpy(_sdata_b_l1, _l1_lma_start + l1_code_length + dma_memcpy(_sdata_b_l1, _l1_lma_start + l1_code_length +
l1_data_a_length, l1_data_b_length); l1_data_a_length, l1_data_b_length);
if (L2_LENGTH != 0) { if (L2_LENGTH != 0) {
l2_length = _ebss_l2 - _stext_l2; l2_length = _sbss_l2 - _stext_l2;
if (l2_length > L2_LENGTH) if (l2_length > L2_LENGTH)
panic("L2 SRAM Overflow\n"); panic("L2 SRAM Overflow\n");
...@@ -827,7 +827,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -827,7 +827,7 @@ void __init setup_arch(char **cmdline_p)
printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n", printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n",
bfin_compiled_revid(), bfin_revid()); bfin_compiled_revid(), bfin_revid());
} }
if (bfin_revid() <= CONFIG_BF_REV_MIN || bfin_revid() > CONFIG_BF_REV_MAX) if (bfin_revid() < CONFIG_BF_REV_MIN || bfin_revid() > CONFIG_BF_REV_MAX)
printk(KERN_ERR "Warning: Unsupported Chip Revision ADSP-%s Rev 0.%d detected\n", printk(KERN_ERR "Warning: Unsupported Chip Revision ADSP-%s Rev 0.%d detected\n",
CPU, bfin_revid()); CPU, bfin_revid());
} }
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
#endif #endif
#ifdef CONFIG_VERBOSE_DEBUG #ifdef CONFIG_DEBUG_VERBOSE
#define verbose_printk(fmt, arg...) \ #define verbose_printk(fmt, arg...) \
printk(fmt, ##arg) printk(fmt, ##arg)
#else #else
...@@ -147,9 +147,12 @@ static void decode_address(char *buf, unsigned long address) ...@@ -147,9 +147,12 @@ static void decode_address(char *buf, unsigned long address)
char *name = p->comm; char *name = p->comm;
struct file *file = vma->vm_file; struct file *file = vma->vm_file;
if (file) if (file) {
name = d_path(&file->f_path, _tmpbuf, char *d_name = d_path(&file->f_path, _tmpbuf,
sizeof(_tmpbuf)); sizeof(_tmpbuf));
if (!IS_ERR(d_name))
name = d_name;
}
/* FLAT does not have its text aligned to the start of /* FLAT does not have its text aligned to the start of
* the map while FDPIC ELF does ... * the map while FDPIC ELF does ...
...@@ -571,7 +574,7 @@ asmlinkage void trap_c(struct pt_regs *fp) ...@@ -571,7 +574,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
#endif #endif
panic("Kernel exception"); panic("Kernel exception");
} else { } else {
#ifdef CONFIG_VERBOSE_DEBUG #ifdef CONFIG_DEBUG_VERBOSE
unsigned long *stack; unsigned long *stack;
/* Dump the user space stack */ /* Dump the user space stack */
stack = (unsigned long *)rdusp(); stack = (unsigned long *)rdusp();
......
...@@ -25,9 +25,13 @@ ...@@ -25,9 +25,13 @@
*/ */
.macro do_flush flushins:req optflushins optnopins label .macro do_flush flushins:req optflushins optnopins label
R2 = -L1_CACHE_BYTES;
/* start = (start & -L1_CACHE_BYTES) */
R0 = R0 & R2;
/* end = ((end - 1) & -L1_CACHE_BYTES) + L1_CACHE_BYTES; */ /* end = ((end - 1) & -L1_CACHE_BYTES) + L1_CACHE_BYTES; */
R1 += -1; R1 += -1;
R2 = -L1_CACHE_BYTES;
R1 = R1 & R2; R1 = R1 & R2;
R1 += L1_CACHE_BYTES; R1 += L1_CACHE_BYTES;
...@@ -63,7 +67,7 @@ ENDPROC(_blackfin_icache_flush_range) ...@@ -63,7 +67,7 @@ ENDPROC(_blackfin_icache_flush_range)
/* Flush all cache lines assocoiated with this area of memory. */ /* Flush all cache lines assocoiated with this area of memory. */
ENTRY(_blackfin_icache_dcache_flush_range) ENTRY(_blackfin_icache_dcache_flush_range)
do_flush IFLUSH, FLUSH do_flush FLUSH, IFLUSH
ENDPROC(_blackfin_icache_dcache_flush_range) ENDPROC(_blackfin_icache_dcache_flush_range)
/* Throw away all D-cached data in specified region without any obligation to /* Throw away all D-cached data in specified region without any obligation to
......
...@@ -72,13 +72,13 @@ unsigned int __bfin_cycles_mod; ...@@ -72,13 +72,13 @@ unsigned int __bfin_cycles_mod;
/**************************************************************************/ /**************************************************************************/
static unsigned int bfin_getfreq(unsigned int cpu) static unsigned int bfin_getfreq_khz(unsigned int cpu)
{ {
/* The driver only support single cpu */ /* The driver only support single cpu */
if (cpu != 0) if (cpu != 0)
return -1; return -1;
return get_cclk(); return get_cclk() / 1000;
} }
...@@ -96,7 +96,7 @@ static int bfin_target(struct cpufreq_policy *policy, ...@@ -96,7 +96,7 @@ static int bfin_target(struct cpufreq_policy *policy,
cclk_hz = bfin_freq_table[index].frequency; cclk_hz = bfin_freq_table[index].frequency;
freqs.old = bfin_getfreq(0); freqs.old = bfin_getfreq_khz(0);
freqs.new = cclk_hz; freqs.new = cclk_hz;
freqs.cpu = 0; freqs.cpu = 0;
...@@ -137,8 +137,8 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy) ...@@ -137,8 +137,8 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy)
if (policy->cpu != 0) if (policy->cpu != 0)
return -EINVAL; return -EINVAL;
cclk = get_cclk(); cclk = get_cclk() / 1000;
sclk = get_sclk(); sclk = get_sclk() / 1000;
#if ANOMALY_05000273 || (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_DCACHE)) #if ANOMALY_05000273 || (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_DCACHE))
min_cclk = sclk * 2; min_cclk = sclk * 2;
...@@ -152,7 +152,7 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy) ...@@ -152,7 +152,7 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy)
dpm_state_table[index].csel = csel << 4; /* Shift now into PLL_DIV bitpos */ dpm_state_table[index].csel = csel << 4; /* Shift now into PLL_DIV bitpos */
dpm_state_table[index].tscale = (TIME_SCALE / (1 << csel)) - 1; dpm_state_table[index].tscale = (TIME_SCALE / (1 << csel)) - 1;
pr_debug("cpufreq: freq:%d csel:%d tscale:%d\n", pr_debug("cpufreq: freq:%d csel:0x%x tscale:%d\n",
bfin_freq_table[index].frequency, bfin_freq_table[index].frequency,
dpm_state_table[index].csel, dpm_state_table[index].csel,
dpm_state_table[index].tscale); dpm_state_table[index].tscale);
...@@ -173,7 +173,7 @@ static struct freq_attr *bfin_freq_attr[] = { ...@@ -173,7 +173,7 @@ static struct freq_attr *bfin_freq_attr[] = {
static struct cpufreq_driver bfin_driver = { static struct cpufreq_driver bfin_driver = {
.verify = bfin_verify_speed, .verify = bfin_verify_speed,
.target = bfin_target, .target = bfin_target,
.get = bfin_getfreq, .get = bfin_getfreq_khz,
.init = __bfin_cpu_init, .init = __bfin_cpu_init,
.name = "bfin cpufreq", .name = "bfin cpufreq",
.owner = THIS_MODULE, .owner = THIS_MODULE,
......
...@@ -277,7 +277,7 @@ ENTRY(_bfin_return_from_exception) ...@@ -277,7 +277,7 @@ ENTRY(_bfin_return_from_exception)
p5.h = hi(ILAT); p5.h = hi(ILAT);
r6 = [p5]; r6 = [p5];
r7 = 0x20; /* Did I just cause anther HW error? */ r7 = 0x20; /* Did I just cause anther HW error? */
r7 = r7 & r1; r6 = r7 & r6;
CC = R7 == R6; CC = R7 == R6;
if CC JUMP _double_fault; if CC JUMP _double_fault;
#endif #endif
......
...@@ -183,10 +183,10 @@ static void __init l2_sram_init(void) ...@@ -183,10 +183,10 @@ static void __init l2_sram_init(void)
return; return;
} }
free_l2_sram_head.next->paddr = (void *)L2_START + free_l2_sram_head.next->paddr =
(_etext_l2 - _stext_l2) + (_edata_l2 - _sdata_l2); (void *)L2_START + (_ebss_l2 - _stext_l2);
free_l2_sram_head.next->size = L2_LENGTH - free_l2_sram_head.next->size =
(_etext_l2 - _stext_l2) + (_edata_l2 - _sdata_l2); L2_LENGTH - (_ebss_l2 - _stext_l2);
free_l2_sram_head.next->pid = 0; free_l2_sram_head.next->pid = 0;
free_l2_sram_head.next->next = NULL; free_l2_sram_head.next->next = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册