forked from Minki/linux
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: powerpc: Force page alignment for initrd reserved memory dtc/powerpc: remove obsolete .gitignore entries powerpc/85xx: fix race bug of calling request_irq after enable elbc interrupts powerpc/book3e: Fix CPU feature handling on e5500 in 32-bit mode powerpc/fsl_rio: Fix compile error when CONFIG_FSL_RIO not set
This commit is contained in:
commit
dfb863a714
1
arch/powerpc/boot/.gitignore
vendored
1
arch/powerpc/boot/.gitignore
vendored
@ -1,5 +1,4 @@
|
||||
addnote
|
||||
dtc
|
||||
empty.c
|
||||
hack-coff
|
||||
infblock.c
|
||||
|
3
arch/powerpc/boot/dtc-src/.gitignore
vendored
3
arch/powerpc/boot/dtc-src/.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
dtc-lexer.lex.c
|
||||
dtc-parser.tab.c
|
||||
dtc-parser.tab.h
|
@ -14,7 +14,7 @@
|
||||
#define ASM_PPC_RIO_H
|
||||
|
||||
extern void platform_rio_init(void);
|
||||
#ifdef CONFIG_RAPIDIO
|
||||
#ifdef CONFIG_FSL_RIO
|
||||
extern int fsl_rio_mcheck_exception(struct pt_regs *);
|
||||
#else
|
||||
static inline int fsl_rio_mcheck_exception(struct pt_regs *regs) {return 0; }
|
||||
|
@ -1979,7 +1979,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
||||
.pvr_value = 0x80240000,
|
||||
.cpu_name = "e5500",
|
||||
.cpu_features = CPU_FTRS_E5500,
|
||||
.cpu_user_features = COMMON_USER_BOOKE,
|
||||
.cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
|
||||
.mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS |
|
||||
MMU_FTR_USE_TLBILX,
|
||||
.icache_bsize = 64,
|
||||
|
@ -82,11 +82,29 @@ static int __init early_parse_mem(char *p)
|
||||
}
|
||||
early_param("mem", early_parse_mem);
|
||||
|
||||
/*
|
||||
* overlaps_initrd - check for overlap with page aligned extension of
|
||||
* initrd.
|
||||
*/
|
||||
static inline int overlaps_initrd(unsigned long start, unsigned long size)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
if (!initrd_start)
|
||||
return 0;
|
||||
|
||||
return (start + size) > _ALIGN_DOWN(initrd_start, PAGE_SIZE) &&
|
||||
start <= _ALIGN_UP(initrd_end, PAGE_SIZE);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* move_device_tree - move tree to an unused area, if needed.
|
||||
*
|
||||
* The device tree may be allocated beyond our memory limit, or inside the
|
||||
* crash kernel region for kdump. If so, move it out of the way.
|
||||
* crash kernel region for kdump, or within the page aligned range of initrd.
|
||||
* If so, move it out of the way.
|
||||
*/
|
||||
static void __init move_device_tree(void)
|
||||
{
|
||||
@ -99,7 +117,8 @@ static void __init move_device_tree(void)
|
||||
size = be32_to_cpu(initial_boot_params->totalsize);
|
||||
|
||||
if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
|
||||
overlaps_crashkernel(start, size)) {
|
||||
overlaps_crashkernel(start, size) ||
|
||||
overlaps_initrd(start, size)) {
|
||||
p = __va(memblock_alloc(size, PAGE_SIZE));
|
||||
memcpy(p, initial_boot_params, size);
|
||||
initial_boot_params = (struct boot_param_header *)p;
|
||||
@ -555,7 +574,9 @@ static void __init early_reserve_mem(void)
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
/* then reserve the initrd, if any */
|
||||
if (initrd_start && (initrd_end > initrd_start))
|
||||
memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);
|
||||
memblock_reserve(_ALIGN_DOWN(__pa(initrd_start), PAGE_SIZE),
|
||||
_ALIGN_UP(initrd_end, PAGE_SIZE) -
|
||||
_ALIGN_DOWN(initrd_start, PAGE_SIZE));
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
|
@ -223,21 +223,6 @@ void free_initmem(void)
|
||||
#undef FREESEC
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (start < end)
|
||||
printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||
for (; start < end; start += PAGE_SIZE) {
|
||||
ClearPageReserved(virt_to_page(start));
|
||||
init_page_count(virt_to_page(start));
|
||||
free_page(start);
|
||||
totalram_pages++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_8xx /* No 8xx specific .c file to put that in ... */
|
||||
void setup_initial_memory_limit(phys_addr_t first_memblock_base,
|
||||
phys_addr_t first_memblock_size)
|
||||
|
@ -99,20 +99,6 @@ void free_initmem(void)
|
||||
((unsigned long)__init_end - (unsigned long)__init_begin) >> 10);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (start < end)
|
||||
printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||
for (; start < end; start += PAGE_SIZE) {
|
||||
ClearPageReserved(virt_to_page(start));
|
||||
init_page_count(virt_to_page(start));
|
||||
free_page(start);
|
||||
totalram_pages++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void pgd_ctor(void *addr)
|
||||
{
|
||||
memset(addr, 0, PGD_TABLE_SIZE);
|
||||
|
@ -382,6 +382,25 @@ void __init mem_init(void)
|
||||
mem_init_done = 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
void __init free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (start >= end)
|
||||
return;
|
||||
|
||||
start = _ALIGN_DOWN(start, PAGE_SIZE);
|
||||
end = _ALIGN_UP(end, PAGE_SIZE);
|
||||
pr_info("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||
|
||||
for (; start < end; start += PAGE_SIZE) {
|
||||
ClearPageReserved(virt_to_page(start));
|
||||
init_page_count(virt_to_page(start));
|
||||
free_page(start);
|
||||
totalram_pages++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is called when a page has been modified by the kernel.
|
||||
* It just marks the page as not i-cache clean. We do the i-cache
|
||||
|
@ -196,9 +196,6 @@ static int __devinit fsl_lbc_ctrl_init(struct fsl_lbc_ctrl *ctrl,
|
||||
out_be32(&lbc->lteccr, LTECCR_CLEAR);
|
||||
out_be32(&lbc->ltedr, LTEDR_ENABLE);
|
||||
|
||||
/* Enable interrupts for any detected events */
|
||||
out_be32(&lbc->lteir, LTEIR_ENABLE);
|
||||
|
||||
/* Set the monitor timeout value to the maximum for erratum A001 */
|
||||
if (of_device_is_compatible(node, "fsl,elbc"))
|
||||
clrsetbits_be32(&lbc->lbcr, LBCR_BMT, LBCR_BMTPS);
|
||||
@ -322,6 +319,9 @@ static int __devinit fsl_lbc_ctrl_probe(struct platform_device *dev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Enable interrupts for any detected events */
|
||||
out_be32(&fsl_lbc_ctrl_dev->regs->lteir, LTEIR_ENABLE);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
Loading…
Reference in New Issue
Block a user