diff options
Diffstat (limited to 'target/linux/coldfire/patches/046-mcfv4e_kern_to_phys.patch')
-rw-r--r-- | target/linux/coldfire/patches/046-mcfv4e_kern_to_phys.patch | 1614 |
1 files changed, 0 insertions, 1614 deletions
diff --git a/target/linux/coldfire/patches/046-mcfv4e_kern_to_phys.patch b/target/linux/coldfire/patches/046-mcfv4e_kern_to_phys.patch deleted file mode 100644 index b11178978d..0000000000 --- a/target/linux/coldfire/patches/046-mcfv4e_kern_to_phys.patch +++ /dev/null @@ -1,1614 +0,0 @@ -From 13fc0abf4b5da6f18dea15fd31697655615a79fc Mon Sep 17 00:00:00 2001 -From: Kurt Mahan <kmahan@freescale.com> -Date: Wed, 12 Mar 2008 15:39:03 -0600 -Subject: [PATCH] Move kernel to physical sdram base address. - -Work based on the patches from Systec GMBH. Also DMA support, -uBoot integration, FEC fixes, and assorted cleanups. - -Uber patch needs to be split up. - -LTIBName: mcfv4e-kern-to-phys -Signed-off-by: Kurt Mahan <kmahan@freescale.com> ---- - arch/m68k/coldfire/config.c | 102 ++----- - arch/m68k/coldfire/dma.c | 7 +- - arch/m68k/coldfire/entry.S | 10 + - arch/m68k/coldfire/head.S | 53 +++- - arch/m68k/coldfire/mcf5445x-devices.c | 2 + - arch/m68k/coldfire/mcf5445x-pci.c | 3 + - arch/m68k/coldfire/signal.c | 3 + - arch/m68k/configs/m5485evb_defconfig | 79 +++++- - arch/m68k/mm/cache.c | 4 +- - arch/m68k/mm/cf-mmu.c | 28 ++- - arch/m68k/mm/memory.c | 8 +- - drivers/net/fec/fec.c | 20 +- - include/asm-m68k/bootinfo.h | 59 +++- - include/asm-m68k/cf_cacheflush.h | 547 +++++++++++---------------------- - include/asm-m68k/cf_pgalloc.h | 5 +- - include/asm-m68k/cf_pgtable.h | 2 +- - include/asm-m68k/cfcache.h | 6 + - include/asm-m68k/page.h | 8 + - include/asm-m68k/page_offset.h | 25 +- - 19 files changed, 446 insertions(+), 525 deletions(-) - ---- a/arch/m68k/coldfire/config.c -+++ b/arch/m68k/coldfire/config.c -@@ -23,7 +23,6 @@ - #include <asm/coldfire.h> - #include <asm/cfcache.h> - #include <asm/cacheflush.h> --#include <asm/bootinfo.h> - #include <asm/io.h> - #include <asm/cfmmu.h> - #include <asm/setup.h> -@@ -36,7 +35,14 @@ - - #include <asm/mcfsim.h> - --#if 0 -+#if defined(CONFIG_M54455) -+#define UBOOT_EXTRA_CLOCKS -+#elif defined(CONFIG_M547X_8X) -+#define UBOOT_PCI -+#endif -+#include <asm/bootinfo.h> -+ -+#ifdef CONFIG_M54455 - #include <asm/mcf5445x_intc.h> - #include <asm/mcf5445x_sdramc.h> - #include <asm/mcf5445x_fbcs.h> -@@ -44,10 +50,6 @@ - #include <asm/mcf5445x_xbs.h> - #endif - --/* JKM -- testing */ --#include <linux/pfn.h> --/* JKM */ -- - extern int get_irq_list(struct seq_file *p, void *v); - extern char _text, _end; - extern char _etext, _edata, __init_begin, __init_end; -@@ -58,6 +60,10 @@ extern unsigned long availmem; - static int irq_enable[NR_IRQS]; - unsigned long num_pages; - -+/* ethernet mac addresses from uboot */ -+unsigned char uboot_enet0[6]; -+unsigned char uboot_enet1[6]; -+ - void coldfire_sort_memrec(void) - { - int i, j; -@@ -87,6 +93,9 @@ void coldfire_sort_memrec(void) - } - } - -+/* -+ * UBoot Handler -+ */ - int __init uboot_commandline(char *bootargs) - { - int len = 0, cmd_line_len; -@@ -101,12 +110,17 @@ int __init uboot_commandline(char *boota - return 0; - - /* Add offset to get post-remapped kernel memory location */ -- uboot_info.bd_info = (*(u32 *)(uboot_info_stk)) + offset; -+ uboot_info.bdi = (struct bd_info *)((*(u32 *)(uboot_info_stk)) + offset); - uboot_info.initrd_start = (*(u32 *)(uboot_info_stk+4)) + offset; - uboot_info.initrd_end = (*(u32 *)(uboot_info_stk+8)) + offset; - uboot_info.cmd_line_start = (*(u32 *)(uboot_info_stk+12)) + offset; - uboot_info.cmd_line_stop = (*(u32 *)(uboot_info_stk+16)) + offset; - -+ /* copy over mac addresses */ -+ memcpy(uboot_enet0, uboot_info.bdi->bi_enet0addr, 6); -+ memcpy(uboot_enet1, uboot_info.bdi->bi_enet1addr, 6); -+ -+ /* copy command line */ - cmd_line_len = uboot_info.cmd_line_stop - uboot_info.cmd_line_start; - if ((cmd_line_len > 0) && (cmd_line_len < CL_SIZE-1)) - len = (int)strncpy(bootargs, (char *)uboot_info.cmd_line_start,\ -@@ -121,7 +135,7 @@ int __init uboot_commandline(char *boota - #if defined(CONFIG_M54455) - #define DEFAULT_COMMAND_LINE "root=/dev/mtdblock1 rw rootfstype=jffs2 ip=none mtdparts=physmap-flash.0:5M(kernel)ro,-(jffs2)" - #elif defined(CONFIG_M547X_8X) --#define DEFAULT_COMMAND_LINE "debug root=/dev/nfs nfsroot=172.27.155.1:/tftpboot/rigo/rootfs/ ip=172.27.155.85:172.27.155.1" -+#define DEFAULT_COMMAND_LINE "debug root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/rigo/rootfs/ ip=172.27.155.85:172.27.155.1" - #endif - asmlinkage void __init cf_early_init(void) - { -@@ -142,7 +156,6 @@ asmlinkage void __init cf_early_init(voi - MCF_INTC1_IMRL = 0xFFFFFFFF; - MCF_INTC1_IMRH = 0xFFFFFFFF; - #elif defined(CONFIG_M547X_8X) --/* JKM -- ?? */ - MCF_IMRL = 0xFFFFFFFF; - MCF_IMRH = 0xFFFFFFFF; - #endif -@@ -170,7 +183,6 @@ asmlinkage void __init cf_early_init(voi - MCF_XBS_PRS_M6(MCF_XBS_PRI_1) | - MCF_XBS_PRS_M7(MCF_XBS_PRI_7)); - #endif -- - - m68k_machtype = MACH_CFMMU; - m68k_fputype = FPU_CFV4E; -@@ -181,7 +193,6 @@ asmlinkage void __init cf_early_init(voi - m68k_memory[m68k_num_memory].addr = CONFIG_SDRAM_BASE; - m68k_memory[m68k_num_memory++].size = CONFIG_SDRAM_SIZE; - --#if defined(CONFIG_M54455) - if (!uboot_commandline(m68k_command_line)) { - #if defined(CONFIG_BOOTPARAM) - strncpy(m68k_command_line, CONFIG_BOOTPARAM_STRING, CL_SIZE-1); -@@ -189,11 +200,6 @@ asmlinkage void __init cf_early_init(voi - strcpy(m68k_command_line, DEFAULT_COMMAND_LINE); - #endif - } --#else --/* JKM -- hack until mappings get resolved */ -- strcpy(m68k_command_line, DEFAULT_COMMAND_LINE); --#endif -- - - #if defined(CONFIG_BLK_DEV_INITRD) - /* add initrd image */ -@@ -372,75 +378,11 @@ void coldfire_reboot(void) - #endif - } - --/* int coldfire_hwclk(int i, struct rtc_time *t) --{ -- printk ("Real time clock needs porting.\n"); -- return 0; --}*/ -- - static void coldfire_get_model(char *model) - { - sprintf(model, "Version 4 ColdFire"); - } - --/* JKM -- Why do we need these? */ --void coldfire_enable_irq(unsigned int vec) --{ -- unsigned long flags; -- -- vec -= 64; -- -- if (((int)vec < 0) || (vec > 63)) { -- printk(KERN_WARNING "enable_irq %d failed\n", vec); -- return; -- } -- -- local_irq_save(flags); -- irq_enable[vec]++; --#if defined(CONFIG_M54455) -- if (vec < 32) -- MCF_INTC0_IMRL &= ~(1 << vec); -- else -- MCF_INTC0_IMRH &= ~(1 << (vec - 32)); --#elif defined(CONFIG_M547X_8X) -- if (vec < 32) -- MCF_IMRL &= ~(1 << vec); -- else -- MCF_IMRH &= ~(1 << (vec - 32)); --#endif -- local_irq_restore(flags); --} -- --/* JKM -- Why do we need these? */ --void coldfire_disable_irq(unsigned int vec) --{ -- unsigned long flags; -- -- vec -= 64; -- -- if (((int)vec < 0) || (vec > 63)) { -- printk(KERN_WARNING "disable_irq %d failed\n", vec); -- return; -- } -- -- local_irq_save(flags); -- if (--irq_enable[vec] == 0) { --#if defined(CONFIG_M54455) -- if (vec < 32) -- MCF_INTC0_IMRL |= (1 << vec); -- else -- MCF_INTC0_IMRH |= (1 << (vec - 32)); --#elif defined(CONFIG_M547X_8X) -- if (vec < 32) -- MCF_IMRL |= (1 << vec); -- else -- MCF_IMRH |= (1 << (vec - 32)); --#endif -- -- } -- local_irq_restore(flags); --} -- - static void __init - coldfire_bootmem_alloc(unsigned long memory_start, unsigned long memory_end) - { ---- a/arch/m68k/coldfire/dma.c -+++ b/arch/m68k/coldfire/dma.c -@@ -516,13 +516,8 @@ dma_init() - MCF_DMA_DIPR = 0xFFFFFFFF; - - MCF_ICR(ISC_DMA) = ILP_DMA; --#if 0 --// JKM -- enable_irq( 64 + ISC_DMA ); --#endif - -- result = -- MCD_initDma((dmaRegs *) (MCF_MBAR + 0x8000), -+ result = MCD_initDma((dmaRegs *) (MCF_MBAR + 0x8000), - (void *) SYS_SRAM_DMA_START, MCD_RELOC_TASKS); - if (result != MCD_OK) { - printk("Cannot perform DMA initialization\n"); ---- a/arch/m68k/coldfire/entry.S -+++ b/arch/m68k/coldfire/entry.S -@@ -10,6 +10,8 @@ - * Kurt Mahan kmahan@freescale.com - * Copyright Freescale Semiconductor, Inc. 2007 - * -+ * Modify irq status in buserr -- (c) Copyright 2008, SYSTEM electronic Gmbh -+ * - * Based on: - * - * arch/m68knommu/platform/5307/entry.S & -@@ -77,7 +79,15 @@ sw_usp: - .globl inthandler - - ENTRY(buserr) -+#ifdef CONFIG_COLDFIRE_FOO -+ movew #0x2700,%sr /* lock interrupts */ -+#endif - SAVE_ALL_INT -+#ifdef CONFIG_COLDFIRE_FOO -+ movew PT_SR(%sp),%d3 /* get original %sr */ -+ oril #0x2000,%d3 /* set supervisor mode in it */ -+ movew %d3,%sr /* recover irq state */ -+#endif - GET_CURRENT(%d0) - movel %sp,%sp@- /* stack frame pointer argument */ - jsr buserr_c ---- a/arch/m68k/coldfire/head.S -+++ b/arch/m68k/coldfire/head.S -@@ -5,6 +5,7 @@ - * Matt Waddel Matt.Waddel@freescale.com - * Kurt Mahan kmahan@freescale.com - * Copyright Freescale Semiconductor, Inc. 2007, 2008 -+ * Phys kernel mapping Copyright Daniel Krueger, SYSTEC electornic GmbH 2008 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by -@@ -52,7 +53,7 @@ - #define __FINIT .previous - #endif - --/* JKM -- REVISE DOCS FOR RIGO */ -+/* JKM -- REVISE DOCS FOR RIGO and PHYS MAPPING */ - /* - * Setup ACR mappings to provide the following memory map: - * Data -@@ -62,10 +63,17 @@ - * None currently (mapped via TLBs) - */ - -+#if CONFIG_SDRAM_BASE != PAGE_BASE - #if defined(CONFIG_M54455) -+#if 0 - #define ACR0_DEFAULT #0xA00FA048 /* ACR0 default value */ -+#endif -+#define ACR0_DEFAULT #0x400FA028 /* ACR0 default value */ - #define ACR1_DEFAULT #0xF00FA040 /* ACR1 default value */ -+#if 0 - #define ACR2_DEFAULT #0x00000000 /* ACR2 default value */ -+#endif -+#define ACR2_DEFAULT #0x400FA028 /* ACR2 default value */ - #define ACR3_DEFAULT #0x00000000 /* ACR3 default value */ - /* ACR mapping for FPGA (maps 0) */ - #define ACR0_FPGA #0x000FA048 /* ACR0 enable FPGA */ -@@ -76,6 +84,16 @@ - #define ACR3_DEFAULT #0x00000000 /* ACR3 default value */ - #endif - -+#else -+#if defined(CONFIG_M54455) -+#elif defined(CONFIG_M547X_8X) -+#define ACR0_DEFAULT #0xE000C040 /* ACR0 default value */ -+#define ACR1_DEFAULT #0x000FA008 /* ACR1 default value */ -+#define ACR2_DEFAULT #0x00000000 /* ACR2 default value */ -+#define ACR3_DEFAULT #0x000FA008 /* ACR3 default value */ -+#endif -+#endif -+ - - /* Several macros to make the writing of subroutines easier: - * - func_start marks the beginning of the routine which setups the frame -@@ -153,6 +171,7 @@ func_define putn,1 - #endif - .endm - -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - /* - mmu_map - creates a new TLB entry - -@@ -222,6 +241,7 @@ func_define putn,1 - movew \temp_data_reg, (MMUOR) - 1: - .endm /* mmu_unmap */ -+#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */ - - /* .text */ - .section ".text.head","ax" -@@ -235,7 +255,11 @@ ENTRY(_stext) - - .long BOOTINFOV_MAGIC - .long 0 -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - 1: jmp __start-(0xc0000000-CONFIG_SDRAM_BASE) -+#else -+1: jmp __start -+#endif - - .equ kernel_pg_dir,_stext - .equ .,_stext+0x1000 -@@ -244,24 +268,13 @@ ENTRY(_start) - jra __start - __INIT - ENTRY(__start) -- --/* JKM -- make sure Rigo handles UBOOT */ - /* Save the location of u-boot info - cmd line, bd_info, etc. */ - movel %a7,%a4 /* Don't use %a4 before cf_early_init */ --/* JKM -- fix to use CONFIG_SDRAM_BASE) */ --#if defined(CONFIG_M54455) -- addl #0x80000004,%a4 /* 0x80000004= 1 stack push + high mem offset */ --#elif defined(CONFIG_M547X_8X) -- addl #0xc0000004,%a4 /* 0x80000004= 1 stack push + high mem offset */ --#endif -+ addl #0x00000004,%a4 /* offset past top */ -+ addl #(PAGE_OFFSET-CONFIG_SDRAM_BASE),%a4 /* high mem offset */ - --/* JKM -- fix this to work off of CONFIG_SDRAM_BASE */ - /* Setup initial stack pointer */ --#if defined(CONFIG_M54455) -- movel #0x40001000,%sp --#elif defined(CONFIG_M547X_8X) -- movel #0x00001000,%sp --#endif -+ movel #CONFIG_SDRAM_BASE+0x1000,%sp - - /* Setup usp */ - subl %a0,%a0 -@@ -297,16 +310,21 @@ ENTRY(__start) - /* setup ACRs */ - movel ACR0_DEFAULT, %d0 /* ACR0 (DATA) setup */ - movec %d0, %acr0 -+ nop - movel ACR1_DEFAULT, %d0 /* ACR1 (DATA) setup */ - movec %d0, %acr1 -+ nop - movel ACR2_DEFAULT, %d0 /* ACR2 (CODE) setup */ - movec %d0, %acr2 -+ nop - movel ACR3_DEFAULT, %d0 /* ACR3 (CODE) setup */ - movec %d0, %acr3 -+ nop - - /* If you change the memory size to another value make a matching - change in paging_init(cf-mmu.c) to zones_size[]. */ - -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - #if defined(CONFIG_M54455) - /* Map 256MB as code */ - mmu_map (PAGE_OFFSET+0*0x1000000), (PHYS_OFFSET+0*0x1000000), \ -@@ -511,6 +529,7 @@ ENTRY(__start) - MMUTR_SG, MMUDR_SZ1M, MMUDR_DCB, MMUDR_SP, MMUDR_R, \ - MMUDR_W, 0, 0, %d0 - #endif -+#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */ - - /* Turn on MMU */ - movel #(MMUCR_EN),%a0 -@@ -531,6 +550,7 @@ ENTRY(__running_high) - movel %a1,%a0@ - - /* Unmap unity mappings */ -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - #if defined(CONFIG_M54455) - mmu_unmap (PHYS_OFFSET+0*0x1000000), MMUOR_ITLB, %d0 - mmu_unmap (PHYS_OFFSET+0*0x1000000), 0, %d0 -@@ -544,6 +564,7 @@ ENTRY(__running_high) - mmu_unmap (PHYS_OFFSET+2*0x1000000), 0, %d0 - mmu_unmap (PHYS_OFFSET+3*0x1000000), 0, %d0 - #endif -+#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */ - - /* Setup initial stack pointer */ - lea init_task,%a2 -@@ -574,6 +595,7 @@ func_return set_context - * Map in 0x00000000 -> 0x0fffffff and then do the write. - */ - set_fpga: -+#if 0 - movew %sr,%d1 - movew #0x2700,%sr - movel ACR0_FPGA, %d0 -@@ -585,6 +607,7 @@ set_fpga: - movec %d0, %acr0 - nop - movew %d1,%sr -+#endif - rts - #endif - ---- a/arch/m68k/coldfire/mcf5445x-devices.c -+++ b/arch/m68k/coldfire/mcf5445x-devices.c -@@ -127,7 +127,9 @@ static inline void mcf5445x_init_pata(vo - static int __init mcf5445x_init_devices(void) - { - printk(KERN_INFO "MCF5445x INIT_DEVICES\n"); -+#if 0 - mcf5445x_init_pata(); -+#endif - - return 0; - } ---- a/arch/m68k/coldfire/mcf5445x-pci.c -+++ b/arch/m68k/coldfire/mcf5445x-pci.c -@@ -236,6 +236,8 @@ mcf5445x_pci_arb_interrupt(int irq, void - int __init - init_mcf5445x_pci(void) - { -+ return 0; -+#if 0 - /* - * Initialize the PCI core - */ -@@ -331,6 +333,7 @@ init_mcf5445x_pci(void) - raw_pci_ops = &mcf5445x_pci_ops; - - return 0; -+#endif - } - - /* ---- a/arch/m68k/coldfire/signal.c -+++ b/arch/m68k/coldfire/signal.c -@@ -608,7 +608,10 @@ static inline int rt_setup_ucontext(stru - - static inline void push_cache(unsigned long vaddr) - { -+#if 0 -+// JKM -- need to add into the old cpushl cache stuff - cf_cache_push(__pa(vaddr), 8); -+#endif - } - - static inline void __user * ---- a/arch/m68k/configs/m5485evb_defconfig -+++ b/arch/m68k/configs/m5485evb_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit - # Linux kernel version: 2.6.24 --# Thu Feb 21 00:19:01 2008 -+# Wed Mar 5 16:05:25 2008 - # - CONFIG_M68K=y - CONFIG_MMU=y -@@ -103,6 +103,7 @@ CONFIG_DEFAULT_IOSCHED="cfq" - # CONFIG_SUN3 is not set - CONFIG_COLDFIRE=y - CONFIG_CFV4E=y -+CONFIG_MCD_DMA=y - # CONFIG_AMIGA is not set - # CONFIG_ATARI is not set - # CONFIG_MAC is not set -@@ -135,7 +136,7 @@ CONFIG_M5485CFE=y - # CONFIG_M5485DFE is not set - # CONFIG_M5485EFE is not set - # CONFIG_M5485FFE is not set --CONFIG_MCFCLK=50000000 -+CONFIG_MCFCLK=200000000 - # CONFIG_MCF_USER_HALT is not set - CONFIG_MMU_CFV4E=y - CONFIG_SDRAM_BASE=0x00000000 -@@ -279,7 +280,73 @@ CONFIG_FW_LOADER=y - # CONFIG_DEBUG_DEVRES is not set - # CONFIG_SYS_HYPERVISOR is not set - # CONFIG_CONNECTOR is not set --# CONFIG_MTD is not set -+CONFIG_MTD=y -+# CONFIG_MTD_DEBUG is not set -+# CONFIG_MTD_CONCAT is not set -+CONFIG_MTD_PARTITIONS=y -+# CONFIG_MTD_REDBOOT_PARTS is not set -+CONFIG_MTD_CMDLINE_PARTS=y -+ -+# -+# User Modules And Translation Layers -+# -+# CONFIG_MTD_CHAR is not set -+CONFIG_MTD_BLKDEVS=y -+CONFIG_MTD_BLOCK=y -+# CONFIG_FTL is not set -+# CONFIG_NFTL is not set -+# CONFIG_INFTL is not set -+# CONFIG_RFD_FTL is not set -+# CONFIG_SSFDC is not set -+# CONFIG_MTD_OOPS is not set -+ -+# -+# RAM/ROM/Flash chip drivers -+# -+# CONFIG_MTD_CFI is not set -+# CONFIG_MTD_JEDECPROBE is not set -+CONFIG_MTD_MAP_BANK_WIDTH_1=y -+CONFIG_MTD_MAP_BANK_WIDTH_2=y -+CONFIG_MTD_MAP_BANK_WIDTH_4=y -+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -+CONFIG_MTD_CFI_I1=y -+CONFIG_MTD_CFI_I2=y -+# CONFIG_MTD_CFI_I4 is not set -+# CONFIG_MTD_CFI_I8 is not set -+CONFIG_MTD_RAM=y -+CONFIG_MTD_ROM=y -+# CONFIG_MTD_ABSENT is not set -+ -+# -+# Mapping drivers for chip access -+# -+# CONFIG_MTD_COMPLEX_MAPPINGS is not set -+# CONFIG_MTD_PHYSMAP is not set -+# CONFIG_MTD_PLATRAM is not set -+ -+# -+# Self-contained MTD device drivers -+# -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM is not set -+# CONFIG_MTD_BLOCK2MTD is not set -+ -+# -+# Disk-On-Chip Device Drivers -+# -+# CONFIG_MTD_DOC2000 is not set -+# CONFIG_MTD_DOC2001 is not set -+# CONFIG_MTD_DOC2001PLUS is not set -+# CONFIG_MTD_NAND is not set -+# CONFIG_MTD_ONENAND is not set -+ -+# -+# UBI - Unsorted block images -+# -+# CONFIG_MTD_UBI is not set - # CONFIG_PARPORT is not set - CONFIG_BLK_DEV=y - # CONFIG_BLK_DEV_COW_COMMON is not set -@@ -347,6 +414,9 @@ CONFIG_NETDEVICES=y - # CONFIG_PHYLIB is not set - CONFIG_NET_ETHERNET=y - CONFIG_MII=y -+CONFIG_FEC_548x=y -+CONFIG_FEC_548x_AUTO_NEGOTIATION=y -+# CONFIG_FEC_548x_ENABLE_FEC2 is not set - # CONFIG_IBM_NEW_EMAC_ZMII is not set - # CONFIG_IBM_NEW_EMAC_RGMII is not set - # CONFIG_IBM_NEW_EMAC_TAH is not set -@@ -530,7 +600,7 @@ CONFIG_FS_MBCACHE=y - # CONFIG_GFS2_FS is not set - # CONFIG_OCFS2_FS is not set - CONFIG_MINIX_FS=y --# CONFIG_ROMFS_FS is not set -+CONFIG_ROMFS_FS=y - # CONFIG_INOTIFY is not set - # CONFIG_QUOTA is not set - CONFIG_DNOTIFY=y -@@ -578,6 +648,7 @@ CONFIG_TMPFS=y - # CONFIG_BEFS_FS is not set - # CONFIG_BFS_FS is not set - # CONFIG_EFS_FS is not set -+# CONFIG_JFFS2_FS is not set - # CONFIG_CRAMFS is not set - # CONFIG_VXFS_FS is not set - # CONFIG_HPFS_FS is not set ---- a/arch/m68k/mm/cache.c -+++ b/arch/m68k/mm/cache.c -@@ -81,7 +81,9 @@ static unsigned long virt_to_phys_slow(u - void flush_icache_range(unsigned long address, unsigned long endaddr) - { - #ifdef CONFIG_COLDFIRE -- cf_icache_flush_range(address, endaddr); -+// JKM -- hack until new cpushl stuff is in -+// cf_icache_flush_range(address, endaddr); -+ flush_icache(); - #else /* !CONFIG_COLDFIRE */ - - if (CPU_IS_040_OR_060) { ---- a/arch/m68k/mm/cf-mmu.c -+++ b/arch/m68k/mm/cf-mmu.c -@@ -35,6 +35,12 @@ - #include <asm/coldfire.h> - #include <asm/tlbflush.h> - -+#if PAGE_OFFSET == CONFIG_SDRAM_BASE -+#define KERNRAM(x) ((x >= PAGE_OFFSET) && (x < (PAGE_OFFSET + CONFIG_SDRAM_SIZE))) -+#else -+#define KERNRAM(x) (x >= PAGE_OFFSET) -+#endif -+ - mm_context_t next_mmu_context; - unsigned long context_map[LAST_CONTEXT / BITS_PER_LONG + 1]; - -@@ -53,10 +59,16 @@ extern char __init_begin, __init_end; - - void free_initmem(void) - { -+#if 0 - unsigned long addr; - unsigned long start = (unsigned long)&__init_begin; - unsigned long end = (unsigned long)&__init_end; - -+/* -+ * JKM -- revisit -- the latest round of vmlinux.lds changes has caused -+ * a little grief with how init areas are handled. With the new toolchain -+ * release I'll fix this. -+ */ - printk(KERN_INFO "free_initmem: __init_begin = 0x%lx __init_end = 0x%lx\n", start, end); - - addr = (unsigned long)&__init_begin; -@@ -67,6 +79,7 @@ void free_initmem(void) - free_page(addr); - totalram_pages++; - } -+#endif - } - - /* Coldfire paging_init derived from sun3 */ -@@ -149,8 +162,8 @@ int cf_tlb_miss(struct pt_regs *regs, in - mmuar = ( dtlb ) ? regs->mmuar - : regs->pc + (extension_word * sizeof(long)); - -- mm = (!user_mode(regs) && (mmuar >= PAGE_OFFSET)) ? &init_mm -- : current->mm; -+ mm = (!user_mode(regs) && KERNRAM(mmuar)) ? &init_mm : current->mm; -+ - if (!mm) { - local_irq_restore(flags); - return (-1); -@@ -167,9 +180,9 @@ int cf_tlb_miss(struct pt_regs *regs, in - local_irq_restore(flags); - return (-1); - } -- -- pte = (mmuar >= PAGE_OFFSET) ? pte_offset_kernel(pmd, mmuar) -- : pte_offset_map(pmd, mmuar); -+ -+ pte = (KERNRAM(mmuar)) ? pte_offset_kernel(pmd, mmuar) -+ : pte_offset_map(pmd, mmuar); - if (pte_none(*pte) || !pte_present(*pte)) { - local_irq_restore(flags); - return (-1); -@@ -185,7 +198,7 @@ int cf_tlb_miss(struct pt_regs *regs, in - - set_pte(pte, pte_mkyoung(*pte)); - asid = mm->context & 0xff; -- if (!pte_dirty(*pte) && mmuar<=PAGE_OFFSET) -+ if (!pte_dirty(*pte) && !KERNRAM(mmuar)) - set_pte(pte, pte_wrprotect(*pte)); - - *MMUTR = (mmuar & PAGE_MASK) | (asid << CF_ASID_MMU_SHIFT) -@@ -201,7 +214,8 @@ int cf_tlb_miss(struct pt_regs *regs, in - else - *MMUOR = MMUOR_ITLB | MMUOR_ACC | MMUOR_UAA; - -- asm ("nop"); -+ asm("nop"); -+ - /*printk("cf_tlb_miss: va=%lx, pa=%lx\n", (mmuar & PAGE_MASK), - (pte_val(*pte) & PAGE_MASK));*/ - local_irq_restore(flags); ---- a/arch/m68k/mm/memory.c -+++ b/arch/m68k/mm/memory.c -@@ -206,7 +206,9 @@ static inline void pushcl040(unsigned lo - void cache_clear (unsigned long paddr, int len) - { - #ifdef CONFIG_COLDFIRE -- cf_cache_clear(paddr, len); -+// JKM -- revise to use proper caching -+// cf_cache_clear(paddr, len); -+ flush_bcache(); - #else - if (CPU_IS_040_OR_060) { - int tmp; -@@ -257,7 +259,9 @@ EXPORT_SYMBOL(cache_clear); - void cache_push (unsigned long paddr, int len) - { - #ifdef CONFIG_COLDFIRE -- cf_cache_push(paddr, len); -+// JKM -- revise to use proper caching -+// cf_cache_push(paddr, len); -+ flush_bcache(); - #else - if (CPU_IS_040_OR_060) { - int tmp = PAGE_SIZE; ---- a/drivers/net/fec/fec.c -+++ b/drivers/net/fec/fec.c -@@ -99,6 +99,9 @@ unsigned char fec_mac_addr_fec0[6] = { 0 - unsigned char fec_mac_addr_fec1[6] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x51 }; // Default address of FEC1 - #endif - -+extern unsigned char uboot_enet0[]; -+extern unsigned char uboot_enet1[]; -+ - #ifndef MODULE - int fec_str_to_mac( char *str_mac, unsigned char* addr); - int __init fec_mac_setup0 (char *s); -@@ -175,6 +178,12 @@ printk(KERN_INFO "FEI: index=%d\n", inde - printk(KERN_INFO "FEI: txdesc=0x%p rxdesc=0x%p\n", fp->fecpriv_txdesc, fp->fecpriv_rxdesc); - - /* mac addr */ -+ if (uboot_enet0[0] || uboot_enet0[1] || uboot_enet0[2] || -+ uboot_enet0[3] || uboot_enet0[4] || uboot_enet0[5]) { -+ /* use uboot enet 0 addr */ -+ memcpy(fec_mac_addr_fec0, uboot_enet0, 6); -+ } -+ - fp->fecpriv_mac_addr = fec_mac_addr_fec0; - } - else { -@@ -211,6 +220,11 @@ printk(KERN_INFO "FEI: txdesc=0x%p rxde - fp->fecpriv_rxdesc = (void*)FEC_RX_DESC_FEC1; - - /* mac addr */ -+ if (uboot_enet1[0] || uboot_enet1[1] || uboot_enet1[2] || -+ uboot_enet1[3] || uboot_enet1[4] || uboot_enet1[5]) { -+ /* use uboot enet 1 addr */ -+ memcpy(fec_mac_addr_fec1, uboot_enet1, 6); -+ } - fp->fecpriv_mac_addr = fec_mac_addr_fec1; - #endif - } -@@ -762,7 +776,6 @@ int fec_tx(struct sk_buff *skb, struct n - void *data, *data_aligned; - int offset; - --printk(KERN_INFO "fec_tx\n"); - data = kmalloc(skb->len + 15, GFP_DMA | GFP_ATOMIC); - - if (!data) -@@ -820,7 +833,6 @@ void fec_tx_timeout(struct net_device *d - struct fec_priv *fp = netdev_priv(dev); - unsigned long base_addr = (unsigned long) dev->base_addr; - --printk(KERN_INFO "fec_tx_timeout\n"); - spin_lock_irq(&fp->fecpriv_lock); - MCD_killDma(fp->fecpriv_fec_tx_channel); - for (i = 0; i < FEC_TX_BUF_NUMBER; i++) -@@ -941,7 +953,6 @@ void fec_interrupt_fec_tx_handler(struct - { - struct fec_priv *fp = netdev_priv(dev); - --printk(KERN_INFO "fectxint\n"); - //Release the socket buffer - if(fp->fecpriv_txbuf[fp->fecpriv_current_tx]) - { -@@ -977,7 +988,6 @@ void fec_interrupt_fec_rx_handler(struct - struct fec_priv *fp = netdev_priv(dev); - struct sk_buff *skb; - --printk(KERN_INFO "fecrxint\n"); - fp->fecpriv_rxflag = 1; - /* - // Some buffers can be missed -@@ -1070,7 +1080,6 @@ irqreturn_t fec_interrupt_handler(int ir - unsigned long base_addr = (unsigned long) dev->base_addr; - unsigned long events; - --printk(KERN_INFO "fecerrint\n"); - // Read and clear the events - events = FEC_EIR(base_addr) & FEC_EIMR(base_addr); - -@@ -1157,7 +1166,6 @@ void fec_interrupt_fec_reinit(unsigned l - struct fec_priv *fp = netdev_priv(dev); - unsigned long base_addr = (unsigned long) dev->base_addr; - --printk(KERN_INFO "fecreinit\n"); - // Initialize reception descriptors and start DMA for the reception - for (i = 0; i < FEC_RX_BUF_NUMBER; i++) - { ---- a/include/asm-m68k/bootinfo.h -+++ b/include/asm-m68k/bootinfo.h -@@ -19,11 +19,59 @@ - ** Redesign of the boot information structure; renamed to bootinfo.h again - ** 27/11/96 Geert Uytterhoeven: - ** Backwards compatibility with bootinfo interface version 1.0 -+** 12/03/08 Kurt Mahan -+** Copy the bd_info structure from uboot1.3.2/include/asm-m68k/u-boot.h -+** into this file. The original author is Wolfgang Denk, -+** DENX Software Engineering, wd@denx.de. - */ - - #ifndef _M68K_BOOTINFO_H - #define _M68K_BOOTINFO_H - -+#ifndef __ASSEMBLY__ -+/* -+ * UBoot Support -+ * -+ * bd_info structure from uboot1.3.2/include/asm-m68k/u-boot.h -+ */ -+struct bd_info { -+ unsigned long bi_memstart; /* start of DRAM memory */ -+ unsigned long bi_memsize; /* size of DRAM memory in bytes */ -+ unsigned long bi_flashstart; /* start of FLASH memory */ -+ unsigned long bi_flashsize; /* size of FLASH memory */ -+ unsigned long bi_flashoffset; /* reserved area for startup monitor */ -+ unsigned long bi_sramstart; /* start of SRAM memory */ -+ unsigned long bi_sramsize; /* size of SRAM memory */ -+ unsigned long bi_mbar_base; /* base of internal registers */ -+ unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */ -+ unsigned long bi_boot_params; /* where this board expects params */ -+ unsigned long bi_ip_addr; /* IP Address */ -+ unsigned char bi_enet0addr[6]; /* Ethernet 0 mac address */ -+ unsigned short bi_ethspeed; /* Ethernet speed in Mbps */ -+ unsigned long bi_intfreq; /* Internal Freq, in MHz */ -+ unsigned long bi_busfreq; /* Bus Freq, in MHz */ -+#ifdef UBOOT_PCI -+ unsigned long bi_pcifreq; /* pci Freq in MHz */ -+#endif -+#ifdef UBOOT_EXTRA_CLOCK -+ unsigned long bi_inpfreq; /* input Freq in MHz */ -+ unsigned long bi_vcofreq; /* vco Freq in MHz */ -+ unsigned long bi_flbfreq; /* Flexbus Freq in MHz */ -+#endif -+ unsigned long bi_baudrate; /* Console Baudrate */ -+ unsigned char bi_enet1addr[6]; /* eth1 mac address */ -+ unsigned char bi_enet2addr[6]; /* eth2 mac address */ -+ unsigned char bi_enet3addr[6]; /* eth3 mac address */ -+}; -+ -+struct uboot_record { -+ struct bd_info *bdi; -+ unsigned long initrd_start; -+ unsigned long initrd_end; -+ unsigned long cmd_line_start; -+ unsigned long cmd_line_stop; -+}; -+#endif /* __ASSEMBLY__ */ - - /* - * Bootinfo definitions -@@ -49,17 +97,6 @@ struct bi_record { - #endif /* __ASSEMBLY__ */ - - --#ifndef __ASSEMBLY__ -- --struct uboot_record { -- unsigned long bd_info; -- unsigned long initrd_start; -- unsigned long initrd_end; -- unsigned long cmd_line_start; -- unsigned long cmd_line_stop; --}; -- --#endif /* __ASSEMBLY__ */ - - - /* ---- a/include/asm-m68k/cf_cacheflush.h -+++ b/include/asm-m68k/cf_cacheflush.h -@@ -1,335 +1,92 @@ --/* -- * include/asm-m68k/cf_cacheflush.h - Coldfire Cache -- * -- * Based on include/asm-m68k/cacheflush.h -- * -- * Coldfire pieces by: -- * Kurt Mahan kmahan@freescale.com -- * -- * Copyright Freescale Semiconductor, Inc. 2007 -- * -- * This program is free software; you can redistribute it and/or modify it -- * under the terms of the GNU General Public License as published by the -- * Free Software Foundation; either version 2 of the License, or (at your -- * option) any later version. -- */ - #ifndef M68K_CF_CACHEFLUSH_H - #define M68K_CF_CACHEFLUSH_H - - #include <asm/cfcache.h> -- - /* -- * Coldfire Cache Model -- * -- * The Coldfire processors use a Harvard architecture cache configured -- * as four-way set associative. The cache does not implement bus snooping -- * so cache coherency with other masters must be maintained in software. -- * -- * The cache is managed via the CPUSHL instruction in conjunction with -- * bits set in the CACR (cache control register). Currently the code -- * uses the CPUSHL enhancement which adds the ability to -- * invalidate/clear/push a cacheline by physical address. This feature -- * is designated in the Hardware Configuration Register [D1-CPES]. -- * -- * CACR Bits: -- * DPI[28] cpushl invalidate disable for d-cache -- * IDPI[12] cpushl invalidate disable for i-cache -- * SPA[14] cpushl search by physical address -- * IVO[20] cpushl invalidate only -- * -- * Random Terminology: -- * * invalidate = reset the cache line's valid bit -- * * push = generate a line-sized store of the data if its contents are marked -- * as modifed (the modified flag is cleared after the store) -- * * clear = push + invalidate -- */ -- --/** -- * flush_icache - Flush all of the instruction cache -- */ --static inline void flush_icache(void) --{ -- asm volatile("nop\n" -- "moveq%.l #0,%%d0\n" -- "moveq%.l #0,%%d1\n" -- "move%.l %%d0,%%a0\n" -- "1:\n" -- "cpushl %%ic,(%%a0)\n" -- "add%.l #0x0010,%%a0\n" -- "addq%.l #1,%%d1\n" -- "cmpi%.l %0,%%d1\n" -- "bne 1b\n" -- "moveq%.l #0,%%d1\n" -- "addq%.l #1,%%d0\n" -- "move%.l %%d0,%%a0\n" -- "cmpi%.l #4,%%d0\n" -- "bne 1b\n" -- : : "i" (CACHE_SETS) -- : "a0", "d0", "d1"); --} -- --/** -- * flush_dcache - Flush all of the data cache -- */ --static inline void flush_dcache(void) --{ -- asm volatile("nop\n" -- "moveq%.l #0,%%d0\n" -- "moveq%.l #0,%%d1\n" -- "move%.l %%d0,%%a0\n" -- "1:\n" -- "cpushl %%dc,(%%a0)\n" -- "add%.l #0x0010,%%a0\n" -- "addq%.l #1,%%d1\n" -- "cmpi%.l %0,%%d1\n" -- "bne 1b\n" -- "moveq%.l #0,%%d1\n" -- "addq%.l #1,%%d0\n" -- "move%.l %%d0,%%a0\n" -- "cmpi%.l #4,%%d0\n" -- "bne 1b\n" -- : : "i" (CACHE_SETS) -- : "a0", "d0", "d1"); --} -- --/** -- * flush_bcache - Flush all of both caches -+ * Cache handling functions - */ --static inline void flush_bcache(void) --{ -- asm volatile("nop\n" -- "moveq%.l #0,%%d0\n" -- "moveq%.l #0,%%d1\n" -- "move%.l %%d0,%%a0\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "add%.l #0x0010,%%a0\n" -- "addq%.l #1,%%d1\n" -- "cmpi%.l %0,%%d1\n" -- "bne 1b\n" -- "moveq%.l #0,%%d1\n" -- "addq%.l #1,%%d0\n" -- "move%.l %%d0,%%a0\n" -- "cmpi%.l #4,%%d0\n" -- "bne 1b\n" -- : : "i" (CACHE_SETS) -- : "a0", "d0", "d1"); --} - --/** -- * cf_cache_clear - invalidate cache -- * @paddr: starting physical address -- * @len: number of bytes -- * -- * Invalidate cache lines starting at paddr for len bytes. -- * Those lines are not pushed. -- */ --static inline void cf_cache_clear(unsigned long paddr, int len) --{ -- /* number of lines */ -- len = (len + (CACHE_LINE_SIZE-1)) / CACHE_LINE_SIZE; -- if (len == 0) -- return; -- -- /* align on set boundary */ -- paddr &= 0xfffffff0; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%d0\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "subq%.l #1,%%d0\n" -- "bne%.b 1b\n" -- "movec %2,%%cacr\n" -- : : "a" (paddr), "r" (len), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA+CF_CACR_IVO) -- : "a0", "d0"); --} -- --/** -- * cf_cache_push - Push dirty cache out with no invalidate -- * @paddr: starting physical address -- * @len: number of bytes -- * -- * Push the any dirty lines starting at paddr for len bytes. -- * Those lines are not invalidated. -- */ --static inline void cf_cache_push(unsigned long paddr, int len) --{ -- /* number of lines */ -- len = (len + (CACHE_LINE_SIZE-1)) / CACHE_LINE_SIZE; -- if (len == 0) -- return; -- -- /* align on set boundary */ -- paddr &= 0xfffffff0; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%d0\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "subq%.l #1,%%d0\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : : "a" (paddr), "r" (len), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA+CF_CACR_DPI+CF_CACR_IDPI) -- : "a0", "d0"); --} -+#define flush_icache() \ -+({ \ -+ unsigned long set; \ -+ unsigned long start_set; \ -+ unsigned long end_set; \ -+ \ -+ start_set = 0; \ -+ end_set = (unsigned long)LAST_DCACHE_ADDR; \ -+ \ -+ for (set = start_set; set <= end_set; set += (0x10 - 3)) { \ -+ asm volatile("cpushl %%ic,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%ic,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%ic,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%ic,(%0)" : "=a" (set) : "a" (set)); \ -+ } \ -+}) -+ -+#define flush_dcache() \ -+({ \ -+ unsigned long set; \ -+ unsigned long start_set; \ -+ unsigned long end_set; \ -+ \ -+ start_set = 0; \ -+ end_set = (unsigned long)LAST_DCACHE_ADDR; \ -+ \ -+ for (set = start_set; set <= end_set; set += (0x10 - 3)) { \ -+ asm volatile("cpushl %%dc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%dc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%dc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%dc,(%0)" : "=a" (set) : "a" (set)); \ -+ } \ -+}) -+ -+#define flush_bcache() \ -+({ \ -+ unsigned long set; \ -+ unsigned long start_set; \ -+ unsigned long end_set; \ -+ \ -+ start_set = 0; \ -+ end_set = (unsigned long)LAST_DCACHE_ADDR; \ -+ \ -+ for (set = start_set; set <= end_set; set += (0x10 - 3)) { \ -+ asm volatile("cpushl %%bc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%bc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%bc,(%0)\n" \ -+ "\taddq%.l #1,%0\n" \ -+ "\tcpushl %%bc,(%0)" : "=a" (set) : "a" (set)); \ -+ } \ -+}) - --/** -- * cf_cache_flush - Push dirty cache out and invalidate -- * @paddr: starting physical address -- * @len: number of bytes -- * -- * Push the any dirty lines starting at paddr for len bytes and -- * invalidate those lines. -+/* -+ * invalidate the cache for the specified memory range. -+ * It starts at the physical address specified for -+ * the given number of bytes. - */ --static inline void cf_cache_flush(unsigned long paddr, int len) --{ -- /* number of lines */ -- len = (len + (CACHE_LINE_SIZE-1)) / CACHE_LINE_SIZE; -- if (len == 0) -- return; -- -- /* align on set boundary */ -- paddr &= 0xfffffff0; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%d0\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "subq%.l #1,%%d0\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : : "a" (paddr), "r" (len), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA) -- : "a0", "d0"); --} -- --/** -- * cf_cache_flush_range - Push dirty data/inst cache in range out and invalidate -- * @vstart - starting virtual address -- * @vend: ending virtual address -- * -- * Push the any dirty data/instr lines starting at paddr for len bytes and -- * invalidate those lines. -+extern void cache_clear(unsigned long paddr, int len); -+/* -+ * push any dirty cache in the specified memory range. -+ * It starts at the physical address specified for -+ * the given number of bytes. - */ --static inline void cf_cache_flush_range(unsigned long vstart, unsigned long vend) --{ -- int len; -- -- /* align on set boundary */ -- vstart &= 0xfffffff0; -- vend = PAGE_ALIGN((vend + (CACHE_LINE_SIZE-1))) & 0xfffffff0; -- len = vend - vstart; -- if (len == 0) -- return; -- vstart = __pa(vstart); -- vend = vstart + len; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%a1\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "cmpa%.l %%a0,%%a1\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : /* no return */ -- : "a" (vstart), "a" (vend), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA) -- : "a0", "a1", "d0"); --} -+extern void cache_push(unsigned long paddr, int len); - --/** -- * cf_dcache_flush_range - Push dirty data cache in range out and invalidate -- * @vstart - starting virtual address -- * @vend: ending virtual address -- * -- * Push the any dirty data lines starting at paddr for len bytes and -- * invalidate those lines. -+/* -+ * push and invalidate pages in the specified user virtual -+ * memory range. - */ --static inline void cf_dcache_flush_range(unsigned long vstart, unsigned long vend) --{ -- /* align on set boundary */ -- vstart &= 0xfffffff0; -- vend = (vend + (CACHE_LINE_SIZE-1)) & 0xfffffff0; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%a1\n" -- "1:\n" -- "cpushl %%dc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "cmpa%.l %%a0,%%a1\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : /* no return */ -- : "a" (__pa(vstart)), "a" (__pa(vend)), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA) -- : "a0", "a1", "d0"); --} -+extern void cache_push_v(unsigned long vaddr, int len); - --/** -- * cf_icache_flush_range - Push dirty inst cache in range out and invalidate -- * @vstart - starting virtual address -- * @vend: ending virtual address -- * -- * Push the any dirty instr lines starting at paddr for len bytes and -- * invalidate those lines. This should just be an invalidate since you -- * shouldn't be able to have dirty instruction cache. -- */ --static inline void cf_icache_flush_range(unsigned long vstart, unsigned long vend) --{ -- /* align on set boundary */ -- vstart &= 0xfffffff0; -- vend = (vend + (CACHE_LINE_SIZE-1)) & 0xfffffff0; -- -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%a0\n" -- "move%.l %1,%%a1\n" -- "1:\n" -- "cpushl %%ic,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "cmpa%.l %%a0,%%a1\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : /* no return */ -- : "a" (__pa(vstart)), "a" (__pa(vend)), -- "r" (shadow_cacr), -- "i" (CF_CACR_SPA) -- : "a0", "a1", "d0"); --} -+/* This is needed whenever the virtual mapping of the current -+ process changes. */ - - /** - * flush_cache_mm - Flush an mm_struct -@@ -343,6 +100,8 @@ static inline void flush_cache_mm(struct - - #define flush_cache_dup_mm(mm) flush_cache_mm(mm) - -+#define flush_cache_all() flush_bcache() -+ - /** - * flush_cache_range - Flush a cache range - * @vma: vma struct -@@ -356,7 +115,8 @@ static inline void flush_cache_range(str - unsigned long start, unsigned long end) - { - if (vma->vm_mm == current->mm) -- cf_cache_flush_range(start, end); -+ flush_bcache(); -+// cf_cache_flush_range(start, end); - } - - /** -@@ -372,76 +132,113 @@ static inline void flush_cache_page(stru - unsigned long vmaddr, unsigned long pfn) - { - if (vma->vm_mm == current->mm) -- cf_cache_flush_range(vmaddr, vmaddr+PAGE_SIZE); -+ flush_bcache(); -+// cf_cache_flush_range(vmaddr, vmaddr+PAGE_SIZE); - } - --/** -- * __flush_page_to_ram - Push a page out of the cache -- * @vaddr: Virtual address at start of page -- * -- * Push the page at kernel virtual address *vaddr* and clear -- * the icache. -- */ --static inline void __flush_page_to_ram(void *vaddr) --{ -- asm volatile("nop\n" -- "move%.l %2,%%d0\n" -- "or%.l %3,%%d0\n" -- "movec %%d0,%%cacr\n" -- "move%.l %0,%%d0\n" -- "and%.l #0xfffffff0,%%d0\n" -- "move%.l %%d0,%%a0\n" -- "move%.l %1,%%d0\n" -- "1:\n" -- "cpushl %%bc,(%%a0)\n" -- "lea 0x10(%%a0),%%a0\n" -- "subq%.l #1,%%d0\n" -- "bne.b 1b\n" -- "movec %2,%%cacr\n" -- : : "a" (__pa(vaddr)), "i" (PAGE_SIZE / CACHE_LINE_SIZE), -- "r" (shadow_cacr), "i" (CF_CACR_SPA) -- : "a0", "d0"); -+/* Push the page at kernel virtual address and clear the icache */ -+/* RZ: use cpush %bc instead of cpush %dc, cinv %ic */ -+#define flush_page_to_ram(page) __flush_page_to_ram((void *) page_address(page)) -+extern inline void __flush_page_to_ram(void *address) -+{ -+ unsigned long set; -+ unsigned long start_set; -+ unsigned long end_set; -+ unsigned long addr = (unsigned long) address; -+ -+ addr &= ~(PAGE_SIZE - 1); /* round down to page start address */ -+ -+ start_set = addr & _ICACHE_SET_MASK; -+ end_set = (addr + PAGE_SIZE-1) & _ICACHE_SET_MASK; -+ -+ if (start_set > end_set) { -+ /* from the begining to the lowest address */ -+ for (set = 0; set <= end_set; set += (0x10 - 3)) { -+ asm volatile("cpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)" : "=a" (set) : "a" (set)); -+ } -+ /* next loop will finish the cache ie pass the hole */ -+ end_set = LAST_ICACHE_ADDR; -+ } -+ for (set = start_set; set <= end_set; set += (0x10 - 3)) { -+ asm volatile("cpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%bc,(%0)" : "=a" (set) : "a" (set)); -+ } -+} -+ -+/* Use __flush_page_to_ram() for flush_dcache_page all values are same - MW */ -+#define flush_dcache_page(page) \ -+ __flush_page_to_ram((void *) page_address(page)) -+#define flush_icache_page(vma,pg) \ -+ __flush_page_to_ram((void *) page_address(pg)) -+#define flush_icache_user_range(adr,len) do { } while (0) -+/* NL */ -+#define flush_icache_user_page(vma,page,addr,len) do { } while (0) -+ -+/* Push n pages at kernel virtual address and clear the icache */ -+/* RZ: use cpush %bc instead of cpush %dc, cinv %ic */ -+extern inline void flush_icache_range (unsigned long address, -+ unsigned long endaddr) -+{ -+ unsigned long set; -+ unsigned long start_set; -+ unsigned long end_set; -+ -+ start_set = address & _ICACHE_SET_MASK; -+ end_set = endaddr & _ICACHE_SET_MASK; -+ -+ if (start_set > end_set) { -+ /* from the begining to the lowest address */ -+ for (set = 0; set <= end_set; set += (0x10 - 3)) { -+ asm volatile("cpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)" : "=a" (set) : "a" (set)); -+ } -+ /* next loop will finish the cache ie pass the hole */ -+ end_set = LAST_ICACHE_ADDR; -+ } -+ for (set = start_set; set <= end_set; set += (0x10 - 3)) { -+ asm volatile("cpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)\n" -+ "\taddq%.l #1,%0\n" -+ "\tcpushl %%ic,(%0)" : "=a" (set) : "a" (set)); -+ } - } - --/* -- * Various defines for the kernel. -- */ -- --extern void cache_clear(unsigned long paddr, int len); --extern void cache_push(unsigned long paddr, int len); --extern void flush_icache_range(unsigned long address, unsigned long endaddr); -- --#define flush_cache_all() flush_bcache() --#define flush_cache_vmap(start, end) flush_bcache() --#define flush_cache_vunmap(start, end) flush_bcache() -- --#define flush_dcache_range(vstart, vend) cf_dcache_flush_range(vstart, vend) --#define flush_dcache_page(page) __flush_page_to_ram(page_address(page)) --#define flush_dcache_mmap_lock(mapping) do { } while (0) --#define flush_dcache_mmap_unlock(mapping) do { } while (0) -- --#define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page)) -- --/** -- * copy_to_user_page - Copy memory to user page -- */ - static inline void copy_to_user_page(struct vm_area_struct *vma, - struct page *page, unsigned long vaddr, - void *dst, void *src, int len) - { - memcpy(dst, src, len); -- cf_cache_flush(page_to_phys(page), PAGE_SIZE); -+ flush_icache_user_page(vma, page, vaddr, len); - } -- --/** -- * copy_from_user_page - Copy memory from user page -- */ - static inline void copy_from_user_page(struct vm_area_struct *vma, - struct page *page, unsigned long vaddr, - void *dst, void *src, int len) - { -- cf_cache_flush(page_to_phys(page), PAGE_SIZE); - memcpy(dst, src, len); - } - -+#define flush_cache_vmap(start, end) flush_cache_all() -+#define flush_cache_vunmap(start, end) flush_cache_all() -+#define flush_dcache_mmap_lock(mapping) do { } while (0) -+#define flush_dcache_mmap_unlock(mapping) do { } while (0) -+ - #endif /* M68K_CF_CACHEFLUSH_H */ ---- a/include/asm-m68k/cf_pgalloc.h -+++ b/include/asm-m68k/cf_pgalloc.h -@@ -1,13 +1,9 @@ - #ifndef M68K_CF_PGALLOC_H - #define M68K_CF_PGALLOC_H - --/* JKM -- added -- needed? */ --#include <linux/highmem.h> -- - #include <asm/coldfire.h> - #include <asm/page.h> - #include <asm/cf_tlbflush.h> --/* JKM -- added -- needed? */ - #include <asm/cf_cacheflush.h> - - extern inline void pte_free_kernel(pte_t *pte) -@@ -41,6 +37,7 @@ extern inline pmd_t *pmd_alloc_kernel(pg - - #define pmd_populate(mm, pmd, page) (pmd_val(*pmd) = \ - (unsigned long)(page_address(page))) -+ - #define pmd_populate_kernel(mm, pmd, pte) (pmd_val(*pmd) = (unsigned long)(pte)) - - static inline void __pte_free_tlb(struct mmu_gather *tlb, struct page *page) ---- a/include/asm-m68k/cf_pgtable.h -+++ b/include/asm-m68k/cf_pgtable.h -@@ -341,7 +341,7 @@ static inline pte_t pgoff_to_pte(unsigne - #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) - #define __swp_entry_to_pte(x) (__pte((x).val)) - --#define pmd_page(pmd) virt_to_page(__pmd_page(pmd)) -+#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) - - #define pte_offset_map(pmdp, address) ((pte_t *)__pmd_page(*pmdp) + \ - __pte_offset(address)) ---- a/include/asm-m68k/cfcache.h -+++ b/include/asm-m68k/cfcache.h -@@ -87,6 +87,12 @@ - #define CACHE_SETS 0x0200 /* 512 sets */ - #define CACHE_WAYS 0x0004 /* 4 way */ - -+/* in for the old cpushl caching code */ -+#define _DCACHE_SET_MASK ((DCACHE_SIZE/64-1)<<CACHE_WAYS) -+#define _ICACHE_SET_MASK ((ICACHE_SIZE/64-1)<<CACHE_WAYS) -+#define LAST_DCACHE_ADDR _DCACHE_SET_MASK -+#define LAST_ICACHE_ADDR _ICACHE_SET_MASK -+ - #define CACHE_DISABLE_MODE (CF_CACR_DCINVA+ \ - CF_CACR_BCINVA+ \ - CF_CACR_ICINVA) ---- a/include/asm-m68k/page.h -+++ b/include/asm-m68k/page.h -@@ -123,13 +123,21 @@ extern unsigned long m68k_memoffset; - #if defined(CONFIG_COLDFIRE) - static inline unsigned long ___pa(void *vaddr) - { -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - return (((unsigned long)vaddr & 0x0fffffff) + CONFIG_SDRAM_BASE); -+#else -+ return (unsigned long)vaddr; -+#endif - } - #define __pa(vaddr) ___pa((void *)(vaddr)) - - static inline void *__va(unsigned long paddr) - { -+#if CONFIG_SDRAM_BASE != PAGE_OFFSET - return (void *)((paddr & 0x0fffffff) + PAGE_OFFSET); -+#else -+ return (void *)paddr; -+#endif - } - - #else ---- a/include/asm-m68k/page_offset.h -+++ b/include/asm-m68k/page_offset.h -@@ -1,16 +1,15 @@ -+/* -+ * Page and physical memory maps. -+ */ -+#if defined(CONFIG_SUN3) -+#define PAGE_OFFSET_RAW 0x0E000000 -+ -+#elif defined(CONFIG_M54455) || defined(CONFIG_M547X_8X) -+#define PHYS_OFFSET CONFIG_SDRAM_BASE -+#define PAGE_OFFSET_RAW (PHYS_OFFSET) -+/* #define PAGE_OFFSET_RAW 0xC0000000 */ - --/* This handles the memory map.. */ --#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE) -+#else -+/* default */ - #define PAGE_OFFSET_RAW 0x00000000 --#elif defined(CONFIG_SUN3) --#define PAGE_OFFSET_RAW 0x0E000000 --#else /* CONFIG_COLDFIRE */ --#if defined(CONFIG_M54455) --#define PAGE_OFFSET_RAW 0xC0000000 --#define PHYS_OFFSET 0x40000000 --#elif defined(CONFIG_M547X_8X) --#define PAGE_OFFSET_RAW 0xC0000000 --#define PHYS_OFFSET 0x00000000 - #endif --#endif -- |