Merge branch 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze
* 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze: microblaze: Defconfig update microblaze: Optimize CACHE_LOOP_LIMITS and CACHE_RANGE_LOOP macros microblaze: Fix consistent-sync code microblaze: Define correct L1_CACHE_SHIFT value microblaze: cpuinfo shows cache line length microblaze: Fix kmalloc alignment on non-coherent DMA platforms microblaze: Fix typo fault in cache code microblaze: Fix consistent code microblaze: pci-dma: use include/linux/dma-mapping.h microblaze: page.h: Remove get_user_page and free_user_page microblaze: Remove "cache" optimized copy_page function microblaze: invoke oom-killer from page fault microblaze: fix divide by zero exception message microblaze: Add isa_dma_bridge_buggy to dma.h microblaze: Remove ancient code microblaze: Quiet section mismatch warnings for MMU version microblaze: Quiet section mismatch warnings microblaze: Fix IRQ entry/exit ftracing microblaze: resource/PCI: align functions now return start of resource microblaze: PCI: add pci_bus_for_each_resource(), remove direct bus->resource[] refs
This commit is contained in:
Коммит
e8e8fade7b
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.33-rc6
|
# Linux kernel version: 2.6.34-rc6
|
||||||
# Wed Feb 3 10:02:59 2010
|
# Thu May 6 11:22:14 2010
|
||||||
#
|
#
|
||||||
CONFIG_MICROBLAZE=y
|
CONFIG_MICROBLAZE=y
|
||||||
# CONFIG_SWAP is not set
|
# CONFIG_SWAP is not set
|
||||||
|
@ -22,8 +22,6 @@ CONFIG_GENERIC_CSUM=y
|
||||||
CONFIG_STACKTRACE_SUPPORT=y
|
CONFIG_STACKTRACE_SUPPORT=y
|
||||||
CONFIG_LOCKDEP_SUPPORT=y
|
CONFIG_LOCKDEP_SUPPORT=y
|
||||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||||
# CONFIG_PCI is not set
|
|
||||||
CONFIG_NO_DMA=y
|
|
||||||
CONFIG_DTC=y
|
CONFIG_DTC=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
CONFIG_CONSTRUCTORS=y
|
CONFIG_CONSTRUCTORS=y
|
||||||
|
@ -56,7 +54,6 @@ CONFIG_RCU_FANOUT=32
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
# CONFIG_GROUP_SCHED is not set
|
|
||||||
# CONFIG_CGROUPS is not set
|
# CONFIG_CGROUPS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
@ -106,6 +103,8 @@ CONFIG_SLAB=y
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
|
CONFIG_HAVE_DMA_ATTRS=y
|
||||||
|
CONFIG_HAVE_DMA_API_DEBUG=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# GCOV-based kernel profiling
|
# GCOV-based kernel profiling
|
||||||
|
@ -245,13 +244,20 @@ CONFIG_BINFMT_ELF=y
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
# CONFIG_HAVE_AOUT is not set
|
# CONFIG_HAVE_AOUT is not set
|
||||||
# CONFIG_BINFMT_MISC is not set
|
# CONFIG_BINFMT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bus Options
|
||||||
|
#
|
||||||
|
# CONFIG_PCI is not set
|
||||||
|
# CONFIG_PCI_DOMAINS is not set
|
||||||
|
# CONFIG_PCI_SYSCALL is not set
|
||||||
|
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
CONFIG_XFRM=y
|
CONFIG_XFRM=y
|
||||||
# CONFIG_XFRM_USER is not set
|
# CONFIG_XFRM_USER is not set
|
||||||
|
@ -341,7 +347,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
# CONFIG_SYS_HYPERVISOR is not set
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
# CONFIG_CONNECTOR is not set
|
# CONFIG_CONNECTOR is not set
|
||||||
# CONFIG_MTD is not set
|
# CONFIG_MTD is not set
|
||||||
|
CONFIG_OF_FLATTREE=y
|
||||||
CONFIG_OF_DEVICE=y
|
CONFIG_OF_DEVICE=y
|
||||||
|
CONFIG_OF_MDIO=y
|
||||||
# CONFIG_PARPORT is not set
|
# CONFIG_PARPORT is not set
|
||||||
CONFIG_BLK_DEV=y
|
CONFIG_BLK_DEV=y
|
||||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
|
@ -370,6 +378,7 @@ CONFIG_MISC_DEVICES=y
|
||||||
#
|
#
|
||||||
# SCSI device support
|
# SCSI device support
|
||||||
#
|
#
|
||||||
|
CONFIG_SCSI_MOD=y
|
||||||
# CONFIG_RAID_ATTRS is not set
|
# CONFIG_RAID_ATTRS is not set
|
||||||
# CONFIG_SCSI is not set
|
# CONFIG_SCSI is not set
|
||||||
# CONFIG_SCSI_DMA is not set
|
# CONFIG_SCSI_DMA is not set
|
||||||
|
@ -383,9 +392,30 @@ CONFIG_NETDEVICES=y
|
||||||
# CONFIG_EQUALIZER is not set
|
# CONFIG_EQUALIZER is not set
|
||||||
# CONFIG_TUN is not set
|
# CONFIG_TUN is not set
|
||||||
# CONFIG_VETH is not set
|
# CONFIG_VETH is not set
|
||||||
# CONFIG_PHYLIB is not set
|
CONFIG_PHYLIB=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# MII PHY device drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MARVELL_PHY is not set
|
||||||
|
# CONFIG_DAVICOM_PHY is not set
|
||||||
|
# CONFIG_QSEMI_PHY is not set
|
||||||
|
# CONFIG_LXT_PHY is not set
|
||||||
|
# CONFIG_CICADA_PHY is not set
|
||||||
|
# CONFIG_VITESSE_PHY is not set
|
||||||
|
# CONFIG_SMSC_PHY is not set
|
||||||
|
# CONFIG_BROADCOM_PHY is not set
|
||||||
|
# CONFIG_ICPLUS_PHY is not set
|
||||||
|
# CONFIG_REALTEK_PHY is not set
|
||||||
|
# CONFIG_NATIONAL_PHY is not set
|
||||||
|
# CONFIG_STE10XP is not set
|
||||||
|
# CONFIG_LSI_ET1011C_PHY is not set
|
||||||
|
# CONFIG_MICREL_PHY is not set
|
||||||
|
# CONFIG_FIXED_PHY is not set
|
||||||
|
# CONFIG_MDIO_BITBANG is not set
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
# CONFIG_MII is not set
|
# CONFIG_MII is not set
|
||||||
|
# CONFIG_ETHOC is not set
|
||||||
# CONFIG_DNET is not set
|
# CONFIG_DNET is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||||
|
@ -394,6 +424,7 @@ CONFIG_NET_ETHERNET=y
|
||||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||||
|
# CONFIG_B44 is not set
|
||||||
# CONFIG_KS8842 is not set
|
# CONFIG_KS8842 is not set
|
||||||
# CONFIG_KS8851_MLL is not set
|
# CONFIG_KS8851_MLL is not set
|
||||||
CONFIG_XILINX_EMACLITE=y
|
CONFIG_XILINX_EMACLITE=y
|
||||||
|
@ -444,6 +475,7 @@ CONFIG_SERIAL_UARTLITE=y
|
||||||
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
||||||
CONFIG_SERIAL_CORE=y
|
CONFIG_SERIAL_CORE=y
|
||||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||||
|
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||||
# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
|
# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||||
|
@ -471,6 +503,12 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
# CONFIG_THERMAL is not set
|
# CONFIG_THERMAL is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
CONFIG_SSB_POSSIBLE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sonics Silicon Backplane
|
||||||
|
#
|
||||||
|
# CONFIG_SSB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
|
@ -502,6 +540,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
# CONFIG_ACCESSIBILITY is not set
|
# CONFIG_ACCESSIBILITY is not set
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
|
# CONFIG_DMADEVICES is not set
|
||||||
# CONFIG_AUXDISPLAY is not set
|
# CONFIG_AUXDISPLAY is not set
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
|
|
||||||
|
@ -572,6 +611,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||||
# CONFIG_BEFS_FS is not set
|
# CONFIG_BEFS_FS is not set
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
|
# CONFIG_LOGFS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
# CONFIG_SQUASHFS is not set
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
|
@ -595,6 +635,7 @@ CONFIG_SUNRPC=y
|
||||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
|
# CONFIG_CEPH_FS is not set
|
||||||
CONFIG_CIFS=y
|
CONFIG_CIFS=y
|
||||||
CONFIG_CIFS_STATS=y
|
CONFIG_CIFS_STATS=y
|
||||||
CONFIG_CIFS_STATS2=y
|
CONFIG_CIFS_STATS2=y
|
||||||
|
@ -696,6 +737,7 @@ CONFIG_SCHED_DEBUG=y
|
||||||
# CONFIG_DEBUG_OBJECTS is not set
|
# CONFIG_DEBUG_OBJECTS is not set
|
||||||
CONFIG_DEBUG_SLAB=y
|
CONFIG_DEBUG_SLAB=y
|
||||||
# CONFIG_DEBUG_SLAB_LEAK is not set
|
# CONFIG_DEBUG_SLAB_LEAK is not set
|
||||||
|
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||||
CONFIG_DEBUG_SPINLOCK=y
|
CONFIG_DEBUG_SPINLOCK=y
|
||||||
# CONFIG_DEBUG_MUTEXES is not set
|
# CONFIG_DEBUG_MUTEXES is not set
|
||||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||||
|
@ -741,6 +783,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||||
# CONFIG_KMEMTRACE is not set
|
# CONFIG_KMEMTRACE is not set
|
||||||
# CONFIG_WORKQUEUE_TRACER is not set
|
# CONFIG_WORKQUEUE_TRACER is not set
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
|
# CONFIG_DMA_API_DEBUG is not set
|
||||||
# CONFIG_SAMPLES is not set
|
# CONFIG_SAMPLES is not set
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
# CONFIG_HEART_BEAT is not set
|
# CONFIG_HEART_BEAT is not set
|
||||||
|
@ -862,5 +905,6 @@ CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_DECOMPRESS_GZIP=y
|
CONFIG_DECOMPRESS_GZIP=y
|
||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_IOPORT=y
|
CONFIG_HAS_IOPORT=y
|
||||||
|
CONFIG_HAS_DMA=y
|
||||||
CONFIG_HAVE_LMB=y
|
CONFIG_HAVE_LMB=y
|
||||||
CONFIG_NLATTR=y
|
CONFIG_NLATTR=y
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.33-rc6
|
# Linux kernel version: 2.6.34-rc6
|
||||||
# Wed Feb 3 10:03:21 2010
|
# Thu May 6 11:25:12 2010
|
||||||
#
|
#
|
||||||
CONFIG_MICROBLAZE=y
|
CONFIG_MICROBLAZE=y
|
||||||
# CONFIG_SWAP is not set
|
# CONFIG_SWAP is not set
|
||||||
|
@ -22,8 +22,6 @@ CONFIG_GENERIC_CSUM=y
|
||||||
CONFIG_STACKTRACE_SUPPORT=y
|
CONFIG_STACKTRACE_SUPPORT=y
|
||||||
CONFIG_LOCKDEP_SUPPORT=y
|
CONFIG_LOCKDEP_SUPPORT=y
|
||||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||||
# CONFIG_PCI is not set
|
|
||||||
CONFIG_NO_DMA=y
|
|
||||||
CONFIG_DTC=y
|
CONFIG_DTC=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
CONFIG_CONSTRUCTORS=y
|
CONFIG_CONSTRUCTORS=y
|
||||||
|
@ -58,7 +56,6 @@ CONFIG_RCU_FANOUT=32
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
# CONFIG_GROUP_SCHED is not set
|
|
||||||
# CONFIG_CGROUPS is not set
|
# CONFIG_CGROUPS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
@ -96,6 +93,8 @@ CONFIG_SLAB=y
|
||||||
# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set
|
# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
|
CONFIG_HAVE_DMA_ATTRS=y
|
||||||
|
CONFIG_HAVE_DMA_API_DEBUG=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# GCOV-based kernel profiling
|
# GCOV-based kernel profiling
|
||||||
|
@ -209,11 +208,14 @@ CONFIG_PROC_DEVICETREE=y
|
||||||
#
|
#
|
||||||
# Advanced setup
|
# Advanced setup
|
||||||
#
|
#
|
||||||
|
# CONFIG_ADVANCED_OPTIONS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Default settings for advanced configuration options are used
|
# Default settings for advanced configuration options are used
|
||||||
#
|
#
|
||||||
|
CONFIG_LOWMEM_SIZE=0x30000000
|
||||||
CONFIG_KERNEL_START=0x90000000
|
CONFIG_KERNEL_START=0x90000000
|
||||||
|
CONFIG_TASK_SIZE=0x80000000
|
||||||
CONFIG_SELECT_MEMORY_MODEL=y
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
CONFIG_FLATMEM_MANUAL=y
|
CONFIG_FLATMEM_MANUAL=y
|
||||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||||
|
@ -235,13 +237,20 @@ CONFIG_BINFMT_FLAT=y
|
||||||
# CONFIG_BINFMT_SHARED_FLAT is not set
|
# CONFIG_BINFMT_SHARED_FLAT is not set
|
||||||
# CONFIG_HAVE_AOUT is not set
|
# CONFIG_HAVE_AOUT is not set
|
||||||
# CONFIG_BINFMT_MISC is not set
|
# CONFIG_BINFMT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bus Options
|
||||||
|
#
|
||||||
|
# CONFIG_PCI is not set
|
||||||
|
# CONFIG_PCI_DOMAINS is not set
|
||||||
|
# CONFIG_PCI_SYSCALL is not set
|
||||||
|
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
CONFIG_XFRM=y
|
CONFIG_XFRM=y
|
||||||
# CONFIG_XFRM_USER is not set
|
# CONFIG_XFRM_USER is not set
|
||||||
|
@ -413,6 +422,7 @@ CONFIG_MTD_UCLINUX=y
|
||||||
# UBI - Unsorted block images
|
# UBI - Unsorted block images
|
||||||
#
|
#
|
||||||
# CONFIG_MTD_UBI is not set
|
# CONFIG_MTD_UBI is not set
|
||||||
|
CONFIG_OF_FLATTREE=y
|
||||||
CONFIG_OF_DEVICE=y
|
CONFIG_OF_DEVICE=y
|
||||||
# CONFIG_PARPORT is not set
|
# CONFIG_PARPORT is not set
|
||||||
CONFIG_BLK_DEV=y
|
CONFIG_BLK_DEV=y
|
||||||
|
@ -442,6 +452,7 @@ CONFIG_MISC_DEVICES=y
|
||||||
#
|
#
|
||||||
# SCSI device support
|
# SCSI device support
|
||||||
#
|
#
|
||||||
|
CONFIG_SCSI_MOD=y
|
||||||
# CONFIG_RAID_ATTRS is not set
|
# CONFIG_RAID_ATTRS is not set
|
||||||
# CONFIG_SCSI is not set
|
# CONFIG_SCSI is not set
|
||||||
# CONFIG_SCSI_DMA is not set
|
# CONFIG_SCSI_DMA is not set
|
||||||
|
@ -458,6 +469,7 @@ CONFIG_NETDEVICES=y
|
||||||
# CONFIG_PHYLIB is not set
|
# CONFIG_PHYLIB is not set
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
# CONFIG_MII is not set
|
# CONFIG_MII is not set
|
||||||
|
# CONFIG_ETHOC is not set
|
||||||
# CONFIG_DNET is not set
|
# CONFIG_DNET is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||||
|
@ -466,6 +478,7 @@ CONFIG_NET_ETHERNET=y
|
||||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||||
|
# CONFIG_B44 is not set
|
||||||
# CONFIG_KS8842 is not set
|
# CONFIG_KS8842 is not set
|
||||||
# CONFIG_KS8851_MLL is not set
|
# CONFIG_KS8851_MLL is not set
|
||||||
# CONFIG_XILINX_EMACLITE is not set
|
# CONFIG_XILINX_EMACLITE is not set
|
||||||
|
@ -516,6 +529,7 @@ CONFIG_SERIAL_UARTLITE=y
|
||||||
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
||||||
CONFIG_SERIAL_CORE=y
|
CONFIG_SERIAL_CORE=y
|
||||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||||
|
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||||
# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
|
# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||||
|
@ -544,6 +558,12 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
# CONFIG_THERMAL is not set
|
# CONFIG_THERMAL is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
CONFIG_SSB_POSSIBLE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sonics Silicon Backplane
|
||||||
|
#
|
||||||
|
# CONFIG_SSB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
|
@ -593,6 +613,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
# CONFIG_ACCESSIBILITY is not set
|
# CONFIG_ACCESSIBILITY is not set
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
|
# CONFIG_DMADEVICES is not set
|
||||||
# CONFIG_AUXDISPLAY is not set
|
# CONFIG_AUXDISPLAY is not set
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
|
|
||||||
|
@ -661,6 +682,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
# CONFIG_JFFS2_FS is not set
|
# CONFIG_JFFS2_FS is not set
|
||||||
|
# CONFIG_LOGFS is not set
|
||||||
CONFIG_CRAMFS=y
|
CONFIG_CRAMFS=y
|
||||||
# CONFIG_SQUASHFS is not set
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
|
@ -689,6 +711,7 @@ CONFIG_SUNRPC=y
|
||||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
|
# CONFIG_CEPH_FS is not set
|
||||||
# CONFIG_CIFS is not set
|
# CONFIG_CIFS is not set
|
||||||
# CONFIG_NCP_FS is not set
|
# CONFIG_NCP_FS is not set
|
||||||
# CONFIG_CODA_FS is not set
|
# CONFIG_CODA_FS is not set
|
||||||
|
@ -733,6 +756,7 @@ CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||||
# CONFIG_DEBUG_OBJECTS_WORK is not set
|
# CONFIG_DEBUG_OBJECTS_WORK is not set
|
||||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||||
# CONFIG_RT_MUTEX_TESTER is not set
|
# CONFIG_RT_MUTEX_TESTER is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
@ -758,6 +782,7 @@ CONFIG_DEBUG_SG=y
|
||||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||||
|
# CONFIG_LKDTM is not set
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
# CONFIG_LATENCYTOP is not set
|
# CONFIG_LATENCYTOP is not set
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
@ -782,6 +807,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||||
# CONFIG_WORKQUEUE_TRACER is not set
|
# CONFIG_WORKQUEUE_TRACER is not set
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
# CONFIG_DYNAMIC_DEBUG is not set
|
# CONFIG_DYNAMIC_DEBUG is not set
|
||||||
|
# CONFIG_DMA_API_DEBUG is not set
|
||||||
# CONFIG_SAMPLES is not set
|
# CONFIG_SAMPLES is not set
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
# CONFIG_HEART_BEAT is not set
|
# CONFIG_HEART_BEAT is not set
|
||||||
|
@ -901,5 +927,6 @@ CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||||
CONFIG_ZLIB_INFLATE=y
|
CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_IOPORT=y
|
CONFIG_HAS_IOPORT=y
|
||||||
|
CONFIG_HAS_DMA=y
|
||||||
CONFIG_HAVE_LMB=y
|
CONFIG_HAVE_LMB=y
|
||||||
CONFIG_NLATTR=y
|
CONFIG_NLATTR=y
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
#include <asm/registers.h>
|
#include <asm/registers.h>
|
||||||
|
|
||||||
#define L1_CACHE_SHIFT 2
|
#define L1_CACHE_SHIFT 5
|
||||||
/* word-granular cache in microblaze */
|
/* word-granular cache in microblaze */
|
||||||
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
|
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
|
||||||
|
|
||||||
|
|
|
@ -18,4 +18,10 @@
|
||||||
#define MAX_DMA_ADDRESS (CONFIG_KERNEL_START + memory_size - 1)
|
#define MAX_DMA_ADDRESS (CONFIG_KERNEL_START + memory_size - 1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
|
extern int isa_dma_bridge_buggy;
|
||||||
|
#else
|
||||||
|
#define isa_dma_bridge_buggy (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_MICROBLAZE_DMA_H */
|
#endif /* _ASM_MICROBLAZE_DMA_H */
|
||||||
|
|
|
@ -64,12 +64,6 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
||||||
void die(const char *str, struct pt_regs *fp, long err);
|
void die(const char *str, struct pt_regs *fp, long err);
|
||||||
void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
|
void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
|
||||||
void __bug(const char *file, int line, void *data);
|
|
||||||
int bad_trap(int trap_num, struct pt_regs *regs);
|
|
||||||
int debug_trap(struct pt_regs *regs);
|
|
||||||
#endif /* CONFIG_MMU */
|
|
||||||
|
|
||||||
#if defined(CONFIG_KGDB)
|
#if defined(CONFIG_KGDB)
|
||||||
void (*debugger)(struct pt_regs *regs);
|
void (*debugger)(struct pt_regs *regs);
|
||||||
int (*debugger_bpt)(struct pt_regs *regs);
|
int (*debugger_bpt)(struct pt_regs *regs);
|
||||||
|
|
|
@ -139,8 +139,6 @@ static inline void writel(unsigned int v, volatile void __iomem *addr)
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
|
||||||
#define mm_ptov(addr) ((void *)__phys_to_virt(addr))
|
|
||||||
#define mm_vtop(addr) ((unsigned long)__virt_to_phys(addr))
|
|
||||||
#define phys_to_virt(addr) ((void *)__phys_to_virt(addr))
|
#define phys_to_virt(addr) ((void *)__phys_to_virt(addr))
|
||||||
#define virt_to_phys(addr) ((unsigned long)__virt_to_phys(addr))
|
#define virt_to_phys(addr) ((unsigned long)__virt_to_phys(addr))
|
||||||
#define virt_to_bus(addr) ((unsigned long)__virt_to_phys(addr))
|
#define virt_to_bus(addr) ((unsigned long)__virt_to_phys(addr))
|
||||||
|
|
|
@ -31,6 +31,9 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
/* MS be sure that SLAB allocates aligned objects */
|
||||||
|
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
|
||||||
|
|
||||||
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
|
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
|
||||||
#define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1)))
|
#define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1)))
|
||||||
|
|
||||||
|
@ -70,14 +73,7 @@ typedef unsigned long pte_basic_t;
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
|
|
||||||
# ifndef CONFIG_MMU
|
# define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
|
||||||
# define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
|
|
||||||
# define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
|
|
||||||
# define free_user_page(page, addr) free_page(addr)
|
|
||||||
# else /* CONFIG_MMU */
|
|
||||||
extern void copy_page(void *to, void *from);
|
|
||||||
# endif /* CONFIG_MMU */
|
|
||||||
|
|
||||||
# define clear_page(pgaddr) memset((pgaddr), 0, PAGE_SIZE)
|
# define clear_page(pgaddr) memset((pgaddr), 0, PAGE_SIZE)
|
||||||
|
|
||||||
# define clear_user_page(pgaddr, vaddr, page) memset((pgaddr), 0, PAGE_SIZE)
|
# define clear_user_page(pgaddr, vaddr, page) memset((pgaddr), 0, PAGE_SIZE)
|
||||||
|
|
|
@ -94,14 +94,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
||||||
|
|
||||||
#define HAVE_PCI_LEGACY 1
|
#define HAVE_PCI_LEGACY 1
|
||||||
|
|
||||||
/* pci_unmap_{page,single} is a nop so... */
|
|
||||||
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
|
|
||||||
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
|
|
||||||
#define pci_unmap_addr(PTR, ADDR_NAME) (0)
|
|
||||||
#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
|
|
||||||
#define pci_unmap_len(PTR, LEN_NAME) (0)
|
|
||||||
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
|
|
||||||
|
|
||||||
/* The PCI address space does equal the physical memory
|
/* The PCI address space does equal the physical memory
|
||||||
* address space (no IOMMU). The IDE and SCSI device layers use
|
* address space (no IOMMU). The IDE and SCSI device layers use
|
||||||
* this boolean for bounce buffer decisions.
|
* this boolean for bounce buffer decisions.
|
||||||
|
|
|
@ -108,21 +108,7 @@ extern inline void free_pgd_slow(pgd_t *pgd)
|
||||||
#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); })
|
#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); })
|
||||||
#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); })
|
#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); })
|
||||||
|
|
||||||
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
|
extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr);
|
||||||
unsigned long address)
|
|
||||||
{
|
|
||||||
pte_t *pte;
|
|
||||||
extern void *early_get_page(void);
|
|
||||||
if (mem_init_done) {
|
|
||||||
pte = (pte_t *)__get_free_page(GFP_KERNEL |
|
|
||||||
__GFP_REPEAT | __GFP_ZERO);
|
|
||||||
} else {
|
|
||||||
pte = (pte_t *)early_get_page();
|
|
||||||
if (pte)
|
|
||||||
clear_page(pte);
|
|
||||||
}
|
|
||||||
return pte;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
|
|
|
@ -511,15 +511,6 @@ static inline pmd_t *pmd_offset(pgd_t *dir, unsigned long address)
|
||||||
|
|
||||||
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||||
|
|
||||||
/*
|
|
||||||
* When flushing the tlb entry for a page, we also need to flush the hash
|
|
||||||
* table entry. flush_hash_page is assembler (for speed) in hashtable.S.
|
|
||||||
*/
|
|
||||||
extern int flush_hash_page(unsigned context, unsigned long va, pte_t *ptep);
|
|
||||||
|
|
||||||
/* Add an HPTE to the hash table */
|
|
||||||
extern void add_hash_page(unsigned context, unsigned long va, pte_t *ptep);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Encode and decode a swap entry.
|
* Encode and decode a swap entry.
|
||||||
* Note that the bits we use in a PTE for representing a swap entry
|
* Note that the bits we use in a PTE for representing a swap entry
|
||||||
|
@ -533,15 +524,7 @@ extern void add_hash_page(unsigned context, unsigned long va, pte_t *ptep);
|
||||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 2 })
|
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 2 })
|
||||||
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << 2 })
|
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << 2 })
|
||||||
|
|
||||||
|
|
||||||
/* CONFIG_APUS */
|
|
||||||
/* For virtual address to physical address conversion */
|
|
||||||
extern void cache_clear(__u32 addr, int length);
|
|
||||||
extern void cache_push(__u32 addr, int length);
|
|
||||||
extern int mm_end_of_chunk(unsigned long addr, int len);
|
|
||||||
extern unsigned long iopa(unsigned long addr);
|
extern unsigned long iopa(unsigned long addr);
|
||||||
/* extern unsigned long mm_ptov(unsigned long addr) \
|
|
||||||
__attribute__ ((const)); TBD */
|
|
||||||
|
|
||||||
/* Values for nocacheflag and cmode */
|
/* Values for nocacheflag and cmode */
|
||||||
/* These are not used by the APUS kernel_map, but prevents
|
/* These are not used by the APUS kernel_map, but prevents
|
||||||
|
@ -552,18 +535,6 @@ extern unsigned long iopa(unsigned long addr);
|
||||||
#define IOMAP_NOCACHE_NONSER 2
|
#define IOMAP_NOCACHE_NONSER 2
|
||||||
#define IOMAP_NO_COPYBACK 3
|
#define IOMAP_NO_COPYBACK 3
|
||||||
|
|
||||||
/*
|
|
||||||
* Map some physical address range into the kernel address space.
|
|
||||||
*/
|
|
||||||
extern unsigned long kernel_map(unsigned long paddr, unsigned long size,
|
|
||||||
int nocacheflag, unsigned long *memavailp);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set cache mode of (kernel space) address range.
|
|
||||||
*/
|
|
||||||
extern void kernel_set_cachemode(unsigned long address, unsigned long size,
|
|
||||||
unsigned int cmode);
|
|
||||||
|
|
||||||
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
|
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
|
||||||
#define kern_addr_valid(addr) (1)
|
#define kern_addr_valid(addr) (1)
|
||||||
|
|
||||||
|
@ -577,10 +548,6 @@ extern void kernel_set_cachemode(unsigned long address, unsigned long size,
|
||||||
void do_page_fault(struct pt_regs *regs, unsigned long address,
|
void do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||||
unsigned long error_code);
|
unsigned long error_code);
|
||||||
|
|
||||||
void __init io_block_mapping(unsigned long virt, phys_addr_t phys,
|
|
||||||
unsigned int size, int flags);
|
|
||||||
|
|
||||||
void __init adjust_total_lowmem(void);
|
|
||||||
void mapin_ram(void);
|
void mapin_ram(void);
|
||||||
int map_page(unsigned long va, phys_addr_t pa, int flags);
|
int map_page(unsigned long va, phys_addr_t pa, int flags);
|
||||||
|
|
||||||
|
@ -601,7 +568,7 @@ void __init *early_get_page(void);
|
||||||
extern unsigned long ioremap_bot, ioremap_base;
|
extern unsigned long ioremap_bot, ioremap_base;
|
||||||
|
|
||||||
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle);
|
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle);
|
||||||
void consistent_free(void *vaddr);
|
void consistent_free(size_t size, void *vaddr);
|
||||||
void consistent_sync(void *vaddr, size_t size, int direction);
|
void consistent_sync(void *vaddr, size_t size, int direction);
|
||||||
void consistent_sync_page(struct page *page, unsigned long offset,
|
void consistent_sync_page(struct page *page, unsigned long offset,
|
||||||
size_t size, int direction);
|
size_t size, int direction);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/hardirq.h>
|
#include <linux/hardirq.h>
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
#include <linux/kbuild.h>
|
#include <linux/kbuild.h>
|
||||||
|
#include <asm/cpuinfo.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,13 +96,16 @@ static inline void __disable_dcache_nomsr(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Helper macro for computing the limits of cache range loops */
|
/* Helper macro for computing the limits of cache range loops
|
||||||
|
*
|
||||||
|
* End address can be unaligned which is OK for C implementation.
|
||||||
|
* ASM implementation align it in ASM macros
|
||||||
|
*/
|
||||||
#define CACHE_LOOP_LIMITS(start, end, cache_line_length, cache_size) \
|
#define CACHE_LOOP_LIMITS(start, end, cache_line_length, cache_size) \
|
||||||
do { \
|
do { \
|
||||||
int align = ~(cache_line_length - 1); \
|
int align = ~(cache_line_length - 1); \
|
||||||
end = min(start + cache_size, end); \
|
end = min(start + cache_size, end); \
|
||||||
start &= align; \
|
start &= align; \
|
||||||
end = ((end & align) + cache_line_length); \
|
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -111,9 +114,9 @@ do { \
|
||||||
*/
|
*/
|
||||||
#define CACHE_ALL_LOOP(cache_size, line_length, op) \
|
#define CACHE_ALL_LOOP(cache_size, line_length, op) \
|
||||||
do { \
|
do { \
|
||||||
unsigned int len = cache_size; \
|
unsigned int len = cache_size - line_length; \
|
||||||
int step = -line_length; \
|
int step = -line_length; \
|
||||||
BUG_ON(step >= 0); \
|
WARN_ON(step >= 0); \
|
||||||
\
|
\
|
||||||
__asm__ __volatile__ (" 1: " #op " %0, r0; \
|
__asm__ __volatile__ (" 1: " #op " %0, r0; \
|
||||||
bgtid %0, 1b; \
|
bgtid %0, 1b; \
|
||||||
|
@ -122,26 +125,21 @@ do { \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
|
/* Used for wdc.flush/clear which can use rB for offset which is not possible
|
||||||
#define CACHE_ALL_LOOP2(cache_size, line_length, op) \
|
* to use for simple wdc or wic.
|
||||||
do { \
|
*
|
||||||
unsigned int len = cache_size; \
|
* start address is cache aligned
|
||||||
int step = -line_length; \
|
* end address is not aligned, if end is aligned then I have to substract
|
||||||
BUG_ON(step >= 0); \
|
* cacheline length because I can't flush/invalidate the next cacheline.
|
||||||
\
|
* If is not, I align it because I will flush/invalidate whole line.
|
||||||
__asm__ __volatile__ (" 1: " #op " r0, %0; \
|
*/
|
||||||
bgtid %0, 1b; \
|
|
||||||
addk %0, %0, %1; \
|
|
||||||
" : : "r" (len), "r" (step) \
|
|
||||||
: "memory"); \
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
/* for wdc.flush/clear */
|
|
||||||
#define CACHE_RANGE_LOOP_2(start, end, line_length, op) \
|
#define CACHE_RANGE_LOOP_2(start, end, line_length, op) \
|
||||||
do { \
|
do { \
|
||||||
int step = -line_length; \
|
int step = -line_length; \
|
||||||
|
int align = ~(line_length - 1); \
|
||||||
|
end = ((end & align) == end) ? end - line_length : end & align; \
|
||||||
int count = end - start; \
|
int count = end - start; \
|
||||||
BUG_ON(count <= 0); \
|
WARN_ON(count < 0); \
|
||||||
\
|
\
|
||||||
__asm__ __volatile__ (" 1: " #op " %0, %1; \
|
__asm__ __volatile__ (" 1: " #op " %0, %1; \
|
||||||
bgtid %1, 1b; \
|
bgtid %1, 1b; \
|
||||||
|
@ -154,7 +152,9 @@ do { \
|
||||||
#define CACHE_RANGE_LOOP_1(start, end, line_length, op) \
|
#define CACHE_RANGE_LOOP_1(start, end, line_length, op) \
|
||||||
do { \
|
do { \
|
||||||
int volatile temp; \
|
int volatile temp; \
|
||||||
BUG_ON(end - start <= 0); \
|
int align = ~(line_length - 1); \
|
||||||
|
end = ((end & align) == end) ? end - line_length : end & align; \
|
||||||
|
WARN_ON(end - start < 0); \
|
||||||
\
|
\
|
||||||
__asm__ __volatile__ (" 1: " #op " %1, r0; \
|
__asm__ __volatile__ (" 1: " #op " %1, r0; \
|
||||||
cmpu %0, %1, %2; \
|
cmpu %0, %1, %2; \
|
||||||
|
@ -360,8 +360,12 @@ static void __invalidate_dcache_all_noirq_wt(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME this is weird - should be only wdc but not work
|
/* FIXME It is blindly invalidation as is expected
|
||||||
* MS: I am getting bus errors and other weird things */
|
* but can't be called on noMMU in microblaze_cache_init below
|
||||||
|
*
|
||||||
|
* MS: noMMU kernel won't boot if simple wdc is used
|
||||||
|
* The reason should be that there are discared data which kernel needs
|
||||||
|
*/
|
||||||
static void __invalidate_dcache_all_wb(void)
|
static void __invalidate_dcache_all_wb(void)
|
||||||
{
|
{
|
||||||
#ifndef ASM_LOOP
|
#ifndef ASM_LOOP
|
||||||
|
@ -369,12 +373,12 @@ static void __invalidate_dcache_all_wb(void)
|
||||||
#endif
|
#endif
|
||||||
pr_debug("%s\n", __func__);
|
pr_debug("%s\n", __func__);
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_ALL_LOOP2(cpuinfo.dcache_size, cpuinfo.dcache_line_length,
|
CACHE_ALL_LOOP(cpuinfo.dcache_size, cpuinfo.dcache_line_length,
|
||||||
wdc.clear)
|
wdc)
|
||||||
#else
|
#else
|
||||||
for (i = 0; i < cpuinfo.dcache_size;
|
for (i = 0; i < cpuinfo.dcache_size;
|
||||||
i += cpuinfo.dcache_line_length)
|
i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc.clear %0, r0;" \
|
__asm__ __volatile__ ("wdc %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -393,7 +397,7 @@ static void __invalidate_dcache_range_wb(unsigned long start,
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.clear);
|
CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.clear);
|
||||||
#else
|
#else
|
||||||
for (i = start; i < end; i += cpuinfo.icache_line_length)
|
for (i = start; i < end; i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc.clear %0, r0;" \
|
__asm__ __volatile__ ("wdc.clear %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
|
@ -413,7 +417,7 @@ static void __invalidate_dcache_range_nomsr_wt(unsigned long start,
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
||||||
#else
|
#else
|
||||||
for (i = start; i < end; i += cpuinfo.icache_line_length)
|
for (i = start; i < end; i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc %0, r0;" \
|
__asm__ __volatile__ ("wdc %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
|
@ -437,7 +441,7 @@ static void __invalidate_dcache_range_msr_irq_wt(unsigned long start,
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
||||||
#else
|
#else
|
||||||
for (i = start; i < end; i += cpuinfo.icache_line_length)
|
for (i = start; i < end; i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc %0, r0;" \
|
__asm__ __volatile__ ("wdc %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
|
@ -465,7 +469,7 @@ static void __invalidate_dcache_range_nomsr_irq(unsigned long start,
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
CACHE_RANGE_LOOP_1(start, end, cpuinfo.dcache_line_length, wdc);
|
||||||
#else
|
#else
|
||||||
for (i = start; i < end; i += cpuinfo.icache_line_length)
|
for (i = start; i < end; i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc %0, r0;" \
|
__asm__ __volatile__ ("wdc %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
|
@ -504,7 +508,7 @@ static void __flush_dcache_range_wb(unsigned long start, unsigned long end)
|
||||||
#ifdef ASM_LOOP
|
#ifdef ASM_LOOP
|
||||||
CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.flush);
|
CACHE_RANGE_LOOP_2(start, end, cpuinfo.dcache_line_length, wdc.flush);
|
||||||
#else
|
#else
|
||||||
for (i = start; i < end; i += cpuinfo.icache_line_length)
|
for (i = start; i < end; i += cpuinfo.dcache_line_length)
|
||||||
__asm__ __volatile__ ("wdc.flush %0, r0;" \
|
__asm__ __volatile__ ("wdc.flush %0, r0;" \
|
||||||
: : "r" (i));
|
: : "r" (i));
|
||||||
#endif
|
#endif
|
||||||
|
@ -650,7 +654,11 @@ void microblaze_cache_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
invalidate_dcache();
|
/* FIXME Invalidation is done in U-BOOT
|
||||||
|
* WT cache: Data is already written to main memory
|
||||||
|
* WB cache: Discard data on noMMU which caused that kernel doesn't boot
|
||||||
|
*/
|
||||||
|
/* invalidate_dcache(); */
|
||||||
enable_dcache();
|
enable_dcache();
|
||||||
|
|
||||||
invalidate_icache();
|
invalidate_icache();
|
||||||
|
|
|
@ -98,15 +98,17 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
|
|
||||||
if (cpuinfo.use_icache)
|
if (cpuinfo.use_icache)
|
||||||
count += seq_printf(m,
|
count += seq_printf(m,
|
||||||
"Icache:\t\t%ukB\n",
|
"Icache:\t\t%ukB\tline length:\t%dB\n",
|
||||||
cpuinfo.icache_size >> 10);
|
cpuinfo.icache_size >> 10,
|
||||||
|
cpuinfo.icache_line_length);
|
||||||
else
|
else
|
||||||
count += seq_printf(m, "Icache:\t\tno\n");
|
count += seq_printf(m, "Icache:\t\tno\n");
|
||||||
|
|
||||||
if (cpuinfo.use_dcache) {
|
if (cpuinfo.use_dcache) {
|
||||||
count += seq_printf(m,
|
count += seq_printf(m,
|
||||||
"Dcache:\t\t%ukB\n",
|
"Dcache:\t\t%ukB\tline length:\t%dB\n",
|
||||||
cpuinfo.dcache_size >> 10);
|
cpuinfo.dcache_size >> 10,
|
||||||
|
cpuinfo.dcache_line_length);
|
||||||
if (cpuinfo.dcache_wb)
|
if (cpuinfo.dcache_wb)
|
||||||
count += seq_printf(m, "\t\twrite-back\n");
|
count += seq_printf(m, "\t\twrite-back\n");
|
||||||
else
|
else
|
||||||
|
|
|
@ -74,7 +74,7 @@ static void dma_direct_free_coherent(struct device *dev, size_t size,
|
||||||
void *vaddr, dma_addr_t dma_handle)
|
void *vaddr, dma_addr_t dma_handle)
|
||||||
{
|
{
|
||||||
#ifdef NOT_COHERENT_CACHE
|
#ifdef NOT_COHERENT_CACHE
|
||||||
consistent_free(vaddr);
|
consistent_free(size, vaddr);
|
||||||
#else
|
#else
|
||||||
free_pages((unsigned long)vaddr, get_order(size));
|
free_pages((unsigned long)vaddr, get_order(size));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -121,7 +121,7 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
|
||||||
}
|
}
|
||||||
printk(KERN_WARNING "Divide by zero exception " \
|
printk(KERN_WARNING "Divide by zero exception " \
|
||||||
"in kernel mode.\n");
|
"in kernel mode.\n");
|
||||||
die("Divide by exception", regs, SIGBUS);
|
die("Divide by zero exception", regs, SIGBUS);
|
||||||
break;
|
break;
|
||||||
case MICROBLAZE_FPU_EXCEPTION:
|
case MICROBLAZE_FPU_EXCEPTION:
|
||||||
pr_debug(KERN_WARNING "FPU exception\n");
|
pr_debug(KERN_WARNING "FPU exception\n");
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/init.h>
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -49,7 +50,7 @@ swapper_pg_dir:
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
|
|
||||||
.text
|
__HEAD
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
#if CONFIG_KERNEL_BASE_ADDR == 0
|
#if CONFIG_KERNEL_BASE_ADDR == 0
|
||||||
brai TOPHYS(real_start)
|
brai TOPHYS(real_start)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/ftrace.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/hardirq.h>
|
#include <linux/hardirq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
@ -32,7 +33,7 @@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map);
|
||||||
|
|
||||||
static u32 concurrent_irq;
|
static u32 concurrent_irq;
|
||||||
|
|
||||||
void do_IRQ(struct pt_regs *regs)
|
void __irq_entry do_IRQ(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
|
|
|
@ -93,39 +93,3 @@ early_console_reg_tlb_alloc:
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.size early_console_reg_tlb_alloc, . - early_console_reg_tlb_alloc
|
.size early_console_reg_tlb_alloc, . - early_console_reg_tlb_alloc
|
||||||
|
|
||||||
/*
|
|
||||||
* Copy a whole page (4096 bytes).
|
|
||||||
*/
|
|
||||||
#define COPY_16_BYTES \
|
|
||||||
lwi r7, r6, 0; \
|
|
||||||
lwi r8, r6, 4; \
|
|
||||||
lwi r9, r6, 8; \
|
|
||||||
lwi r10, r6, 12; \
|
|
||||||
swi r7, r5, 0; \
|
|
||||||
swi r8, r5, 4; \
|
|
||||||
swi r9, r5, 8; \
|
|
||||||
swi r10, r5, 12
|
|
||||||
|
|
||||||
|
|
||||||
/* FIXME DCACHE_LINE_BYTES (CONFIG_XILINX_MICROBLAZE0_DCACHE_LINE_LEN * 4)*/
|
|
||||||
#define DCACHE_LINE_BYTES (4 * 4)
|
|
||||||
|
|
||||||
.globl copy_page;
|
|
||||||
.type copy_page, @function
|
|
||||||
.align 4;
|
|
||||||
copy_page:
|
|
||||||
ori r11, r0, (PAGE_SIZE/DCACHE_LINE_BYTES) - 1
|
|
||||||
_copy_page_loop:
|
|
||||||
COPY_16_BYTES
|
|
||||||
#if DCACHE_LINE_BYTES >= 32
|
|
||||||
COPY_16_BYTES
|
|
||||||
#endif
|
|
||||||
addik r6, r6, DCACHE_LINE_BYTES
|
|
||||||
addik r5, r5, DCACHE_LINE_BYTES
|
|
||||||
bneid r11, _copy_page_loop
|
|
||||||
addik r11, r11, -1
|
|
||||||
rtsd r15, 8
|
|
||||||
nop
|
|
||||||
|
|
||||||
.size copy_page, . - copy_page
|
|
||||||
|
|
|
@ -95,37 +95,3 @@ void dump_stack(void)
|
||||||
show_stack(NULL, NULL);
|
show_stack(NULL, NULL);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dump_stack);
|
EXPORT_SYMBOL(dump_stack);
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
|
||||||
void __bug(const char *file, int line, void *data)
|
|
||||||
{
|
|
||||||
if (data)
|
|
||||||
printk(KERN_CRIT "kernel BUG at %s:%d (data = %p)!\n",
|
|
||||||
file, line, data);
|
|
||||||
else
|
|
||||||
printk(KERN_CRIT "kernel BUG at %s:%d!\n", file, line);
|
|
||||||
|
|
||||||
machine_halt();
|
|
||||||
}
|
|
||||||
|
|
||||||
int bad_trap(int trap_num, struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
printk(KERN_CRIT
|
|
||||||
"unimplemented trap %d called at 0x%08lx, pid %d!\n",
|
|
||||||
trap_num, regs->pc, current->pid);
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int debug_trap(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
printk(KERN_CRIT "debug trap\n");
|
|
||||||
for (i = 0; i < 32; i++) {
|
|
||||||
/* printk("r%i:%08X\t",i,regs->gpr[i]); */
|
|
||||||
if ((i % 4) == 3)
|
|
||||||
printk(KERN_CRIT "\n");
|
|
||||||
}
|
|
||||||
printk(KERN_CRIT "pc:%08lX\tmsr:%08lX\n", regs->pc, regs->msr);
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -24,7 +24,8 @@ SECTIONS {
|
||||||
.text : AT(ADDR(.text) - LOAD_OFFSET) {
|
.text : AT(ADDR(.text) - LOAD_OFFSET) {
|
||||||
_text = . ;
|
_text = . ;
|
||||||
_stext = . ;
|
_stext = . ;
|
||||||
*(.text .text.*)
|
HEAD_TEXT
|
||||||
|
TEXT_TEXT
|
||||||
*(.fixup)
|
*(.fixup)
|
||||||
EXIT_TEXT
|
EXIT_TEXT
|
||||||
EXIT_CALL
|
EXIT_CALL
|
||||||
|
|
|
@ -42,11 +42,12 @@
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/cpuinfo.h>
|
#include <asm/cpuinfo.h>
|
||||||
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
#ifndef CONFIG_MMU
|
#ifndef CONFIG_MMU
|
||||||
|
|
||||||
/* I have to use dcache values because I can't relate on ram size */
|
/* I have to use dcache values because I can't relate on ram size */
|
||||||
#define UNCACHED_SHADOW_MASK (cpuinfo.dcache_high - cpuinfo.dcache_base + 1)
|
# define UNCACHED_SHADOW_MASK (cpuinfo.dcache_high - cpuinfo.dcache_base + 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Consistent memory allocators. Used for DMA devices that want to
|
* Consistent memory allocators. Used for DMA devices that want to
|
||||||
|
@ -60,71 +61,16 @@
|
||||||
*/
|
*/
|
||||||
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
|
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
|
||||||
{
|
{
|
||||||
struct page *page, *end, *free;
|
unsigned long order, vaddr;
|
||||||
unsigned long order;
|
void *ret;
|
||||||
void *ret, *virt;
|
unsigned int i, err = 0;
|
||||||
|
struct page *page, *end;
|
||||||
|
|
||||||
if (in_interrupt())
|
#ifdef CONFIG_MMU
|
||||||
BUG();
|
|
||||||
|
|
||||||
size = PAGE_ALIGN(size);
|
|
||||||
order = get_order(size);
|
|
||||||
|
|
||||||
page = alloc_pages(gfp, order);
|
|
||||||
if (!page)
|
|
||||||
goto no_page;
|
|
||||||
|
|
||||||
/* We could do with a page_to_phys and page_to_bus here. */
|
|
||||||
virt = page_address(page);
|
|
||||||
ret = ioremap(virt_to_phys(virt), size);
|
|
||||||
if (!ret)
|
|
||||||
goto no_remap;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Here's the magic! Note if the uncached shadow is not implemented,
|
|
||||||
* it's up to the calling code to also test that condition and make
|
|
||||||
* other arranegments, such as manually flushing the cache and so on.
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_XILINX_UNCACHED_SHADOW
|
|
||||||
ret = (void *)((unsigned) ret | UNCACHED_SHADOW_MASK);
|
|
||||||
#endif
|
|
||||||
/* dma_handle is same as physical (shadowed) address */
|
|
||||||
*dma_handle = (dma_addr_t)ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* free wasted pages. We skip the first page since we know
|
|
||||||
* that it will have count = 1 and won't require freeing.
|
|
||||||
* We also mark the pages in use as reserved so that
|
|
||||||
* remap_page_range works.
|
|
||||||
*/
|
|
||||||
page = virt_to_page(virt);
|
|
||||||
free = page + (size >> PAGE_SHIFT);
|
|
||||||
end = page + (1 << order);
|
|
||||||
|
|
||||||
for (; page < end; page++) {
|
|
||||||
init_page_count(page);
|
|
||||||
if (page >= free)
|
|
||||||
__free_page(page);
|
|
||||||
else
|
|
||||||
SetPageReserved(page);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
no_remap:
|
|
||||||
__free_pages(page, order);
|
|
||||||
no_page:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
|
|
||||||
{
|
|
||||||
int order, err, i;
|
|
||||||
unsigned long page, va, flags;
|
|
||||||
phys_addr_t pa;
|
phys_addr_t pa;
|
||||||
struct vm_struct *area;
|
struct vm_struct *area;
|
||||||
void *ret;
|
unsigned long va;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (in_interrupt())
|
if (in_interrupt())
|
||||||
BUG();
|
BUG();
|
||||||
|
@ -133,71 +79,133 @@ void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
|
||||||
size = PAGE_ALIGN(size);
|
size = PAGE_ALIGN(size);
|
||||||
order = get_order(size);
|
order = get_order(size);
|
||||||
|
|
||||||
page = __get_free_pages(gfp, order);
|
vaddr = __get_free_pages(gfp, order);
|
||||||
if (!page) {
|
if (!vaddr)
|
||||||
BUG();
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we need to ensure that there are no cachelines in use,
|
* we need to ensure that there are no cachelines in use,
|
||||||
* or worse dirty in this area.
|
* or worse dirty in this area.
|
||||||
*/
|
*/
|
||||||
flush_dcache_range(virt_to_phys(page), virt_to_phys(page) + size);
|
flush_dcache_range(virt_to_phys((void *)vaddr),
|
||||||
|
virt_to_phys((void *)vaddr) + size);
|
||||||
|
|
||||||
|
#ifndef CONFIG_MMU
|
||||||
|
ret = (void *)vaddr;
|
||||||
|
/*
|
||||||
|
* Here's the magic! Note if the uncached shadow is not implemented,
|
||||||
|
* it's up to the calling code to also test that condition and make
|
||||||
|
* other arranegments, such as manually flushing the cache and so on.
|
||||||
|
*/
|
||||||
|
# ifdef CONFIG_XILINX_UNCACHED_SHADOW
|
||||||
|
ret = (void *)((unsigned) ret | UNCACHED_SHADOW_MASK);
|
||||||
|
# endif
|
||||||
|
if ((unsigned int)ret > cpuinfo.dcache_base &&
|
||||||
|
(unsigned int)ret < cpuinfo.dcache_high)
|
||||||
|
printk(KERN_WARNING
|
||||||
|
"ERROR: Your cache coherent area is CACHED!!!\n");
|
||||||
|
|
||||||
|
/* dma_handle is same as physical (shadowed) address */
|
||||||
|
*dma_handle = (dma_addr_t)ret;
|
||||||
|
#else
|
||||||
/* Allocate some common virtual space to map the new pages. */
|
/* Allocate some common virtual space to map the new pages. */
|
||||||
area = get_vm_area(size, VM_ALLOC);
|
area = get_vm_area(size, VM_ALLOC);
|
||||||
if (area == NULL) {
|
if (!area) {
|
||||||
free_pages(page, order);
|
free_pages(vaddr, order);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
va = (unsigned long) area->addr;
|
va = (unsigned long) area->addr;
|
||||||
ret = (void *)va;
|
ret = (void *)va;
|
||||||
|
|
||||||
/* This gives us the real physical address of the first page. */
|
/* This gives us the real physical address of the first page. */
|
||||||
*dma_handle = pa = virt_to_bus((void *)page);
|
*dma_handle = pa = virt_to_bus((void *)vaddr);
|
||||||
|
#endif
|
||||||
/* MS: This is the whole magic - use cache inhibit pages */
|
|
||||||
flags = _PAGE_KERNEL | _PAGE_NO_CACHE;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set refcount=1 on all pages in an order>0
|
* free wasted pages. We skip the first page since we know
|
||||||
* allocation so that vfree() will actually
|
* that it will have count = 1 and won't require freeing.
|
||||||
* free all pages that were allocated.
|
* We also mark the pages in use as reserved so that
|
||||||
|
* remap_page_range works.
|
||||||
*/
|
*/
|
||||||
if (order > 0) {
|
page = virt_to_page(vaddr);
|
||||||
struct page *rpage = virt_to_page(page);
|
end = page + (1 << order);
|
||||||
for (i = 1; i < (1 << order); i++)
|
|
||||||
init_page_count(rpage+i);
|
split_page(page, order);
|
||||||
|
|
||||||
|
for (i = 0; i < size && err == 0; i += PAGE_SIZE) {
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
|
/* MS: This is the whole magic - use cache inhibit pages */
|
||||||
|
err = map_page(va + i, pa + i, _PAGE_KERNEL | _PAGE_NO_CACHE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SetPageReserved(page);
|
||||||
|
page++;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = 0;
|
/* Free the otherwise unused pages. */
|
||||||
for (i = 0; i < size && err == 0; i += PAGE_SIZE)
|
while (page < end) {
|
||||||
err = map_page(va+i, pa+i, flags);
|
__free_page(page);
|
||||||
|
page++;
|
||||||
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
vfree((void *)va);
|
free_pages(vaddr, order);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MMU */
|
|
||||||
EXPORT_SYMBOL(consistent_alloc);
|
EXPORT_SYMBOL(consistent_alloc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* free page(s) as defined by the above mapping.
|
* free page(s) as defined by the above mapping.
|
||||||
*/
|
*/
|
||||||
void consistent_free(void *vaddr)
|
void consistent_free(size_t size, void *vaddr)
|
||||||
{
|
{
|
||||||
|
struct page *page;
|
||||||
|
|
||||||
if (in_interrupt())
|
if (in_interrupt())
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
|
|
||||||
|
#ifndef CONFIG_MMU
|
||||||
/* Clear SHADOW_MASK bit in address, and free as per usual */
|
/* Clear SHADOW_MASK bit in address, and free as per usual */
|
||||||
#ifdef CONFIG_XILINX_UNCACHED_SHADOW
|
# ifdef CONFIG_XILINX_UNCACHED_SHADOW
|
||||||
vaddr = (void *)((unsigned)vaddr & ~UNCACHED_SHADOW_MASK);
|
vaddr = (void *)((unsigned)vaddr & ~UNCACHED_SHADOW_MASK);
|
||||||
|
# endif
|
||||||
|
page = virt_to_page(vaddr);
|
||||||
|
|
||||||
|
do {
|
||||||
|
ClearPageReserved(page);
|
||||||
|
__free_page(page);
|
||||||
|
page++;
|
||||||
|
} while (size -= PAGE_SIZE);
|
||||||
|
#else
|
||||||
|
do {
|
||||||
|
pte_t *ptep;
|
||||||
|
unsigned long pfn;
|
||||||
|
|
||||||
|
ptep = pte_offset_kernel(pmd_offset(pgd_offset_k(
|
||||||
|
(unsigned int)vaddr),
|
||||||
|
(unsigned int)vaddr),
|
||||||
|
(unsigned int)vaddr);
|
||||||
|
if (!pte_none(*ptep) && pte_present(*ptep)) {
|
||||||
|
pfn = pte_pfn(*ptep);
|
||||||
|
pte_clear(&init_mm, (unsigned int)vaddr, ptep);
|
||||||
|
if (pfn_valid(pfn)) {
|
||||||
|
page = pfn_to_page(pfn);
|
||||||
|
|
||||||
|
ClearPageReserved(page);
|
||||||
|
__free_page(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vaddr += PAGE_SIZE;
|
||||||
|
} while (size -= PAGE_SIZE);
|
||||||
|
|
||||||
|
/* flush tlb */
|
||||||
|
flush_tlb_all();
|
||||||
#endif
|
#endif
|
||||||
vfree(vaddr);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(consistent_free);
|
EXPORT_SYMBOL(consistent_free);
|
||||||
|
|
||||||
|
@ -221,7 +229,7 @@ void consistent_sync(void *vaddr, size_t size, int direction)
|
||||||
case PCI_DMA_NONE:
|
case PCI_DMA_NONE:
|
||||||
BUG();
|
BUG();
|
||||||
case PCI_DMA_FROMDEVICE: /* invalidate only */
|
case PCI_DMA_FROMDEVICE: /* invalidate only */
|
||||||
flush_dcache_range(start, end);
|
invalidate_dcache_range(start, end);
|
||||||
break;
|
break;
|
||||||
case PCI_DMA_TODEVICE: /* writeback only */
|
case PCI_DMA_TODEVICE: /* writeback only */
|
||||||
flush_dcache_range(start, end);
|
flush_dcache_range(start, end);
|
||||||
|
|
|
@ -273,16 +273,11 @@ bad_area_nosemaphore:
|
||||||
* us unable to handle the page fault gracefully.
|
* us unable to handle the page fault gracefully.
|
||||||
*/
|
*/
|
||||||
out_of_memory:
|
out_of_memory:
|
||||||
if (current->pid == 1) {
|
|
||||||
yield();
|
|
||||||
down_read(&mm->mmap_sem);
|
|
||||||
goto survive;
|
|
||||||
}
|
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
printk(KERN_WARNING "VM: killing process %s\n", current->comm);
|
if (!user_mode(regs))
|
||||||
if (user_mode(regs))
|
bad_page_fault(regs, address, SIGKILL);
|
||||||
do_exit(SIGKILL);
|
else
|
||||||
bad_page_fault(regs, address, SIGKILL);
|
pagefault_out_of_memory();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do_sigbus:
|
do_sigbus:
|
||||||
|
|
|
@ -161,24 +161,6 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init adjust_total_lowmem(void)
|
|
||||||
{
|
|
||||||
/* TBD */
|
|
||||||
#if 0
|
|
||||||
unsigned long max_low_mem = MAX_LOW_MEM;
|
|
||||||
|
|
||||||
if (total_lowmem > max_low_mem) {
|
|
||||||
total_lowmem = max_low_mem;
|
|
||||||
#ifndef CONFIG_HIGHMEM
|
|
||||||
printk(KERN_INFO "Warning, memory limited to %ld Mb, use "
|
|
||||||
"CONFIG_HIGHMEM to reach %ld Mb\n",
|
|
||||||
max_low_mem >> 20, total_memory >> 20);
|
|
||||||
total_memory = total_lowmem;
|
|
||||||
#endif /* CONFIG_HIGHMEM */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map in all of physical memory starting at CONFIG_KERNEL_START.
|
* Map in all of physical memory starting at CONFIG_KERNEL_START.
|
||||||
*/
|
*/
|
||||||
|
@ -206,24 +188,6 @@ void __init mapin_ram(void)
|
||||||
/* is x a power of 2? */
|
/* is x a power of 2? */
|
||||||
#define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0))
|
#define is_power_of_2(x) ((x) != 0 && (((x) & ((x) - 1)) == 0))
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up a mapping for a block of I/O.
|
|
||||||
* virt, phys, size must all be page-aligned.
|
|
||||||
* This should only be called before ioremap is called.
|
|
||||||
*/
|
|
||||||
void __init io_block_mapping(unsigned long virt, phys_addr_t phys,
|
|
||||||
unsigned int size, int flags)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (virt > CONFIG_KERNEL_START && virt < ioremap_bot)
|
|
||||||
ioremap_bot = ioremap_base = virt;
|
|
||||||
|
|
||||||
/* Put it in the page tables. */
|
|
||||||
for (i = 0; i < size; i += PAGE_SIZE)
|
|
||||||
map_page(virt + i, phys + i, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scan the real Linux page tables and return a PTE pointer for
|
/* Scan the real Linux page tables and return a PTE pointer for
|
||||||
* a virtual address in a context.
|
* a virtual address in a context.
|
||||||
* Returns true (1) if PTE was found, zero otherwise. The pointer to
|
* Returns true (1) if PTE was found, zero otherwise. The pointer to
|
||||||
|
@ -274,3 +238,18 @@ unsigned long iopa(unsigned long addr)
|
||||||
|
|
||||||
return pa;
|
return pa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
|
||||||
|
unsigned long address)
|
||||||
|
{
|
||||||
|
pte_t *pte;
|
||||||
|
if (mem_init_done) {
|
||||||
|
pte = (pte_t *)__get_free_page(GFP_KERNEL |
|
||||||
|
__GFP_REPEAT | __GFP_ZERO);
|
||||||
|
} else {
|
||||||
|
pte = (pte_t *)early_get_page();
|
||||||
|
if (pte)
|
||||||
|
clear_page(pte);
|
||||||
|
}
|
||||||
|
return pte;
|
||||||
|
}
|
||||||
|
|
|
@ -1025,7 +1025,7 @@ static void __devinit pcibios_fixup_bridge(struct pci_bus *bus)
|
||||||
|
|
||||||
struct pci_dev *dev = bus->self;
|
struct pci_dev *dev = bus->self;
|
||||||
|
|
||||||
for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) {
|
pci_bus_for_each_resource(bus, res, i) {
|
||||||
res = bus->resource[i];
|
res = bus->resource[i];
|
||||||
if (!res)
|
if (!res)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1131,21 +1131,20 @@ static int skip_isa_ioresource_align(struct pci_dev *dev)
|
||||||
* but we want to try to avoid allocating at 0x2900-0x2bff
|
* but we want to try to avoid allocating at 0x2900-0x2bff
|
||||||
* which might have be mirrored at 0x0100-0x03ff..
|
* which might have be mirrored at 0x0100-0x03ff..
|
||||||
*/
|
*/
|
||||||
void pcibios_align_resource(void *data, struct resource *res,
|
resource_size_t pcibios_align_resource(void *data, const struct resource *res,
|
||||||
resource_size_t size, resource_size_t align)
|
resource_size_t size, resource_size_t align)
|
||||||
{
|
{
|
||||||
struct pci_dev *dev = data;
|
struct pci_dev *dev = data;
|
||||||
|
resource_size_t start = res->start;
|
||||||
|
|
||||||
if (res->flags & IORESOURCE_IO) {
|
if (res->flags & IORESOURCE_IO) {
|
||||||
resource_size_t start = res->start;
|
|
||||||
|
|
||||||
if (skip_isa_ioresource_align(dev))
|
if (skip_isa_ioresource_align(dev))
|
||||||
return;
|
return start;
|
||||||
if (start & 0x300) {
|
if (start & 0x300)
|
||||||
start = (start + 0x3ff) & ~0x3ff;
|
start = (start + 0x3ff) & ~0x3ff;
|
||||||
res->start = start;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return start;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pcibios_align_resource);
|
EXPORT_SYMBOL(pcibios_align_resource);
|
||||||
|
|
||||||
|
@ -1228,7 +1227,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
||||||
pr_debug("PCI: Allocating bus resources for %04x:%02x...\n",
|
pr_debug("PCI: Allocating bus resources for %04x:%02x...\n",
|
||||||
pci_domain_nr(bus), bus->number);
|
pci_domain_nr(bus), bus->number);
|
||||||
|
|
||||||
for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) {
|
pci_bus_for_each_resource(bus, res, i) {
|
||||||
res = bus->resource[i];
|
res = bus->resource[i];
|
||||||
if (!res || !res->flags
|
if (!res || !res->flags
|
||||||
|| res->start > res->end || res->parent)
|
|| res->start > res->end || res->parent)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче