mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
[MIPS] Add back support for LASAT platforms
Signed-off-by: Brian Murphy <brian@murphy.dk> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
0caf583398
commit
1f21d2bde0
@ -107,6 +107,20 @@ config MACH_JAZZ
|
||||
Members include the Acer PICA, MIPS Magnum 4000, MIPS Millenium and
|
||||
Olivetti M700-10 workstations.
|
||||
|
||||
config LASAT
|
||||
bool "LASAT Networks platforms"
|
||||
select DMA_NONCOHERENT
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select HW_HAS_PCI
|
||||
select PCI_GT64XXX_PCI0
|
||||
select MIPS_NILE4
|
||||
select R5000_CPU_SCACHE
|
||||
select SYS_HAS_CPU_R5000
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL if BROKEN
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
select GENERIC_HARDIRQS_NO__DO_IRQ
|
||||
|
||||
config LEMOTE_FULONG
|
||||
bool "Lemote Fulong mini-PC"
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
@ -599,6 +613,7 @@ endchoice
|
||||
|
||||
source "arch/mips/au1000/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
source "arch/mips/lasat/Kconfig"
|
||||
source "arch/mips/pmc-sierra/Kconfig"
|
||||
source "arch/mips/sgi-ip27/Kconfig"
|
||||
source "arch/mips/sibyte/Kconfig"
|
||||
@ -706,6 +721,9 @@ config MIPS_BONITO64
|
||||
config MIPS_MSC
|
||||
bool
|
||||
|
||||
config MIPS_NILE4
|
||||
bool
|
||||
|
||||
config MIPS_DISABLE_OBSOLETE_IDE
|
||||
bool
|
||||
|
||||
|
@ -361,6 +361,13 @@ core-$(CONFIG_BASLER_EXCITE) += arch/mips/basler/excite/
|
||||
cflags-$(CONFIG_BASLER_EXCITE) += -Iinclude/asm-mips/mach-excite
|
||||
load-$(CONFIG_BASLER_EXCITE) += 0x80100000
|
||||
|
||||
#
|
||||
# LASAT platforms
|
||||
#
|
||||
core-$(CONFIG_LASAT) += arch/mips/lasat/
|
||||
cflags-$(CONFIG_LASAT) += -Iinclude/asm-mips/mach-lasat
|
||||
load-$(CONFIG_LASAT) += 0xffffffff80000000
|
||||
|
||||
#
|
||||
# Common VR41xx
|
||||
#
|
||||
@ -628,6 +635,11 @@ core-y += arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/
|
||||
|
||||
drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/
|
||||
|
||||
ifdef CONFIG_LASAT
|
||||
rom.bin rom.sw: vmlinux
|
||||
$(Q)$(MAKE) $(build)=arch/mips/lasat/image $@
|
||||
endif
|
||||
|
||||
#
|
||||
# Some machines like the Indy need 32-bit ELF binaries for booting purposes.
|
||||
# Other need ECOFF, so we build a 32-bit ELF binary for them which we then
|
||||
@ -671,6 +683,7 @@ endif
|
||||
|
||||
archclean:
|
||||
@$(MAKE) $(clean)=arch/mips/boot
|
||||
@$(MAKE) $(clean)=arch/mips/lasat
|
||||
|
||||
define archhelp
|
||||
echo ' vmlinux.ecoff - ECOFF boot image'
|
||||
|
828
arch/mips/configs/lasat_defconfig
Normal file
828
arch/mips/configs/lasat_defconfig
Normal file
@ -0,0 +1,828 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.23-rc3
|
||||
# Sat Aug 18 17:37:58 2007
|
||||
#
|
||||
CONFIG_MIPS=y
|
||||
|
||||
#
|
||||
# Machine selection
|
||||
#
|
||||
# CONFIG_MACH_ALCHEMY is not set
|
||||
# CONFIG_BASLER_EXCITE is not set
|
||||
# CONFIG_MIPS_COBALT is not set
|
||||
# CONFIG_MACH_DECSTATION is not set
|
||||
# CONFIG_MACH_JAZZ is not set
|
||||
CONFIG_LASAT=y
|
||||
# CONFIG_LEMOTE_FULONG is not set
|
||||
# CONFIG_MIPS_ATLAS is not set
|
||||
# CONFIG_MIPS_MALTA is not set
|
||||
# CONFIG_MIPS_SEAD is not set
|
||||
# CONFIG_MIPS_SIM is not set
|
||||
# CONFIG_MARKEINS is not set
|
||||
# CONFIG_MACH_VR41XX is not set
|
||||
# CONFIG_PNX8550_JBS is not set
|
||||
# CONFIG_PNX8550_STB810 is not set
|
||||
# CONFIG_PMC_MSP is not set
|
||||
# CONFIG_PMC_YOSEMITE is not set
|
||||
# CONFIG_QEMU is not set
|
||||
# CONFIG_SGI_IP22 is not set
|
||||
# CONFIG_SGI_IP27 is not set
|
||||
# CONFIG_SGI_IP32 is not set
|
||||
# CONFIG_SIBYTE_CRHINE is not set
|
||||
# CONFIG_SIBYTE_CARMEL is not set
|
||||
# CONFIG_SIBYTE_CRHONE is not set
|
||||
# CONFIG_SIBYTE_RHONE is not set
|
||||
# CONFIG_SIBYTE_SWARM is not set
|
||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||
# CONFIG_SIBYTE_SENTOSA is not set
|
||||
# CONFIG_SIBYTE_PTSWARM is not set
|
||||
# CONFIG_SIBYTE_BIGSUR is not set
|
||||
# CONFIG_SNI_RM is not set
|
||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||
# CONFIG_TOSHIBA_RBTX4927 is not set
|
||||
# CONFIG_TOSHIBA_RBTX4938 is not set
|
||||
# CONFIG_WR_PPMC is not set
|
||||
CONFIG_PICVUE=y
|
||||
CONFIG_PICVUE_PROC=y
|
||||
CONFIG_DS1603=y
|
||||
CONFIG_LASAT_SYSCTL=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
|
||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_GENERIC_CMOS_UPDATE=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_DMA_NONCOHERENT=y
|
||||
CONFIG_DMA_NEED_PCI_MAP_STATE=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_SYS_HAS_EARLY_PRINTK=y
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
CONFIG_MIPS_NILE4=y
|
||||
# CONFIG_NO_IOPORT is not set
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
|
||||
CONFIG_PCI_GT64XXX_PCI0=y
|
||||
CONFIG_MIPS_L1_CACHE_SHIFT=5
|
||||
|
||||
#
|
||||
# CPU selection
|
||||
#
|
||||
# CONFIG_CPU_LOONGSON2 is not set
|
||||
# CONFIG_CPU_MIPS32_R1 is not set
|
||||
# CONFIG_CPU_MIPS32_R2 is not set
|
||||
# CONFIG_CPU_MIPS64_R1 is not set
|
||||
# CONFIG_CPU_MIPS64_R2 is not set
|
||||
# CONFIG_CPU_R3000 is not set
|
||||
# CONFIG_CPU_TX39XX is not set
|
||||
# CONFIG_CPU_VR41XX is not set
|
||||
# CONFIG_CPU_R4300 is not set
|
||||
# CONFIG_CPU_R4X00 is not set
|
||||
# CONFIG_CPU_TX49XX is not set
|
||||
CONFIG_CPU_R5000=y
|
||||
# CONFIG_CPU_R5432 is not set
|
||||
# CONFIG_CPU_R6000 is not set
|
||||
# CONFIG_CPU_NEVADA is not set
|
||||
# CONFIG_CPU_R8000 is not set
|
||||
# CONFIG_CPU_R10000 is not set
|
||||
# CONFIG_CPU_RM7000 is not set
|
||||
# CONFIG_CPU_RM9000 is not set
|
||||
# CONFIG_CPU_SB1 is not set
|
||||
CONFIG_SYS_HAS_CPU_R5000=y
|
||||
CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y
|
||||
|
||||
#
|
||||
# Kernel type
|
||||
#
|
||||
CONFIG_32BIT=y
|
||||
# CONFIG_64BIT is not set
|
||||
CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_PAGE_SIZE_8KB is not set
|
||||
# CONFIG_PAGE_SIZE_16KB is not set
|
||||
# CONFIG_PAGE_SIZE_64KB is not set
|
||||
CONFIG_BOARD_SCACHE=y
|
||||
CONFIG_R5000_CPU_SCACHE=y
|
||||
CONFIG_MIPS_MT_DISABLED=y
|
||||
# CONFIG_MIPS_MT_SMP is not set
|
||||
# CONFIG_MIPS_MT_SMTC is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
# CONFIG_HZ_48 is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
# CONFIG_HZ_128 is not set
|
||||
# CONFIG_HZ_250 is not set
|
||||
# CONFIG_HZ_256 is not set
|
||||
CONFIG_HZ_1000=y
|
||||
# CONFIG_HZ_1024 is not set
|
||||
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||
CONFIG_HZ=1000
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
# CONFIG_SECCOMP is not set
|
||||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_SYSVIPC_SYSCTL=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_SYSFS_DEPRECATED is not set
|
||||
# CONFIG_RELAY is not set
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_SIGNALFD is not set
|
||||
# CONFIG_TIMERFD is not set
|
||||
# CONFIG_EVENTFD is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_MODULES is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LSF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_DEFAULT_AS=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
|
||||
#
|
||||
# Bus options (PCI, PCMCIA, EISA, ISA, TC)
|
||||
#
|
||||
CONFIG_HW_HAS_PCI=y
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
CONFIG_MMU=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
|
||||
#
|
||||
# Executable file formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_TRAD_SIGNALS=y
|
||||
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_CUBIC=y
|
||||
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_TCP_MD5SIG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
||||
#
|
||||
# Wireless
|
||||
#
|
||||
# CONFIG_CFG80211 is not set
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_CONNECTOR 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 is not set
|
||||
|
||||
#
|
||||
# User Modules And Translation Layers
|
||||
#
|
||||
CONFIG_MTD_CHAR=y
|
||||
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
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
CONFIG_MTD_CFI=y
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# 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_LASAT=y
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
#
|
||||
# CONFIG_MTD_PMC551 is not set
|
||||
# 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_CPQ_DA is not set
|
||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
# CONFIG_BLK_DEV_UMEM is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_SX8 is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_MAX_HWIFS=4
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||
#
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
CONFIG_BLK_DEV_IDEDISK=y
|
||||
CONFIG_IDEDISK_MULTI_MODE=y
|
||||
# CONFIG_BLK_DEV_IDECD is not set
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||
# CONFIG_IDE_TASK_IOCTL is not set
|
||||
CONFIG_IDE_PROC_FS=y
|
||||
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
CONFIG_IDE_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEPCI=y
|
||||
# CONFIG_IDEPCI_SHARE_IRQ is not set
|
||||
CONFIG_IDEPCI_PCIBUS_ORDER=y
|
||||
# CONFIG_BLK_DEV_OFFBOARD is not set
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
# CONFIG_BLK_DEV_OPTI621 is not set
|
||||
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
|
||||
# CONFIG_IDEDMA_ONLYDISK is not set
|
||||
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||
# CONFIG_BLK_DEV_ALI15X3 is not set
|
||||
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||
CONFIG_BLK_DEV_CMD64X=y
|
||||
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||
# CONFIG_BLK_DEV_CY82C693 is not set
|
||||
# CONFIG_BLK_DEV_CS5520 is not set
|
||||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_HPT34X is not set
|
||||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_JMICRON is not set
|
||||
# CONFIG_BLK_DEV_SC1200 is not set
|
||||
# CONFIG_BLK_DEV_PIIX is not set
|
||||
# CONFIG_BLK_DEV_IT8213 is not set
|
||||
# CONFIG_BLK_DEV_IT821X is not set
|
||||
# CONFIG_BLK_DEV_NS87415 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
# CONFIG_BLK_DEV_SVWKS is not set
|
||||
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||
# CONFIG_BLK_DEV_TRM290 is not set
|
||||
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||
# CONFIG_BLK_DEV_TC86C001 is not set
|
||||
# CONFIG_IDE_ARM is not set
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_IDEDMA_IVB is not set
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
# CONFIG_FIREWIRE is not set
|
||||
# CONFIG_IEEE1394 is not set
|
||||
# CONFIG_I2O is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
# CONFIG_ARCNET is not set
|
||||
# CONFIG_PHYLIB is not set
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_AX88796 is not set
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_NET_TULIP is not set
|
||||
# CONFIG_HP100 is not set
|
||||
CONFIG_NET_PCI=y
|
||||
CONFIG_PCNET32=y
|
||||
# CONFIG_PCNET32_NAPI is not set
|
||||
# CONFIG_AMD8111_ETH is not set
|
||||
# CONFIG_ADAPTEC_STARFIRE is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_FORCEDETH is not set
|
||||
# CONFIG_TC35815 is not set
|
||||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
# CONFIG_E100 is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
# CONFIG_8139CP is not set
|
||||
# CONFIG_8139TOO is not set
|
||||
# CONFIG_SIS900 is not set
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_TLAN is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_SC92031 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_TR is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_FDDI is not set
|
||||
# CONFIG_HIPPI is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_ISDN is not set
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
#
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||
# CONFIG_INPUT_POLLDEV is not set
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
#
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TABLET is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_LIBPS2 is not set
|
||||
CONFIG_SERIO_RAW=y
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
# CONFIG_VT is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
# CONFIG_SERIAL_8250_PCI is not set
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_DEVPORT=y
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_DAB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_INFINIBAND is not set
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
#
|
||||
|
||||
#
|
||||
# Userspace I/O
|
||||
#
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_INOTIFY is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
# CONFIG_ISO9660_FS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
# CONFIG_VFAT_FS is not set
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
# Pseudo filesystems
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
# 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
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
# CONFIG_NFS_FS is not set
|
||||
# CONFIG_NFSD is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
# CONFIG_NLS is not set
|
||||
|
||||
#
|
||||
# Distributed Lock Manager
|
||||
#
|
||||
# CONFIG_DLM is not set
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
#
|
||||
# CONFIG_PROFILING is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_DEBUG_KERNEL is not set
|
||||
CONFIG_CROSSCOMPILE=y
|
||||
CONFIG_CMDLINE=""
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
15
arch/mips/lasat/Kconfig
Normal file
15
arch/mips/lasat/Kconfig
Normal file
@ -0,0 +1,15 @@
|
||||
config PICVUE
|
||||
tristate "PICVUE LCD display driver"
|
||||
depends on LASAT
|
||||
|
||||
config PICVUE_PROC
|
||||
tristate "PICVUE LCD display driver /proc interface"
|
||||
depends on PICVUE
|
||||
|
||||
config DS1603
|
||||
bool "DS1603 RTC driver"
|
||||
depends on LASAT
|
||||
|
||||
config LASAT_SYSCTL
|
||||
bool "LASAT sysctl interface"
|
||||
depends on LASAT
|
16
arch/mips/lasat/Makefile
Normal file
16
arch/mips/lasat/Makefile
Normal file
@ -0,0 +1,16 @@
|
||||
#
|
||||
# Makefile for the LASAT specific kernel interface routines under Linux.
|
||||
#
|
||||
|
||||
obj-y += reset.o setup.o prom.o lasat_board.o \
|
||||
at93c.o interrupt.o serial.o
|
||||
|
||||
obj-$(CONFIG_LASAT_SYSCTL) += sysctl.o
|
||||
obj-$(CONFIG_DS1603) += ds1603.o
|
||||
obj-$(CONFIG_PICVUE) += picvue.o
|
||||
obj-$(CONFIG_PICVUE_PROC) += picvue_proc.o
|
||||
|
||||
clean:
|
||||
make -C image clean
|
||||
|
||||
EXTRA_CFLAGS += -Werror
|
149
arch/mips/lasat/at93c.c
Normal file
149
arch/mips/lasat/at93c.c
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Atmel AT93C46 serial eeprom driver
|
||||
*
|
||||
* Brian Murphy <brian.murphy@eicon.com>
|
||||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include "at93c.h"
|
||||
|
||||
#define AT93C_ADDR_SHIFT 7
|
||||
#define AT93C_ADDR_MAX ((1 << AT93C_ADDR_SHIFT) - 1)
|
||||
#define AT93C_RCMD (0x6 << AT93C_ADDR_SHIFT)
|
||||
#define AT93C_WCMD (0x5 << AT93C_ADDR_SHIFT)
|
||||
#define AT93C_WENCMD 0x260
|
||||
#define AT93C_WDSCMD 0x200
|
||||
|
||||
struct at93c_defs *at93c;
|
||||
|
||||
static void at93c_reg_write(u32 val)
|
||||
{
|
||||
*at93c->reg = val;
|
||||
}
|
||||
|
||||
static u32 at93c_reg_read(void)
|
||||
{
|
||||
u32 tmp = *at93c->reg;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static u32 at93c_datareg_read(void)
|
||||
{
|
||||
u32 tmp = *at93c->rdata_reg;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static void at93c_cycle_clk(u32 data)
|
||||
{
|
||||
at93c_reg_write(data | at93c->clk);
|
||||
lasat_ndelay(250);
|
||||
at93c_reg_write(data & ~at93c->clk);
|
||||
lasat_ndelay(250);
|
||||
}
|
||||
|
||||
static void at93c_write_databit(u8 bit)
|
||||
{
|
||||
u32 data = at93c_reg_read();
|
||||
if (bit)
|
||||
data |= 1 << at93c->wdata_shift;
|
||||
else
|
||||
data &= ~(1 << at93c->wdata_shift);
|
||||
|
||||
at93c_reg_write(data);
|
||||
lasat_ndelay(100);
|
||||
at93c_cycle_clk(data);
|
||||
}
|
||||
|
||||
static unsigned int at93c_read_databit(void)
|
||||
{
|
||||
u32 data;
|
||||
|
||||
at93c_cycle_clk(at93c_reg_read());
|
||||
data = (at93c_datareg_read() >> at93c->rdata_shift) & 1;
|
||||
return data;
|
||||
}
|
||||
|
||||
static u8 at93c_read_byte(void)
|
||||
{
|
||||
int i;
|
||||
u8 data = 0;
|
||||
|
||||
for (i = 0; i <= 7; i++) {
|
||||
data <<= 1;
|
||||
data |= at93c_read_databit();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
static void at93c_write_bits(u32 data, int size)
|
||||
{
|
||||
int i;
|
||||
int shift = size - 1;
|
||||
u32 mask = (1 << shift);
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
at93c_write_databit((data & mask) >> shift);
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void at93c_init_op(void)
|
||||
{
|
||||
at93c_reg_write((at93c_reg_read() | at93c->cs) &
|
||||
~at93c->clk & ~(1 << at93c->rdata_shift));
|
||||
lasat_ndelay(50);
|
||||
}
|
||||
|
||||
static void at93c_end_op(void)
|
||||
{
|
||||
at93c_reg_write(at93c_reg_read() & ~at93c->cs);
|
||||
lasat_ndelay(250);
|
||||
}
|
||||
|
||||
static void at93c_wait(void)
|
||||
{
|
||||
at93c_init_op();
|
||||
while (!at93c_read_databit())
|
||||
;
|
||||
at93c_end_op();
|
||||
};
|
||||
|
||||
static void at93c_disable_wp(void)
|
||||
{
|
||||
at93c_init_op();
|
||||
at93c_write_bits(AT93C_WENCMD, 10);
|
||||
at93c_end_op();
|
||||
}
|
||||
|
||||
static void at93c_enable_wp(void)
|
||||
{
|
||||
at93c_init_op();
|
||||
at93c_write_bits(AT93C_WDSCMD, 10);
|
||||
at93c_end_op();
|
||||
}
|
||||
|
||||
u8 at93c_read(u8 addr)
|
||||
{
|
||||
u8 byte;
|
||||
at93c_init_op();
|
||||
at93c_write_bits((addr & AT93C_ADDR_MAX)|AT93C_RCMD, 10);
|
||||
byte = at93c_read_byte();
|
||||
at93c_end_op();
|
||||
return byte;
|
||||
}
|
||||
|
||||
void at93c_write(u8 addr, u8 data)
|
||||
{
|
||||
at93c_disable_wp();
|
||||
at93c_init_op();
|
||||
at93c_write_bits((addr & AT93C_ADDR_MAX)|AT93C_WCMD, 10);
|
||||
at93c_write_bits(data, 8);
|
||||
at93c_end_op();
|
||||
at93c_wait();
|
||||
at93c_enable_wp();
|
||||
}
|
18
arch/mips/lasat/at93c.h
Normal file
18
arch/mips/lasat/at93c.h
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Atmel AT93C46 serial eeprom driver
|
||||
*
|
||||
* Brian Murphy <brian.murphy@eicon.com>
|
||||
*
|
||||
*/
|
||||
|
||||
extern struct at93c_defs {
|
||||
volatile u32 *reg;
|
||||
volatile u32 *rdata_reg;
|
||||
int rdata_shift;
|
||||
int wdata_shift;
|
||||
u32 cs;
|
||||
u32 clk;
|
||||
} *at93c;
|
||||
|
||||
u8 at93c_read(u8 addr);
|
||||
void at93c_write(u8 addr, u8 data);
|
183
arch/mips/lasat/ds1603.c
Normal file
183
arch/mips/lasat/ds1603.c
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Dallas Semiconductors 1603 RTC driver
|
||||
*
|
||||
* Brian Murphy <brian@murphy.dk>
|
||||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/lasat/ds1603.h>
|
||||
#include <asm/time.h>
|
||||
|
||||
#include "ds1603.h"
|
||||
|
||||
#define READ_TIME_CMD 0x81
|
||||
#define SET_TIME_CMD 0x80
|
||||
#define TRIMMER_SET_CMD 0xC0
|
||||
#define TRIMMER_VALUE_MASK 0x38
|
||||
#define TRIMMER_SHIFT 3
|
||||
|
||||
struct ds_defs *ds1603;
|
||||
|
||||
/* HW specific register functions */
|
||||
static void rtc_reg_write(unsigned long val)
|
||||
{
|
||||
*ds1603->reg = val;
|
||||
}
|
||||
|
||||
static unsigned long rtc_reg_read(void)
|
||||
{
|
||||
unsigned long tmp = *ds1603->reg;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static unsigned long rtc_datareg_read(void)
|
||||
{
|
||||
unsigned long tmp = *ds1603->data_reg;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static void rtc_nrst_high(void)
|
||||
{
|
||||
rtc_reg_write(rtc_reg_read() | ds1603->rst);
|
||||
}
|
||||
|
||||
static void rtc_nrst_low(void)
|
||||
{
|
||||
rtc_reg_write(rtc_reg_read() & ~ds1603->rst);
|
||||
}
|
||||
|
||||
static void rtc_cycle_clock(unsigned long data)
|
||||
{
|
||||
data |= ds1603->clk;
|
||||
rtc_reg_write(data);
|
||||
lasat_ndelay(250);
|
||||
if (ds1603->data_reversed)
|
||||
data &= ~ds1603->data;
|
||||
else
|
||||
data |= ds1603->data;
|
||||
data &= ~ds1603->clk;
|
||||
rtc_reg_write(data);
|
||||
lasat_ndelay(250 + ds1603->huge_delay);
|
||||
}
|
||||
|
||||
static void rtc_write_databit(unsigned int bit)
|
||||
{
|
||||
unsigned long data = rtc_reg_read();
|
||||
if (ds1603->data_reversed)
|
||||
bit = !bit;
|
||||
if (bit)
|
||||
data |= ds1603->data;
|
||||
else
|
||||
data &= ~ds1603->data;
|
||||
|
||||
rtc_reg_write(data);
|
||||
lasat_ndelay(50 + ds1603->huge_delay);
|
||||
rtc_cycle_clock(data);
|
||||
}
|
||||
|
||||
static unsigned int rtc_read_databit(void)
|
||||
{
|
||||
unsigned int data;
|
||||
|
||||
data = (rtc_datareg_read() & (1 << ds1603->data_read_shift))
|
||||
>> ds1603->data_read_shift;
|
||||
rtc_cycle_clock(rtc_reg_read());
|
||||
return data;
|
||||
}
|
||||
|
||||
static void rtc_write_byte(unsigned int byte)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= 7; i++) {
|
||||
rtc_write_databit(byte & 1L);
|
||||
byte >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void rtc_write_word(unsigned long word)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
rtc_write_databit(word & 1L);
|
||||
word >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned long rtc_read_word(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long word = 0;
|
||||
unsigned long shift = 0;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
word |= rtc_read_databit() << shift;
|
||||
shift++;
|
||||
}
|
||||
return word;
|
||||
}
|
||||
|
||||
static void rtc_init_op(void)
|
||||
{
|
||||
rtc_nrst_high();
|
||||
|
||||
rtc_reg_write(rtc_reg_read() & ~ds1603->clk);
|
||||
|
||||
lasat_ndelay(50);
|
||||
}
|
||||
|
||||
static void rtc_end_op(void)
|
||||
{
|
||||
rtc_nrst_low();
|
||||
lasat_ndelay(1000);
|
||||
}
|
||||
|
||||
/* interface */
|
||||
unsigned long ds1603_read(void)
|
||||
{
|
||||
unsigned long word;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
rtc_init_op();
|
||||
rtc_write_byte(READ_TIME_CMD);
|
||||
word = rtc_read_word();
|
||||
rtc_end_op();
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
return word;
|
||||
}
|
||||
|
||||
int ds1603_set(unsigned long time)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
rtc_init_op();
|
||||
rtc_write_byte(SET_TIME_CMD);
|
||||
rtc_write_word(time);
|
||||
rtc_end_op();
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ds1603_set_trimmer(unsigned int trimval)
|
||||
{
|
||||
rtc_init_op();
|
||||
rtc_write_byte(((trimval << TRIMMER_SHIFT) & TRIMMER_VALUE_MASK)
|
||||
| (TRIMMER_SET_CMD));
|
||||
rtc_end_op();
|
||||
}
|
||||
|
||||
void ds1603_disable(void)
|
||||
{
|
||||
ds1603_set_trimmer(TRIMMER_DISABLE_RTC);
|
||||
}
|
||||
|
||||
void ds1603_enable(void)
|
||||
{
|
||||
ds1603_set_trimmer(TRIMMER_DEFAULT);
|
||||
}
|
33
arch/mips/lasat/ds1603.h
Normal file
33
arch/mips/lasat/ds1603.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Dallas Semiconductors 1603 RTC driver
|
||||
*
|
||||
* Brian Murphy <brian@murphy.dk>
|
||||
*
|
||||
*/
|
||||
#ifndef __DS1603_H
|
||||
#define __DS1603_H
|
||||
|
||||
struct ds_defs {
|
||||
volatile u32 *reg;
|
||||
volatile u32 *data_reg;
|
||||
u32 rst;
|
||||
u32 clk;
|
||||
u32 data;
|
||||
u32 data_read_shift;
|
||||
char data_reversed;
|
||||
u32 huge_delay;
|
||||
};
|
||||
|
||||
extern struct ds_defs *ds1603;
|
||||
|
||||
unsigned long ds1603_read(void);
|
||||
int ds1603_set(unsigned long);
|
||||
void ds1603_set_trimmer(unsigned int);
|
||||
void ds1603_enable(void);
|
||||
void ds1603_disable(void);
|
||||
void ds1603_init(struct ds_defs *);
|
||||
|
||||
#define TRIMMER_DEFAULT 3
|
||||
#define TRIMMER_DISABLE_RTC 0
|
||||
|
||||
#endif
|
54
arch/mips/lasat/image/Makefile
Normal file
54
arch/mips/lasat/image/Makefile
Normal file
@ -0,0 +1,54 @@
|
||||
#
|
||||
# MAKEFILE FOR THE MIPS LINUX BOOTLOADER AND ROM DEBUGGER
|
||||
#
|
||||
# i-data Networks
|
||||
#
|
||||
# Author: Thomas Horsten <thh@i-data.com>
|
||||
#
|
||||
|
||||
ifndef Version
|
||||
Version = "$(USER)-test"
|
||||
endif
|
||||
|
||||
MKLASATIMG = mklasatimg
|
||||
MKLASATIMG_ARCH = mq2,mqpro,sp100,sp200
|
||||
KERNEL_IMAGE = $(TOPDIR)/vmlinux
|
||||
KERNEL_START = $(shell $(NM) $(KERNEL_IMAGE) | grep " _text" | cut -f1 -d\ )
|
||||
KERNEL_ENTRY = $(shell $(NM) $(KERNEL_IMAGE) | grep kernel_entry | cut -f1 -d\ )
|
||||
|
||||
LDSCRIPT= -L$(obj) -Tromscript.normal
|
||||
|
||||
HEAD_DEFINES := -D_kernel_start=0x$(KERNEL_START) \
|
||||
-D_kernel_entry=0x$(KERNEL_ENTRY) \
|
||||
-D VERSION="\"$(Version)\"" \
|
||||
-D TIMESTAMP=$(shell date +%s)
|
||||
|
||||
$(obj)/head.o: $(obj)/head.S $(KERNEL_IMAGE)
|
||||
$(CC) -fno-pic $(HEAD_DEFINES) -I$(TOPDIR)/include -c -o $@ $<
|
||||
|
||||
OBJECTS = head.o kImage.o
|
||||
|
||||
rom.sw: $(obj)/rom.sw
|
||||
rom.bin: $(obj)/rom.bin
|
||||
|
||||
$(obj)/rom.sw: $(obj)/rom.bin
|
||||
$(MKLASATIMG) -o $@ -k $^ -m $(MKLASATIMG_ARCH)
|
||||
|
||||
$(obj)/rom.bin: $(obj)/rom
|
||||
$(OBJCOPY) -O binary -S $^ $@
|
||||
|
||||
# Rule to make the bootloader
|
||||
$(obj)/rom: $(addprefix $(obj)/,$(OBJECTS))
|
||||
$(LD) $(LDFLAGS) $(LDSCRIPT) -o $@ $^
|
||||
|
||||
$(obj)/%.o: $(obj)/%.gz
|
||||
$(LD) -r -o $@ -b binary $<
|
||||
|
||||
$(obj)/%.gz: $(obj)/%.bin
|
||||
gzip -cf -9 $< > $@
|
||||
|
||||
$(obj)/kImage.bin: $(KERNEL_IMAGE)
|
||||
$(OBJCOPY) -O binary -S $^ $@
|
||||
|
||||
clean:
|
||||
rm -f rom rom.bin rom.sw kImage.bin kImage.o
|
31
arch/mips/lasat/image/head.S
Normal file
31
arch/mips/lasat/image/head.S
Normal file
@ -0,0 +1,31 @@
|
||||
#include <asm/lasat/head.h>
|
||||
|
||||
.text
|
||||
.section .text.start, "ax"
|
||||
.set noreorder
|
||||
.set mips3
|
||||
|
||||
/* Magic words identifying a software image */
|
||||
.word LASAT_K_MAGIC0_VAL
|
||||
.word LASAT_K_MAGIC1_VAL
|
||||
|
||||
/* Image header version */
|
||||
.word 0x00000002
|
||||
|
||||
/* image start and size */
|
||||
.word _image_start
|
||||
.word _image_size
|
||||
|
||||
/* start of kernel and entrypoint in uncompressed image */
|
||||
.word _kernel_start
|
||||
.word _kernel_entry
|
||||
|
||||
/* Here we have room for future flags */
|
||||
|
||||
.org 0x40
|
||||
reldate:
|
||||
.word TIMESTAMP
|
||||
|
||||
.org 0x50
|
||||
release:
|
||||
.string VERSION
|
23
arch/mips/lasat/image/romscript.normal
Normal file
23
arch/mips/lasat/image/romscript.normal
Normal file
@ -0,0 +1,23 @@
|
||||
OUTPUT_ARCH(mips)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
*(.text.start)
|
||||
}
|
||||
|
||||
/* Data in ROM */
|
||||
|
||||
.data ALIGN(0x10) :
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
_image_start = ADDR(.data);
|
||||
_image_size = SIZEOF(.data);
|
||||
|
||||
.other :
|
||||
{
|
||||
*(.*)
|
||||
}
|
||||
}
|
130
arch/mips/lasat/interrupt.c
Normal file
130
arch/mips/lasat/interrupt.c
Normal file
@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Carsten Langgaard, carstenl@mips.com
|
||||
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Routines for generic manipulation of the interrupts found on the
|
||||
* Lasat boards.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/lasat/lasatint.h>
|
||||
#include <asm/time.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
|
||||
static volatile int *lasat_int_status;
|
||||
static volatile int *lasat_int_mask;
|
||||
static volatile int lasat_int_mask_shift;
|
||||
|
||||
void disable_lasat_irq(unsigned int irq_nr)
|
||||
{
|
||||
*lasat_int_mask &= ~(1 << irq_nr) << lasat_int_mask_shift;
|
||||
}
|
||||
|
||||
void enable_lasat_irq(unsigned int irq_nr)
|
||||
{
|
||||
*lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift;
|
||||
}
|
||||
|
||||
static struct irq_chip lasat_irq_type = {
|
||||
.name = "Lasat",
|
||||
.ack = disable_lasat_irq,
|
||||
.mask = disable_lasat_irq,
|
||||
.mask_ack = disable_lasat_irq,
|
||||
.unmask = enable_lasat_irq,
|
||||
};
|
||||
|
||||
static inline int ls1bit32(unsigned int x)
|
||||
{
|
||||
int b = 31, s;
|
||||
|
||||
s = 16; if (x << 16 == 0) s = 0; b -= s; x <<= s;
|
||||
s = 8; if (x << 8 == 0) s = 0; b -= s; x <<= s;
|
||||
s = 4; if (x << 4 == 0) s = 0; b -= s; x <<= s;
|
||||
s = 2; if (x << 2 == 0) s = 0; b -= s; x <<= s;
|
||||
s = 1; if (x << 1 == 0) s = 0; b -= s;
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
static unsigned long (*get_int_status)(void);
|
||||
|
||||
static unsigned long get_int_status_100(void)
|
||||
{
|
||||
return *lasat_int_status & *lasat_int_mask;
|
||||
}
|
||||
|
||||
static unsigned long get_int_status_200(void)
|
||||
{
|
||||
unsigned long int_status;
|
||||
|
||||
int_status = *lasat_int_status;
|
||||
int_status &= (int_status >> LASATINT_MASK_SHIFT_200) & 0xffff;
|
||||
return int_status;
|
||||
}
|
||||
|
||||
asmlinkage void plat_irq_dispatch(void)
|
||||
{
|
||||
unsigned long int_status;
|
||||
unsigned int cause = read_c0_cause();
|
||||
int irq;
|
||||
|
||||
if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */
|
||||
ll_timer_interrupt(7);
|
||||
return;
|
||||
}
|
||||
|
||||
int_status = get_int_status();
|
||||
|
||||
/* if int_status == 0, then the interrupt has already been cleared */
|
||||
if (int_status) {
|
||||
irq = ls1bit32(int_status);
|
||||
|
||||
do_IRQ(irq);
|
||||
}
|
||||
}
|
||||
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (mips_machtype) {
|
||||
case MACH_LASAT_100:
|
||||
lasat_int_status = (void *)LASAT_INT_STATUS_REG_100;
|
||||
lasat_int_mask = (void *)LASAT_INT_MASK_REG_100;
|
||||
lasat_int_mask_shift = LASATINT_MASK_SHIFT_100;
|
||||
get_int_status = get_int_status_100;
|
||||
*lasat_int_mask = 0;
|
||||
break;
|
||||
case MACH_LASAT_200:
|
||||
lasat_int_status = (void *)LASAT_INT_STATUS_REG_200;
|
||||
lasat_int_mask = (void *)LASAT_INT_MASK_REG_200;
|
||||
lasat_int_mask_shift = LASATINT_MASK_SHIFT_200;
|
||||
get_int_status = get_int_status_200;
|
||||
*lasat_int_mask &= 0xffff;
|
||||
break;
|
||||
default:
|
||||
panic("arch_init_irq: mips_machtype incorrect");
|
||||
}
|
||||
|
||||
for (i = 0; i <= LASATINT_END; i++)
|
||||
set_irq_chip_and_handler(i, &lasat_irq_type, handle_level_irq);
|
||||
}
|
280
arch/mips/lasat/lasat_board.c
Normal file
280
arch/mips/lasat/lasat_board.c
Normal file
@ -0,0 +1,280 @@
|
||||
/*
|
||||
* Thomas Horsten <thh@lasat.com>
|
||||
* Copyright (C) 2000 LASAT Networks A/S.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Routines specific to the LASAT boards
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include "at93c.h"
|
||||
/* New model description table */
|
||||
#include "lasat_models.h"
|
||||
|
||||
#define EEPROM_CRC(data, len) (~crc32(~0, data, len))
|
||||
|
||||
struct lasat_info lasat_board_info;
|
||||
|
||||
void update_bcastaddr(void);
|
||||
|
||||
int EEPROMRead(unsigned int pos, unsigned char *data, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
*data++ = at93c_read(pos++);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int EEPROMWrite(unsigned int pos, unsigned char *data, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
at93c_write(pos++, *data++);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void init_flash_sizes(void)
|
||||
{
|
||||
unsigned long *lb = lasat_board_info.li_flashpart_base;
|
||||
unsigned long *ls = lasat_board_info.li_flashpart_size;
|
||||
int i;
|
||||
|
||||
ls[LASAT_MTD_BOOTLOADER] = 0x40000;
|
||||
ls[LASAT_MTD_SERVICE] = 0xC0000;
|
||||
ls[LASAT_MTD_NORMAL] = 0x100000;
|
||||
|
||||
if (mips_machtype == MACH_LASAT_100) {
|
||||
lasat_board_info.li_flash_base = 0x1e000000;
|
||||
|
||||
lb[LASAT_MTD_BOOTLOADER] = 0x1e400000;
|
||||
|
||||
if (lasat_board_info.li_flash_size > 0x200000) {
|
||||
ls[LASAT_MTD_CONFIG] = 0x100000;
|
||||
ls[LASAT_MTD_FS] = 0x500000;
|
||||
}
|
||||
} else {
|
||||
lasat_board_info.li_flash_base = 0x10000000;
|
||||
|
||||
if (lasat_board_info.li_flash_size < 0x1000000) {
|
||||
lb[LASAT_MTD_BOOTLOADER] = 0x10000000;
|
||||
ls[LASAT_MTD_CONFIG] = 0x100000;
|
||||
if (lasat_board_info.li_flash_size >= 0x400000)
|
||||
ls[LASAT_MTD_FS] =
|
||||
lasat_board_info.li_flash_size - 0x300000;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 1; i < LASAT_MTD_LAST; i++)
|
||||
lb[i] = lb[i-1] + ls[i-1];
|
||||
}
|
||||
|
||||
int lasat_init_board_info(void)
|
||||
{
|
||||
int c;
|
||||
unsigned long crc;
|
||||
unsigned long cfg0, cfg1;
|
||||
const struct product_info *ppi;
|
||||
int i_n_base_models = N_BASE_MODELS;
|
||||
const char * const * i_txt_base_models = txt_base_models;
|
||||
int i_n_prids = N_PRIDS;
|
||||
|
||||
memset(&lasat_board_info, 0, sizeof(lasat_board_info));
|
||||
|
||||
/* First read the EEPROM info */
|
||||
EEPROMRead(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
|
||||
sizeof(struct lasat_eeprom_struct));
|
||||
|
||||
/* Check the CRC */
|
||||
crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info),
|
||||
sizeof(struct lasat_eeprom_struct) - 4);
|
||||
|
||||
if (crc != lasat_board_info.li_eeprom_info.crc32) {
|
||||
printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM CRC does "
|
||||
"not match calculated, attempting to soldier on...\n");
|
||||
}
|
||||
|
||||
if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION) {
|
||||
printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM version "
|
||||
"%d, wanted version %d, attempting to soldier on...\n",
|
||||
(unsigned int)lasat_board_info.li_eeprom_info.version,
|
||||
LASAT_EEPROM_VERSION);
|
||||
}
|
||||
|
||||
cfg0 = lasat_board_info.li_eeprom_info.cfg[0];
|
||||
cfg1 = lasat_board_info.li_eeprom_info.cfg[1];
|
||||
|
||||
if (LASAT_W0_DSCTYPE(cfg0) != 1) {
|
||||
printk(KERN_WARNING "WARNING...\nWARNING...\n"
|
||||
"Invalid configuration read from EEPROM, attempting to "
|
||||
"soldier on...");
|
||||
}
|
||||
/* We have a valid configuration */
|
||||
|
||||
switch (LASAT_W0_SDRAMBANKSZ(cfg0)) {
|
||||
case 0:
|
||||
lasat_board_info.li_memsize = 0x0800000;
|
||||
break;
|
||||
case 1:
|
||||
lasat_board_info.li_memsize = 0x1000000;
|
||||
break;
|
||||
case 2:
|
||||
lasat_board_info.li_memsize = 0x2000000;
|
||||
break;
|
||||
case 3:
|
||||
lasat_board_info.li_memsize = 0x4000000;
|
||||
break;
|
||||
case 4:
|
||||
lasat_board_info.li_memsize = 0x8000000;
|
||||
break;
|
||||
default:
|
||||
lasat_board_info.li_memsize = 0;
|
||||
}
|
||||
|
||||
switch (LASAT_W0_SDRAMBANKS(cfg0)) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
lasat_board_info.li_memsize *= 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (LASAT_W0_BUSSPEED(cfg0)) {
|
||||
case 0x0:
|
||||
lasat_board_info.li_bus_hz = 60000000;
|
||||
break;
|
||||
case 0x1:
|
||||
lasat_board_info.li_bus_hz = 66000000;
|
||||
break;
|
||||
case 0x2:
|
||||
lasat_board_info.li_bus_hz = 66666667;
|
||||
break;
|
||||
case 0x3:
|
||||
lasat_board_info.li_bus_hz = 80000000;
|
||||
break;
|
||||
case 0x4:
|
||||
lasat_board_info.li_bus_hz = 83333333;
|
||||
break;
|
||||
case 0x5:
|
||||
lasat_board_info.li_bus_hz = 100000000;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (LASAT_W0_CPUCLK(cfg0)) {
|
||||
case 0x0:
|
||||
lasat_board_info.li_cpu_hz =
|
||||
lasat_board_info.li_bus_hz;
|
||||
break;
|
||||
case 0x1:
|
||||
lasat_board_info.li_cpu_hz =
|
||||
lasat_board_info.li_bus_hz +
|
||||
(lasat_board_info.li_bus_hz >> 1);
|
||||
break;
|
||||
case 0x2:
|
||||
lasat_board_info.li_cpu_hz =
|
||||
lasat_board_info.li_bus_hz +
|
||||
lasat_board_info.li_bus_hz;
|
||||
break;
|
||||
case 0x3:
|
||||
lasat_board_info.li_cpu_hz =
|
||||
lasat_board_info.li_bus_hz +
|
||||
lasat_board_info.li_bus_hz +
|
||||
(lasat_board_info.li_bus_hz >> 1);
|
||||
break;
|
||||
case 0x4:
|
||||
lasat_board_info.li_cpu_hz =
|
||||
lasat_board_info.li_bus_hz +
|
||||
lasat_board_info.li_bus_hz +
|
||||
lasat_board_info.li_bus_hz;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Flash size */
|
||||
switch (LASAT_W1_FLASHSIZE(cfg1)) {
|
||||
case 0:
|
||||
lasat_board_info.li_flash_size = 0x200000;
|
||||
break;
|
||||
case 1:
|
||||
lasat_board_info.li_flash_size = 0x400000;
|
||||
break;
|
||||
case 2:
|
||||
lasat_board_info.li_flash_size = 0x800000;
|
||||
break;
|
||||
case 3:
|
||||
lasat_board_info.li_flash_size = 0x1000000;
|
||||
break;
|
||||
case 4:
|
||||
lasat_board_info.li_flash_size = 0x2000000;
|
||||
break;
|
||||
}
|
||||
|
||||
init_flash_sizes();
|
||||
|
||||
lasat_board_info.li_bmid = LASAT_W0_BMID(cfg0);
|
||||
lasat_board_info.li_prid = lasat_board_info.li_eeprom_info.prid;
|
||||
if (lasat_board_info.li_prid == 0xffff || lasat_board_info.li_prid == 0)
|
||||
lasat_board_info.li_prid = lasat_board_info.li_bmid;
|
||||
|
||||
/* Base model stuff */
|
||||
if (lasat_board_info.li_bmid > i_n_base_models)
|
||||
lasat_board_info.li_bmid = i_n_base_models;
|
||||
strcpy(lasat_board_info.li_bmstr,
|
||||
i_txt_base_models[lasat_board_info.li_bmid]);
|
||||
|
||||
/* Product ID dependent values */
|
||||
c = lasat_board_info.li_prid;
|
||||
if (c >= i_n_prids) {
|
||||
strcpy(lasat_board_info.li_namestr, "Unknown Model");
|
||||
strcpy(lasat_board_info.li_typestr, "Unknown Type");
|
||||
} else {
|
||||
ppi = &vendor_info_table[0].vi_product_info[c];
|
||||
strcpy(lasat_board_info.li_namestr, ppi->pi_name);
|
||||
if (ppi->pi_type)
|
||||
strcpy(lasat_board_info.li_typestr, ppi->pi_type);
|
||||
else
|
||||
sprintf(lasat_board_info.li_typestr, "%d", 10 * c);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL)
|
||||
update_bcastaddr();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void lasat_write_eeprom_info(void)
|
||||
{
|
||||
unsigned long crc;
|
||||
|
||||
/* Generate the CRC */
|
||||
crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info),
|
||||
sizeof(struct lasat_eeprom_struct) - 4);
|
||||
lasat_board_info.li_eeprom_info.crc32 = crc;
|
||||
|
||||
/* Write the EEPROM info */
|
||||
EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
|
||||
sizeof(struct lasat_eeprom_struct));
|
||||
}
|
67
arch/mips/lasat/lasat_models.h
Normal file
67
arch/mips/lasat/lasat_models.h
Normal file
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Model description tables
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
|
||||
struct product_info {
|
||||
const char *pi_name;
|
||||
const char *pi_type;
|
||||
};
|
||||
|
||||
struct vendor_info {
|
||||
const char *vi_name;
|
||||
const struct product_info *vi_product_info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Base models
|
||||
*/
|
||||
static const char * const txt_base_models[] = {
|
||||
"MQ 2", "MQ Pro", "SP 25", "SP 50", "SP 100", "SP 5000", "SP 7000",
|
||||
"SP 1000", "Unknown"
|
||||
};
|
||||
#define N_BASE_MODELS (ARRAY_SIZE(txt_base_models) - 1)
|
||||
|
||||
/*
|
||||
* Eicon Networks
|
||||
*/
|
||||
static const char txt_en_mq[] = "Masquerade";
|
||||
static const char txt_en_sp[] = "Safepipe";
|
||||
|
||||
static const struct product_info product_info_eicon[] = {
|
||||
{ txt_en_mq, "II" }, /* 0 */
|
||||
{ txt_en_mq, "Pro" }, /* 1 */
|
||||
{ txt_en_sp, "25" }, /* 2 */
|
||||
{ txt_en_sp, "50" }, /* 3 */
|
||||
{ txt_en_sp, "100" }, /* 4 */
|
||||
{ txt_en_sp, "5000" }, /* 5 */
|
||||
{ txt_en_sp, "7000" }, /* 6 */
|
||||
{ txt_en_sp, "30" }, /* 7 */
|
||||
{ txt_en_sp, "5100" }, /* 8 */
|
||||
{ txt_en_sp, "7100" }, /* 9 */
|
||||
{ txt_en_sp, "1110" }, /* 10 */
|
||||
{ txt_en_sp, "3020" }, /* 11 */
|
||||
{ txt_en_sp, "3030" }, /* 12 */
|
||||
{ txt_en_sp, "5020" }, /* 13 */
|
||||
{ txt_en_sp, "5030" }, /* 14 */
|
||||
{ txt_en_sp, "1120" }, /* 15 */
|
||||
{ txt_en_sp, "1130" }, /* 16 */
|
||||
{ txt_en_sp, "6010" }, /* 17 */
|
||||
{ txt_en_sp, "6110" }, /* 18 */
|
||||
{ txt_en_sp, "6210" }, /* 19 */
|
||||
{ txt_en_sp, "1020" }, /* 20 */
|
||||
{ txt_en_sp, "1040" }, /* 21 */
|
||||
{ txt_en_sp, "1050" }, /* 22 */
|
||||
{ txt_en_sp, "1060" }, /* 23 */
|
||||
};
|
||||
|
||||
#define N_PRIDS ARRAY_SIZE(product_info_eicon)
|
||||
|
||||
/*
|
||||
* The vendor table
|
||||
*/
|
||||
static struct vendor_info const vendor_info_table[] = {
|
||||
{ "Eicon Networks", product_info_eicon },
|
||||
};
|
||||
|
||||
#define N_VENDORS ARRAY_SIZE(vendor_info_table)
|
244
arch/mips/lasat/picvue.c
Normal file
244
arch/mips/lasat/picvue.c
Normal file
@ -0,0 +1,244 @@
|
||||
/*
|
||||
* Picvue PVC160206 display driver
|
||||
*
|
||||
* Brian Murphy <brian@murphy.dk>
|
||||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include "picvue.h"
|
||||
|
||||
#define PVC_BUSY 0x80
|
||||
#define PVC_NLINES 2
|
||||
#define PVC_DISPMEM 80
|
||||
#define PVC_LINELEN PVC_DISPMEM / PVC_NLINES
|
||||
|
||||
struct pvc_defs *picvue;
|
||||
|
||||
DECLARE_MUTEX(pvc_sem);
|
||||
|
||||
static void pvc_reg_write(u32 val)
|
||||
{
|
||||
*picvue->reg = val;
|
||||
}
|
||||
|
||||
static u32 pvc_reg_read(void)
|
||||
{
|
||||
u32 tmp = *picvue->reg;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static void pvc_write_byte(u32 data, u8 byte)
|
||||
{
|
||||
data |= picvue->e;
|
||||
pvc_reg_write(data);
|
||||
data &= ~picvue->data_mask;
|
||||
data |= byte << picvue->data_shift;
|
||||
pvc_reg_write(data);
|
||||
ndelay(220);
|
||||
pvc_reg_write(data & ~picvue->e);
|
||||
ndelay(220);
|
||||
}
|
||||
|
||||
static u8 pvc_read_byte(u32 data)
|
||||
{
|
||||
u8 byte;
|
||||
|
||||
data |= picvue->e;
|
||||
pvc_reg_write(data);
|
||||
ndelay(220);
|
||||
byte = (pvc_reg_read() & picvue->data_mask) >> picvue->data_shift;
|
||||
data &= ~picvue->e;
|
||||
pvc_reg_write(data);
|
||||
ndelay(220);
|
||||
return byte;
|
||||
}
|
||||
|
||||
static u8 pvc_read_data(void)
|
||||
{
|
||||
u32 data = pvc_reg_read();
|
||||
u8 byte;
|
||||
data |= picvue->rw;
|
||||
data &= ~picvue->rs;
|
||||
pvc_reg_write(data);
|
||||
ndelay(40);
|
||||
byte = pvc_read_byte(data);
|
||||
data |= picvue->rs;
|
||||
pvc_reg_write(data);
|
||||
return byte;
|
||||
}
|
||||
|
||||
#define TIMEOUT 1000
|
||||
static int pvc_wait(void)
|
||||
{
|
||||
int i = TIMEOUT;
|
||||
int err = 0;
|
||||
|
||||
while ((pvc_read_data() & PVC_BUSY) && i)
|
||||
i--;
|
||||
if (i == 0)
|
||||
err = -ETIME;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
#define MODE_INST 0
|
||||
#define MODE_DATA 1
|
||||
static void pvc_write(u8 byte, int mode)
|
||||
{
|
||||
u32 data = pvc_reg_read();
|
||||
data &= ~picvue->rw;
|
||||
if (mode == MODE_DATA)
|
||||
data |= picvue->rs;
|
||||
else
|
||||
data &= ~picvue->rs;
|
||||
pvc_reg_write(data);
|
||||
ndelay(40);
|
||||
pvc_write_byte(data, byte);
|
||||
if (mode == MODE_DATA)
|
||||
data &= ~picvue->rs;
|
||||
else
|
||||
data |= picvue->rs;
|
||||
pvc_reg_write(data);
|
||||
pvc_wait();
|
||||
}
|
||||
|
||||
void pvc_write_string(const unsigned char *str, u8 addr, int line)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (line > 0 && (PVC_NLINES > 1))
|
||||
addr += 0x40 * line;
|
||||
pvc_write(0x80 | addr, MODE_INST);
|
||||
|
||||
while (*str != 0 && i < PVC_LINELEN) {
|
||||
pvc_write(*str++, MODE_DATA);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void pvc_write_string_centered(const unsigned char *str, int line)
|
||||
{
|
||||
int len = strlen(str);
|
||||
u8 addr;
|
||||
|
||||
if (len > PVC_VISIBLE_CHARS)
|
||||
addr = 0;
|
||||
else
|
||||
addr = (PVC_VISIBLE_CHARS - strlen(str))/2;
|
||||
|
||||
pvc_write_string(str, addr, line);
|
||||
}
|
||||
|
||||
void pvc_dump_string(const unsigned char *str)
|
||||
{
|
||||
int len = strlen(str);
|
||||
|
||||
pvc_write_string(str, 0, 0);
|
||||
if (len > PVC_VISIBLE_CHARS)
|
||||
pvc_write_string(&str[PVC_VISIBLE_CHARS], 0, 1);
|
||||
}
|
||||
|
||||
#define BM_SIZE 8
|
||||
#define MAX_PROGRAMMABLE_CHARS 8
|
||||
int pvc_program_cg(int charnum, u8 bitmap[BM_SIZE])
|
||||
{
|
||||
int i;
|
||||
int addr;
|
||||
|
||||
if (charnum > MAX_PROGRAMMABLE_CHARS)
|
||||
return -ENOENT;
|
||||
|
||||
addr = charnum * 8;
|
||||
pvc_write(0x40 | addr, MODE_INST);
|
||||
|
||||
for (i = 0; i < BM_SIZE; i++)
|
||||
pvc_write(bitmap[i], MODE_DATA);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define FUNC_SET_CMD 0x20
|
||||
#define EIGHT_BYTE (1 << 4)
|
||||
#define FOUR_BYTE 0
|
||||
#define TWO_LINES (1 << 3)
|
||||
#define ONE_LINE 0
|
||||
#define LARGE_FONT (1 << 2)
|
||||
#define SMALL_FONT 0
|
||||
|
||||
static void pvc_funcset(u8 cmd)
|
||||
{
|
||||
pvc_write(FUNC_SET_CMD | (cmd & (EIGHT_BYTE|TWO_LINES|LARGE_FONT)),
|
||||
MODE_INST);
|
||||
}
|
||||
|
||||
#define ENTRYMODE_CMD 0x4
|
||||
#define AUTO_INC (1 << 1)
|
||||
#define AUTO_DEC 0
|
||||
#define CURSOR_FOLLOWS_DISP (1 << 0)
|
||||
|
||||
static void pvc_entrymode(u8 cmd)
|
||||
{
|
||||
pvc_write(ENTRYMODE_CMD | (cmd & (AUTO_INC|CURSOR_FOLLOWS_DISP)),
|
||||
MODE_INST);
|
||||
}
|
||||
|
||||
#define DISP_CNT_CMD 0x08
|
||||
#define DISP_OFF 0
|
||||
#define DISP_ON (1 << 2)
|
||||
#define CUR_ON (1 << 1)
|
||||
#define CUR_BLINK (1 << 0)
|
||||
void pvc_dispcnt(u8 cmd)
|
||||
{
|
||||
pvc_write(DISP_CNT_CMD | (cmd & (DISP_ON|CUR_ON|CUR_BLINK)), MODE_INST);
|
||||
}
|
||||
|
||||
#define MOVE_CMD 0x10
|
||||
#define DISPLAY (1 << 3)
|
||||
#define CURSOR 0
|
||||
#define RIGHT (1 << 2)
|
||||
#define LEFT 0
|
||||
void pvc_move(u8 cmd)
|
||||
{
|
||||
pvc_write(MOVE_CMD | (cmd & (DISPLAY|RIGHT)), MODE_INST);
|
||||
}
|
||||
|
||||
#define CLEAR_CMD 0x1
|
||||
void pvc_clear(void)
|
||||
{
|
||||
pvc_write(CLEAR_CMD, MODE_INST);
|
||||
}
|
||||
|
||||
#define HOME_CMD 0x2
|
||||
void pvc_home(void)
|
||||
{
|
||||
pvc_write(HOME_CMD, MODE_INST);
|
||||
}
|
||||
|
||||
int pvc_init(void)
|
||||
{
|
||||
u8 cmd = EIGHT_BYTE;
|
||||
|
||||
if (PVC_NLINES == 2)
|
||||
cmd |= (SMALL_FONT|TWO_LINES);
|
||||
else
|
||||
cmd |= (LARGE_FONT|ONE_LINE);
|
||||
pvc_funcset(cmd);
|
||||
pvc_dispcnt(DISP_ON);
|
||||
pvc_entrymode(AUTO_INC);
|
||||
|
||||
pvc_clear();
|
||||
pvc_write_string_centered("Display", 0);
|
||||
pvc_write_string_centered("Initialized", 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(pvc_init);
|
||||
MODULE_LICENSE("GPL");
|
48
arch/mips/lasat/picvue.h
Normal file
48
arch/mips/lasat/picvue.h
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Picvue PVC160206 display driver
|
||||
*
|
||||
* Brian Murphy <brian.murphy@eicon.com>
|
||||
*
|
||||
*/
|
||||
#include <asm/semaphore.h>
|
||||
|
||||
struct pvc_defs {
|
||||
volatile u32 *reg;
|
||||
u32 data_shift;
|
||||
u32 data_mask;
|
||||
u32 e;
|
||||
u32 rw;
|
||||
u32 rs;
|
||||
};
|
||||
|
||||
extern struct pvc_defs *picvue;
|
||||
|
||||
#define PVC_NLINES 2
|
||||
#define PVC_DISPMEM 80
|
||||
#define PVC_LINELEN PVC_DISPMEM / PVC_NLINES
|
||||
#define PVC_VISIBLE_CHARS 16
|
||||
|
||||
void pvc_write_string(const unsigned char *str, u8 addr, int line);
|
||||
void pvc_write_string_centered(const unsigned char *str, int line);
|
||||
void pvc_dump_string(const unsigned char *str);
|
||||
|
||||
#define BM_SIZE 8
|
||||
#define MAX_PROGRAMMABLE_CHARS 8
|
||||
int pvc_program_cg(int charnum, u8 bitmap[BM_SIZE]);
|
||||
|
||||
void pvc_dispcnt(u8 cmd);
|
||||
#define DISP_OFF 0
|
||||
#define DISP_ON (1 << 2)
|
||||
#define CUR_ON (1 << 1)
|
||||
#define CUR_BLINK (1 << 0)
|
||||
|
||||
void pvc_move(u8 cmd);
|
||||
#define DISPLAY (1 << 3)
|
||||
#define CURSOR 0
|
||||
#define RIGHT (1 << 2)
|
||||
#define LEFT 0
|
||||
|
||||
void pvc_clear(void);
|
||||
void pvc_home(void);
|
||||
|
||||
extern struct semaphore pvc_sem;
|
191
arch/mips/lasat/picvue_proc.c
Normal file
191
arch/mips/lasat/picvue_proc.c
Normal file
@ -0,0 +1,191 @@
|
||||
/*
|
||||
* Picvue PVC160206 display driver
|
||||
*
|
||||
* Brian Murphy <brian.murphy@eicon.com>
|
||||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <linux/timer.h>
|
||||
|
||||
#include "picvue.h"
|
||||
|
||||
static char pvc_lines[PVC_NLINES][PVC_LINELEN+1];
|
||||
static int pvc_linedata[PVC_NLINES];
|
||||
static struct proc_dir_entry *pvc_display_dir;
|
||||
static char *pvc_linename[PVC_NLINES] = {"line1", "line2"};
|
||||
#define DISPLAY_DIR_NAME "display"
|
||||
static int scroll_dir, scroll_interval;
|
||||
|
||||
static struct timer_list timer;
|
||||
|
||||
static void pvc_display(unsigned long data)
|
||||
{
|
||||
int i;
|
||||
|
||||
pvc_clear();
|
||||
for (i = 0; i < PVC_NLINES; i++)
|
||||
pvc_write_string(pvc_lines[i], 0, i);
|
||||
}
|
||||
|
||||
static DECLARE_TASKLET(pvc_display_tasklet, &pvc_display, 0);
|
||||
|
||||
static int pvc_proc_read_line(char *page, char **start,
|
||||
off_t off, int count,
|
||||
int *eof, void *data)
|
||||
{
|
||||
char *origpage = page;
|
||||
int lineno = *(int *)data;
|
||||
|
||||
if (lineno < 0 || lineno > PVC_NLINES) {
|
||||
printk(KERN_WARNING "proc_read_line: invalid lineno %d\n", lineno);
|
||||
return 0;
|
||||
}
|
||||
|
||||
down(&pvc_sem);
|
||||
page += sprintf(page, "%s\n", pvc_lines[lineno]);
|
||||
up(&pvc_sem);
|
||||
|
||||
return page - origpage;
|
||||
}
|
||||
|
||||
static int pvc_proc_write_line(struct file *file, const char *buffer,
|
||||
unsigned long count, void *data)
|
||||
{
|
||||
int origcount = count;
|
||||
int lineno = *(int *)data;
|
||||
|
||||
if (lineno < 0 || lineno > PVC_NLINES) {
|
||||
printk(KERN_WARNING "proc_write_line: invalid lineno %d\n",
|
||||
lineno);
|
||||
return origcount;
|
||||
}
|
||||
|
||||
if (count > PVC_LINELEN)
|
||||
count = PVC_LINELEN;
|
||||
|
||||
if (buffer[count-1] == '\n')
|
||||
count--;
|
||||
|
||||
down(&pvc_sem);
|
||||
strncpy(pvc_lines[lineno], buffer, count);
|
||||
pvc_lines[lineno][count] = '\0';
|
||||
up(&pvc_sem);
|
||||
|
||||
tasklet_schedule(&pvc_display_tasklet);
|
||||
|
||||
return origcount;
|
||||
}
|
||||
|
||||
static int pvc_proc_write_scroll(struct file *file, const char *buffer,
|
||||
unsigned long count, void *data)
|
||||
{
|
||||
int origcount = count;
|
||||
int cmd = simple_strtol(buffer, NULL, 10);
|
||||
|
||||
down(&pvc_sem);
|
||||
if (scroll_interval != 0)
|
||||
del_timer(&timer);
|
||||
|
||||
if (cmd == 0) {
|
||||
scroll_dir = 0;
|
||||
scroll_interval = 0;
|
||||
} else {
|
||||
if (cmd < 0) {
|
||||
scroll_dir = -1;
|
||||
scroll_interval = -cmd;
|
||||
} else {
|
||||
scroll_dir = 1;
|
||||
scroll_interval = cmd;
|
||||
}
|
||||
add_timer(&timer);
|
||||
}
|
||||
up(&pvc_sem);
|
||||
|
||||
return origcount;
|
||||
}
|
||||
|
||||
static int pvc_proc_read_scroll(char *page, char **start,
|
||||
off_t off, int count,
|
||||
int *eof, void *data)
|
||||
{
|
||||
char *origpage = page;
|
||||
|
||||
down(&pvc_sem);
|
||||
page += sprintf(page, "%d\n", scroll_dir * scroll_interval);
|
||||
up(&pvc_sem);
|
||||
|
||||
return page - origpage;
|
||||
}
|
||||
|
||||
|
||||
void pvc_proc_timerfunc(unsigned long data)
|
||||
{
|
||||
if (scroll_dir < 0)
|
||||
pvc_move(DISPLAY|RIGHT);
|
||||
else if (scroll_dir > 0)
|
||||
pvc_move(DISPLAY|LEFT);
|
||||
|
||||
timer.expires = jiffies + scroll_interval;
|
||||
add_timer(&timer);
|
||||
}
|
||||
|
||||
static void pvc_proc_cleanup(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < PVC_NLINES; i++)
|
||||
remove_proc_entry(pvc_linename[i], pvc_display_dir);
|
||||
remove_proc_entry("scroll", pvc_display_dir);
|
||||
remove_proc_entry(DISPLAY_DIR_NAME, NULL);
|
||||
|
||||
del_timer(&timer);
|
||||
}
|
||||
|
||||
static int __init pvc_proc_init(void)
|
||||
{
|
||||
struct proc_dir_entry *proc_entry;
|
||||
int i;
|
||||
|
||||
pvc_display_dir = proc_mkdir(DISPLAY_DIR_NAME, NULL);
|
||||
if (pvc_display_dir == NULL)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < PVC_NLINES; i++) {
|
||||
strcpy(pvc_lines[i], "");
|
||||
pvc_linedata[i] = i;
|
||||
}
|
||||
for (i = 0; i < PVC_NLINES; i++) {
|
||||
proc_entry = create_proc_entry(pvc_linename[i], 0644,
|
||||
pvc_display_dir);
|
||||
if (proc_entry == NULL)
|
||||
goto error;
|
||||
|
||||
proc_entry->read_proc = pvc_proc_read_line;
|
||||
proc_entry->write_proc = pvc_proc_write_line;
|
||||
proc_entry->data = &pvc_linedata[i];
|
||||
}
|
||||
proc_entry = create_proc_entry("scroll", 0644, pvc_display_dir);
|
||||
if (proc_entry == NULL)
|
||||
goto error;
|
||||
|
||||
proc_entry->write_proc = pvc_proc_write_scroll;
|
||||
proc_entry->read_proc = pvc_proc_read_scroll;
|
||||
|
||||
init_timer(&timer);
|
||||
timer.function = pvc_proc_timerfunc;
|
||||
|
||||
return 0;
|
||||
error:
|
||||
pvc_proc_cleanup();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
module_init(pvc_proc_init);
|
||||
module_exit(pvc_proc_cleanup);
|
||||
MODULE_LICENSE("GPL");
|
128
arch/mips/lasat/prom.c
Normal file
128
arch/mips/lasat/prom.c
Normal file
@ -0,0 +1,128 @@
|
||||
/*
|
||||
* PROM interface routines.
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <asm/cpu.h>
|
||||
|
||||
#include "at93c.h"
|
||||
#include <asm/lasat/eeprom.h>
|
||||
#include "prom.h"
|
||||
|
||||
#define RESET_VECTOR 0xbfc00000
|
||||
#define PROM_JUMP_TABLE_ENTRY(n) (*((u32 *)(RESET_VECTOR + 0x20) + n))
|
||||
#define PROM_DISPLAY_ADDR PROM_JUMP_TABLE_ENTRY(0)
|
||||
#define PROM_PUTC_ADDR PROM_JUMP_TABLE_ENTRY(1)
|
||||
#define PROM_MONITOR_ADDR PROM_JUMP_TABLE_ENTRY(2)
|
||||
|
||||
static void null_prom_display(const char *string, int pos, int clear)
|
||||
{
|
||||
}
|
||||
|
||||
static void null_prom_monitor(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void null_prom_putc(char c)
|
||||
{
|
||||
}
|
||||
|
||||
/* these are functions provided by the bootloader */
|
||||
static void (*__prom_putc)(char c) = null_prom_putc;
|
||||
|
||||
void prom_putchar(char c)
|
||||
{
|
||||
__prom_putc(c);
|
||||
}
|
||||
|
||||
void (*prom_display)(const char *string, int pos, int clear) =
|
||||
null_prom_display;
|
||||
void (*prom_monitor)(void) = null_prom_monitor;
|
||||
|
||||
unsigned int lasat_ndelay_divider;
|
||||
|
||||
static void setup_prom_vectors(void)
|
||||
{
|
||||
u32 version = *(u32 *)(RESET_VECTOR + 0x90);
|
||||
|
||||
if (version >= 307) {
|
||||
prom_display = (void *)PROM_DISPLAY_ADDR;
|
||||
__prom_putc = (void *)PROM_PUTC_ADDR;
|
||||
prom_monitor = (void *)PROM_MONITOR_ADDR;
|
||||
}
|
||||
printk(KERN_DEBUG "prom vectors set up\n");
|
||||
}
|
||||
|
||||
static struct at93c_defs at93c_defs[N_MACHTYPES] = {
|
||||
{
|
||||
.reg = (void *)AT93C_REG_100,
|
||||
.rdata_reg = (void *)AT93C_RDATA_REG_100,
|
||||
.rdata_shift = AT93C_RDATA_SHIFT_100,
|
||||
.wdata_shift = AT93C_WDATA_SHIFT_100,
|
||||
.cs = AT93C_CS_M_100,
|
||||
.clk = AT93C_CLK_M_100
|
||||
}, {
|
||||
.reg = (void *)AT93C_REG_200,
|
||||
.rdata_reg = (void *)AT93C_RDATA_REG_200,
|
||||
.rdata_shift = AT93C_RDATA_SHIFT_200,
|
||||
.wdata_shift = AT93C_WDATA_SHIFT_200,
|
||||
.cs = AT93C_CS_M_200,
|
||||
.clk = AT93C_CLK_M_200
|
||||
},
|
||||
};
|
||||
|
||||
void __init prom_init(void)
|
||||
{
|
||||
int argc = fw_arg0;
|
||||
char **argv = (char **) fw_arg1;
|
||||
|
||||
setup_prom_vectors();
|
||||
|
||||
if (current_cpu_data.cputype == CPU_R5000) {
|
||||
printk(KERN_INFO "LASAT 200 board\n");
|
||||
mips_machtype = MACH_LASAT_200;
|
||||
lasat_ndelay_divider = LASAT_200_DIVIDER;
|
||||
} else {
|
||||
printk(KERN_INFO "LASAT 100 board\n");
|
||||
mips_machtype = MACH_LASAT_100;
|
||||
lasat_ndelay_divider = LASAT_100_DIVIDER;
|
||||
}
|
||||
|
||||
at93c = &at93c_defs[mips_machtype];
|
||||
|
||||
lasat_init_board_info(); /* Read info from EEPROM */
|
||||
|
||||
mips_machgroup = MACH_GROUP_LASAT;
|
||||
|
||||
/* Get the command line */
|
||||
if (argc > 0) {
|
||||
strncpy(arcs_cmdline, argv[0], CL_SIZE-1);
|
||||
arcs_cmdline[CL_SIZE-1] = '\0';
|
||||
}
|
||||
|
||||
/* Set the I/O base address */
|
||||
set_io_port_base(KSEG1);
|
||||
|
||||
/* Set memory regions */
|
||||
ioport_resource.start = 0;
|
||||
ioport_resource.end = 0xffffffff; /* Wrong, fixme. */
|
||||
|
||||
add_memory_region(0, lasat_board_info.li_memsize, BOOT_MEM_RAM);
|
||||
}
|
||||
|
||||
void __init prom_free_prom_memory(void)
|
||||
{
|
||||
}
|
||||
|
||||
const char *get_system_type(void)
|
||||
{
|
||||
return lasat_board_info.li_bmstr;
|
||||
}
|
7
arch/mips/lasat/prom.h
Normal file
7
arch/mips/lasat/prom.h
Normal file
@ -0,0 +1,7 @@
|
||||
#ifndef __PROM_H
|
||||
#define __PROM_H
|
||||
|
||||
extern void (*prom_display)(const char *string, int pos, int clear);
|
||||
extern void (*prom_monitor)(void);
|
||||
|
||||
#endif /* __PROM_H */
|
61
arch/mips/lasat/reset.c
Normal file
61
arch/mips/lasat/reset.c
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Thomas Horsten <thh@lasat.com>
|
||||
* Copyright (C) 2000 LASAT Networks A/S.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Reset the LASAT board.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
|
||||
#include "picvue.h"
|
||||
#include "prom.h"
|
||||
|
||||
static void lasat_machine_restart(char *command);
|
||||
static void lasat_machine_halt(void);
|
||||
|
||||
/* Used to set machine to boot in service mode via /proc interface */
|
||||
int lasat_boot_to_service;
|
||||
|
||||
static void lasat_machine_restart(char *command)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
if (lasat_boot_to_service) {
|
||||
*(volatile unsigned int *)0xa0000024 = 0xdeadbeef;
|
||||
*(volatile unsigned int *)0xa00000fc = 0xfedeabba;
|
||||
}
|
||||
*lasat_misc->reset_reg = 0xbedead;
|
||||
for (;;) ;
|
||||
}
|
||||
|
||||
static void lasat_machine_halt(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
prom_monitor();
|
||||
for (;;) ;
|
||||
}
|
||||
|
||||
void lasat_reboot_setup(void)
|
||||
{
|
||||
_machine_restart = lasat_machine_restart;
|
||||
_machine_halt = lasat_machine_halt;
|
||||
pm_power_off = lasat_machine_halt;
|
||||
}
|
94
arch/mips/lasat/serial.c
Normal file
94
arch/mips/lasat/serial.c
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Registration of Lasat UART platform device.
|
||||
*
|
||||
* Copyright (C) 2007 Brian Murphy <brian@murphy.dk>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <asm/lasat/serial.h>
|
||||
|
||||
static struct resource lasat_serial_res[2] __initdata;
|
||||
|
||||
static struct plat_serial8250_port lasat_serial8250_port[] = {
|
||||
{
|
||||
.iotype = UPIO_MEM,
|
||||
.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF |
|
||||
UPF_SKIP_TEST,
|
||||
},
|
||||
{},
|
||||
};
|
||||
|
||||
static __init int lasat_uart_add(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int retval;
|
||||
|
||||
pdev = platform_device_alloc("serial8250", -1);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
if (mips_machtype == MACH_LASAT_100) {
|
||||
lasat_serial_res[0].start = KSEG1ADDR(LASAT_UART_REGS_BASE_100);
|
||||
lasat_serial_res[0].end = lasat_serial_res[0].start + LASAT_UART_REGS_SHIFT_100 * 8 - 1;
|
||||
lasat_serial_res[0].flags = IORESOURCE_MEM;
|
||||
lasat_serial_res[1].start = LASATINT_UART_100;
|
||||
lasat_serial_res[1].end = LASATINT_UART_100;
|
||||
lasat_serial_res[1].flags = IORESOURCE_IRQ;
|
||||
|
||||
lasat_serial8250_port[0].mapbase = LASAT_UART_REGS_BASE_100;
|
||||
lasat_serial8250_port[0].uartclk = LASAT_BASE_BAUD_100 * 16;
|
||||
lasat_serial8250_port[0].regshift = LASAT_UART_REGS_SHIFT_100;
|
||||
lasat_serial8250_port[0].irq = LASATINT_UART_100;
|
||||
} else {
|
||||
lasat_serial_res[0].start = KSEG1ADDR(LASAT_UART_REGS_BASE_200);
|
||||
lasat_serial_res[0].end = lasat_serial_res[0].start + LASAT_UART_REGS_SHIFT_200 * 8 - 1;
|
||||
lasat_serial_res[0].flags = IORESOURCE_MEM;
|
||||
lasat_serial_res[1].start = LASATINT_UART_200;
|
||||
lasat_serial_res[1].end = LASATINT_UART_200;
|
||||
lasat_serial_res[1].flags = IORESOURCE_IRQ;
|
||||
|
||||
lasat_serial8250_port[0].mapbase = LASAT_UART_REGS_BASE_200;
|
||||
lasat_serial8250_port[0].uartclk = LASAT_BASE_BAUD_200 * 16;
|
||||
lasat_serial8250_port[0].regshift = LASAT_UART_REGS_SHIFT_200;
|
||||
lasat_serial8250_port[0].irq = LASATINT_UART_200;
|
||||
}
|
||||
|
||||
pdev->id = PLAT8250_DEV_PLATFORM;
|
||||
pdev->dev.platform_data = lasat_serial8250_port;
|
||||
|
||||
retval = platform_device_add_resources(pdev, lasat_serial_res, ARRAY_SIZE(lasat_serial_res));
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
retval = platform_device_add(pdev);
|
||||
if (retval)
|
||||
goto err_free_device;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_device:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return retval;
|
||||
}
|
||||
device_initcall(lasat_uart_add);
|
158
arch/mips/lasat/setup.c
Normal file
158
arch/mips/lasat/setup.c
Normal file
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Carsten Langgaard, carstenl@mips.com
|
||||
* Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved.
|
||||
*
|
||||
* Thomas Horsten <thh@lasat.com>
|
||||
* Copyright (C) 2000 LASAT Networks A/S.
|
||||
*
|
||||
* Brian Murphy <brian@murphy.dk>
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Lasat specific setup.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/tty.h>
|
||||
|
||||
#include <asm/time.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <asm/lasat/serial.h>
|
||||
|
||||
#ifdef CONFIG_PICVUE
|
||||
#include <linux/notifier.h>
|
||||
#endif
|
||||
|
||||
#include "ds1603.h"
|
||||
#include <asm/lasat/ds1603.h>
|
||||
#include <asm/lasat/picvue.h>
|
||||
#include <asm/lasat/eeprom.h>
|
||||
|
||||
#include "prom.h"
|
||||
|
||||
int lasat_command_line;
|
||||
void lasatint_init(void);
|
||||
|
||||
extern void lasat_reboot_setup(void);
|
||||
extern void pcisetup(void);
|
||||
extern void edhac_init(void *, void *, void *);
|
||||
extern void addrflt_init(void);
|
||||
|
||||
struct lasat_misc lasat_misc_info[N_MACHTYPES] = {
|
||||
{
|
||||
.reset_reg = (void *)KSEG1ADDR(0x1c840000),
|
||||
.flash_wp_reg = (void *)KSEG1ADDR(0x1c800000), 2
|
||||
}, {
|
||||
.reset_reg = (void *)KSEG1ADDR(0x11080000),
|
||||
.flash_wp_reg = (void *)KSEG1ADDR(0x11000000), 6
|
||||
}
|
||||
};
|
||||
|
||||
struct lasat_misc *lasat_misc;
|
||||
|
||||
#ifdef CONFIG_DS1603
|
||||
static struct ds_defs ds_defs[N_MACHTYPES] = {
|
||||
{ (void *)DS1603_REG_100, (void *)DS1603_REG_100,
|
||||
DS1603_RST_100, DS1603_CLK_100, DS1603_DATA_100,
|
||||
DS1603_DATA_SHIFT_100, 0, 0 },
|
||||
{ (void *)DS1603_REG_200, (void *)DS1603_DATA_REG_200,
|
||||
DS1603_RST_200, DS1603_CLK_200, DS1603_DATA_200,
|
||||
DS1603_DATA_READ_SHIFT_200, 1, 2000 }
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PICVUE
|
||||
#include "picvue.h"
|
||||
static struct pvc_defs pvc_defs[N_MACHTYPES] = {
|
||||
{ (void *)PVC_REG_100, PVC_DATA_SHIFT_100, PVC_DATA_M_100,
|
||||
PVC_E_100, PVC_RW_100, PVC_RS_100 },
|
||||
{ (void *)PVC_REG_200, PVC_DATA_SHIFT_200, PVC_DATA_M_200,
|
||||
PVC_E_200, PVC_RW_200, PVC_RS_200 }
|
||||
};
|
||||
#endif
|
||||
|
||||
static int lasat_panic_display(struct notifier_block *this,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
#ifdef CONFIG_PICVUE
|
||||
unsigned char *string = ptr;
|
||||
if (string == NULL)
|
||||
string = "Kernel Panic";
|
||||
pvc_dump_string(string);
|
||||
#endif
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int lasat_panic_prom_monitor(struct notifier_block *this,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
prom_monitor();
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block lasat_panic_block[] =
|
||||
{
|
||||
{
|
||||
.notifier_call = lasat_panic_display,
|
||||
.priority = INT_MAX
|
||||
}, {
|
||||
.notifier_call = lasat_panic_prom_monitor,
|
||||
.priority = INT_MIN
|
||||
}
|
||||
};
|
||||
|
||||
static void lasat_time_init(void)
|
||||
{
|
||||
mips_hpt_frequency = lasat_board_info.li_cpu_hz / 2;
|
||||
}
|
||||
|
||||
void __init plat_timer_setup(struct irqaction *irq)
|
||||
{
|
||||
change_c0_status(ST0_IM, IE_IRQ0 | IE_IRQ5);
|
||||
}
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
{
|
||||
int i;
|
||||
lasat_misc = &lasat_misc_info[mips_machtype];
|
||||
#ifdef CONFIG_PICVUE
|
||||
picvue = &pvc_defs[mips_machtype];
|
||||
#endif
|
||||
|
||||
/* Set up panic notifier */
|
||||
for (i = 0; i < ARRAY_SIZE(lasat_panic_block); i++)
|
||||
atomic_notifier_chain_register(&panic_notifier_list,
|
||||
&lasat_panic_block[i]);
|
||||
|
||||
lasat_reboot_setup();
|
||||
|
||||
board_time_init = lasat_time_init;
|
||||
|
||||
#ifdef CONFIG_DS1603
|
||||
ds1603 = &ds_defs[mips_machtype];
|
||||
rtc_mips_get_time = ds1603_read;
|
||||
rtc_mips_set_time = ds1603_set;
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_SERIAL_INIT
|
||||
serial_init();
|
||||
#endif
|
||||
|
||||
pr_info("Lasat specific initialization complete\n");
|
||||
}
|
454
arch/mips/lasat/sysctl.c
Normal file
454
arch/mips/lasat/sysctl.c
Normal file
@ -0,0 +1,454 @@
|
||||
/*
|
||||
* Thomas Horsten <thh@lasat.com>
|
||||
* Copyright (C) 2000 LASAT Networks A/S.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Routines specific to the LASAT boards
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <asm/lasat/lasat.h>
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/net.h>
|
||||
#include <linux/inet.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include "sysctl.h"
|
||||
#include "ds1603.h"
|
||||
|
||||
static DEFINE_MUTEX(lasat_info_mutex);
|
||||
|
||||
/* Strategy function to write EEPROM after changing string entry */
|
||||
int sysctl_lasatstring(ctl_table *table, int *name, int nlen,
|
||||
void *oldval, size_t *oldlenp,
|
||||
void *newval, size_t newlen)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = sysctl_string(table, name,
|
||||
nlen, oldval, oldlenp, newval, newlen);
|
||||
if (r < 0) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
if (newval && newlen)
|
||||
lasat_write_eeprom_info();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* And the same for proc */
|
||||
int proc_dolasatstring(ctl_table *table, int write, struct file *filp,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = proc_dostring(table, write, filp, buffer, lenp, ppos);
|
||||
if ((!write) || r) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
lasat_write_eeprom_info();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* proc function to write EEPROM after changing int entry */
|
||||
int proc_dolasatint(ctl_table *table, int write, struct file *filp,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
|
||||
if ((!write) || r) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
lasat_write_eeprom_info();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtctmp;
|
||||
|
||||
#ifdef CONFIG_DS1603
|
||||
/* proc function to read/write RealTime Clock */
|
||||
int proc_dolasatrtc(ctl_table *table, int write, struct file *filp,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
if (!write) {
|
||||
rtctmp = ds1603_read();
|
||||
/* check for time < 0 and set to 0 */
|
||||
if (rtctmp < 0)
|
||||
rtctmp = 0;
|
||||
}
|
||||
r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
|
||||
if ((!write) || r) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
ds1603_set(rtctmp);
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Sysctl for setting the IP addresses */
|
||||
int sysctl_lasat_intvec(ctl_table *table, int *name, int nlen,
|
||||
void *oldval, size_t *oldlenp,
|
||||
void *newval, size_t newlen)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
|
||||
if (r < 0) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
if (newval && newlen)
|
||||
lasat_write_eeprom_info();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DS1603
|
||||
/* Same for RTC */
|
||||
int sysctl_lasat_rtc(ctl_table *table, int *name, int nlen,
|
||||
void *oldval, size_t *oldlenp,
|
||||
void *newval, size_t newlen)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
rtctmp = ds1603_read();
|
||||
if (rtctmp < 0)
|
||||
rtctmp = 0;
|
||||
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
|
||||
if (r < 0) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
if (newval && newlen)
|
||||
ds1603_set(rtctmp);
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_INET
|
||||
static char lasat_bcastaddr[16];
|
||||
|
||||
void update_bcastaddr(void)
|
||||
{
|
||||
unsigned int ip;
|
||||
|
||||
ip = (lasat_board_info.li_eeprom_info.ipaddr &
|
||||
lasat_board_info.li_eeprom_info.netmask) |
|
||||
~lasat_board_info.li_eeprom_info.netmask;
|
||||
|
||||
sprintf(lasat_bcastaddr, "%d.%d.%d.%d",
|
||||
(ip) & 0xff,
|
||||
(ip >> 8) & 0xff,
|
||||
(ip >> 16) & 0xff,
|
||||
(ip >> 24) & 0xff);
|
||||
}
|
||||
|
||||
static char proc_lasat_ipbuf[32];
|
||||
|
||||
/* Parsing of IP address */
|
||||
int proc_lasat_ip(ctl_table *table, int write, struct file *filp,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
unsigned int ip;
|
||||
char *p, c;
|
||||
int len;
|
||||
|
||||
if (!table->data || !table->maxlen || !*lenp ||
|
||||
(*ppos && !write)) {
|
||||
*lenp = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
if (write) {
|
||||
len = 0;
|
||||
p = buffer;
|
||||
while (len < *lenp) {
|
||||
if (get_user(c, p++)) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return -EFAULT;
|
||||
}
|
||||
if (c == 0 || c == '\n')
|
||||
break;
|
||||
len++;
|
||||
}
|
||||
if (len >= sizeof(proc_lasat_ipbuf)-1)
|
||||
len = sizeof(proc_lasat_ipbuf) - 1;
|
||||
if (copy_from_user(proc_lasat_ipbuf, buffer, len)) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return -EFAULT;
|
||||
}
|
||||
proc_lasat_ipbuf[len] = 0;
|
||||
*ppos += *lenp;
|
||||
/* Now see if we can convert it to a valid IP */
|
||||
ip = in_aton(proc_lasat_ipbuf);
|
||||
*(unsigned int *)(table->data) = ip;
|
||||
lasat_write_eeprom_info();
|
||||
} else {
|
||||
ip = *(unsigned int *)(table->data);
|
||||
sprintf(proc_lasat_ipbuf, "%d.%d.%d.%d",
|
||||
(ip) & 0xff,
|
||||
(ip >> 8) & 0xff,
|
||||
(ip >> 16) & 0xff,
|
||||
(ip >> 24) & 0xff);
|
||||
len = strlen(proc_lasat_ipbuf);
|
||||
if (len > *lenp)
|
||||
len = *lenp;
|
||||
if (len)
|
||||
if (copy_to_user(buffer, proc_lasat_ipbuf, len)) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return -EFAULT;
|
||||
}
|
||||
if (len < *lenp) {
|
||||
if (put_user('\n', ((char *) buffer) + len)) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return -EFAULT;
|
||||
}
|
||||
len++;
|
||||
}
|
||||
*lenp = len;
|
||||
*ppos += len;
|
||||
}
|
||||
update_bcastaddr();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* defined(CONFIG_INET) */
|
||||
|
||||
static int sysctl_lasat_eeprom_value(ctl_table *table, int *name, int nlen,
|
||||
void *oldval, size_t *oldlenp,
|
||||
void *newval, size_t newlen)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
|
||||
if (r < 0) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
|
||||
if (newval && newlen) {
|
||||
if (name && *name == LASAT_PRID)
|
||||
lasat_board_info.li_eeprom_info.prid = *(int *)newval;
|
||||
|
||||
lasat_write_eeprom_info();
|
||||
lasat_init_board_info();
|
||||
}
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int proc_lasat_eeprom_value(ctl_table *table, int write, struct file *filp,
|
||||
void *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
int r;
|
||||
|
||||
mutex_lock(&lasat_info_mutex);
|
||||
r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
|
||||
if ((!write) || r) {
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
return r;
|
||||
}
|
||||
if (filp && filp->f_path.dentry) {
|
||||
if (!strcmp(filp->f_path.dentry->d_name.name, "prid"))
|
||||
lasat_board_info.li_eeprom_info.prid =
|
||||
lasat_board_info.li_prid;
|
||||
if (!strcmp(filp->f_path.dentry->d_name.name, "debugaccess"))
|
||||
lasat_board_info.li_eeprom_info.debugaccess =
|
||||
lasat_board_info.li_debugaccess;
|
||||
}
|
||||
lasat_write_eeprom_info();
|
||||
mutex_unlock(&lasat_info_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int lasat_boot_to_service;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
|
||||
static ctl_table lasat_table[] = {
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "cpu-hz",
|
||||
.data = &lasat_board_info.li_cpu_hz,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0444,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.strategy = &sysctl_intvec
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "bus-hz",
|
||||
.data = &lasat_board_info.li_bus_hz,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0444,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.strategy = &sysctl_intvec
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "bmid",
|
||||
.data = &lasat_board_info.li_bmid,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0444,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.strategy = &sysctl_intvec
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "prid",
|
||||
.data = &lasat_board_info.li_prid,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_lasat_eeprom_value,
|
||||
.strategy = &sysctl_lasat_eeprom_value
|
||||
},
|
||||
#ifdef CONFIG_INET
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "ipaddr",
|
||||
.data = &lasat_board_info.li_eeprom_info.ipaddr,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_lasat_ip,
|
||||
.strategy = &sysctl_lasat_intvec
|
||||
},
|
||||
{
|
||||
.ctl_name = LASAT_NETMASK,
|
||||
.procname = "netmask",
|
||||
.data = &lasat_board_info.li_eeprom_info.netmask,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_lasat_ip,
|
||||
.strategy = &sysctl_lasat_intvec
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "bcastaddr",
|
||||
.data = &lasat_bcastaddr,
|
||||
.maxlen = sizeof(lasat_bcastaddr),
|
||||
.mode = 0600,
|
||||
.proc_handler = &proc_dostring,
|
||||
.strategy = &sysctl_string
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "passwd_hash",
|
||||
.data = &lasat_board_info.li_eeprom_info.passwd_hash,
|
||||
.maxlen =
|
||||
sizeof(lasat_board_info.li_eeprom_info.passwd_hash),
|
||||
.mode = 0600,
|
||||
.proc_handler = &proc_dolasatstring,
|
||||
.strategy = &sysctl_lasatstring
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "boot-service",
|
||||
.data = &lasat_boot_to_service,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.strategy = &sysctl_intvec
|
||||
},
|
||||
#ifdef CONFIG_DS1603
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "rtc",
|
||||
.data = &rtctmp,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dolasatrtc,
|
||||
.strategy = &sysctl_lasat_rtc
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "namestr",
|
||||
.data = &lasat_board_info.li_namestr,
|
||||
.maxlen = sizeof(lasat_board_info.li_namestr),
|
||||
.mode = 0444,
|
||||
.proc_handler = &proc_dostring,
|
||||
.strategy = &sysctl_string
|
||||
},
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "typestr",
|
||||
.data = &lasat_board_info.li_typestr,
|
||||
.maxlen = sizeof(lasat_board_info.li_typestr),
|
||||
.mode = 0444,
|
||||
.proc_handler = &proc_dostring,
|
||||
.strategy = &sysctl_string
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static ctl_table lasat_root_table[] = {
|
||||
{
|
||||
.ctl_name = CTL_UNNUMBERED,
|
||||
.procname = "lasat",
|
||||
.mode = 0555,
|
||||
.child = lasat_table
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init lasat_register_sysctl(void)
|
||||
{
|
||||
struct ctl_table_header *lasat_table_header;
|
||||
|
||||
lasat_table_header =
|
||||
register_sysctl_table(lasat_root_table);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
__initcall(lasat_register_sysctl);
|
||||
#endif /* CONFIG_SYSCTL */
|
24
arch/mips/lasat/sysctl.h
Normal file
24
arch/mips/lasat/sysctl.h
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* LASAT sysctl values
|
||||
*/
|
||||
|
||||
#ifndef _LASAT_SYSCTL_H
|
||||
#define _LASAT_SYSCTL_H
|
||||
|
||||
/* /proc/sys/lasat */
|
||||
enum {
|
||||
LASAT_CPU_HZ = 1,
|
||||
LASAT_BUS_HZ,
|
||||
LASAT_MODEL,
|
||||
LASAT_PRID,
|
||||
LASAT_IPADDR,
|
||||
LASAT_NETMASK,
|
||||
LASAT_BCAST,
|
||||
LASAT_PASSWORD,
|
||||
LASAT_SBOOT,
|
||||
LASAT_RTC,
|
||||
LASAT_NAMESTR,
|
||||
LASAT_TYPESTR,
|
||||
};
|
||||
|
||||
#endif /* _LASAT_SYSCTL_H */
|
@ -10,6 +10,7 @@ obj-y += pci.o
|
||||
obj-$(CONFIG_MIPS_BONITO64) += ops-bonito64.o
|
||||
obj-$(CONFIG_PCI_GT64XXX_PCI0) += ops-gt64xxx_pci0.o
|
||||
obj-$(CONFIG_MIPS_MSC) += ops-msc.o
|
||||
obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o
|
||||
obj-$(CONFIG_MIPS_TX3927) += ops-tx3927.o
|
||||
obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o
|
||||
obj-$(CONFIG_NEC_CMBVR4133) += fixup-vr4133.o
|
||||
@ -19,6 +20,7 @@ obj-$(CONFIG_MARKEINS) += ops-emma2rh.o pci-emma2rh.o fixup-emma2rh.o
|
||||
# These are still pretty much in the old state, watch, go blind.
|
||||
#
|
||||
obj-$(CONFIG_BASLER_EXCITE) += ops-titan.o pci-excite.o fixup-excite.o
|
||||
obj-$(CONFIG_LASAT) += pci-lasat.o
|
||||
obj-$(CONFIG_MIPS_ATLAS) += fixup-atlas.o
|
||||
obj-$(CONFIG_MIPS_COBALT) += fixup-cobalt.o
|
||||
obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o
|
||||
|
147
arch/mips/pci/ops-nile4.c
Normal file
147
arch/mips/pci/ops-nile4.c
Normal file
@ -0,0 +1,147 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <asm/bootinfo.h>
|
||||
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <asm/gt64120.h>
|
||||
#include <asm/nile4.h>
|
||||
|
||||
#define PCI_ACCESS_READ 0
|
||||
#define PCI_ACCESS_WRITE 1
|
||||
|
||||
#define LO(reg) (reg / 4)
|
||||
#define HI(reg) (reg / 4 + 1)
|
||||
|
||||
volatile unsigned long *const vrc_pciregs = (void *) Vrc5074_BASE;
|
||||
|
||||
static DEFINE_SPINLOCK(nile4_pci_lock);
|
||||
|
||||
static int nile4_pcibios_config_access(unsigned char access_type,
|
||||
struct pci_bus *bus, unsigned int devfn, int where, u32 *val)
|
||||
{
|
||||
unsigned char busnum = bus->number;
|
||||
u32 adr, mask, err;
|
||||
|
||||
if ((busnum == 0) && (PCI_SLOT(devfn) > 8))
|
||||
/* The addressing scheme chosen leaves room for just
|
||||
* 8 devices on the first busnum (besides the PCI
|
||||
* controller itself) */
|
||||
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||
|
||||
if ((busnum == 0) && (devfn == PCI_DEVFN(0, 0))) {
|
||||
/* Access controller registers directly */
|
||||
if (access_type == PCI_ACCESS_WRITE) {
|
||||
vrc_pciregs[(0x200 + where) >> 2] = *val;
|
||||
} else {
|
||||
*val = vrc_pciregs[(0x200 + where) >> 2];
|
||||
}
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/* Temporarily map PCI Window 1 to config space */
|
||||
mask = vrc_pciregs[LO(NILE4_PCIINIT1)];
|
||||
vrc_pciregs[LO(NILE4_PCIINIT1)] = 0x0000001a | (busnum ? 0x200 : 0);
|
||||
|
||||
/* Clear PCI Error register. This also clears the Error Type
|
||||
* bits in the Control register */
|
||||
vrc_pciregs[LO(NILE4_PCIERR)] = 0;
|
||||
vrc_pciregs[HI(NILE4_PCIERR)] = 0;
|
||||
|
||||
/* Setup address */
|
||||
if (busnum == 0)
|
||||
adr =
|
||||
KSEG1ADDR(PCI_WINDOW1) +
|
||||
((1 << (PCI_SLOT(devfn) + 15)) | (PCI_FUNC(devfn) << 8)
|
||||
| (where & ~3));
|
||||
else
|
||||
adr = KSEG1ADDR(PCI_WINDOW1) | (busnum << 16) | (devfn << 8) |
|
||||
(where & ~3);
|
||||
|
||||
if (access_type == PCI_ACCESS_WRITE)
|
||||
*(u32 *) adr = *val;
|
||||
else
|
||||
*val = *(u32 *) adr;
|
||||
|
||||
/* Check for master or target abort */
|
||||
err = (vrc_pciregs[HI(NILE4_PCICTRL)] >> 5) & 0x7;
|
||||
|
||||
/* Restore PCI Window 1 */
|
||||
vrc_pciregs[LO(NILE4_PCIINIT1)] = mask;
|
||||
|
||||
if (err)
|
||||
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
static int nile4_pcibios_read(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, int size, u32 *val)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 data = 0;
|
||||
int err;
|
||||
|
||||
if ((size == 2) && (where & 1))
|
||||
return PCIBIOS_BAD_REGISTER_NUMBER;
|
||||
else if ((size == 4) && (where & 3))
|
||||
return PCIBIOS_BAD_REGISTER_NUMBER;
|
||||
|
||||
spin_lock_irqsave(&nile4_pci_lock, flags);
|
||||
err = nile4_pcibios_config_access(PCI_ACCESS_READ, bus, devfn, where,
|
||||
&data);
|
||||
spin_unlock_irqrestore(&nile4_pci_lock, flags);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (size == 1)
|
||||
*val = (data >> ((where & 3) << 3)) & 0xff;
|
||||
else if (size == 2)
|
||||
*val = (data >> ((where & 3) << 3)) & 0xffff;
|
||||
else
|
||||
*val = data;
|
||||
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
static int nile4_pcibios_write(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, int size, u32 val)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 data = 0;
|
||||
int err;
|
||||
|
||||
if ((size == 2) && (where & 1))
|
||||
return PCIBIOS_BAD_REGISTER_NUMBER;
|
||||
else if ((size == 4) && (where & 3))
|
||||
return PCIBIOS_BAD_REGISTER_NUMBER;
|
||||
|
||||
spin_lock_irqsave(&nile4_pci_lock, flags);
|
||||
err = nile4_pcibios_config_access(PCI_ACCESS_READ, bus, devfn, where,
|
||||
&data);
|
||||
spin_unlock_irqrestore(&nile4_pci_lock, flags);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (size == 1)
|
||||
data = (data & ~(0xff << ((where & 3) << 3))) |
|
||||
(val << ((where & 3) << 3));
|
||||
else if (size == 2)
|
||||
data = (data & ~(0xffff << ((where & 3) << 3))) |
|
||||
(val << ((where & 3) << 3));
|
||||
else
|
||||
data = val;
|
||||
|
||||
if (nile4_pcibios_config_access
|
||||
(PCI_ACCESS_WRITE, bus, devfn, where, &data))
|
||||
return -1;
|
||||
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
struct pci_ops nile4_pci_ops = {
|
||||
.read = nile4_pcibios_read,
|
||||
.write = nile4_pcibios_write,
|
||||
};
|
91
arch/mips/pci/pci-lasat.c
Normal file
91
arch/mips/pci/pci-lasat.c
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2000, 2001, 04 Keith M Wesolowski
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/bootinfo.h>
|
||||
|
||||
extern struct pci_ops nile4_pci_ops;
|
||||
extern struct pci_ops gt64xxx_pci0_ops;
|
||||
static struct resource lasat_pci_mem_resource = {
|
||||
.name = "LASAT PCI MEM",
|
||||
.start = 0x18000000,
|
||||
.end = 0x19ffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct resource lasat_pci_io_resource = {
|
||||
.name = "LASAT PCI IO",
|
||||
.start = 0x1a000000,
|
||||
.end = 0x1bffffff,
|
||||
.flags = IORESOURCE_IO,
|
||||
};
|
||||
|
||||
static struct pci_controller lasat_pci_controller = {
|
||||
.mem_resource = &lasat_pci_mem_resource,
|
||||
.io_resource = &lasat_pci_io_resource,
|
||||
};
|
||||
|
||||
static int __init lasat_pci_setup(void)
|
||||
{
|
||||
printk(KERN_DEBUG "PCI: starting\n");
|
||||
|
||||
switch (mips_machtype) {
|
||||
case MACH_LASAT_100:
|
||||
lasat_pci_controller.pci_ops = >64xxx_pci0_ops;
|
||||
break;
|
||||
case MACH_LASAT_200:
|
||||
lasat_pci_controller.pci_ops = &nile4_pci_ops;
|
||||
break;
|
||||
default:
|
||||
panic("pcibios_init: mips_machtype incorrect");
|
||||
}
|
||||
|
||||
register_pci_controller(&lasat_pci_controller);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(lasat_pci_setup);
|
||||
|
||||
#define LASATINT_ETH1 0
|
||||
#define LASATINT_ETH0 1
|
||||
#define LASATINT_HDC 2
|
||||
#define LASATINT_COMP 3
|
||||
#define LASATINT_HDLC 4
|
||||
#define LASATINT_PCIA 5
|
||||
#define LASATINT_PCIB 6
|
||||
#define LASATINT_PCIC 7
|
||||
#define LASATINT_PCID 8
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
switch (slot) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
return LASATINT_PCIA + (((slot-1) + (pin-1)) % 4);
|
||||
case 4:
|
||||
return LASATINT_ETH1; /* Ethernet 1 (LAN 2) */
|
||||
case 5:
|
||||
return LASATINT_ETH0; /* Ethernet 0 (LAN 1) */
|
||||
case 6:
|
||||
return LASATINT_HDC; /* IDE controller */
|
||||
default:
|
||||
return 0xff; /* Illegal */
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Do platform specific device initialization at pci_enable_device() time */
|
||||
int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
@ -174,6 +174,13 @@
|
||||
#define MACH_GROUP_HP_LJ 20 /* Hewlett Packard LaserJet */
|
||||
#define MACH_HP_LASERJET 1
|
||||
|
||||
/*
|
||||
* Valid machtype for group LASAT
|
||||
*/
|
||||
#define MACH_GROUP_LASAT 21
|
||||
#define MACH_LASAT_100 0 /* Masquerade II/SP100/SP50/SP25 */
|
||||
#define MACH_LASAT_200 1 /* Masquerade PRO/SP200 */
|
||||
|
||||
/*
|
||||
* Valid machtype for group TITAN
|
||||
*/
|
||||
|
18
include/asm-mips/lasat/ds1603.h
Normal file
18
include/asm-mips/lasat/ds1603.h
Normal file
@ -0,0 +1,18 @@
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
/* Lasat 100 */
|
||||
#define DS1603_REG_100 (KSEG1ADDR(0x1c810000))
|
||||
#define DS1603_RST_100 (1 << 2)
|
||||
#define DS1603_CLK_100 (1 << 0)
|
||||
#define DS1603_DATA_SHIFT_100 1
|
||||
#define DS1603_DATA_100 (1 << DS1603_DATA_SHIFT_100)
|
||||
|
||||
/* Lasat 200 */
|
||||
#define DS1603_REG_200 (KSEG1ADDR(0x11000000))
|
||||
#define DS1603_RST_200 (1 << 3)
|
||||
#define DS1603_CLK_200 (1 << 4)
|
||||
#define DS1603_DATA_200 (1 << 5)
|
||||
|
||||
#define DS1603_DATA_REG_200 (DS1603_REG_200 + 0x10000)
|
||||
#define DS1603_DATA_READ_SHIFT_200 9
|
||||
#define DS1603_DATA_READ_200 (1 << DS1603_DATA_READ_SHIFT_200)
|
17
include/asm-mips/lasat/eeprom.h
Normal file
17
include/asm-mips/lasat/eeprom.h
Normal file
@ -0,0 +1,17 @@
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
/* lasat 100 */
|
||||
#define AT93C_REG_100 KSEG1ADDR(0x1c810000)
|
||||
#define AT93C_RDATA_REG_100 AT93C_REG_100
|
||||
#define AT93C_RDATA_SHIFT_100 4
|
||||
#define AT93C_WDATA_SHIFT_100 4
|
||||
#define AT93C_CS_M_100 (1 << 5)
|
||||
#define AT93C_CLK_M_100 (1 << 3)
|
||||
|
||||
/* lasat 200 */
|
||||
#define AT93C_REG_200 KSEG1ADDR(0x11000000)
|
||||
#define AT93C_RDATA_REG_200 (AT93C_REG_200+0x10000)
|
||||
#define AT93C_RDATA_SHIFT_200 8
|
||||
#define AT93C_WDATA_SHIFT_200 2
|
||||
#define AT93C_CS_M_200 (1 << 0)
|
||||
#define AT93C_CLK_M_200 (1 << 1)
|
22
include/asm-mips/lasat/head.h
Normal file
22
include/asm-mips/lasat/head.h
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Image header stuff
|
||||
*/
|
||||
#ifndef _HEAD_H
|
||||
#define _HEAD_H
|
||||
|
||||
#define LASAT_K_MAGIC0_VAL 0xfedeabba
|
||||
#define LASAT_K_MAGIC1_VAL 0x00bedead
|
||||
|
||||
#ifndef _LANGUAGE_ASSEMBLY
|
||||
#include <linux/types.h>
|
||||
struct bootloader_header {
|
||||
u32 magic[2];
|
||||
u32 version;
|
||||
u32 image_start;
|
||||
u32 image_size;
|
||||
u32 kernel_start;
|
||||
u32 kernel_entry;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* _HEAD_H */
|
256
include/asm-mips/lasat/lasat.h
Normal file
256
include/asm-mips/lasat/lasat.h
Normal file
@ -0,0 +1,256 @@
|
||||
/*
|
||||
* lasat.h
|
||||
*
|
||||
* Thomas Horsten <thh@lasat.com>
|
||||
* Copyright (C) 2000 LASAT Networks A/S.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Configuration for LASAT boards, loads the appropriate include files.
|
||||
*/
|
||||
#ifndef _LASAT_H
|
||||
#define _LASAT_H
|
||||
|
||||
#ifndef _LANGUAGE_ASSEMBLY
|
||||
|
||||
extern struct lasat_misc {
|
||||
volatile u32 *reset_reg;
|
||||
volatile u32 *flash_wp_reg;
|
||||
u32 flash_wp_bit;
|
||||
} *lasat_misc;
|
||||
|
||||
enum lasat_mtdparts {
|
||||
LASAT_MTD_BOOTLOADER,
|
||||
LASAT_MTD_SERVICE,
|
||||
LASAT_MTD_NORMAL,
|
||||
LASAT_MTD_CONFIG,
|
||||
LASAT_MTD_FS,
|
||||
LASAT_MTD_LAST
|
||||
};
|
||||
|
||||
/*
|
||||
* The format of the data record in the EEPROM.
|
||||
* See Documentation/LASAT/eeprom.txt for a detailed description
|
||||
* of the fields in this struct, and the LASAT Hardware Configuration
|
||||
* field specification for a detailed description of the config
|
||||
* field.
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
|
||||
#define LASAT_EEPROM_VERSION 7
|
||||
struct lasat_eeprom_struct {
|
||||
unsigned int version;
|
||||
unsigned int cfg[3];
|
||||
unsigned char hwaddr[6];
|
||||
unsigned char print_partno[12];
|
||||
unsigned char term0;
|
||||
unsigned char print_serial[14];
|
||||
unsigned char term1;
|
||||
unsigned char prod_partno[12];
|
||||
unsigned char term2;
|
||||
unsigned char prod_serial[14];
|
||||
unsigned char term3;
|
||||
unsigned char passwd_hash[16];
|
||||
unsigned char pwdnull;
|
||||
unsigned char vendid;
|
||||
unsigned char ts_ref;
|
||||
unsigned char ts_signoff;
|
||||
unsigned char reserved[11];
|
||||
unsigned char debugaccess;
|
||||
unsigned short prid;
|
||||
unsigned int serviceflag;
|
||||
unsigned int ipaddr;
|
||||
unsigned int netmask;
|
||||
unsigned int crc32;
|
||||
};
|
||||
|
||||
struct lasat_eeprom_struct_pre7 {
|
||||
unsigned int version;
|
||||
unsigned int flags[3];
|
||||
unsigned char hwaddr0[6];
|
||||
unsigned char hwaddr1[6];
|
||||
unsigned char print_partno[9];
|
||||
unsigned char term0;
|
||||
unsigned char print_serial[14];
|
||||
unsigned char term1;
|
||||
unsigned char prod_partno[9];
|
||||
unsigned char term2;
|
||||
unsigned char prod_serial[14];
|
||||
unsigned char term3;
|
||||
unsigned char passwd_hash[24];
|
||||
unsigned char pwdnull;
|
||||
unsigned char vendor;
|
||||
unsigned char ts_ref;
|
||||
unsigned char ts_signoff;
|
||||
unsigned char reserved[6];
|
||||
unsigned int writecount;
|
||||
unsigned int ipaddr;
|
||||
unsigned int netmask;
|
||||
unsigned int crc32;
|
||||
};
|
||||
|
||||
/* Configuration descriptor encoding - see the doc for details */
|
||||
|
||||
#define LASAT_W0_DSCTYPE(v) (((v)) & 0xf)
|
||||
#define LASAT_W0_BMID(v) (((v) >> 0x04) & 0xf)
|
||||
#define LASAT_W0_CPUTYPE(v) (((v) >> 0x08) & 0xf)
|
||||
#define LASAT_W0_BUSSPEED(v) (((v) >> 0x0c) & 0xf)
|
||||
#define LASAT_W0_CPUCLK(v) (((v) >> 0x10) & 0xf)
|
||||
#define LASAT_W0_SDRAMBANKSZ(v) (((v) >> 0x14) & 0xf)
|
||||
#define LASAT_W0_SDRAMBANKS(v) (((v) >> 0x18) & 0xf)
|
||||
#define LASAT_W0_L2CACHE(v) (((v) >> 0x1c) & 0xf)
|
||||
|
||||
#define LASAT_W1_EDHAC(v) (((v)) & 0xf)
|
||||
#define LASAT_W1_HIFN(v) (((v) >> 0x04) & 0x1)
|
||||
#define LASAT_W1_ISDN(v) (((v) >> 0x05) & 0x1)
|
||||
#define LASAT_W1_IDE(v) (((v) >> 0x06) & 0x1)
|
||||
#define LASAT_W1_HDLC(v) (((v) >> 0x07) & 0x1)
|
||||
#define LASAT_W1_USVERSION(v) (((v) >> 0x08) & 0x1)
|
||||
#define LASAT_W1_4MACS(v) (((v) >> 0x09) & 0x1)
|
||||
#define LASAT_W1_EXTSERIAL(v) (((v) >> 0x0a) & 0x1)
|
||||
#define LASAT_W1_FLASHSIZE(v) (((v) >> 0x0c) & 0xf)
|
||||
#define LASAT_W1_PCISLOTS(v) (((v) >> 0x10) & 0xf)
|
||||
#define LASAT_W1_PCI1OPT(v) (((v) >> 0x14) & 0xf)
|
||||
#define LASAT_W1_PCI2OPT(v) (((v) >> 0x18) & 0xf)
|
||||
#define LASAT_W1_PCI3OPT(v) (((v) >> 0x1c) & 0xf)
|
||||
|
||||
/* Routines specific to LASAT boards */
|
||||
|
||||
#define LASAT_BMID_MASQUERADE2 0
|
||||
#define LASAT_BMID_MASQUERADEPRO 1
|
||||
#define LASAT_BMID_SAFEPIPE25 2
|
||||
#define LASAT_BMID_SAFEPIPE50 3
|
||||
#define LASAT_BMID_SAFEPIPE100 4
|
||||
#define LASAT_BMID_SAFEPIPE5000 5
|
||||
#define LASAT_BMID_SAFEPIPE7000 6
|
||||
#define LASAT_BMID_SAFEPIPE1000 7
|
||||
#if 0
|
||||
#define LASAT_BMID_SAFEPIPE30 7
|
||||
#define LASAT_BMID_SAFEPIPE5100 8
|
||||
#define LASAT_BMID_SAFEPIPE7100 9
|
||||
#endif
|
||||
#define LASAT_BMID_UNKNOWN 0xf
|
||||
#define LASAT_MAX_BMID_NAMES 9 /* no larger than 15! */
|
||||
|
||||
#define LASAT_HAS_EDHAC (1 << 0)
|
||||
#define LASAT_EDHAC_FAST (1 << 1)
|
||||
#define LASAT_HAS_EADI (1 << 2)
|
||||
#define LASAT_HAS_HIFN (1 << 3)
|
||||
#define LASAT_HAS_ISDN (1 << 4)
|
||||
#define LASAT_HAS_LEASEDLINE_IF (1 << 5)
|
||||
#define LASAT_HAS_HDC (1 << 6)
|
||||
|
||||
#define LASAT_PRID_MASQUERADE2 0
|
||||
#define LASAT_PRID_MASQUERADEPRO 1
|
||||
#define LASAT_PRID_SAFEPIPE25 2
|
||||
#define LASAT_PRID_SAFEPIPE50 3
|
||||
#define LASAT_PRID_SAFEPIPE100 4
|
||||
#define LASAT_PRID_SAFEPIPE5000 5
|
||||
#define LASAT_PRID_SAFEPIPE7000 6
|
||||
#define LASAT_PRID_SAFEPIPE30 7
|
||||
#define LASAT_PRID_SAFEPIPE5100 8
|
||||
#define LASAT_PRID_SAFEPIPE7100 9
|
||||
|
||||
#define LASAT_PRID_SAFEPIPE1110 10
|
||||
#define LASAT_PRID_SAFEPIPE3020 11
|
||||
#define LASAT_PRID_SAFEPIPE3030 12
|
||||
#define LASAT_PRID_SAFEPIPE5020 13
|
||||
#define LASAT_PRID_SAFEPIPE5030 14
|
||||
#define LASAT_PRID_SAFEPIPE1120 15
|
||||
#define LASAT_PRID_SAFEPIPE1130 16
|
||||
#define LASAT_PRID_SAFEPIPE6010 17
|
||||
#define LASAT_PRID_SAFEPIPE6110 18
|
||||
#define LASAT_PRID_SAFEPIPE6210 19
|
||||
#define LASAT_PRID_SAFEPIPE1020 20
|
||||
#define LASAT_PRID_SAFEPIPE1040 21
|
||||
#define LASAT_PRID_SAFEPIPE1060 22
|
||||
|
||||
struct lasat_info {
|
||||
unsigned int li_cpu_hz;
|
||||
unsigned int li_bus_hz;
|
||||
unsigned int li_bmid;
|
||||
unsigned int li_memsize;
|
||||
unsigned int li_flash_size;
|
||||
unsigned int li_prid;
|
||||
unsigned char li_bmstr[16];
|
||||
unsigned char li_namestr[32];
|
||||
unsigned char li_typestr[16];
|
||||
/* Info on the Flash layout */
|
||||
unsigned int li_flash_base;
|
||||
unsigned long li_flashpart_base[LASAT_MTD_LAST];
|
||||
unsigned long li_flashpart_size[LASAT_MTD_LAST];
|
||||
struct lasat_eeprom_struct li_eeprom_info;
|
||||
unsigned int li_eeprom_upgrade_version;
|
||||
unsigned int li_debugaccess;
|
||||
};
|
||||
|
||||
extern struct lasat_info lasat_board_info;
|
||||
|
||||
static inline unsigned long lasat_flash_partition_start(int partno)
|
||||
{
|
||||
if (partno < 0 || partno >= LASAT_MTD_LAST)
|
||||
return 0;
|
||||
|
||||
return lasat_board_info.li_flashpart_base[partno];
|
||||
}
|
||||
|
||||
static inline unsigned long lasat_flash_partition_size(int partno)
|
||||
{
|
||||
if (partno < 0 || partno >= LASAT_MTD_LAST)
|
||||
return 0;
|
||||
|
||||
return lasat_board_info.li_flashpart_size[partno];
|
||||
}
|
||||
|
||||
/* Called from setup() to initialize the global board_info struct */
|
||||
extern int lasat_init_board_info(void);
|
||||
|
||||
/* Write the modified EEPROM info struct */
|
||||
extern void lasat_write_eeprom_info(void);
|
||||
|
||||
#define N_MACHTYPES 2
|
||||
/* for calibration of delays */
|
||||
|
||||
/* the lasat_ndelay function is necessary because it is used at an
|
||||
* early stage of the boot process where ndelay is not calibrated.
|
||||
* It is used for the bit-banging rtc and eeprom drivers */
|
||||
|
||||
#include <linux/delay.h>
|
||||
|
||||
/* calculating with the slowest board with 100 MHz clock */
|
||||
#define LASAT_100_DIVIDER 20
|
||||
/* All 200's run at 250 MHz clock */
|
||||
#define LASAT_200_DIVIDER 8
|
||||
|
||||
extern unsigned int lasat_ndelay_divider;
|
||||
|
||||
static inline void lasat_ndelay(unsigned int ns)
|
||||
{
|
||||
__delay(ns / lasat_ndelay_divider);
|
||||
}
|
||||
|
||||
#endif /* !defined (_LANGUAGE_ASSEMBLY) */
|
||||
|
||||
#define LASAT_SERVICEMODE_MAGIC_1 0xdeadbeef
|
||||
#define LASAT_SERVICEMODE_MAGIC_2 0xfedeabba
|
||||
|
||||
/* Lasat 100 boards */
|
||||
#define LASAT_GT_BASE (KSEG1ADDR(0x14000000))
|
||||
|
||||
/* Lasat 200 boards */
|
||||
#define Vrc5074_PHYS_BASE 0x1fa00000
|
||||
#define Vrc5074_BASE (KSEG1ADDR(Vrc5074_PHYS_BASE))
|
||||
#define PCI_WINDOW1 0x1a000000
|
||||
|
||||
#endif /* _LASAT_H */
|
12
include/asm-mips/lasat/lasatint.h
Normal file
12
include/asm-mips/lasat/lasatint.h
Normal file
@ -0,0 +1,12 @@
|
||||
#define LASATINT_END 16
|
||||
|
||||
/* lasat 100 */
|
||||
#define LASAT_INT_STATUS_REG_100 (KSEG1ADDR(0x1c880000))
|
||||
#define LASAT_INT_MASK_REG_100 (KSEG1ADDR(0x1c890000))
|
||||
#define LASATINT_MASK_SHIFT_100 0
|
||||
|
||||
/* lasat 200 */
|
||||
#define LASAT_INT_STATUS_REG_200 (KSEG1ADDR(0x1104003c))
|
||||
#define LASAT_INT_MASK_REG_200 (KSEG1ADDR(0x1104003c))
|
||||
#define LASATINT_MASK_SHIFT_200 16
|
||||
|
15
include/asm-mips/lasat/picvue.h
Normal file
15
include/asm-mips/lasat/picvue.h
Normal file
@ -0,0 +1,15 @@
|
||||
/* Lasat 100 */
|
||||
#define PVC_REG_100 KSEG1ADDR(0x1c820000)
|
||||
#define PVC_DATA_SHIFT_100 0
|
||||
#define PVC_DATA_M_100 0xFF
|
||||
#define PVC_E_100 (1 << 8)
|
||||
#define PVC_RW_100 (1 << 9)
|
||||
#define PVC_RS_100 (1 << 10)
|
||||
|
||||
/* Lasat 200 */
|
||||
#define PVC_REG_200 KSEG1ADDR(0x11000000)
|
||||
#define PVC_DATA_SHIFT_200 24
|
||||
#define PVC_DATA_M_200 (0xFF << PVC_DATA_SHIFT_200)
|
||||
#define PVC_E_200 (1 << 16)
|
||||
#define PVC_RW_200 (1 << 17)
|
||||
#define PVC_RS_200 (1 << 18)
|
13
include/asm-mips/lasat/serial.h
Normal file
13
include/asm-mips/lasat/serial.h
Normal file
@ -0,0 +1,13 @@
|
||||
#include <asm/lasat/lasat.h>
|
||||
|
||||
/* Lasat 100 boards serial configuration */
|
||||
#define LASAT_BASE_BAUD_100 (7372800 / 16)
|
||||
#define LASAT_UART_REGS_BASE_100 0x1c8b0000
|
||||
#define LASAT_UART_REGS_SHIFT_100 2
|
||||
#define LASATINT_UART_100 8
|
||||
|
||||
/* * LASAT 200 boards serial configuration */
|
||||
#define LASAT_BASE_BAUD_200 (100000000 / 16 / 12)
|
||||
#define LASAT_UART_REGS_BASE_200 (Vrc5074_PHYS_BASE + 0x0300)
|
||||
#define LASAT_UART_REGS_SHIFT_200 3
|
||||
#define LASATINT_UART_200 13
|
27
include/asm-mips/mach-lasat/mach-gt64120.h
Normal file
27
include/asm-mips/mach-lasat/mach-gt64120.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* This is a direct copy of the ev96100.h file, with a global
|
||||
* search and replace. The numbers are the same.
|
||||
*
|
||||
* The reason I'm duplicating this is so that the 64120/96100
|
||||
* defines won't be confusing in the source code.
|
||||
*/
|
||||
#ifndef _ASM_GT64120_LASAT_GT64120_DEP_H
|
||||
#define _ASM_GT64120_LASAT_GT64120_DEP_H
|
||||
|
||||
/*
|
||||
* GT64120 config space base address on Lasat 100
|
||||
*/
|
||||
#define GT64120_BASE (KSEG1ADDR(0x14000000))
|
||||
|
||||
/*
|
||||
* PCI Bus allocation
|
||||
*
|
||||
* (Guessing ...)
|
||||
*/
|
||||
#define GT_PCI_MEM_BASE 0x12000000UL
|
||||
#define GT_PCI_MEM_SIZE 0x02000000UL
|
||||
#define GT_PCI_IO_BASE 0x10000000UL
|
||||
#define GT_PCI_IO_SIZE 0x02000000UL
|
||||
#define GT_ISA_IO_BASE PCI_IO_BASE
|
||||
|
||||
#endif /* _ASM_GT64120_LASAT_GT64120_DEP_H */
|
310
include/asm-mips/nile4.h
Normal file
310
include/asm-mips/nile4.h
Normal file
@ -0,0 +1,310 @@
|
||||
/*
|
||||
* asm-mips/nile4.h -- NEC Vrc-5074 Nile 4 definitions
|
||||
*
|
||||
* Copyright (C) 2000 Geert Uytterhoeven <geert@sonycom.com>
|
||||
* Sony Software Development Center Europe (SDCE), Brussels
|
||||
*
|
||||
* This file is based on the following documentation:
|
||||
*
|
||||
* NEC Vrc 5074 System Controller Data Sheet, June 1998
|
||||
*/
|
||||
|
||||
#ifndef _ASM_NILE4_H
|
||||
#define _ASM_NILE4_H
|
||||
|
||||
#define NILE4_BASE 0xbfa00000
|
||||
#define NILE4_SIZE 0x00200000 /* 2 MB */
|
||||
|
||||
|
||||
/*
|
||||
* Physical Device Address Registers (PDARs)
|
||||
*/
|
||||
|
||||
#define NILE4_SDRAM0 0x0000 /* SDRAM Bank 0 [R/W] */
|
||||
#define NILE4_SDRAM1 0x0008 /* SDRAM Bank 1 [R/W] */
|
||||
#define NILE4_DCS2 0x0010 /* Device Chip-Select 2 [R/W] */
|
||||
#define NILE4_DCS3 0x0018 /* Device Chip-Select 3 [R/W] */
|
||||
#define NILE4_DCS4 0x0020 /* Device Chip-Select 4 [R/W] */
|
||||
#define NILE4_DCS5 0x0028 /* Device Chip-Select 5 [R/W] */
|
||||
#define NILE4_DCS6 0x0030 /* Device Chip-Select 6 [R/W] */
|
||||
#define NILE4_DCS7 0x0038 /* Device Chip-Select 7 [R/W] */
|
||||
#define NILE4_DCS8 0x0040 /* Device Chip-Select 8 [R/W] */
|
||||
#define NILE4_PCIW0 0x0060 /* PCI Address Window 0 [R/W] */
|
||||
#define NILE4_PCIW1 0x0068 /* PCI Address Window 1 [R/W] */
|
||||
#define NILE4_INTCS 0x0070 /* Controller Internal Registers and Devices */
|
||||
/* [R/W] */
|
||||
#define NILE4_BOOTCS 0x0078 /* Boot ROM Chip-Select [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* CPU Interface Registers
|
||||
*/
|
||||
|
||||
#define NILE4_CPUSTAT 0x0080 /* CPU Status [R/W] */
|
||||
#define NILE4_INTCTRL 0x0088 /* Interrupt Control [R/W] */
|
||||
#define NILE4_INTSTAT0 0x0090 /* Interrupt Status 0 [R] */
|
||||
#define NILE4_INTSTAT1 0x0098 /* Interrupt Status 1 and CPU Interrupt */
|
||||
/* Enable [R/W] */
|
||||
#define NILE4_INTCLR 0x00A0 /* Interrupt Clear [R/W] */
|
||||
#define NILE4_INTPPES 0x00A8 /* PCI Interrupt Control [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* Memory-Interface Registers
|
||||
*/
|
||||
|
||||
#define NILE4_MEMCTRL 0x00C0 /* Memory Control */
|
||||
#define NILE4_ACSTIME 0x00C8 /* Memory Access Timing [R/W] */
|
||||
#define NILE4_CHKERR 0x00D0 /* Memory Check Error Status [R] */
|
||||
|
||||
|
||||
/*
|
||||
* PCI-Bus Registers
|
||||
*/
|
||||
|
||||
#define NILE4_PCICTRL 0x00E0 /* PCI Control [R/W] */
|
||||
#define NILE4_PCIARB 0x00E8 /* PCI Arbiter [R/W] */
|
||||
#define NILE4_PCIINIT0 0x00F0 /* PCI Master (Initiator) 0 [R/W] */
|
||||
#define NILE4_PCIINIT1 0x00F8 /* PCI Master (Initiator) 1 [R/W] */
|
||||
#define NILE4_PCIERR 0x00B8 /* PCI Error [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* Local-Bus Registers
|
||||
*/
|
||||
|
||||
#define NILE4_LCNFG 0x0100 /* Local Bus Configuration [R/W] */
|
||||
#define NILE4_LCST2 0x0110 /* Local Bus Chip-Select Timing 2 [R/W] */
|
||||
#define NILE4_LCST3 0x0118 /* Local Bus Chip-Select Timing 3 [R/W] */
|
||||
#define NILE4_LCST4 0x0120 /* Local Bus Chip-Select Timing 4 [R/W] */
|
||||
#define NILE4_LCST5 0x0128 /* Local Bus Chip-Select Timing 5 [R/W] */
|
||||
#define NILE4_LCST6 0x0130 /* Local Bus Chip-Select Timing 6 [R/W] */
|
||||
#define NILE4_LCST7 0x0138 /* Local Bus Chip-Select Timing 7 [R/W] */
|
||||
#define NILE4_LCST8 0x0140 /* Local Bus Chip-Select Timing 8 [R/W] */
|
||||
#define NILE4_DCSFN 0x0150 /* Device Chip-Select Muxing and Output */
|
||||
/* Enables [R/W] */
|
||||
#define NILE4_DCSIO 0x0158 /* Device Chip-Selects As I/O Bits [R/W] */
|
||||
#define NILE4_BCST 0x0178 /* Local Boot Chip-Select Timing [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* DMA Registers
|
||||
*/
|
||||
|
||||
#define NILE4_DMACTRL0 0x0180 /* DMA Control 0 [R/W] */
|
||||
#define NILE4_DMASRCA0 0x0188 /* DMA Source Address 0 [R/W] */
|
||||
#define NILE4_DMADESA0 0x0190 /* DMA Destination Address 0 [R/W] */
|
||||
#define NILE4_DMACTRL1 0x0198 /* DMA Control 1 [R/W] */
|
||||
#define NILE4_DMASRCA1 0x01A0 /* DMA Source Address 1 [R/W] */
|
||||
#define NILE4_DMADESA1 0x01A8 /* DMA Destination Address 1 [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* Timer Registers
|
||||
*/
|
||||
|
||||
#define NILE4_T0CTRL 0x01C0 /* SDRAM Refresh Control [R/W] */
|
||||
#define NILE4_T0CNTR 0x01C8 /* SDRAM Refresh Counter [R/W] */
|
||||
#define NILE4_T1CTRL 0x01D0 /* CPU-Bus Read Time-Out Control [R/W] */
|
||||
#define NILE4_T1CNTR 0x01D8 /* CPU-Bus Read Time-Out Counter [R/W] */
|
||||
#define NILE4_T2CTRL 0x01E0 /* General-Purpose Timer Control [R/W] */
|
||||
#define NILE4_T2CNTR 0x01E8 /* General-Purpose Timer Counter [R/W] */
|
||||
#define NILE4_T3CTRL 0x01F0 /* Watchdog Timer Control [R/W] */
|
||||
#define NILE4_T3CNTR 0x01F8 /* Watchdog Timer Counter [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* PCI Configuration Space Registers
|
||||
*/
|
||||
|
||||
#define NILE4_PCI_BASE 0x0200
|
||||
|
||||
#define NILE4_VID 0x0200 /* PCI Vendor ID [R] */
|
||||
#define NILE4_DID 0x0202 /* PCI Device ID [R] */
|
||||
#define NILE4_PCICMD 0x0204 /* PCI Command [R/W] */
|
||||
#define NILE4_PCISTS 0x0206 /* PCI Status [R/W] */
|
||||
#define NILE4_REVID 0x0208 /* PCI Revision ID [R] */
|
||||
#define NILE4_CLASS 0x0209 /* PCI Class Code [R] */
|
||||
#define NILE4_CLSIZ 0x020C /* PCI Cache Line Size [R/W] */
|
||||
#define NILE4_MLTIM 0x020D /* PCI Latency Timer [R/W] */
|
||||
#define NILE4_HTYPE 0x020E /* PCI Header Type [R] */
|
||||
#define NILE4_BIST 0x020F /* BIST [R] (unimplemented) */
|
||||
#define NILE4_BARC 0x0210 /* PCI Base Address Register Control [R/W] */
|
||||
#define NILE4_BAR0 0x0218 /* PCI Base Address Register 0 [R/W] */
|
||||
#define NILE4_BAR1 0x0220 /* PCI Base Address Register 1 [R/W] */
|
||||
#define NILE4_CIS 0x0228 /* PCI Cardbus CIS Pointer [R] */
|
||||
/* (unimplemented) */
|
||||
#define NILE4_SSVID 0x022C /* PCI Sub-System Vendor ID [R/W] */
|
||||
#define NILE4_SSID 0x022E /* PCI Sub-System ID [R/W] */
|
||||
#define NILE4_ROM 0x0230 /* Expansion ROM Base Address [R] */
|
||||
/* (unimplemented) */
|
||||
#define NILE4_INTLIN 0x023C /* PCI Interrupt Line [R/W] */
|
||||
#define NILE4_INTPIN 0x023D /* PCI Interrupt Pin [R] */
|
||||
#define NILE4_MINGNT 0x023E /* PCI Min_Gnt [R] (unimplemented) */
|
||||
#define NILE4_MAXLAT 0x023F /* PCI Max_Lat [R] (unimplemented) */
|
||||
#define NILE4_BAR2 0x0240 /* PCI Base Address Register 2 [R/W] */
|
||||
#define NILE4_BAR3 0x0248 /* PCI Base Address Register 3 [R/W] */
|
||||
#define NILE4_BAR4 0x0250 /* PCI Base Address Register 4 [R/W] */
|
||||
#define NILE4_BAR5 0x0258 /* PCI Base Address Register 5 [R/W] */
|
||||
#define NILE4_BAR6 0x0260 /* PCI Base Address Register 6 [R/W] */
|
||||
#define NILE4_BAR7 0x0268 /* PCI Base Address Register 7 [R/W] */
|
||||
#define NILE4_BAR8 0x0270 /* PCI Base Address Register 8 [R/W] */
|
||||
#define NILE4_BARB 0x0278 /* PCI Base Address Register BOOT [R/W] */
|
||||
|
||||
|
||||
/*
|
||||
* Serial-Port Registers
|
||||
*/
|
||||
|
||||
#define NILE4_UART_BASE 0x0300
|
||||
|
||||
#define NILE4_UARTRBR 0x0300 /* UART Receiver Data Buffer [R] */
|
||||
#define NILE4_UARTTHR 0x0300 /* UART Transmitter Data Holding [W] */
|
||||
#define NILE4_UARTIER 0x0308 /* UART Interrupt Enable [R/W] */
|
||||
#define NILE4_UARTDLL 0x0300 /* UART Divisor Latch LSB [R/W] */
|
||||
#define NILE4_UARTDLM 0x0308 /* UART Divisor Latch MSB [R/W] */
|
||||
#define NILE4_UARTIIR 0x0310 /* UART Interrupt ID [R] */
|
||||
#define NILE4_UARTFCR 0x0310 /* UART FIFO Control [W] */
|
||||
#define NILE4_UARTLCR 0x0318 /* UART Line Control [R/W] */
|
||||
#define NILE4_UARTMCR 0x0320 /* UART Modem Control [R/W] */
|
||||
#define NILE4_UARTLSR 0x0328 /* UART Line Status [R/W] */
|
||||
#define NILE4_UARTMSR 0x0330 /* UART Modem Status [R/W] */
|
||||
#define NILE4_UARTSCR 0x0338 /* UART Scratch [R/W] */
|
||||
|
||||
#define NILE4_UART_BASE_BAUD 520833 /* 100 MHz / 12 / 16 */
|
||||
|
||||
|
||||
/*
|
||||
* Interrupt Lines
|
||||
*/
|
||||
|
||||
#define NILE4_INT_CPCE 0 /* CPU-Interface Parity-Error Interrupt */
|
||||
#define NILE4_INT_CNTD 1 /* CPU No-Target Decode Interrupt */
|
||||
#define NILE4_INT_MCE 2 /* Memory-Check Error Interrupt */
|
||||
#define NILE4_INT_DMA 3 /* DMA Controller Interrupt */
|
||||
#define NILE4_INT_UART 4 /* UART Interrupt */
|
||||
#define NILE4_INT_WDOG 5 /* Watchdog Timer Interrupt */
|
||||
#define NILE4_INT_GPT 6 /* General-Purpose Timer Interrupt */
|
||||
#define NILE4_INT_LBRTD 7 /* Local-Bus Ready Timer Interrupt */
|
||||
#define NILE4_INT_INTA 8 /* PCI Interrupt Signal INTA# */
|
||||
#define NILE4_INT_INTB 9 /* PCI Interrupt Signal INTB# */
|
||||
#define NILE4_INT_INTC 10 /* PCI Interrupt Signal INTC# */
|
||||
#define NILE4_INT_INTD 11 /* PCI Interrupt Signal INTD# */
|
||||
#define NILE4_INT_INTE 12 /* PCI Interrupt Signal INTE# (ISA cascade) */
|
||||
#define NILE4_INT_RESV 13 /* Reserved */
|
||||
#define NILE4_INT_PCIS 14 /* PCI SERR# Interrupt */
|
||||
#define NILE4_INT_PCIE 15 /* PCI Internal Error Interrupt */
|
||||
|
||||
|
||||
/*
|
||||
* Nile 4 Register Access
|
||||
*/
|
||||
|
||||
static inline void nile4_sync(void)
|
||||
{
|
||||
volatile u32 *p = (volatile u32 *)0xbfc00000;
|
||||
(void)(*p);
|
||||
}
|
||||
|
||||
static inline void nile4_out32(u32 offset, u32 val)
|
||||
{
|
||||
*(volatile u32 *)(NILE4_BASE+offset) = val;
|
||||
nile4_sync();
|
||||
}
|
||||
|
||||
static inline u32 nile4_in32(u32 offset)
|
||||
{
|
||||
u32 val = *(volatile u32 *)(NILE4_BASE+offset);
|
||||
nile4_sync();
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void nile4_out16(u32 offset, u16 val)
|
||||
{
|
||||
*(volatile u16 *)(NILE4_BASE+offset) = val;
|
||||
nile4_sync();
|
||||
}
|
||||
|
||||
static inline u16 nile4_in16(u32 offset)
|
||||
{
|
||||
u16 val = *(volatile u16 *)(NILE4_BASE+offset);
|
||||
nile4_sync();
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void nile4_out8(u32 offset, u8 val)
|
||||
{
|
||||
*(volatile u8 *)(NILE4_BASE+offset) = val;
|
||||
nile4_sync();
|
||||
}
|
||||
|
||||
static inline u8 nile4_in8(u32 offset)
|
||||
{
|
||||
u8 val = *(volatile u8 *)(NILE4_BASE+offset);
|
||||
nile4_sync();
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Physical Device Address Registers
|
||||
*/
|
||||
|
||||
extern void nile4_set_pdar(u32 pdar, u32 phys, u32 size, int width,
|
||||
int on_memory_bus, int visible);
|
||||
|
||||
|
||||
/*
|
||||
* PCI Master Registers
|
||||
*/
|
||||
|
||||
#define NILE4_PCICMD_IACK 0 /* PCI Interrupt Acknowledge */
|
||||
#define NILE4_PCICMD_IO 1 /* PCI I/O Space */
|
||||
#define NILE4_PCICMD_MEM 3 /* PCI Memory Space */
|
||||
#define NILE4_PCICMD_CFG 5 /* PCI Configuration Space */
|
||||
|
||||
|
||||
/*
|
||||
* PCI Address Spaces
|
||||
*
|
||||
* Note that these are multiplexed using PCIINIT[01]!
|
||||
*/
|
||||
|
||||
#define NILE4_PCI_IO_BASE 0xa6000000
|
||||
#define NILE4_PCI_MEM_BASE 0xa8000000
|
||||
#define NILE4_PCI_CFG_BASE NILE4_PCI_MEM_BASE
|
||||
#define NILE4_PCI_IACK_BASE NILE4_PCI_IO_BASE
|
||||
|
||||
|
||||
extern void nile4_set_pmr(u32 pmr, u32 type, u32 addr);
|
||||
|
||||
|
||||
/*
|
||||
* Interrupt Programming
|
||||
*/
|
||||
|
||||
#define NUM_I8259_INTERRUPTS 16
|
||||
#define NUM_NILE4_INTERRUPTS 16
|
||||
|
||||
#define IRQ_I8259_CASCADE NILE4_INT_INTE
|
||||
#define is_i8259_irq(irq) ((irq) < NUM_I8259_INTERRUPTS)
|
||||
#define nile4_to_irq(n) ((n)+NUM_I8259_INTERRUPTS)
|
||||
#define irq_to_nile4(n) ((n)-NUM_I8259_INTERRUPTS)
|
||||
|
||||
extern void nile4_map_irq(int nile4_irq, int cpu_irq);
|
||||
extern void nile4_map_irq_all(int cpu_irq);
|
||||
extern void nile4_enable_irq(unsigned int nile4_irq);
|
||||
extern void nile4_disable_irq(unsigned int nile4_irq);
|
||||
extern void nile4_disable_irq_all(void);
|
||||
extern u16 nile4_get_irq_stat(int cpu_irq);
|
||||
extern void nile4_enable_irq_output(int cpu_irq);
|
||||
extern void nile4_disable_irq_output(int cpu_irq);
|
||||
extern void nile4_set_pci_irq_polarity(int pci_irq, int high);
|
||||
extern void nile4_set_pci_irq_level_or_edge(int pci_irq, int level);
|
||||
extern void nile4_clear_irq(int nile4_irq);
|
||||
extern void nile4_clear_irq_mask(u32 mask);
|
||||
extern u8 nile4_i8259_iack(void);
|
||||
extern void nile4_dump_irq_status(void); /* Debug */
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user