aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-09-07 02:19:51 -0400
committerIngo Molnar <mingo@elte.hu>2009-09-07 02:19:51 -0400
commita1922ed661ab2c1637d0b10cde933bd9cd33d965 (patch)
tree0f1777542b385ebefd30b3586d830fd8ed6fda5b /arch/mips
parent75e33751ca8bbb72dd6f1a74d2810ddc8cbe4bdf (diff)
parentd28daf923ac5e4a0d7cecebae56f3e339189366b (diff)
Merge branch 'tracing/core' into tracing/hw-breakpoints
Conflicts: arch/Kconfig kernel/trace/trace.h Merge reason: resolve the conflicts, plus adopt to the new ring-buffer APIs. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/Kconfig57
-rw-r--r--arch/mips/Makefile16
-rw-r--r--arch/mips/alchemy/Kconfig19
-rw-r--r--arch/mips/alchemy/common/Makefile9
-rw-r--r--arch/mips/alchemy/common/gpio.c201
-rw-r--r--arch/mips/alchemy/common/gpiolib-au1000.c130
-rw-r--r--arch/mips/alchemy/common/reset.c5
-rw-r--r--arch/mips/alchemy/devboards/db1x00/board_setup.c12
-rw-r--r--arch/mips/alchemy/devboards/pb1000/board_setup.c10
-rw-r--r--arch/mips/alchemy/devboards/pb1100/board_setup.c3
-rw-r--r--arch/mips/alchemy/devboards/pb1500/board_setup.c10
-rw-r--r--arch/mips/alchemy/devboards/pm.c3
-rw-r--r--arch/mips/alchemy/mtx-1/board_setup.c24
-rw-r--r--arch/mips/alchemy/mtx-1/platform.c14
-rw-r--r--arch/mips/alchemy/xxs1500/board_setup.c21
-rw-r--r--arch/mips/ar7/Makefile11
-rw-r--r--arch/mips/ar7/clock.c427
-rw-r--r--arch/mips/ar7/gpio.c48
-rw-r--r--arch/mips/ar7/irq.c176
-rw-r--r--arch/mips/ar7/memory.c72
-rw-r--r--arch/mips/ar7/platform.c555
-rw-r--r--arch/mips/ar7/prom.c297
-rw-r--r--arch/mips/ar7/setup.c93
-rw-r--r--arch/mips/ar7/time.c30
-rw-r--r--arch/mips/cavium-octeon/dma-octeon.c311
-rw-r--r--arch/mips/cavium-octeon/executive/Makefile1
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-bootmem.c104
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-helper-errata.c73
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-helper-jtag.c144
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-sysinfo.c2
-rw-r--r--arch/mips/cavium-octeon/octeon-irq.c63
-rw-r--r--arch/mips/cavium-octeon/octeon_boot.h70
-rw-r--r--arch/mips/cavium-octeon/setup.c1
-rw-r--r--arch/mips/cavium-octeon/smp.c238
-rw-r--r--arch/mips/cobalt/buttons.c2
-rw-r--r--arch/mips/cobalt/lcd.c2
-rw-r--r--arch/mips/cobalt/led.c2
-rw-r--r--arch/mips/cobalt/mtd.c2
-rw-r--r--arch/mips/cobalt/rtc.c2
-rw-r--r--arch/mips/cobalt/serial.c2
-rw-r--r--arch/mips/cobalt/time.c2
-rw-r--r--arch/mips/configs/ar7_defconfig1182
-rw-r--r--arch/mips/dec/ecc-berr.c2
-rw-r--r--arch/mips/dec/int-handler.S2
-rw-r--r--arch/mips/dec/ioasic-irq.c2
-rw-r--r--arch/mips/dec/kn01-berr.c2
-rw-r--r--arch/mips/dec/kn02-irq.c2
-rw-r--r--arch/mips/dec/kn02xa-berr.c2
-rw-r--r--arch/mips/dec/prom/call_o32.S2
-rw-r--r--arch/mips/dec/prom/console.c2
-rw-r--r--arch/mips/dec/time.c2
-rw-r--r--arch/mips/emma/common/Makefile3
-rw-r--r--arch/mips/emma/common/prom.c3
-rw-r--r--arch/mips/emma/markeins/Makefile3
-rw-r--r--arch/mips/emma/markeins/irq.c3
-rw-r--r--arch/mips/emma/markeins/led.c3
-rw-r--r--arch/mips/emma/markeins/platform.c3
-rw-r--r--arch/mips/emma/markeins/setup.c3
-rw-r--r--arch/mips/fw/lib/call_o32.S2
-rw-r--r--arch/mips/gt64120/wrppmc/serial.c2
-rw-r--r--arch/mips/include/asm/amon.h7
-rw-r--r--arch/mips/include/asm/bug.h1
-rw-r--r--arch/mips/include/asm/bugs.h1
-rw-r--r--arch/mips/include/asm/cpu-features.h8
-rw-r--r--arch/mips/include/asm/delay.h2
-rw-r--r--arch/mips/include/asm/ds1287.h2
-rw-r--r--arch/mips/include/asm/elf.h4
-rw-r--r--arch/mips/include/asm/emma/emma2rh.h3
-rw-r--r--arch/mips/include/asm/emma/markeins.h3
-rw-r--r--arch/mips/include/asm/gcmpregs.h2
-rw-r--r--arch/mips/include/asm/gic.h6
-rw-r--r--arch/mips/include/asm/hugetlb.h114
-rw-r--r--arch/mips/include/asm/ioctl.h85
-rw-r--r--arch/mips/include/asm/irq.h1
-rw-r--r--arch/mips/include/asm/irq_gt641xx.h2
-rw-r--r--arch/mips/include/asm/mach-ar7/ar7.h178
-rw-r--r--arch/mips/include/asm/mach-ar7/gpio.h110
-rw-r--r--arch/mips/include/asm/mach-ar7/irq.h16
-rw-r--r--arch/mips/include/asm/mach-ar7/prom.h25
-rw-r--r--arch/mips/include/asm/mach-ar7/spaces.h22
-rw-r--r--arch/mips/include/asm/mach-ar7/war.h25
-rw-r--r--arch/mips/include/asm/mach-au1x00/au1000_gpio.h56
-rw-r--r--arch/mips/include/asm/mach-au1x00/gpio-au1000.h604
-rw-r--r--arch/mips/include/asm/mach-au1x00/gpio.h35
-rw-r--r--arch/mips/include/asm/mach-bcm47xx/gpio.h3
-rw-r--r--arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h2
-rw-r--r--arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-cobalt/irq.h2
-rw-r--r--arch/mips/include/asm/mach-cobalt/mach-gt64120.h2
-rw-r--r--arch/mips/include/asm/mach-generic/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-ip27/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-ip32/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-jazz/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-lemote/dma-coherence.h6
-rw-r--r--arch/mips/include/asm/mach-rc32434/cpu-feature-overrides.h5
-rw-r--r--arch/mips/include/asm/mipsregs.h16
-rw-r--r--arch/mips/include/asm/mmu_context.h1
-rw-r--r--arch/mips/include/asm/octeon/cvmx-bootinfo.h13
-rw-r--r--arch/mips/include/asm/octeon/cvmx-bootmem.h85
-rw-r--r--arch/mips/include/asm/octeon/cvmx-helper-errata.h33
-rw-r--r--arch/mips/include/asm/octeon/cvmx-helper-jtag.h43
-rw-r--r--arch/mips/include/asm/octeon/cvmx-npei-defs.h2560
-rw-r--r--arch/mips/include/asm/octeon/cvmx-npi-defs.h1735
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pci-defs.h1645
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pcieep-defs.h1365
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pciercx-defs.h1397
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pescx-defs.h410
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pexp-defs.h229
-rw-r--r--arch/mips/include/asm/octeon/cvmx.h12
-rw-r--r--arch/mips/include/asm/octeon/octeon-feature.h27
-rw-r--r--arch/mips/include/asm/octeon/octeon.h2
-rw-r--r--arch/mips/include/asm/octeon/pci-octeon.h45
-rw-r--r--arch/mips/include/asm/page.h16
-rw-r--r--arch/mips/include/asm/pci.h13
-rw-r--r--arch/mips/include/asm/pgalloc.h15
-rw-r--r--arch/mips/include/asm/pgtable-bits.h1
-rw-r--r--arch/mips/include/asm/pgtable.h10
-rw-r--r--arch/mips/include/asm/pmc-sierra/msp71xx/war.h2
-rw-r--r--arch/mips/include/asm/processor.h5
-rw-r--r--arch/mips/include/asm/r4kcache.h1
-rw-r--r--arch/mips/include/asm/reg.h2
-rw-r--r--arch/mips/include/asm/smp-ops.h4
-rw-r--r--arch/mips/include/asm/smp.h20
-rw-r--r--arch/mips/include/asm/sn/addrs.h1
-rw-r--r--arch/mips/include/asm/suspend.h9
-rw-r--r--arch/mips/include/asm/swab.h8
-rw-r--r--arch/mips/include/asm/thread_info.h4
-rw-r--r--arch/mips/include/asm/txx9/dmac.h51
-rw-r--r--arch/mips/include/asm/txx9/generic.h6
-rw-r--r--arch/mips/include/asm/txx9/tx4927.h4
-rw-r--r--arch/mips/include/asm/txx9/tx4938.h3
-rw-r--r--arch/mips/include/asm/txx9/tx4939.h6
-rw-r--r--arch/mips/include/asm/unistd.h21
-rw-r--r--arch/mips/include/asm/vr41xx/capcella.h2
-rw-r--r--arch/mips/include/asm/vr41xx/giu.h22
-rw-r--r--arch/mips/include/asm/vr41xx/irq.h2
-rw-r--r--arch/mips/include/asm/vr41xx/mpc30x.h2
-rw-r--r--arch/mips/include/asm/vr41xx/pci.h2
-rw-r--r--arch/mips/include/asm/vr41xx/siu.h2
-rw-r--r--arch/mips/include/asm/vr41xx/tb0219.h2
-rw-r--r--arch/mips/include/asm/vr41xx/tb0226.h2
-rw-r--r--arch/mips/include/asm/vr41xx/vr41xx.h2
-rw-r--r--arch/mips/jazz/irq.c1
-rw-r--r--arch/mips/jazz/jazzdma.c2
-rw-r--r--arch/mips/kernel/asm-offsets.c13
-rw-r--r--arch/mips/kernel/binfmt_elfo32.c20
-rw-r--r--arch/mips/kernel/cevt-bcm1480.c1
-rw-r--r--arch/mips/kernel/cevt-ds1287.c2
-rw-r--r--arch/mips/kernel/cevt-gt641xx.c2
-rw-r--r--arch/mips/kernel/cevt-r4k.c1
-rw-r--r--arch/mips/kernel/cevt-sb1250.c1
-rw-r--r--arch/mips/kernel/cevt-smtc.c1
-rw-r--r--arch/mips/kernel/cevt-txx9.c67
-rw-r--r--arch/mips/kernel/cpu-probe.c1
-rw-r--r--arch/mips/kernel/csrc-ioasic.c2
-rw-r--r--arch/mips/kernel/head.S3
-rw-r--r--arch/mips/kernel/i8253.c1
-rw-r--r--arch/mips/kernel/irq-gic.c20
-rw-r--r--arch/mips/kernel/irq-gt641xx.c2
-rw-r--r--arch/mips/kernel/irq_txx9.c2
-rw-r--r--arch/mips/kernel/kgdb.c1
-rw-r--r--arch/mips/kernel/module.c12
-rw-r--r--arch/mips/kernel/proc.c2
-rw-r--r--arch/mips/kernel/process.c17
-rw-r--r--arch/mips/kernel/ptrace32.c1
-rw-r--r--arch/mips/kernel/scall32-o32.S3
-rw-r--r--arch/mips/kernel/scall64-64.S3
-rw-r--r--arch/mips/kernel/scall64-n32.S3
-rw-r--r--arch/mips/kernel/scall64-o32.S3
-rw-r--r--arch/mips/kernel/smp-cmp.c67
-rw-r--r--arch/mips/kernel/smp-up.c16
-rw-r--r--arch/mips/kernel/smp.c18
-rw-r--r--arch/mips/kernel/smtc.c15
-rw-r--r--arch/mips/kernel/stacktrace.c2
-rw-r--r--arch/mips/kernel/sync-r4k.c31
-rw-r--r--arch/mips/kernel/topology.c5
-rw-r--r--arch/mips/kernel/traps.c6
-rw-r--r--arch/mips/kernel/vpe.c51
-rw-r--r--arch/mips/lib/delay.c4
-rw-r--r--arch/mips/mipssim/sim_time.c11
-rw-r--r--arch/mips/mm/Makefile1
-rw-r--r--arch/mips/mm/c-octeon.c5
-rw-r--r--arch/mips/mm/c-r3k.c1
-rw-r--r--arch/mips/mm/c-r4k.c13
-rw-r--r--arch/mips/mm/c-tx39.c1
-rw-r--r--arch/mips/mm/dma-default.c23
-rw-r--r--arch/mips/mm/extable.c6
-rw-r--r--arch/mips/mm/fault.c3
-rw-r--r--arch/mips/mm/highmem.c1
-rw-r--r--arch/mips/mm/hugetlbpage.c100
-rw-r--r--arch/mips/mm/init.c1
-rw-r--r--arch/mips/mm/page.c1
-rw-r--r--arch/mips/mm/tlb-r3k.c1
-rw-r--r--arch/mips/mm/tlb-r4k.c44
-rw-r--r--arch/mips/mm/tlb-r8k.c1
-rw-r--r--arch/mips/mm/tlbex.c283
-rw-r--r--arch/mips/mti-malta/malta-init.c14
-rw-r--r--arch/mips/mti-malta/malta-int.c90
-rw-r--r--arch/mips/mti-malta/malta-reset.c3
-rw-r--r--arch/mips/nxp/pnx8550/common/time.c2
-rw-r--r--arch/mips/pci/Makefile5
-rw-r--r--arch/mips/pci/fixup-capcella.c2
-rw-r--r--arch/mips/pci/fixup-emma2rh.c3
-rw-r--r--arch/mips/pci/fixup-mpc30x.c2
-rw-r--r--arch/mips/pci/fixup-sb1250.c2
-rw-r--r--arch/mips/pci/fixup-tb0219.c2
-rw-r--r--arch/mips/pci/fixup-tb0226.c2
-rw-r--r--arch/mips/pci/fixup-tb0287.c2
-rw-r--r--arch/mips/pci/msi-octeon.c288
-rw-r--r--arch/mips/pci/ops-emma2rh.c3
-rw-r--r--arch/mips/pci/ops-vr41xx.c6
-rw-r--r--arch/mips/pci/pci-emma2rh.c3
-rw-r--r--arch/mips/pci/pci-ip27.c1
-rw-r--r--arch/mips/pci/pci-octeon.c675
-rw-r--r--arch/mips/pci/pci-tx4927.c2
-rw-r--r--arch/mips/pci/pci-tx4938.c2
-rw-r--r--arch/mips/pci/pci-tx4939.c2
-rw-r--r--arch/mips/pci/pci-vr41xx.c6
-rw-r--r--arch/mips/pci/pci-vr41xx.h4
-rw-r--r--arch/mips/pci/pcie-octeon.c1372
-rw-r--r--arch/mips/pmc-sierra/msp71xx/gpio.c2
-rw-r--r--arch/mips/pmc-sierra/msp71xx/gpio_extended.c2
-rw-r--r--arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c12
-rw-r--r--arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c2
-rw-r--r--arch/mips/pmc-sierra/yosemite/smp.c1
-rw-r--r--arch/mips/power/Makefile1
-rw-r--r--arch/mips/power/cpu.c43
-rw-r--r--arch/mips/power/hibernate.S61
-rw-r--r--arch/mips/rb532/irq.c5
-rw-r--r--arch/mips/sgi-ip27/ip27-init.c1
-rw-r--r--arch/mips/sgi-ip27/ip27-irq.c1
-rw-r--r--arch/mips/sgi-ip27/ip27-timer.c1
-rw-r--r--arch/mips/sgi-ip27/ip27-xtalk.c1
-rw-r--r--arch/mips/sibyte/Kconfig31
-rw-r--r--arch/mips/sibyte/bcm1480/irq.c1
-rw-r--r--arch/mips/sibyte/cfe/Makefile2
-rw-r--r--arch/mips/sibyte/common/Makefile4
-rw-r--r--arch/mips/sibyte/common/cfe.c (renamed from arch/mips/sibyte/cfe/setup.c)0
-rw-r--r--arch/mips/sibyte/common/cfe_console.c (renamed from arch/mips/sibyte/cfe/console.c)7
-rw-r--r--arch/mips/sibyte/sb1250/Makefile1
-rw-r--r--arch/mips/sibyte/sb1250/irq.c5
-rw-r--r--arch/mips/sibyte/sb1250/prom.c96
-rw-r--r--arch/mips/sibyte/swarm/setup.c14
-rw-r--r--arch/mips/sibyte/swarm/swarm-i2c.c2
-rw-r--r--arch/mips/sni/time.c1
-rw-r--r--arch/mips/txx9/Kconfig3
-rw-r--r--arch/mips/txx9/generic/mem_tx4927.c2
-rw-r--r--arch/mips/txx9/generic/setup.c177
-rw-r--r--arch/mips/txx9/generic/setup_tx4927.c55
-rw-r--r--arch/mips/txx9/generic/setup_tx4938.c38
-rw-r--r--arch/mips/txx9/generic/setup_tx4939.c53
-rw-r--r--arch/mips/txx9/rbtx4927/setup.c8
-rw-r--r--arch/mips/txx9/rbtx4938/setup.c4
-rw-r--r--arch/mips/txx9/rbtx4939/setup.c7
-rw-r--r--arch/mips/vr41xx/casio-e55/setup.c2
-rw-r--r--arch/mips/vr41xx/common/bcu.c8
-rw-r--r--arch/mips/vr41xx/common/cmu.c8
-rw-r--r--arch/mips/vr41xx/common/giu.c2
-rw-r--r--arch/mips/vr41xx/common/icu.c8
-rw-r--r--arch/mips/vr41xx/common/init.c2
-rw-r--r--arch/mips/vr41xx/common/irq.c2
-rw-r--r--arch/mips/vr41xx/common/pmu.c2
-rw-r--r--arch/mips/vr41xx/common/rtc.c2
-rw-r--r--arch/mips/vr41xx/common/siu.c2
-rw-r--r--arch/mips/vr41xx/common/type.c2
-rw-r--r--arch/mips/vr41xx/ibm-workpad/setup.c2
266 files changed, 18693 insertions, 1093 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 25f3b0a11ca8..3ca0fe1a9123 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -22,6 +22,26 @@ choice
22config MACH_ALCHEMY 22config MACH_ALCHEMY
23 bool "Alchemy processor based machines" 23 bool "Alchemy processor based machines"
24 24
25config AR7
26 bool "Texas Instruments AR7"
27 select BOOT_ELF32
28 select DMA_NONCOHERENT
29 select CEVT_R4K
30 select CSRC_R4K
31 select IRQ_CPU
32 select NO_EXCEPT_FILL
33 select SWAP_IO_SPACE
34 select SYS_HAS_CPU_MIPS32_R1
35 select SYS_HAS_EARLY_PRINTK
36 select SYS_SUPPORTS_32BIT_KERNEL
37 select SYS_SUPPORTS_LITTLE_ENDIAN
38 select GENERIC_GPIO
39 select GCD
40 select VLYNQ
41 help
42 Support for the Texas Instruments AR7 System-on-a-Chip
43 family: TNETD7100, 7200 and 7300.
44
25config BASLER_EXCITE 45config BASLER_EXCITE
26 bool "Basler eXcite smart camera" 46 bool "Basler eXcite smart camera"
27 select CEVT_R4K 47 select CEVT_R4K
@@ -209,7 +229,7 @@ config MIPS_MALTA
209 select SYS_SUPPORTS_64BIT_KERNEL 229 select SYS_SUPPORTS_64BIT_KERNEL
210 select SYS_SUPPORTS_BIG_ENDIAN 230 select SYS_SUPPORTS_BIG_ENDIAN
211 select SYS_SUPPORTS_LITTLE_ENDIAN 231 select SYS_SUPPORTS_LITTLE_ENDIAN
212 select SYS_SUPPORTS_MIPS_CMP if BROKEN # because SYNC_R4K is broken 232 select SYS_SUPPORTS_MIPS_CMP
213 select SYS_SUPPORTS_MULTITHREADING 233 select SYS_SUPPORTS_MULTITHREADING
214 select SYS_SUPPORTS_SMARTMIPS 234 select SYS_SUPPORTS_SMARTMIPS
215 help 235 help
@@ -247,6 +267,7 @@ config MACH_VR41XX
247 select CEVT_R4K 267 select CEVT_R4K
248 select CSRC_R4K 268 select CSRC_R4K
249 select SYS_HAS_CPU_VR41XX 269 select SYS_HAS_CPU_VR41XX
270 select ARCH_REQUIRE_GPIOLIB
250 271
251config NXP_STB220 272config NXP_STB220
252 bool "NXP STB220 board" 273 bool "NXP STB220 board"
@@ -601,6 +622,7 @@ config CAVIUM_OCTEON_SIMULATOR
601 select SYS_SUPPORTS_64BIT_KERNEL 622 select SYS_SUPPORTS_64BIT_KERNEL
602 select SYS_SUPPORTS_BIG_ENDIAN 623 select SYS_SUPPORTS_BIG_ENDIAN
603 select SYS_SUPPORTS_HIGHMEM 624 select SYS_SUPPORTS_HIGHMEM
625 select SYS_SUPPORTS_HOTPLUG_CPU
604 select SYS_HAS_CPU_CAVIUM_OCTEON 626 select SYS_HAS_CPU_CAVIUM_OCTEON
605 help 627 help
606 The Octeon simulator is software performance model of the Cavium 628 The Octeon simulator is software performance model of the Cavium
@@ -615,9 +637,12 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
615 select SYS_SUPPORTS_64BIT_KERNEL 637 select SYS_SUPPORTS_64BIT_KERNEL
616 select SYS_SUPPORTS_BIG_ENDIAN 638 select SYS_SUPPORTS_BIG_ENDIAN
617 select SYS_SUPPORTS_HIGHMEM 639 select SYS_SUPPORTS_HIGHMEM
640 select SYS_SUPPORTS_HOTPLUG_CPU
618 select SYS_HAS_EARLY_PRINTK 641 select SYS_HAS_EARLY_PRINTK
619 select SYS_HAS_CPU_CAVIUM_OCTEON 642 select SYS_HAS_CPU_CAVIUM_OCTEON
620 select SWAP_IO_SPACE 643 select SWAP_IO_SPACE
644 select HW_HAS_PCI
645 select ARCH_SUPPORTS_MSI
621 help 646 help
622 This option supports all of the Octeon reference boards from Cavium 647 This option supports all of the Octeon reference boards from Cavium
623 Networks. It builds a kernel that dynamically determines the Octeon 648 Networks. It builds a kernel that dynamically determines the Octeon
@@ -782,8 +807,17 @@ config SYS_HAS_EARLY_PRINTK
782 bool 807 bool
783 808
784config HOTPLUG_CPU 809config HOTPLUG_CPU
810 bool "Support for hot-pluggable CPUs"
811 depends on SMP && HOTPLUG && SYS_SUPPORTS_HOTPLUG_CPU
812 help
813 Say Y here to allow turning CPUs off and on. CPUs can be
814 controlled through /sys/devices/system/cpu.
815 (Note: power management support will enable this option
816 automatically on SMP systems. )
817 Say N if you want to disable CPU hotplug.
818
819config SYS_SUPPORTS_HOTPLUG_CPU
785 bool 820 bool
786 default n
787 821
788config I8259 822config I8259
789 bool 823 bool
@@ -851,6 +885,11 @@ config SYS_SUPPORTS_BIG_ENDIAN
851config SYS_SUPPORTS_LITTLE_ENDIAN 885config SYS_SUPPORTS_LITTLE_ENDIAN
852 bool 886 bool
853 887
888config SYS_SUPPORTS_HUGETLBFS
889 bool
890 depends on CPU_SUPPORTS_HUGEPAGES && 64BIT
891 default y
892
854config IRQ_CPU 893config IRQ_CPU
855 bool 894 bool
856 895
@@ -1055,6 +1094,7 @@ config CPU_MIPS64_R1
1055 select CPU_SUPPORTS_32BIT_KERNEL 1094 select CPU_SUPPORTS_32BIT_KERNEL
1056 select CPU_SUPPORTS_64BIT_KERNEL 1095 select CPU_SUPPORTS_64BIT_KERNEL
1057 select CPU_SUPPORTS_HIGHMEM 1096 select CPU_SUPPORTS_HIGHMEM
1097 select CPU_SUPPORTS_HUGEPAGES
1058 help 1098 help
1059 Choose this option to build a kernel for release 1 or later of the 1099 Choose this option to build a kernel for release 1 or later of the
1060 MIPS64 architecture. Many modern embedded systems with a 64-bit 1100 MIPS64 architecture. Many modern embedded systems with a 64-bit
@@ -1074,6 +1114,7 @@ config CPU_MIPS64_R2
1074 select CPU_SUPPORTS_32BIT_KERNEL 1114 select CPU_SUPPORTS_32BIT_KERNEL
1075 select CPU_SUPPORTS_64BIT_KERNEL 1115 select CPU_SUPPORTS_64BIT_KERNEL
1076 select CPU_SUPPORTS_HIGHMEM 1116 select CPU_SUPPORTS_HIGHMEM
1117 select CPU_SUPPORTS_HUGEPAGES
1077 help 1118 help
1078 Choose this option to build a kernel for release 2 or later of the 1119 Choose this option to build a kernel for release 2 or later of the
1079 MIPS64 architecture. Many modern embedded systems with a 64-bit 1120 MIPS64 architecture. Many modern embedded systems with a 64-bit
@@ -1160,6 +1201,7 @@ config CPU_R5500
1160 select CPU_HAS_LLSC 1201 select CPU_HAS_LLSC
1161 select CPU_SUPPORTS_32BIT_KERNEL 1202 select CPU_SUPPORTS_32BIT_KERNEL
1162 select CPU_SUPPORTS_64BIT_KERNEL 1203 select CPU_SUPPORTS_64BIT_KERNEL
1204 select CPU_SUPPORTS_HUGEPAGES
1163 help 1205 help
1164 NEC VR5500 and VR5500A series processors implement 64-bit MIPS IV 1206 NEC VR5500 and VR5500A series processors implement 64-bit MIPS IV
1165 instruction set. 1207 instruction set.
@@ -1245,6 +1287,7 @@ config CPU_CAVIUM_OCTEON
1245 select WEAK_ORDERING 1287 select WEAK_ORDERING
1246 select WEAK_REORDERING_BEYOND_LLSC 1288 select WEAK_REORDERING_BEYOND_LLSC
1247 select CPU_SUPPORTS_HIGHMEM 1289 select CPU_SUPPORTS_HIGHMEM
1290 select CPU_SUPPORTS_HUGEPAGES
1248 help 1291 help
1249 The Cavium Octeon processor is a highly integrated chip containing 1292 The Cavium Octeon processor is a highly integrated chip containing
1250 many ethernet hardware widgets for networking tasks. The processor 1293 many ethernet hardware widgets for networking tasks. The processor
@@ -1364,6 +1407,8 @@ config CPU_SUPPORTS_32BIT_KERNEL
1364 bool 1407 bool
1365config CPU_SUPPORTS_64BIT_KERNEL 1408config CPU_SUPPORTS_64BIT_KERNEL
1366 bool 1409 bool
1410config CPU_SUPPORTS_HUGEPAGES
1411 bool
1367 1412
1368# 1413#
1369# Set to y for ptrace access to watch registers. 1414# Set to y for ptrace access to watch registers.
@@ -1611,7 +1656,7 @@ config MIPS_APSP_KSPD
1611config MIPS_CMP 1656config MIPS_CMP
1612 bool "MIPS CMP framework support" 1657 bool "MIPS CMP framework support"
1613 depends on SYS_SUPPORTS_MIPS_CMP 1658 depends on SYS_SUPPORTS_MIPS_CMP
1614 select SYNC_R4K if BROKEN 1659 select SYNC_R4K
1615 select SYS_SUPPORTS_SMP 1660 select SYS_SUPPORTS_SMP
1616 select SYS_SUPPORTS_SCHED_SMT if SMP 1661 select SYS_SUPPORTS_SCHED_SMT if SMP
1617 select WEAK_ORDERING 1662 select WEAK_ORDERING
@@ -2121,9 +2166,13 @@ endmenu
2121 2166
2122menu "Power management options" 2167menu "Power management options"
2123 2168
2169config ARCH_HIBERNATION_POSSIBLE
2170 def_bool y
2171 depends on SYS_SUPPORTS_HOTPLUG_CPU || !SMP
2172
2124config ARCH_SUSPEND_POSSIBLE 2173config ARCH_SUSPEND_POSSIBLE
2125 def_bool y 2174 def_bool y
2126 depends on !SMP 2175 depends on SYS_SUPPORTS_HOTPLUG_CPU || !SMP
2127 2176
2128source "kernel/power/Kconfig" 2177source "kernel/power/Kconfig"
2129 2178
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index c4cae9e6b802..861da514a468 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -167,13 +167,19 @@ libs-$(CONFIG_ARC) += arch/mips/fw/arc/
167libs-$(CONFIG_CFE) += arch/mips/fw/cfe/ 167libs-$(CONFIG_CFE) += arch/mips/fw/cfe/
168libs-$(CONFIG_SNIPROM) += arch/mips/fw/sni/ 168libs-$(CONFIG_SNIPROM) += arch/mips/fw/sni/
169libs-y += arch/mips/fw/lib/ 169libs-y += arch/mips/fw/lib/
170libs-$(CONFIG_SIBYTE_CFE) += arch/mips/sibyte/cfe/
171 170
172# 171#
173# Board-dependent options and extra files 172# Board-dependent options and extra files
174# 173#
175 174
176# 175#
176# Texas Instruments AR7
177#
178core-$(CONFIG_AR7) += arch/mips/ar7/
179cflags-$(CONFIG_AR7) += -I$(srctree)/arch/mips/include/asm/mach-ar7
180load-$(CONFIG_AR7) += 0xffffffff94100000
181
182#
177# Acer PICA 61, Mips Magnum 4000 and Olivetti M700. 183# Acer PICA 61, Mips Magnum 4000 and Olivetti M700.
178# 184#
179core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/ 185core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/
@@ -184,7 +190,6 @@ load-$(CONFIG_MACH_JAZZ) += 0xffffffff80080000
184# Common Alchemy Au1x00 stuff 190# Common Alchemy Au1x00 stuff
185# 191#
186core-$(CONFIG_SOC_AU1X00) += arch/mips/alchemy/common/ 192core-$(CONFIG_SOC_AU1X00) += arch/mips/alchemy/common/
187cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00
188 193
189# 194#
190# AMD Alchemy Pb1000 eval board 195# AMD Alchemy Pb1000 eval board
@@ -282,6 +287,10 @@ load-$(CONFIG_MIPS_MTX1) += 0xffffffff80100000
282libs-$(CONFIG_MIPS_XXS1500) += arch/mips/alchemy/xxs1500/ 287libs-$(CONFIG_MIPS_XXS1500) += arch/mips/alchemy/xxs1500/
283load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000 288load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000
284 289
290# must be last for Alchemy systems for GPIO to work properly
291cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00
292
293
285# 294#
286# Cobalt Server 295# Cobalt Server
287# 296#
@@ -675,6 +684,9 @@ core-y += arch/mips/kernel/ arch/mips/mm/ arch/mips/math-emu/
675 684
676drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/ 685drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/
677 686
687# suspend and hibernation support
688drivers-$(CONFIG_PM) += arch/mips/power/
689
678ifdef CONFIG_LASAT 690ifdef CONFIG_LASAT
679rom.bin rom.sw: vmlinux 691rom.bin rom.sw: vmlinux
680 $(Q)$(MAKE) $(build)=arch/mips/lasat/image $@ 692 $(Q)$(MAKE) $(build)=arch/mips/lasat/image $@
diff --git a/arch/mips/alchemy/Kconfig b/arch/mips/alchemy/Kconfig
index 8128aebfb155..00b498e97c83 100644
--- a/arch/mips/alchemy/Kconfig
+++ b/arch/mips/alchemy/Kconfig
@@ -1,3 +1,14 @@
1# au1000-style gpio
2config ALCHEMY_GPIO_AU1000
3 bool
4
5# select this in your board config if you don't want to use the gpio
6# namespace as documented in the manuals. In this case however you need
7# to create the necessary gpio_* functions in your board code/headers!
8# see arch/mips/include/asm/mach-au1x00/gpio.h for more information.
9config ALCHEMY_GPIO_INDIRECT
10 def_bool n
11
1choice 12choice
2 prompt "Machine type" 13 prompt "Machine type"
3 depends on MACH_ALCHEMY 14 depends on MACH_ALCHEMY
@@ -108,22 +119,27 @@ endchoice
108config SOC_AU1000 119config SOC_AU1000
109 bool 120 bool
110 select SOC_AU1X00 121 select SOC_AU1X00
122 select ALCHEMY_GPIO_AU1000
111 123
112config SOC_AU1100 124config SOC_AU1100
113 bool 125 bool
114 select SOC_AU1X00 126 select SOC_AU1X00
127 select ALCHEMY_GPIO_AU1000
115 128
116config SOC_AU1500 129config SOC_AU1500
117 bool 130 bool
118 select SOC_AU1X00 131 select SOC_AU1X00
132 select ALCHEMY_GPIO_AU1000
119 133
120config SOC_AU1550 134config SOC_AU1550
121 bool 135 bool
122 select SOC_AU1X00 136 select SOC_AU1X00
137 select ALCHEMY_GPIO_AU1000
123 138
124config SOC_AU1200 139config SOC_AU1200
125 bool 140 bool
126 select SOC_AU1X00 141 select SOC_AU1X00
142 select ALCHEMY_GPIO_AU1000
127 143
128config SOC_AU1X00 144config SOC_AU1X00
129 bool 145 bool
@@ -134,4 +150,5 @@ config SOC_AU1X00
134 select SYS_HAS_CPU_MIPS32_R1 150 select SYS_HAS_CPU_MIPS32_R1
135 select SYS_SUPPORTS_32BIT_KERNEL 151 select SYS_SUPPORTS_32BIT_KERNEL
136 select SYS_SUPPORTS_APM_EMULATION 152 select SYS_SUPPORTS_APM_EMULATION
137 select ARCH_REQUIRE_GPIOLIB 153 select GENERIC_GPIO
154 select ARCH_WANT_OPTIONAL_GPIOLIB
diff --git a/arch/mips/alchemy/common/Makefile b/arch/mips/alchemy/common/Makefile
index d50d4764eafe..b67fb512529d 100644
--- a/arch/mips/alchemy/common/Makefile
+++ b/arch/mips/alchemy/common/Makefile
@@ -7,7 +7,14 @@
7 7
8obj-y += prom.o irq.o puts.o time.o reset.o \ 8obj-y += prom.o irq.o puts.o time.o reset.o \
9 clocks.o platform.o power.o setup.o \ 9 clocks.o platform.o power.o setup.o \
10 sleeper.o dma.o dbdma.o gpio.o 10 sleeper.o dma.o dbdma.o
11
12# optional gpiolib support
13ifeq ($(CONFIG_ALCHEMY_GPIO_INDIRECT),)
14 ifeq ($(CONFIG_GPIOLIB),y)
15 obj-$(CONFIG_ALCHEMY_GPIO_AU1000) += gpiolib-au1000.o
16 endif
17endif
11 18
12obj-$(CONFIG_PCI) += pci.o 19obj-$(CONFIG_PCI) += pci.o
13 20
diff --git a/arch/mips/alchemy/common/gpio.c b/arch/mips/alchemy/common/gpio.c
deleted file mode 100644
index 91a9c4436c39..000000000000
--- a/arch/mips/alchemy/common/gpio.c
+++ /dev/null
@@ -1,201 +0,0 @@
1/*
2 * Copyright (C) 2007-2009, OpenWrt.org, Florian Fainelli <florian@openwrt.org>
3 * Architecture specific GPIO support
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version.
9 *
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
11 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
13 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
14 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
15 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
16 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
17 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
18 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
19 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20 *
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 675 Mass Ave, Cambridge, MA 02139, USA.
24 *
25 * Notes :
26 * au1000 SoC have only one GPIO line : GPIO1
27 * others have a second one : GPIO2
28 */
29
30#include <linux/kernel.h>
31#include <linux/module.h>
32#include <linux/types.h>
33#include <linux/platform_device.h>
34#include <linux/gpio.h>
35
36#include <asm/mach-au1x00/au1000.h>
37#include <asm/gpio.h>
38
39struct au1000_gpio_chip {
40 struct gpio_chip chip;
41 void __iomem *regbase;
42};
43
44#if !defined(CONFIG_SOC_AU1000)
45static int au1000_gpio2_get(struct gpio_chip *chip, unsigned offset)
46{
47 u32 mask = 1 << offset;
48 struct au1000_gpio_chip *gpch;
49
50 gpch = container_of(chip, struct au1000_gpio_chip, chip);
51 return readl(gpch->regbase + AU1000_GPIO2_ST) & mask;
52}
53
54static void au1000_gpio2_set(struct gpio_chip *chip,
55 unsigned offset, int value)
56{
57 u32 mask = ((GPIO2_OUT_EN_MASK << offset) | (!!value << offset));
58 struct au1000_gpio_chip *gpch;
59 unsigned long flags;
60
61 gpch = container_of(chip, struct au1000_gpio_chip, chip);
62
63 local_irq_save(flags);
64 writel(mask, gpch->regbase + AU1000_GPIO2_OUT);
65 local_irq_restore(flags);
66}
67
68static int au1000_gpio2_direction_input(struct gpio_chip *chip, unsigned offset)
69{
70 u32 mask = 1 << offset;
71 u32 tmp;
72 struct au1000_gpio_chip *gpch;
73 unsigned long flags;
74
75 gpch = container_of(chip, struct au1000_gpio_chip, chip);
76
77 local_irq_save(flags);
78 tmp = readl(gpch->regbase + AU1000_GPIO2_DIR);
79 tmp &= ~mask;
80 writel(tmp, gpch->regbase + AU1000_GPIO2_DIR);
81 local_irq_restore(flags);
82
83 return 0;
84}
85
86static int au1000_gpio2_direction_output(struct gpio_chip *chip,
87 unsigned offset, int value)
88{
89 u32 mask = 1 << offset;
90 u32 out_mask = ((GPIO2_OUT_EN_MASK << offset) | (!!value << offset));
91 u32 tmp;
92 struct au1000_gpio_chip *gpch;
93 unsigned long flags;
94
95 gpch = container_of(chip, struct au1000_gpio_chip, chip);
96
97 local_irq_save(flags);
98 tmp = readl(gpch->regbase + AU1000_GPIO2_DIR);
99 tmp |= mask;
100 writel(tmp, gpch->regbase + AU1000_GPIO2_DIR);
101 writel(out_mask, gpch->regbase + AU1000_GPIO2_OUT);
102 local_irq_restore(flags);
103
104 return 0;
105}
106#endif /* !defined(CONFIG_SOC_AU1000) */
107
108static int au1000_gpio1_get(struct gpio_chip *chip, unsigned offset)
109{
110 u32 mask = 1 << offset;
111 struct au1000_gpio_chip *gpch;
112
113 gpch = container_of(chip, struct au1000_gpio_chip, chip);
114 return readl(gpch->regbase + AU1000_GPIO1_ST) & mask;
115}
116
117static void au1000_gpio1_set(struct gpio_chip *chip,
118 unsigned offset, int value)
119{
120 u32 mask = 1 << offset;
121 u32 reg_offset;
122 struct au1000_gpio_chip *gpch;
123 unsigned long flags;
124
125 gpch = container_of(chip, struct au1000_gpio_chip, chip);
126
127 if (value)
128 reg_offset = AU1000_GPIO1_OUT;
129 else
130 reg_offset = AU1000_GPIO1_CLR;
131
132 local_irq_save(flags);
133 writel(mask, gpch->regbase + reg_offset);
134 local_irq_restore(flags);
135}
136
137static int au1000_gpio1_direction_input(struct gpio_chip *chip, unsigned offset)
138{
139 u32 mask = 1 << offset;
140 struct au1000_gpio_chip *gpch;
141
142 gpch = container_of(chip, struct au1000_gpio_chip, chip);
143 writel(mask, gpch->regbase + AU1000_GPIO1_ST);
144
145 return 0;
146}
147
148static int au1000_gpio1_direction_output(struct gpio_chip *chip,
149 unsigned offset, int value)
150{
151 u32 mask = 1 << offset;
152 struct au1000_gpio_chip *gpch;
153
154 gpch = container_of(chip, struct au1000_gpio_chip, chip);
155
156 writel(mask, gpch->regbase + AU1000_GPIO1_TRI_OUT);
157 au1000_gpio1_set(chip, offset, value);
158
159 return 0;
160}
161
162struct au1000_gpio_chip au1000_gpio_chip[] = {
163 [0] = {
164 .regbase = (void __iomem *)SYS_BASE,
165 .chip = {
166 .label = "au1000-gpio1",
167 .direction_input = au1000_gpio1_direction_input,
168 .direction_output = au1000_gpio1_direction_output,
169 .get = au1000_gpio1_get,
170 .set = au1000_gpio1_set,
171 .base = 0,
172 .ngpio = 32,
173 },
174 },
175#if !defined(CONFIG_SOC_AU1000)
176 [1] = {
177 .regbase = (void __iomem *)GPIO2_BASE,
178 .chip = {
179 .label = "au1000-gpio2",
180 .direction_input = au1000_gpio2_direction_input,
181 .direction_output = au1000_gpio2_direction_output,
182 .get = au1000_gpio2_get,
183 .set = au1000_gpio2_set,
184 .base = AU1XXX_GPIO_BASE,
185 .ngpio = 32,
186 },
187 },
188#endif
189};
190
191static int __init au1000_gpio_init(void)
192{
193 gpiochip_add(&au1000_gpio_chip[0].chip);
194#if !defined(CONFIG_SOC_AU1000)
195 gpiochip_add(&au1000_gpio_chip[1].chip);
196#endif
197
198 return 0;
199}
200arch_initcall(au1000_gpio_init);
201
diff --git a/arch/mips/alchemy/common/gpiolib-au1000.c b/arch/mips/alchemy/common/gpiolib-au1000.c
new file mode 100644
index 000000000000..1bfa91f939f4
--- /dev/null
+++ b/arch/mips/alchemy/common/gpiolib-au1000.c
@@ -0,0 +1,130 @@
1/*
2 * Copyright (C) 2007-2009, OpenWrt.org, Florian Fainelli <florian@openwrt.org>
3 * GPIOLIB support for Au1000, Au1500, Au1100, Au1550 and Au12x0.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version.
9 *
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
11 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
13 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
14 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
15 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
16 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
17 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
18 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
19 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20 *
21 * You should have received a copy of the GNU General Public License along
22 * with this program; if not, write to the Free Software Foundation, Inc.,
23 * 675 Mass Ave, Cambridge, MA 02139, USA.
24 *
25 * Notes :
26 * au1000 SoC have only one GPIO block : GPIO1
27 * Au1100, Au15x0, Au12x0 have a second one : GPIO2
28 */
29
30#include <linux/kernel.h>
31#include <linux/module.h>
32#include <linux/types.h>
33#include <linux/platform_device.h>
34#include <linux/gpio.h>
35
36#include <asm/mach-au1x00/au1000.h>
37#include <asm/mach-au1x00/gpio.h>
38
39#if !defined(CONFIG_SOC_AU1000)
40static int gpio2_get(struct gpio_chip *chip, unsigned offset)
41{
42 return alchemy_gpio2_get_value(offset + ALCHEMY_GPIO2_BASE);
43}
44
45static void gpio2_set(struct gpio_chip *chip, unsigned offset, int value)
46{
47 alchemy_gpio2_set_value(offset + ALCHEMY_GPIO2_BASE, value);
48}
49
50static int gpio2_direction_input(struct gpio_chip *chip, unsigned offset)
51{
52 return alchemy_gpio2_direction_input(offset + ALCHEMY_GPIO2_BASE);
53}
54
55static int gpio2_direction_output(struct gpio_chip *chip, unsigned offset,
56 int value)
57{
58 return alchemy_gpio2_direction_output(offset + ALCHEMY_GPIO2_BASE,
59 value);
60}
61
62static int gpio2_to_irq(struct gpio_chip *chip, unsigned offset)
63{
64 return alchemy_gpio2_to_irq(offset + ALCHEMY_GPIO2_BASE);
65}
66#endif /* !defined(CONFIG_SOC_AU1000) */
67
68static int gpio1_get(struct gpio_chip *chip, unsigned offset)
69{
70 return alchemy_gpio1_get_value(offset + ALCHEMY_GPIO1_BASE);
71}
72
73static void gpio1_set(struct gpio_chip *chip,
74 unsigned offset, int value)
75{
76 alchemy_gpio1_set_value(offset + ALCHEMY_GPIO1_BASE, value);
77}
78
79static int gpio1_direction_input(struct gpio_chip *chip, unsigned offset)
80{
81 return alchemy_gpio1_direction_input(offset + ALCHEMY_GPIO1_BASE);
82}
83
84static int gpio1_direction_output(struct gpio_chip *chip,
85 unsigned offset, int value)
86{
87 return alchemy_gpio1_direction_output(offset + ALCHEMY_GPIO1_BASE,
88 value);
89}
90
91static int gpio1_to_irq(struct gpio_chip *chip, unsigned offset)
92{
93 return alchemy_gpio1_to_irq(offset + ALCHEMY_GPIO1_BASE);
94}
95
96struct gpio_chip alchemy_gpio_chip[] = {
97 [0] = {
98 .label = "alchemy-gpio1",
99 .direction_input = gpio1_direction_input,
100 .direction_output = gpio1_direction_output,
101 .get = gpio1_get,
102 .set = gpio1_set,
103 .to_irq = gpio1_to_irq,
104 .base = ALCHEMY_GPIO1_BASE,
105 .ngpio = ALCHEMY_GPIO1_NUM,
106 },
107#if !defined(CONFIG_SOC_AU1000)
108 [1] = {
109 .label = "alchemy-gpio2",
110 .direction_input = gpio2_direction_input,
111 .direction_output = gpio2_direction_output,
112 .get = gpio2_get,
113 .set = gpio2_set,
114 .to_irq = gpio2_to_irq,
115 .base = ALCHEMY_GPIO2_BASE,
116 .ngpio = ALCHEMY_GPIO2_NUM,
117 },
118#endif
119};
120
121static int __init alchemy_gpiolib_init(void)
122{
123 gpiochip_add(&alchemy_gpio_chip[0]);
124#if !defined(CONFIG_SOC_AU1000)
125 gpiochip_add(&alchemy_gpio_chip[1]);
126#endif
127
128 return 0;
129}
130arch_initcall(alchemy_gpiolib_init);
diff --git a/arch/mips/alchemy/common/reset.c b/arch/mips/alchemy/common/reset.c
index 0191c936cb5e..4791011e8f92 100644
--- a/arch/mips/alchemy/common/reset.c
+++ b/arch/mips/alchemy/common/reset.c
@@ -27,8 +27,9 @@
27 * 675 Mass Ave, Cambridge, MA 02139, USA. 27 * 675 Mass Ave, Cambridge, MA 02139, USA.
28 */ 28 */
29 29
30#include <asm/cacheflush.h> 30#include <linux/gpio.h>
31 31
32#include <asm/cacheflush.h>
32#include <asm/mach-au1x00/au1000.h> 33#include <asm/mach-au1x00/au1000.h>
33 34
34void au1000_restart(char *command) 35void au1000_restart(char *command)
@@ -161,7 +162,7 @@ void au1000_halt(void)
161#else 162#else
162 printk(KERN_NOTICE "\n** You can safely turn off the power\n"); 163 printk(KERN_NOTICE "\n** You can safely turn off the power\n");
163#ifdef CONFIG_MIPS_MIRAGE 164#ifdef CONFIG_MIPS_MIRAGE
164 au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT); 165 gpio_direction_output(210, 1);
165#endif 166#endif
166#ifdef CONFIG_MIPS_DB1200 167#ifdef CONFIG_MIPS_DB1200
167 au_writew(au_readw(0xB980001C) | (1 << 14), 0xB980001C); 168 au_writew(au_readw(0xB980001C) | (1 << 14), 0xB980001C);
diff --git a/arch/mips/alchemy/devboards/db1x00/board_setup.c b/arch/mips/alchemy/devboards/db1x00/board_setup.c
index a75ffbf99f25..de30d8ea7176 100644
--- a/arch/mips/alchemy/devboards/db1x00/board_setup.c
+++ b/arch/mips/alchemy/devboards/db1x00/board_setup.c
@@ -27,6 +27,7 @@
27 * 675 Mass Ave, Cambridge, MA 02139, USA. 27 * 675 Mass Ave, Cambridge, MA 02139, USA.
28 */ 28 */
29 29
30#include <linux/gpio.h>
30#include <linux/init.h> 31#include <linux/init.h>
31 32
32#include <asm/mach-au1x00/au1000.h> 33#include <asm/mach-au1x00/au1000.h>
@@ -94,12 +95,12 @@ void __init board_setup(void)
94#endif 95#endif
95 bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ 96 bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */
96 97
97#ifdef CONFIG_MIPS_MIRAGE
98 /* Enable GPIO[31:0] inputs */ 98 /* Enable GPIO[31:0] inputs */
99 au_writel(0, SYS_PININPUTEN); 99 alchemy_gpio1_input_enable();
100 100
101 /* GPIO[20] is output, tristate the other input primary GPIOs */ 101#ifdef CONFIG_MIPS_MIRAGE
102 au_writel(~(1 << 20), SYS_TRIOUTCLR); 102 /* GPIO[20] is output */
103 alchemy_gpio_direction_output(20, 0);
103 104
104 /* Set GPIO[210:208] instead of SSI_0 */ 105 /* Set GPIO[210:208] instead of SSI_0 */
105 pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; 106 pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0;
@@ -118,8 +119,7 @@ void __init board_setup(void)
118 * Enable speaker amplifier. This should 119 * Enable speaker amplifier. This should
119 * be part of the audio driver. 120 * be part of the audio driver.
120 */ 121 */
121 au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); 122 alchemy_gpio_direction_output(209, 1);
122 au_writel(0x02000200, GPIO2_OUTPUT);
123#endif 123#endif
124 124
125 au_sync(); 125 au_sync();
diff --git a/arch/mips/alchemy/devboards/pb1000/board_setup.c b/arch/mips/alchemy/devboards/pb1000/board_setup.c
index aed2fdecc709..cd273545e810 100644
--- a/arch/mips/alchemy/devboards/pb1000/board_setup.c
+++ b/arch/mips/alchemy/devboards/pb1000/board_setup.c
@@ -24,6 +24,7 @@
24 */ 24 */
25 25
26#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/gpio.h>
27#include <linux/init.h> 28#include <linux/init.h>
28#include <linux/interrupt.h> 29#include <linux/interrupt.h>
29#include <asm/mach-au1x00/au1000.h> 30#include <asm/mach-au1x00/au1000.h>
@@ -130,8 +131,11 @@ void __init board_setup(void)
130 pin_func |= SYS_PF_USB; 131 pin_func |= SYS_PF_USB;
131 132
132 au_writel(pin_func, SYS_PINFUNC); 133 au_writel(pin_func, SYS_PINFUNC);
133 au_writel(0x2800, SYS_TRIOUTCLR); 134
134 au_writel(0x0030, SYS_OUTPUTCLR); 135 alchemy_gpio_direction_input(11);
136 alchemy_gpio_direction_input(13);
137 alchemy_gpio_direction_output(4, 0);
138 alchemy_gpio_direction_output(5, 0);
135#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ 139#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */
136 140
137 /* Make GPIO 15 an input (for interrupt line) */ 141 /* Make GPIO 15 an input (for interrupt line) */
@@ -140,7 +144,7 @@ void __init board_setup(void)
140 pin_func |= SYS_PF_I2S; 144 pin_func |= SYS_PF_I2S;
141 au_writel(pin_func, SYS_PINFUNC); 145 au_writel(pin_func, SYS_PINFUNC);
142 146
143 au_writel(0x8000, SYS_TRIOUTCLR); 147 alchemy_gpio_direction_input(15);
144 148
145 static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; 149 static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00;
146 au_writel(static_cfg0, MEM_STCFG0); 150 au_writel(static_cfg0, MEM_STCFG0);
diff --git a/arch/mips/alchemy/devboards/pb1100/board_setup.c b/arch/mips/alchemy/devboards/pb1100/board_setup.c
index 4df57fae15d4..61263081ef58 100644
--- a/arch/mips/alchemy/devboards/pb1100/board_setup.c
+++ b/arch/mips/alchemy/devboards/pb1100/board_setup.c
@@ -23,6 +23,7 @@
23 * 675 Mass Ave, Cambridge, MA 02139, USA. 23 * 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#include <linux/gpio.h>
26#include <linux/init.h> 27#include <linux/init.h>
27#include <linux/delay.h> 28#include <linux/delay.h>
28#include <linux/interrupt.h> 29#include <linux/interrupt.h>
@@ -88,7 +89,7 @@ void __init board_setup(void)
88 89
89 /* Set AUX clock to 12 MHz * 8 = 96 MHz */ 90 /* Set AUX clock to 12 MHz * 8 = 96 MHz */
90 au_writel(8, SYS_AUXPLL); 91 au_writel(8, SYS_AUXPLL);
91 au_writel(0, SYS_PININPUTEN); 92 alchemy_gpio1_input_enable();
92 udelay(100); 93 udelay(100);
93 94
94#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) 95#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
diff --git a/arch/mips/alchemy/devboards/pb1500/board_setup.c b/arch/mips/alchemy/devboards/pb1500/board_setup.c
index fed3b093156a..d7a56569e7ed 100644
--- a/arch/mips/alchemy/devboards/pb1500/board_setup.c
+++ b/arch/mips/alchemy/devboards/pb1500/board_setup.c
@@ -23,8 +23,9 @@
23 * 675 Mass Ave, Cambridge, MA 02139, USA. 23 * 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#include <linux/init.h>
27#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/gpio.h>
28#include <linux/init.h>
28#include <linux/interrupt.h> 29#include <linux/interrupt.h>
29 30
30#include <asm/mach-au1x00/au1000.h> 31#include <asm/mach-au1x00/au1000.h>
@@ -90,11 +91,12 @@ void __init board_setup(void)
90 au_writel(0, SYS_PINSTATERD); 91 au_writel(0, SYS_PINSTATERD);
91 udelay(100); 92 udelay(100);
92 93
93#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
94
95 /* GPIO201 is input for PCMCIA card detect */ 94 /* GPIO201 is input for PCMCIA card detect */
96 /* GPIO203 is input for PCMCIA interrupt request */ 95 /* GPIO203 is input for PCMCIA interrupt request */
97 au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); 96 alchemy_gpio_direction_input(201);
97 alchemy_gpio_direction_input(203);
98
99#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
98 100
99 /* Zero and disable FREQ2 */ 101 /* Zero and disable FREQ2 */
100 sys_freqctrl = au_readl(SYS_FREQCTRL0); 102 sys_freqctrl = au_readl(SYS_FREQCTRL0);
diff --git a/arch/mips/alchemy/devboards/pm.c b/arch/mips/alchemy/devboards/pm.c
index d5eb9c325ed0..632f9862a0fb 100644
--- a/arch/mips/alchemy/devboards/pm.c
+++ b/arch/mips/alchemy/devboards/pm.c
@@ -9,6 +9,7 @@
9#include <linux/suspend.h> 9#include <linux/suspend.h>
10#include <linux/sysfs.h> 10#include <linux/sysfs.h>
11#include <asm/mach-au1x00/au1000.h> 11#include <asm/mach-au1x00/au1000.h>
12#include <asm/mach-au1x00/gpio.h>
12 13
13/* 14/*
14 * Generic suspend userspace interface for Alchemy development boards. 15 * Generic suspend userspace interface for Alchemy development boards.
@@ -26,7 +27,7 @@ static unsigned long db1x_pm_last_wakesrc;
26static int db1x_pm_enter(suspend_state_t state) 27static int db1x_pm_enter(suspend_state_t state)
27{ 28{
28 /* enable GPIO based wakeup */ 29 /* enable GPIO based wakeup */
29 au_writel(1, SYS_PININPUTEN); 30 alchemy_gpio1_input_enable();
30 31
31 /* clear and setup wake cause and source */ 32 /* clear and setup wake cause and source */
32 au_writel(0, SYS_WAKEMSK); 33 au_writel(0, SYS_WAKEMSK);
diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c
index 8ed1ae12bc55..cc32c69a74ad 100644
--- a/arch/mips/alchemy/mtx-1/board_setup.c
+++ b/arch/mips/alchemy/mtx-1/board_setup.c
@@ -28,6 +28,7 @@
28 * 675 Mass Ave, Cambridge, MA 02139, USA. 28 * 675 Mass Ave, Cambridge, MA 02139, USA.
29 */ 29 */
30 30
31#include <linux/gpio.h>
31#include <linux/init.h> 32#include <linux/init.h>
32 33
33#include <asm/mach-au1x00/au1000.h> 34#include <asm/mach-au1x00/au1000.h>
@@ -55,10 +56,11 @@ void __init board_setup(void)
55 } 56 }
56#endif 57#endif
57 58
59 alchemy_gpio2_enable();
60
58#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) 61#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
59 /* Enable USB power switch */ 62 /* Enable USB power switch */
60 au_writel(au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR); 63 alchemy_gpio_direction_output(204, 0);
61 au_writel(0x100000, GPIO2_OUTPUT);
62#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ 64#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */
63 65
64#ifdef CONFIG_PCI 66#ifdef CONFIG_PCI
@@ -74,14 +76,14 @@ void __init board_setup(void)
74 76
75 /* Initialize GPIO */ 77 /* Initialize GPIO */
76 au_writel(0xFFFFFFFF, SYS_TRIOUTCLR); 78 au_writel(0xFFFFFFFF, SYS_TRIOUTCLR);
77 au_writel(0x00000001, SYS_OUTPUTCLR); /* set M66EN (PCI 66MHz) to OFF */ 79 alchemy_gpio_direction_output(0, 0); /* Disable M66EN (PCI 66MHz) */
78 au_writel(0x00000008, SYS_OUTPUTSET); /* set PCI CLKRUN# to OFF */ 80 alchemy_gpio_direction_output(3, 1); /* Disable PCI CLKRUN# */
79 au_writel(0x00000002, SYS_OUTPUTSET); /* set EXT_IO3 ON */ 81 alchemy_gpio_direction_output(1, 1); /* Enable EXT_IO3 */
80 au_writel(0x00000020, SYS_OUTPUTCLR); /* set eth PHY TX_ER to OFF */ 82 alchemy_gpio_direction_output(5, 0); /* Disable eth PHY TX_ER */
81 83
82 /* Enable LED and set it to green */ 84 /* Enable LED and set it to green */
83 au_writel(au_readl(GPIO2_DIR) | 0x1800, GPIO2_DIR); 85 alchemy_gpio_direction_output(211, 1); /* green on */
84 au_writel(0x18000800, GPIO2_OUTPUT); 86 alchemy_gpio_direction_output(212, 0); /* red off */
85 87
86 board_pci_idsel = mtx1_pci_idsel; 88 board_pci_idsel = mtx1_pci_idsel;
87 89
@@ -101,10 +103,10 @@ mtx1_pci_idsel(unsigned int devsel, int assert)
101 103
102 if (assert && devsel != 0) 104 if (assert && devsel != 0)
103 /* Suppress signal to Cardbus */ 105 /* Suppress signal to Cardbus */
104 au_writel(0x00000002, SYS_OUTPUTCLR); /* set EXT_IO3 OFF */ 106 gpio_set_value(1, 0); /* set EXT_IO3 OFF */
105 else 107 else
106 au_writel(0x00000002, SYS_OUTPUTSET); /* set EXT_IO3 ON */ 108 gpio_set_value(1, 1); /* set EXT_IO3 ON */
109
107 au_sync_udelay(1); 110 au_sync_udelay(1);
108 return 1; 111 return 1;
109} 112}
110
diff --git a/arch/mips/alchemy/mtx-1/platform.c b/arch/mips/alchemy/mtx-1/platform.c
index 8b5914d1241f..e30e42add697 100644
--- a/arch/mips/alchemy/mtx-1/platform.c
+++ b/arch/mips/alchemy/mtx-1/platform.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * MTX-1 platform devices registration 2 * MTX-1 platform devices registration
3 * 3 *
4 * Copyright (C) 2007, Florian Fainelli <florian@openwrt.org> 4 * Copyright (C) 2007-2009, Florian Fainelli <florian@openwrt.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -142,7 +142,17 @@ static struct __initdata platform_device * mtx1_devs[] = {
142 142
143static int __init mtx1_register_devices(void) 143static int __init mtx1_register_devices(void)
144{ 144{
145 gpio_direction_input(207); 145 int rc;
146
147 rc = gpio_request(mtx1_gpio_button[0].gpio,
148 mtx1_gpio_button[0].desc);
149 if (rc < 0) {
150 printk(KERN_INFO "mtx1: failed to request %d\n",
151 mtx1_gpio_button[0].gpio);
152 goto out;
153 }
154 gpio_direction_input(mtx1_gpio_button[0].gpio);
155out:
146 return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs)); 156 return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
147} 157}
148 158
diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c
index a2634fabc50d..4de2d48caed8 100644
--- a/arch/mips/alchemy/xxs1500/board_setup.c
+++ b/arch/mips/alchemy/xxs1500/board_setup.c
@@ -23,6 +23,7 @@
23 * 675 Mass Ave, Cambridge, MA 02139, USA. 23 * 675 Mass Ave, Cambridge, MA 02139, USA.
24 */ 24 */
25 25
26#include <linux/gpio.h>
26#include <linux/init.h> 27#include <linux/init.h>
27#include <linux/delay.h> 28#include <linux/delay.h>
28 29
@@ -50,6 +51,9 @@ void __init board_setup(void)
50 } 51 }
51#endif 52#endif
52 53
54 alchemy_gpio1_input_enable();
55 alchemy_gpio2_enable();
56
53 /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ 57 /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */
54 pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; 58 pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3;
55 pin_func |= SYS_PF_UR3; 59 pin_func |= SYS_PF_UR3;
@@ -65,20 +69,19 @@ void __init board_setup(void)
65 au_writel(0x01, UART3_ADDR + UART_MCR); /* UART_MCR_DTR is 0x01??? */ 69 au_writel(0x01, UART3_ADDR + UART_MCR); /* UART_MCR_DTR is 0x01??? */
66 70
67#ifdef CONFIG_PCMCIA_XXS1500 71#ifdef CONFIG_PCMCIA_XXS1500
68 /* Setup PCMCIA signals */
69 au_writel(0, SYS_PININPUTEN);
70
71 /* GPIO 0, 1, and 4 are inputs */ 72 /* GPIO 0, 1, and 4 are inputs */
72 au_writel(1 | (1 << 1) | (1 << 4), SYS_TRIOUTCLR); 73 alchemy_gpio_direction_input(0);
74 alchemy_gpio_direction_input(1);
75 alchemy_gpio_direction_input(4);
73 76
74 /* Enable GPIO2 if not already enabled */
75 au_writel(1, GPIO2_ENABLE);
76 /* GPIO2 208/9/10/11 are inputs */ 77 /* GPIO2 208/9/10/11 are inputs */
77 au_writel((1 << 8) | (1 << 9) | (1 << 10) | (1 << 11), GPIO2_DIR); 78 alchemy_gpio_direction_input(208);
79 alchemy_gpio_direction_input(209);
80 alchemy_gpio_direction_input(210);
81 alchemy_gpio_direction_input(211);
78 82
79 /* Turn off power */ 83 /* Turn off power */
80 au_writel((au_readl(GPIO2_PINSTATE) & ~(1 << 14)) | (1 << 30), 84 alchemy_gpio_direction_output(214, 0);
81 GPIO2_OUTPUT);
82#endif 85#endif
83 86
84#ifdef CONFIG_PCI 87#ifdef CONFIG_PCI
diff --git a/arch/mips/ar7/Makefile b/arch/mips/ar7/Makefile
new file mode 100644
index 000000000000..26bc5da18997
--- /dev/null
+++ b/arch/mips/ar7/Makefile
@@ -0,0 +1,11 @@
1
2obj-y := \
3 prom.o \
4 setup.o \
5 memory.o \
6 irq.o \
7 time.o \
8 platform.o \
9 gpio.o \
10 clock.o
11EXTRA_CFLAGS += -Werror
diff --git a/arch/mips/ar7/clock.c b/arch/mips/ar7/clock.c
new file mode 100644
index 000000000000..cc65c8eb391b
--- /dev/null
+++ b/arch/mips/ar7/clock.c
@@ -0,0 +1,427 @@
1/*
2 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include <linux/kernel.h>
21#include <linux/init.h>
22#include <linux/types.h>
23#include <linux/module.h>
24#include <linux/delay.h>
25#include <linux/gcd.h>
26#include <linux/io.h>
27
28#include <asm/addrspace.h>
29#include <asm/mach-ar7/ar7.h>
30
31#define BOOT_PLL_SOURCE_MASK 0x3
32#define CPU_PLL_SOURCE_SHIFT 16
33#define BUS_PLL_SOURCE_SHIFT 14
34#define USB_PLL_SOURCE_SHIFT 18
35#define DSP_PLL_SOURCE_SHIFT 22
36#define BOOT_PLL_SOURCE_AFE 0
37#define BOOT_PLL_SOURCE_BUS 0
38#define BOOT_PLL_SOURCE_REF 1
39#define BOOT_PLL_SOURCE_XTAL 2
40#define BOOT_PLL_SOURCE_CPU 3
41#define BOOT_PLL_BYPASS 0x00000020
42#define BOOT_PLL_ASYNC_MODE 0x02000000
43#define BOOT_PLL_2TO1_MODE 0x00008000
44
45#define TNETD7200_CLOCK_ID_CPU 0
46#define TNETD7200_CLOCK_ID_DSP 1
47#define TNETD7200_CLOCK_ID_USB 2
48
49#define TNETD7200_DEF_CPU_CLK 211000000
50#define TNETD7200_DEF_DSP_CLK 125000000
51#define TNETD7200_DEF_USB_CLK 48000000
52
53struct tnetd7300_clock {
54 u32 ctrl;
55#define PREDIV_MASK 0x001f0000
56#define PREDIV_SHIFT 16
57#define POSTDIV_MASK 0x0000001f
58 u32 unused1[3];
59 u32 pll;
60#define MUL_MASK 0x0000f000
61#define MUL_SHIFT 12
62#define PLL_MODE_MASK 0x00000001
63#define PLL_NDIV 0x00000800
64#define PLL_DIV 0x00000002
65#define PLL_STATUS 0x00000001
66 u32 unused2[3];
67};
68
69struct tnetd7300_clocks {
70 struct tnetd7300_clock bus;
71 struct tnetd7300_clock cpu;
72 struct tnetd7300_clock usb;
73 struct tnetd7300_clock dsp;
74};
75
76struct tnetd7200_clock {
77 u32 ctrl;
78 u32 unused1[3];
79#define DIVISOR_ENABLE_MASK 0x00008000
80 u32 mul;
81 u32 prediv;
82 u32 postdiv;
83 u32 postdiv2;
84 u32 unused2[6];
85 u32 cmd;
86 u32 status;
87 u32 cmden;
88 u32 padding[15];
89};
90
91struct tnetd7200_clocks {
92 struct tnetd7200_clock cpu;
93 struct tnetd7200_clock dsp;
94 struct tnetd7200_clock usb;
95};
96
97int ar7_cpu_clock = 150000000;
98EXPORT_SYMBOL(ar7_cpu_clock);
99int ar7_bus_clock = 125000000;
100EXPORT_SYMBOL(ar7_bus_clock);
101int ar7_dsp_clock;
102EXPORT_SYMBOL(ar7_dsp_clock);
103
104static void approximate(int base, int target, int *prediv,
105 int *postdiv, int *mul)
106{
107 int i, j, k, freq, res = target;
108 for (i = 1; i <= 16; i++)
109 for (j = 1; j <= 32; j++)
110 for (k = 1; k <= 32; k++) {
111 freq = abs(base / j * i / k - target);
112 if (freq < res) {
113 res = freq;
114 *mul = i;
115 *prediv = j;
116 *postdiv = k;
117 }
118 }
119}
120
121static void calculate(int base, int target, int *prediv, int *postdiv,
122 int *mul)
123{
124 int tmp_gcd, tmp_base, tmp_freq;
125
126 for (*prediv = 1; *prediv <= 32; (*prediv)++) {
127 tmp_base = base / *prediv;
128 tmp_gcd = gcd(target, tmp_base);
129 *mul = target / tmp_gcd;
130 *postdiv = tmp_base / tmp_gcd;
131 if ((*mul < 1) || (*mul >= 16))
132 continue;
133 if ((*postdiv > 0) & (*postdiv <= 32))
134 break;
135 }
136
137 if (base / *prediv * *mul / *postdiv != target) {
138 approximate(base, target, prediv, postdiv, mul);
139 tmp_freq = base / *prediv * *mul / *postdiv;
140 printk(KERN_WARNING
141 "Adjusted requested frequency %d to %d\n",
142 target, tmp_freq);
143 }
144
145 printk(KERN_DEBUG "Clocks: prediv: %d, postdiv: %d, mul: %d\n",
146 *prediv, *postdiv, *mul);
147}
148
149static int tnetd7300_dsp_clock(void)
150{
151 u32 didr1, didr2;
152 u8 rev = ar7_chip_rev();
153 didr1 = readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x18));
154 didr2 = readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x1c));
155 if (didr2 & (1 << 23))
156 return 0;
157 if ((rev >= 0x23) && (rev != 0x57))
158 return 250000000;
159 if ((((didr2 & 0x1fff) << 10) | ((didr1 & 0xffc00000) >> 22))
160 > 4208000)
161 return 250000000;
162 return 0;
163}
164
165static int tnetd7300_get_clock(u32 shift, struct tnetd7300_clock *clock,
166 u32 *bootcr, u32 bus_clock)
167{
168 int product;
169 int base_clock = AR7_REF_CLOCK;
170 u32 ctrl = readl(&clock->ctrl);
171 u32 pll = readl(&clock->pll);
172 int prediv = ((ctrl & PREDIV_MASK) >> PREDIV_SHIFT) + 1;
173 int postdiv = (ctrl & POSTDIV_MASK) + 1;
174 int divisor = prediv * postdiv;
175 int mul = ((pll & MUL_MASK) >> MUL_SHIFT) + 1;
176
177 switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) {
178 case BOOT_PLL_SOURCE_BUS:
179 base_clock = bus_clock;
180 break;
181 case BOOT_PLL_SOURCE_REF:
182 base_clock = AR7_REF_CLOCK;
183 break;
184 case BOOT_PLL_SOURCE_XTAL:
185 base_clock = AR7_XTAL_CLOCK;
186 break;
187 case BOOT_PLL_SOURCE_CPU:
188 base_clock = ar7_cpu_clock;
189 break;
190 }
191
192 if (*bootcr & BOOT_PLL_BYPASS)
193 return base_clock / divisor;
194
195 if ((pll & PLL_MODE_MASK) == 0)
196 return (base_clock >> (mul / 16 + 1)) / divisor;
197
198 if ((pll & (PLL_NDIV | PLL_DIV)) == (PLL_NDIV | PLL_DIV)) {
199 product = (mul & 1) ?
200 (base_clock * mul) >> 1 :
201 (base_clock * (mul - 1)) >> 2;
202 return product / divisor;
203 }
204
205 if (mul == 16)
206 return base_clock / divisor;
207
208 return base_clock * mul / divisor;
209}
210
211static void tnetd7300_set_clock(u32 shift, struct tnetd7300_clock *clock,
212 u32 *bootcr, u32 frequency)
213{
214 int prediv, postdiv, mul;
215 int base_clock = ar7_bus_clock;
216
217 switch ((*bootcr & (BOOT_PLL_SOURCE_MASK << shift)) >> shift) {
218 case BOOT_PLL_SOURCE_BUS:
219 base_clock = ar7_bus_clock;
220 break;
221 case BOOT_PLL_SOURCE_REF:
222 base_clock = AR7_REF_CLOCK;
223 break;
224 case BOOT_PLL_SOURCE_XTAL:
225 base_clock = AR7_XTAL_CLOCK;
226 break;
227 case BOOT_PLL_SOURCE_CPU:
228 base_clock = ar7_cpu_clock;
229 break;
230 }
231
232 calculate(base_clock, frequency, &prediv, &postdiv, &mul);
233
234 writel(((prediv - 1) << PREDIV_SHIFT) | (postdiv - 1), &clock->ctrl);
235 msleep(1);
236 writel(4, &clock->pll);
237 while (readl(&clock->pll) & PLL_STATUS)
238 ;
239 writel(((mul - 1) << MUL_SHIFT) | (0xff << 3) | 0x0e, &clock->pll);
240 msleep(75);
241}
242
243static void __init tnetd7300_init_clocks(void)
244{
245 u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4);
246 struct tnetd7300_clocks *clocks =
247 ioremap_nocache(UR8_REGS_CLOCKS,
248 sizeof(struct tnetd7300_clocks));
249
250 ar7_bus_clock = tnetd7300_get_clock(BUS_PLL_SOURCE_SHIFT,
251 &clocks->bus, bootcr, AR7_AFE_CLOCK);
252
253 if (*bootcr & BOOT_PLL_ASYNC_MODE)
254 ar7_cpu_clock = tnetd7300_get_clock(CPU_PLL_SOURCE_SHIFT,
255 &clocks->cpu, bootcr, AR7_AFE_CLOCK);
256 else
257 ar7_cpu_clock = ar7_bus_clock;
258
259 if (ar7_dsp_clock == 250000000)
260 tnetd7300_set_clock(DSP_PLL_SOURCE_SHIFT, &clocks->dsp,
261 bootcr, ar7_dsp_clock);
262
263 iounmap(clocks);
264 iounmap(bootcr);
265}
266
267static void tnetd7200_set_clock(int base, struct tnetd7200_clock *clock,
268 int prediv, int postdiv, int postdiv2, int mul, u32 frequency)
269{
270 printk(KERN_INFO
271 "Clocks: base = %d, frequency = %u, prediv = %d, "
272 "postdiv = %d, postdiv2 = %d, mul = %d\n",
273 base, frequency, prediv, postdiv, postdiv2, mul);
274
275 writel(0, &clock->ctrl);
276 writel(DIVISOR_ENABLE_MASK | ((prediv - 1) & 0x1F), &clock->prediv);
277 writel((mul - 1) & 0xF, &clock->mul);
278
279 while (readl(&clock->status) & 0x1)
280 ; /* nop */
281
282 writel(DIVISOR_ENABLE_MASK | ((postdiv - 1) & 0x1F), &clock->postdiv);
283
284 writel(readl(&clock->cmden) | 1, &clock->cmden);
285 writel(readl(&clock->cmd) | 1, &clock->cmd);
286
287 while (readl(&clock->status) & 0x1)
288 ; /* nop */
289
290 writel(DIVISOR_ENABLE_MASK | ((postdiv2 - 1) & 0x1F), &clock->postdiv2);
291
292 writel(readl(&clock->cmden) | 1, &clock->cmden);
293 writel(readl(&clock->cmd) | 1, &clock->cmd);
294
295 while (readl(&clock->status) & 0x1)
296 ; /* nop */
297
298 writel(readl(&clock->ctrl) | 1, &clock->ctrl);
299}
300
301static int tnetd7200_get_clock_base(int clock_id, u32 *bootcr)
302{
303 if (*bootcr & BOOT_PLL_ASYNC_MODE)
304 /* Async */
305 switch (clock_id) {
306 case TNETD7200_CLOCK_ID_DSP:
307 return AR7_REF_CLOCK;
308 default:
309 return AR7_AFE_CLOCK;
310 }
311 else
312 /* Sync */
313 if (*bootcr & BOOT_PLL_2TO1_MODE)
314 /* 2:1 */
315 switch (clock_id) {
316 case TNETD7200_CLOCK_ID_DSP:
317 return AR7_REF_CLOCK;
318 default:
319 return AR7_AFE_CLOCK;
320 }
321 else
322 /* 1:1 */
323 return AR7_REF_CLOCK;
324}
325
326
327static void __init tnetd7200_init_clocks(void)
328{
329 u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4);
330 struct tnetd7200_clocks *clocks =
331 ioremap_nocache(AR7_REGS_CLOCKS,
332 sizeof(struct tnetd7200_clocks));
333 int cpu_base, cpu_mul, cpu_prediv, cpu_postdiv;
334 int dsp_base, dsp_mul, dsp_prediv, dsp_postdiv;
335 int usb_base, usb_mul, usb_prediv, usb_postdiv;
336
337 cpu_base = tnetd7200_get_clock_base(TNETD7200_CLOCK_ID_CPU, bootcr);
338 dsp_base = tnetd7200_get_clock_base(TNETD7200_CLOCK_ID_DSP, bootcr);
339
340 if (*bootcr & BOOT_PLL_ASYNC_MODE) {
341 printk(KERN_INFO "Clocks: Async mode\n");
342
343 printk(KERN_INFO "Clocks: Setting DSP clock\n");
344 calculate(dsp_base, TNETD7200_DEF_DSP_CLK,
345 &dsp_prediv, &dsp_postdiv, &dsp_mul);
346 ar7_bus_clock =
347 ((dsp_base / dsp_prediv) * dsp_mul) / dsp_postdiv;
348 tnetd7200_set_clock(dsp_base, &clocks->dsp,
349 dsp_prediv, dsp_postdiv * 2, dsp_postdiv, dsp_mul * 2,
350 ar7_bus_clock);
351
352 printk(KERN_INFO "Clocks: Setting CPU clock\n");
353 calculate(cpu_base, TNETD7200_DEF_CPU_CLK, &cpu_prediv,
354 &cpu_postdiv, &cpu_mul);
355 ar7_cpu_clock =
356 ((cpu_base / cpu_prediv) * cpu_mul) / cpu_postdiv;
357 tnetd7200_set_clock(cpu_base, &clocks->cpu,
358 cpu_prediv, cpu_postdiv, -1, cpu_mul,
359 ar7_cpu_clock);
360
361 } else
362 if (*bootcr & BOOT_PLL_2TO1_MODE) {
363 printk(KERN_INFO "Clocks: Sync 2:1 mode\n");
364
365 printk(KERN_INFO "Clocks: Setting CPU clock\n");
366 calculate(cpu_base, TNETD7200_DEF_CPU_CLK, &cpu_prediv,
367 &cpu_postdiv, &cpu_mul);
368 ar7_cpu_clock = ((cpu_base / cpu_prediv) * cpu_mul)
369 / cpu_postdiv;
370 tnetd7200_set_clock(cpu_base, &clocks->cpu,
371 cpu_prediv, cpu_postdiv, -1, cpu_mul,
372 ar7_cpu_clock);
373
374 printk(KERN_INFO "Clocks: Setting DSP clock\n");
375 calculate(dsp_base, TNETD7200_DEF_DSP_CLK, &dsp_prediv,
376 &dsp_postdiv, &dsp_mul);
377 ar7_bus_clock = ar7_cpu_clock / 2;
378 tnetd7200_set_clock(dsp_base, &clocks->dsp,
379 dsp_prediv, dsp_postdiv * 2, dsp_postdiv,
380 dsp_mul * 2, ar7_bus_clock);
381 } else {
382 printk(KERN_INFO "Clocks: Sync 1:1 mode\n");
383
384 printk(KERN_INFO "Clocks: Setting DSP clock\n");
385 calculate(dsp_base, TNETD7200_DEF_DSP_CLK, &dsp_prediv,
386 &dsp_postdiv, &dsp_mul);
387 ar7_bus_clock = ((dsp_base / dsp_prediv) * dsp_mul)
388 / dsp_postdiv;
389 tnetd7200_set_clock(dsp_base, &clocks->dsp,
390 dsp_prediv, dsp_postdiv * 2, dsp_postdiv,
391 dsp_mul * 2, ar7_bus_clock);
392
393 ar7_cpu_clock = ar7_bus_clock;
394 }
395
396 printk(KERN_INFO "Clocks: Setting USB clock\n");
397 usb_base = ar7_bus_clock;
398 calculate(usb_base, TNETD7200_DEF_USB_CLK, &usb_prediv,
399 &usb_postdiv, &usb_mul);
400 tnetd7200_set_clock(usb_base, &clocks->usb,
401 usb_prediv, usb_postdiv, -1, usb_mul,
402 TNETD7200_DEF_USB_CLK);
403
404 ar7_dsp_clock = ar7_cpu_clock;
405
406 iounmap(clocks);
407 iounmap(bootcr);
408}
409
410int __init ar7_init_clocks(void)
411{
412 switch (ar7_chip_id()) {
413 case AR7_CHIP_7100:
414 case AR7_CHIP_7200:
415 tnetd7200_init_clocks();
416 break;
417 case AR7_CHIP_7300:
418 ar7_dsp_clock = tnetd7300_dsp_clock();
419 tnetd7300_init_clocks();
420 break;
421 default:
422 break;
423 }
424
425 return 0;
426}
427arch_initcall(ar7_init_clocks);
diff --git a/arch/mips/ar7/gpio.c b/arch/mips/ar7/gpio.c
new file mode 100644
index 000000000000..74e14a3dbf4a
--- /dev/null
+++ b/arch/mips/ar7/gpio.c
@@ -0,0 +1,48 @@
1/*
2 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include <linux/module.h>
21
22#include <asm/mach-ar7/gpio.h>
23
24static const char *ar7_gpio_list[AR7_GPIO_MAX];
25
26int gpio_request(unsigned gpio, const char *label)
27{
28 if (gpio >= AR7_GPIO_MAX)
29 return -EINVAL;
30
31 if (ar7_gpio_list[gpio])
32 return -EBUSY;
33
34 if (label)
35 ar7_gpio_list[gpio] = label;
36 else
37 ar7_gpio_list[gpio] = "busy";
38
39 return 0;
40}
41EXPORT_SYMBOL(gpio_request);
42
43void gpio_free(unsigned gpio)
44{
45 BUG_ON(!ar7_gpio_list[gpio]);
46 ar7_gpio_list[gpio] = NULL;
47}
48EXPORT_SYMBOL(gpio_free);
diff --git a/arch/mips/ar7/irq.c b/arch/mips/ar7/irq.c
new file mode 100644
index 000000000000..c781556c44e4
--- /dev/null
+++ b/arch/mips/ar7/irq.c
@@ -0,0 +1,176 @@
1/*
2 * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include <linux/interrupt.h>
21#include <linux/io.h>
22
23#include <asm/irq_cpu.h>
24#include <asm/mipsregs.h>
25#include <asm/mach-ar7/ar7.h>
26
27#define EXCEPT_OFFSET 0x80
28#define PACE_OFFSET 0xA0
29#define CHNLS_OFFSET 0x200
30
31#define REG_OFFSET(irq, reg) ((irq) / 32 * 0x4 + reg * 0x10)
32#define SEC_REG_OFFSET(reg) (EXCEPT_OFFSET + reg * 0x8)
33#define SEC_SR_OFFSET (SEC_REG_OFFSET(0)) /* 0x80 */
34#define CR_OFFSET(irq) (REG_OFFSET(irq, 1)) /* 0x10 */
35#define SEC_CR_OFFSET (SEC_REG_OFFSET(1)) /* 0x88 */
36#define ESR_OFFSET(irq) (REG_OFFSET(irq, 2)) /* 0x20 */
37#define SEC_ESR_OFFSET (SEC_REG_OFFSET(2)) /* 0x90 */
38#define ECR_OFFSET(irq) (REG_OFFSET(irq, 3)) /* 0x30 */
39#define SEC_ECR_OFFSET (SEC_REG_OFFSET(3)) /* 0x98 */
40#define PIR_OFFSET (0x40)
41#define MSR_OFFSET (0x44)
42#define PM_OFFSET(irq) (REG_OFFSET(irq, 5)) /* 0x50 */
43#define TM_OFFSET(irq) (REG_OFFSET(irq, 6)) /* 0x60 */
44
45#define REG(addr) ((u32 *)(KSEG1ADDR(AR7_REGS_IRQ) + addr))
46
47#define CHNL_OFFSET(chnl) (CHNLS_OFFSET + (chnl * 4))
48
49static int ar7_irq_base;
50
51static void ar7_unmask_irq(unsigned int irq)
52{
53 writel(1 << ((irq - ar7_irq_base) % 32),
54 REG(ESR_OFFSET(irq - ar7_irq_base)));
55}
56
57static void ar7_mask_irq(unsigned int irq)
58{
59 writel(1 << ((irq - ar7_irq_base) % 32),
60 REG(ECR_OFFSET(irq - ar7_irq_base)));
61}
62
63static void ar7_ack_irq(unsigned int irq)
64{
65 writel(1 << ((irq - ar7_irq_base) % 32),
66 REG(CR_OFFSET(irq - ar7_irq_base)));
67}
68
69static void ar7_unmask_sec_irq(unsigned int irq)
70{
71 writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ESR_OFFSET));
72}
73
74static void ar7_mask_sec_irq(unsigned int irq)
75{
76 writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ECR_OFFSET));
77}
78
79static void ar7_ack_sec_irq(unsigned int irq)
80{
81 writel(1 << (irq - ar7_irq_base - 40), REG(SEC_CR_OFFSET));
82}
83
84static struct irq_chip ar7_irq_type = {
85 .name = "AR7",
86 .unmask = ar7_unmask_irq,
87 .mask = ar7_mask_irq,
88 .ack = ar7_ack_irq
89};
90
91static struct irq_chip ar7_sec_irq_type = {
92 .name = "AR7",
93 .unmask = ar7_unmask_sec_irq,
94 .mask = ar7_mask_sec_irq,
95 .ack = ar7_ack_sec_irq,
96};
97
98static struct irqaction ar7_cascade_action = {
99 .handler = no_action,
100 .name = "AR7 cascade interrupt"
101};
102
103static void __init ar7_irq_init(int base)
104{
105 int i;
106 /*
107 * Disable interrupts and clear pending
108 */
109 writel(0xffffffff, REG(ECR_OFFSET(0)));
110 writel(0xff, REG(ECR_OFFSET(32)));
111 writel(0xffffffff, REG(SEC_ECR_OFFSET));
112 writel(0xffffffff, REG(CR_OFFSET(0)));
113 writel(0xff, REG(CR_OFFSET(32)));
114 writel(0xffffffff, REG(SEC_CR_OFFSET));
115
116 ar7_irq_base = base;
117
118 for (i = 0; i < 40; i++) {
119 writel(i, REG(CHNL_OFFSET(i)));
120 /* Primary IRQ's */
121 set_irq_chip_and_handler(base + i, &ar7_irq_type,
122 handle_level_irq);
123 /* Secondary IRQ's */
124 if (i < 32)
125 set_irq_chip_and_handler(base + i + 40,
126 &ar7_sec_irq_type,
127 handle_level_irq);
128 }
129
130 setup_irq(2, &ar7_cascade_action);
131 setup_irq(ar7_irq_base, &ar7_cascade_action);
132 set_c0_status(IE_IRQ0);
133}
134
135void __init arch_init_irq(void)
136{
137 mips_cpu_irq_init();
138 ar7_irq_init(8);
139}
140
141static void ar7_cascade(void)
142{
143 u32 status;
144 int i, irq;
145
146 /* Primary IRQ's */
147 irq = readl(REG(PIR_OFFSET)) & 0x3f;
148 if (irq) {
149 do_IRQ(ar7_irq_base + irq);
150 return;
151 }
152
153 /* Secondary IRQ's are cascaded through primary '0' */
154 writel(1, REG(CR_OFFSET(irq)));
155 status = readl(REG(SEC_SR_OFFSET));
156 for (i = 0; i < 32; i++) {
157 if (status & 1) {
158 do_IRQ(ar7_irq_base + i + 40);
159 return;
160 }
161 status >>= 1;
162 }
163
164 spurious_interrupt();
165}
166
167asmlinkage void plat_irq_dispatch(void)
168{
169 unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
170 if (pending & STATUSF_IP7) /* cpu timer */
171 do_IRQ(7);
172 else if (pending & STATUSF_IP2) /* int0 hardware line */
173 ar7_cascade();
174 else
175 spurious_interrupt();
176}
diff --git a/arch/mips/ar7/memory.c b/arch/mips/ar7/memory.c
new file mode 100644
index 000000000000..696c723dc6d4
--- /dev/null
+++ b/arch/mips/ar7/memory.c
@@ -0,0 +1,72 @@
1/*
2 * Copyright (C) 2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19#include <linux/bootmem.h>
20#include <linux/init.h>
21#include <linux/mm.h>
22#include <linux/module.h>
23#include <linux/pfn.h>
24#include <linux/proc_fs.h>
25#include <linux/string.h>
26#include <linux/swap.h>
27
28#include <asm/bootinfo.h>
29#include <asm/page.h>
30#include <asm/sections.h>
31
32#include <asm/mach-ar7/ar7.h>
33#include <asm/mips-boards/prom.h>
34
35static int __init memsize(void)
36{
37 u32 size = (64 << 20);
38 u32 *addr = (u32 *)KSEG1ADDR(AR7_SDRAM_BASE + size - 4);
39 u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end));
40 u32 *tmpaddr = addr;
41
42 while (tmpaddr > kernel_end) {
43 *tmpaddr = (u32)tmpaddr;
44 size >>= 1;
45 tmpaddr -= size >> 2;
46 }
47
48 do {
49 tmpaddr += size >> 2;
50 if (*tmpaddr != (u32)tmpaddr)
51 break;
52 size <<= 1;
53 } while (size < (64 << 20));
54
55 writel((u32)tmpaddr, &addr);
56
57 return size;
58}
59
60void __init prom_meminit(void)
61{
62 unsigned long pages;
63
64 pages = memsize() >> PAGE_SHIFT;
65 add_memory_region(PHYS_OFFSET, pages << PAGE_SHIFT,
66 BOOT_MEM_RAM);
67}
68
69void __init prom_free_prom_memory(void)
70{
71 /* Nothing to free */
72}
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c
new file mode 100644
index 000000000000..2ecab6155932
--- /dev/null
+++ b/arch/mips/ar7/platform.c
@@ -0,0 +1,555 @@
1/*
2 * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include <linux/init.h>
21#include <linux/types.h>
22#include <linux/module.h>
23#include <linux/delay.h>
24#include <linux/dma-mapping.h>
25#include <linux/platform_device.h>
26#include <linux/mtd/physmap.h>
27#include <linux/serial.h>
28#include <linux/serial_8250.h>
29#include <linux/ioport.h>
30#include <linux/io.h>
31#include <linux/vlynq.h>
32#include <linux/leds.h>
33#include <linux/string.h>
34#include <linux/etherdevice.h>
35
36#include <asm/addrspace.h>
37#include <asm/mach-ar7/ar7.h>
38#include <asm/mach-ar7/gpio.h>
39#include <asm/mach-ar7/prom.h>
40
41struct plat_vlynq_data {
42 struct plat_vlynq_ops ops;
43 int gpio_bit;
44 int reset_bit;
45};
46
47
48static int vlynq_on(struct vlynq_device *dev)
49{
50 int result;
51 struct plat_vlynq_data *pdata = dev->dev.platform_data;
52
53 result = gpio_request(pdata->gpio_bit, "vlynq");
54 if (result)
55 goto out;
56
57 ar7_device_reset(pdata->reset_bit);
58
59 result = ar7_gpio_disable(pdata->gpio_bit);
60 if (result)
61 goto out_enabled;
62
63 result = ar7_gpio_enable(pdata->gpio_bit);
64 if (result)
65 goto out_enabled;
66
67 result = gpio_direction_output(pdata->gpio_bit, 0);
68 if (result)
69 goto out_gpio_enabled;
70
71 msleep(50);
72
73 gpio_set_value(pdata->gpio_bit, 1);
74 msleep(50);
75
76 return 0;
77
78out_gpio_enabled:
79 ar7_gpio_disable(pdata->gpio_bit);
80out_enabled:
81 ar7_device_disable(pdata->reset_bit);
82 gpio_free(pdata->gpio_bit);
83out:
84 return result;
85}
86
87static void vlynq_off(struct vlynq_device *dev)
88{
89 struct plat_vlynq_data *pdata = dev->dev.platform_data;
90 ar7_gpio_disable(pdata->gpio_bit);
91 gpio_free(pdata->gpio_bit);
92 ar7_device_disable(pdata->reset_bit);
93}
94
95static struct resource physmap_flash_resource = {
96 .name = "mem",
97 .flags = IORESOURCE_MEM,
98 .start = 0x10000000,
99 .end = 0x107fffff,
100};
101
102static struct resource cpmac_low_res[] = {
103 {
104 .name = "regs",
105 .flags = IORESOURCE_MEM,
106 .start = AR7_REGS_MAC0,
107 .end = AR7_REGS_MAC0 + 0x7ff,
108 },
109 {
110 .name = "irq",
111 .flags = IORESOURCE_IRQ,
112 .start = 27,
113 .end = 27,
114 },
115};
116
117static struct resource cpmac_high_res[] = {
118 {
119 .name = "regs",
120 .flags = IORESOURCE_MEM,
121 .start = AR7_REGS_MAC1,
122 .end = AR7_REGS_MAC1 + 0x7ff,
123 },
124 {
125 .name = "irq",
126 .flags = IORESOURCE_IRQ,
127 .start = 41,
128 .end = 41,
129 },
130};
131
132static struct resource vlynq_low_res[] = {
133 {
134 .name = "regs",
135 .flags = IORESOURCE_MEM,
136 .start = AR7_REGS_VLYNQ0,
137 .end = AR7_REGS_VLYNQ0 + 0xff,
138 },
139 {
140 .name = "irq",
141 .flags = IORESOURCE_IRQ,
142 .start = 29,
143 .end = 29,
144 },
145 {
146 .name = "mem",
147 .flags = IORESOURCE_MEM,
148 .start = 0x04000000,
149 .end = 0x04ffffff,
150 },
151 {
152 .name = "devirq",
153 .flags = IORESOURCE_IRQ,
154 .start = 80,
155 .end = 111,
156 },
157};
158
159static struct resource vlynq_high_res[] = {
160 {
161 .name = "regs",
162 .flags = IORESOURCE_MEM,
163 .start = AR7_REGS_VLYNQ1,
164 .end = AR7_REGS_VLYNQ1 + 0xff,
165 },
166 {
167 .name = "irq",
168 .flags = IORESOURCE_IRQ,
169 .start = 33,
170 .end = 33,
171 },
172 {
173 .name = "mem",
174 .flags = IORESOURCE_MEM,
175 .start = 0x0c000000,
176 .end = 0x0cffffff,
177 },
178 {
179 .name = "devirq",
180 .flags = IORESOURCE_IRQ,
181 .start = 112,
182 .end = 143,
183 },
184};
185
186static struct resource usb_res[] = {
187 {
188 .name = "regs",
189 .flags = IORESOURCE_MEM,
190 .start = AR7_REGS_USB,
191 .end = AR7_REGS_USB + 0xff,
192 },
193 {
194 .name = "irq",
195 .flags = IORESOURCE_IRQ,
196 .start = 32,
197 .end = 32,
198 },
199 {
200 .name = "mem",
201 .flags = IORESOURCE_MEM,
202 .start = 0x03400000,
203 .end = 0x034001fff,
204 },
205};
206
207static struct physmap_flash_data physmap_flash_data = {
208 .width = 2,
209};
210
211static struct plat_cpmac_data cpmac_low_data = {
212 .reset_bit = 17,
213 .power_bit = 20,
214 .phy_mask = 0x80000000,
215};
216
217static struct plat_cpmac_data cpmac_high_data = {
218 .reset_bit = 21,
219 .power_bit = 22,
220 .phy_mask = 0x7fffffff,
221};
222
223static struct plat_vlynq_data vlynq_low_data = {
224 .ops.on = vlynq_on,
225 .ops.off = vlynq_off,
226 .reset_bit = 20,
227 .gpio_bit = 18,
228};
229
230static struct plat_vlynq_data vlynq_high_data = {
231 .ops.on = vlynq_on,
232 .ops.off = vlynq_off,
233 .reset_bit = 16,
234 .gpio_bit = 19,
235};
236
237static struct platform_device physmap_flash = {
238 .id = 0,
239 .name = "physmap-flash",
240 .dev.platform_data = &physmap_flash_data,
241 .resource = &physmap_flash_resource,
242 .num_resources = 1,
243};
244
245static u64 cpmac_dma_mask = DMA_BIT_MASK(32);
246static struct platform_device cpmac_low = {
247 .id = 0,
248 .name = "cpmac",
249 .dev = {
250 .dma_mask = &cpmac_dma_mask,
251 .coherent_dma_mask = DMA_BIT_MASK(32),
252 .platform_data = &cpmac_low_data,
253 },
254 .resource = cpmac_low_res,
255 .num_resources = ARRAY_SIZE(cpmac_low_res),
256};
257
258static struct platform_device cpmac_high = {
259 .id = 1,
260 .name = "cpmac",
261 .dev = {
262 .dma_mask = &cpmac_dma_mask,
263 .coherent_dma_mask = DMA_BIT_MASK(32),
264 .platform_data = &cpmac_high_data,
265 },
266 .resource = cpmac_high_res,
267 .num_resources = ARRAY_SIZE(cpmac_high_res),
268};
269
270static struct platform_device vlynq_low = {
271 .id = 0,
272 .name = "vlynq",
273 .dev.platform_data = &vlynq_low_data,
274 .resource = vlynq_low_res,
275 .num_resources = ARRAY_SIZE(vlynq_low_res),
276};
277
278static struct platform_device vlynq_high = {
279 .id = 1,
280 .name = "vlynq",
281 .dev.platform_data = &vlynq_high_data,
282 .resource = vlynq_high_res,
283 .num_resources = ARRAY_SIZE(vlynq_high_res),
284};
285
286
287static struct gpio_led default_leds[] = {
288 {
289 .name = "status",
290 .gpio = 8,
291 .active_low = 1,
292 },
293};
294
295static struct gpio_led dsl502t_leds[] = {
296 {
297 .name = "status",
298 .gpio = 9,
299 .active_low = 1,
300 },
301 {
302 .name = "ethernet",
303 .gpio = 7,
304 .active_low = 1,
305 },
306 {
307 .name = "usb",
308 .gpio = 12,
309 .active_low = 1,
310 },
311};
312
313static struct gpio_led dg834g_leds[] = {
314 {
315 .name = "ppp",
316 .gpio = 6,
317 .active_low = 1,
318 },
319 {
320 .name = "status",
321 .gpio = 7,
322 .active_low = 1,
323 },
324 {
325 .name = "adsl",
326 .gpio = 8,
327 .active_low = 1,
328 },
329 {
330 .name = "wifi",
331 .gpio = 12,
332 .active_low = 1,
333 },
334 {
335 .name = "power",
336 .gpio = 14,
337 .active_low = 1,
338 .default_trigger = "default-on",
339 },
340};
341
342static struct gpio_led fb_sl_leds[] = {
343 {
344 .name = "1",
345 .gpio = 7,
346 },
347 {
348 .name = "2",
349 .gpio = 13,
350 .active_low = 1,
351 },
352 {
353 .name = "3",
354 .gpio = 10,
355 .active_low = 1,
356 },
357 {
358 .name = "4",
359 .gpio = 12,
360 .active_low = 1,
361 },
362 {
363 .name = "5",
364 .gpio = 9,
365 .active_low = 1,
366 },
367};
368
369static struct gpio_led fb_fon_leds[] = {
370 {
371 .name = "1",
372 .gpio = 8,
373 },
374 {
375 .name = "2",
376 .gpio = 3,
377 .active_low = 1,
378 },
379 {
380 .name = "3",
381 .gpio = 5,
382 },
383 {
384 .name = "4",
385 .gpio = 4,
386 .active_low = 1,
387 },
388 {
389 .name = "5",
390 .gpio = 11,
391 .active_low = 1,
392 },
393};
394
395static struct gpio_led_platform_data ar7_led_data;
396
397static struct platform_device ar7_gpio_leds = {
398 .name = "leds-gpio",
399 .id = -1,
400 .dev = {
401 .platform_data = &ar7_led_data,
402 }
403};
404
405static struct platform_device ar7_udc = {
406 .id = -1,
407 .name = "ar7_udc",
408 .resource = usb_res,
409 .num_resources = ARRAY_SIZE(usb_res),
410};
411
412static inline unsigned char char2hex(char h)
413{
414 switch (h) {
415 case '0': case '1': case '2': case '3': case '4':
416 case '5': case '6': case '7': case '8': case '9':
417 return h - '0';
418 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
419 return h - 'A' + 10;
420 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
421 return h - 'a' + 10;
422 default:
423 return 0;
424 }
425}
426
427static void cpmac_get_mac(int instance, unsigned char *dev_addr)
428{
429 int i;
430 char name[5], default_mac[ETH_ALEN], *mac;
431
432 mac = NULL;
433 sprintf(name, "mac%c", 'a' + instance);
434 mac = prom_getenv(name);
435 if (!mac) {
436 sprintf(name, "mac%c", 'a');
437 mac = prom_getenv(name);
438 }
439 if (!mac) {
440 random_ether_addr(default_mac);
441 mac = default_mac;
442 }
443 for (i = 0; i < 6; i++)
444 dev_addr[i] = (char2hex(mac[i * 3]) << 4) +
445 char2hex(mac[i * 3 + 1]);
446}
447
448static void __init detect_leds(void)
449{
450 char *prid, *usb_prod;
451
452 /* Default LEDs */
453 ar7_led_data.num_leds = ARRAY_SIZE(default_leds);
454 ar7_led_data.leds = default_leds;
455
456 /* FIXME: the whole thing is unreliable */
457 prid = prom_getenv("ProductID");
458 usb_prod = prom_getenv("usb_prod");
459
460 /* If we can't get the product id from PROM, use the default LEDs */
461 if (!prid)
462 return;
463
464 if (strstr(prid, "Fritz_Box_FON")) {
465 ar7_led_data.num_leds = ARRAY_SIZE(fb_fon_leds);
466 ar7_led_data.leds = fb_fon_leds;
467 } else if (strstr(prid, "Fritz_Box_")) {
468 ar7_led_data.num_leds = ARRAY_SIZE(fb_sl_leds);
469 ar7_led_data.leds = fb_sl_leds;
470 } else if ((!strcmp(prid, "AR7RD") || !strcmp(prid, "AR7DB"))
471 && usb_prod != NULL && strstr(usb_prod, "DSL-502T")) {
472 ar7_led_data.num_leds = ARRAY_SIZE(dsl502t_leds);
473 ar7_led_data.leds = dsl502t_leds;
474 } else if (strstr(prid, "DG834")) {
475 ar7_led_data.num_leds = ARRAY_SIZE(dg834g_leds);
476 ar7_led_data.leds = dg834g_leds;
477 }
478}
479
480static int __init ar7_register_devices(void)
481{
482 int res;
483#ifdef CONFIG_SERIAL_8250
484 static struct uart_port uart_port[2];
485
486 memset(uart_port, 0, sizeof(struct uart_port) * 2);
487
488 uart_port[0].type = PORT_16550A;
489 uart_port[0].line = 0;
490 uart_port[0].irq = AR7_IRQ_UART0;
491 uart_port[0].uartclk = ar7_bus_freq() / 2;
492 uart_port[0].iotype = UPIO_MEM32;
493 uart_port[0].mapbase = AR7_REGS_UART0;
494 uart_port[0].membase = ioremap(uart_port[0].mapbase, 256);
495 uart_port[0].regshift = 2;
496 res = early_serial_setup(&uart_port[0]);
497 if (res)
498 return res;
499
500
501 /* Only TNETD73xx have a second serial port */
502 if (ar7_has_second_uart()) {
503 uart_port[1].type = PORT_16550A;
504 uart_port[1].line = 1;
505 uart_port[1].irq = AR7_IRQ_UART1;
506 uart_port[1].uartclk = ar7_bus_freq() / 2;
507 uart_port[1].iotype = UPIO_MEM32;
508 uart_port[1].mapbase = UR8_REGS_UART1;
509 uart_port[1].membase = ioremap(uart_port[1].mapbase, 256);
510 uart_port[1].regshift = 2;
511 res = early_serial_setup(&uart_port[1]);
512 if (res)
513 return res;
514 }
515#endif /* CONFIG_SERIAL_8250 */
516 res = platform_device_register(&physmap_flash);
517 if (res)
518 return res;
519
520 ar7_device_disable(vlynq_low_data.reset_bit);
521 res = platform_device_register(&vlynq_low);
522 if (res)
523 return res;
524
525 if (ar7_has_high_vlynq()) {
526 ar7_device_disable(vlynq_high_data.reset_bit);
527 res = platform_device_register(&vlynq_high);
528 if (res)
529 return res;
530 }
531
532 if (ar7_has_high_cpmac()) {
533 cpmac_get_mac(1, cpmac_high_data.dev_addr);
534 res = platform_device_register(&cpmac_high);
535 if (res)
536 return res;
537 } else {
538 cpmac_low_data.phy_mask = 0xffffffff;
539 }
540
541 cpmac_get_mac(0, cpmac_low_data.dev_addr);
542 res = platform_device_register(&cpmac_low);
543 if (res)
544 return res;
545
546 detect_leds();
547 res = platform_device_register(&ar7_gpio_leds);
548 if (res)
549 return res;
550
551 res = platform_device_register(&ar7_udc);
552
553 return res;
554}
555arch_initcall(ar7_register_devices);
diff --git a/arch/mips/ar7/prom.c b/arch/mips/ar7/prom.c
new file mode 100644
index 000000000000..5ad6f1db6567
--- /dev/null
+++ b/arch/mips/ar7/prom.c
@@ -0,0 +1,297 @@
1/*
2 * Carsten Langgaard, carstenl@mips.com
3 * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
4 *
5 * This program is free software; you can distribute it and/or modify it
6 * under the terms of the GNU General Public License (Version 2) as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
17 *
18 * Putting things on the screen/serial line using YAMONs facilities.
19 */
20#include <linux/init.h>
21#include <linux/kernel.h>
22#include <linux/serial_reg.h>
23#include <linux/spinlock.h>
24#include <linux/module.h>
25#include <linux/string.h>
26#include <linux/io.h>
27#include <asm/bootinfo.h>
28
29#include <asm/mach-ar7/ar7.h>
30#include <asm/mach-ar7/prom.h>
31
32#define MAX_ENTRY 80
33
34struct env_var {
35 char *name;
36 char *value;
37};
38
39static struct env_var adam2_env[MAX_ENTRY];
40
41char *prom_getenv(const char *name)
42{
43 int i;
44 for (i = 0; (i < MAX_ENTRY) && adam2_env[i].name; i++)
45 if (!strcmp(name, adam2_env[i].name))
46 return adam2_env[i].value;
47
48 return NULL;
49}
50EXPORT_SYMBOL(prom_getenv);
51
52char * __init prom_getcmdline(void)
53{
54 return &(arcs_cmdline[0]);
55}
56
57static void __init ar7_init_cmdline(int argc, char *argv[])
58{
59 char *cp;
60 int actr;
61
62 actr = 1; /* Always ignore argv[0] */
63
64 cp = &(arcs_cmdline[0]);
65 while (actr < argc) {
66 strcpy(cp, argv[actr]);
67 cp += strlen(argv[actr]);
68 *cp++ = ' ';
69 actr++;
70 }
71 if (cp != &(arcs_cmdline[0])) {
72 /* get rid of trailing space */
73 --cp;
74 *cp = '\0';
75 }
76}
77
78struct psbl_rec {
79 u32 psbl_size;
80 u32 env_base;
81 u32 env_size;
82 u32 ffs_base;
83 u32 ffs_size;
84};
85
86static __initdata char psp_env_version[] = "TIENV0.8";
87
88struct psp_env_chunk {
89 u8 num;
90 u8 ctrl;
91 u16 csum;
92 u8 len;
93 char data[11];
94} __attribute__ ((packed));
95
96struct psp_var_map_entry {
97 u8 num;
98 char *value;
99};
100
101static struct psp_var_map_entry psp_var_map[] = {
102 { 1, "cpufrequency" },
103 { 2, "memsize" },
104 { 3, "flashsize" },
105 { 4, "modetty0" },
106 { 5, "modetty1" },
107 { 8, "maca" },
108 { 9, "macb" },
109 { 28, "sysfrequency" },
110 { 38, "mipsfrequency" },
111};
112
113/*
114
115Well-known variable (num is looked up in table above for matching variable name)
116Example: cpufrequency=211968000
117+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
118| 01 |CTRL|CHECKSUM | 01 | _2 | _1 | _1 | _9 | _6 | _8 | _0 | _0 | _0 | \0 | FF
119+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
120
121Name=Value pair in a single chunk
122Example: NAME=VALUE
123+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
124| 00 |CTRL|CHECKSUM | 01 | _N | _A | _M | _E | _0 | _V | _A | _L | _U | _E | \0
125+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
126
127Name=Value pair in 2 chunks (len is the number of chunks)
128Example: bootloaderVersion=1.3.7.15
129+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
130| 00 |CTRL|CHECKSUM | 02 | _b | _o | _o | _t | _l | _o | _a | _d | _e | _r | _V
131+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
132| _e | _r | _s | _i | _o | _n | \0 | _1 | _. | _3 | _. | _7 | _. | _1 | _5 | \0
133+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+---
134
135Data is padded with 0xFF
136
137*/
138
139#define PSP_ENV_SIZE 4096
140
141static char psp_env_data[PSP_ENV_SIZE] = { 0, };
142
143static char * __init lookup_psp_var_map(u8 num)
144{
145 int i;
146
147 for (i = 0; i < ARRAY_SIZE(psp_var_map); i++)
148 if (psp_var_map[i].num == num)
149 return psp_var_map[i].value;
150
151 return NULL;
152}
153
154static void __init add_adam2_var(char *name, char *value)
155{
156 int i;
157 for (i = 0; i < MAX_ENTRY; i++) {
158 if (!adam2_env[i].name) {
159 adam2_env[i].name = name;
160 adam2_env[i].value = value;
161 return;
162 } else if (!strcmp(adam2_env[i].name, name)) {
163 adam2_env[i].value = value;
164 return;
165 }
166 }
167}
168
169static int __init parse_psp_env(void *psp_env_base)
170{
171 int i, n;
172 char *name, *value;
173 struct psp_env_chunk *chunks = (struct psp_env_chunk *)psp_env_data;
174
175 memcpy_fromio(chunks, psp_env_base, PSP_ENV_SIZE);
176
177 i = 1;
178 n = PSP_ENV_SIZE / sizeof(struct psp_env_chunk);
179 while (i < n) {
180 if ((chunks[i].num == 0xff) || ((i + chunks[i].len) > n))
181 break;
182 value = chunks[i].data;
183 if (chunks[i].num) {
184 name = lookup_psp_var_map(chunks[i].num);
185 } else {
186 name = value;
187 value += strlen(name) + 1;
188 }
189 if (name)
190 add_adam2_var(name, value);
191 i += chunks[i].len;
192 }
193 return 0;
194}
195
196static void __init ar7_init_env(struct env_var *env)
197{
198 int i;
199 struct psbl_rec *psbl = (struct psbl_rec *)(KSEG1ADDR(0x14000300));
200 void *psp_env = (void *)KSEG1ADDR(psbl->env_base);
201
202 if (strcmp(psp_env, psp_env_version) == 0) {
203 parse_psp_env(psp_env);
204 } else {
205 for (i = 0; i < MAX_ENTRY; i++, env++)
206 if (env->name)
207 add_adam2_var(env->name, env->value);
208 }
209}
210
211static void __init console_config(void)
212{
213#ifdef CONFIG_SERIAL_8250_CONSOLE
214 char console_string[40];
215 int baud = 0;
216 char parity = '\0', bits = '\0', flow = '\0';
217 char *s, *p;
218
219 if (strstr(prom_getcmdline(), "console="))
220 return;
221
222#ifdef CONFIG_KGDB
223 if (!strstr(prom_getcmdline(), "nokgdb")) {
224 strcat(prom_getcmdline(), " console=kgdb");
225 kgdb_enabled = 1;
226 return;
227 }
228#endif
229
230 s = prom_getenv("modetty0");
231 if (s) {
232 baud = simple_strtoul(s, &p, 10);
233 s = p;
234 if (*s == ',')
235 s++;
236 if (*s)
237 parity = *s++;
238 if (*s == ',')
239 s++;
240 if (*s)
241 bits = *s++;
242 if (*s == ',')
243 s++;
244 if (*s == 'h')
245 flow = 'r';
246 }
247
248 if (baud == 0)
249 baud = 38400;
250 if (parity != 'n' && parity != 'o' && parity != 'e')
251 parity = 'n';
252 if (bits != '7' && bits != '8')
253 bits = '8';
254
255 if (flow == 'r')
256 sprintf(console_string, " console=ttyS0,%d%c%c%c", baud,
257 parity, bits, flow);
258 else
259 sprintf(console_string, " console=ttyS0,%d%c%c", baud, parity,
260 bits);
261 strcat(prom_getcmdline(), console_string);
262#endif
263}
264
265void __init prom_init(void)
266{
267 ar7_init_cmdline(fw_arg0, (char **)fw_arg1);
268 ar7_init_env((struct env_var *)fw_arg2);
269 console_config();
270}
271
272#define PORT(offset) (KSEG1ADDR(AR7_REGS_UART0 + (offset * 4)))
273static inline unsigned int serial_in(int offset)
274{
275 return readl((void *)PORT(offset));
276}
277
278static inline void serial_out(int offset, int value)
279{
280 writel(value, (void *)PORT(offset));
281}
282
283char prom_getchar(void)
284{
285 while (!(serial_in(UART_LSR) & UART_LSR_DR))
286 ;
287 return serial_in(UART_RX);
288}
289
290int prom_putchar(char c)
291{
292 while ((serial_in(UART_LSR) & UART_LSR_TEMT) == 0)
293 ;
294 serial_out(UART_TX, c);
295 return 1;
296}
297
diff --git a/arch/mips/ar7/setup.c b/arch/mips/ar7/setup.c
new file mode 100644
index 000000000000..39f6b5b96463
--- /dev/null
+++ b/arch/mips/ar7/setup.c
@@ -0,0 +1,93 @@
1/*
2 * Carsten Langgaard, carstenl@mips.com
3 * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
4 *
5 * This program is free software; you can distribute it and/or modify it
6 * under the terms of the GNU General Public License (Version 2) as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
17 */
18#include <linux/init.h>
19#include <linux/ioport.h>
20#include <linux/pm.h>
21#include <linux/time.h>
22
23#include <asm/reboot.h>
24#include <asm/mach-ar7/ar7.h>
25#include <asm/mach-ar7/prom.h>
26
27static void ar7_machine_restart(char *command)
28{
29 u32 *softres_reg = ioremap(AR7_REGS_RESET +
30 AR7_RESET_SOFTWARE, 1);
31 writel(1, softres_reg);
32}
33
34static void ar7_machine_halt(void)
35{
36 while (1)
37 ;
38}
39
40static void ar7_machine_power_off(void)
41{
42 u32 *power_reg = (u32 *)ioremap(AR7_REGS_POWER, 1);
43 u32 power_state = readl(power_reg) | (3 << 30);
44 writel(power_state, power_reg);
45 ar7_machine_halt();
46}
47
48const char *get_system_type(void)
49{
50 u16 chip_id = ar7_chip_id();
51 switch (chip_id) {
52 case AR7_CHIP_7300:
53 return "TI AR7 (TNETD7300)";
54 case AR7_CHIP_7100:
55 return "TI AR7 (TNETD7100)";
56 case AR7_CHIP_7200:
57 return "TI AR7 (TNETD7200)";
58 default:
59 return "TI AR7 (Unknown)";
60 }
61}
62
63static int __init ar7_init_console(void)
64{
65 return 0;
66}
67console_initcall(ar7_init_console);
68
69/*
70 * Initializes basic routines and structures pointers, memory size (as
71 * given by the bios and saves the command line.
72 */
73
74void __init plat_mem_setup(void)
75{
76 unsigned long io_base;
77
78 _machine_restart = ar7_machine_restart;
79 _machine_halt = ar7_machine_halt;
80 pm_power_off = ar7_machine_power_off;
81 panic_timeout = 3;
82
83 io_base = (unsigned long)ioremap(AR7_REGS_BASE, 0x10000);
84 if (!io_base)
85 panic("Can't remap IO base!\n");
86 set_io_port_base(io_base);
87
88 prom_meminit();
89
90 printk(KERN_INFO "%s, ID: 0x%04x, Revision: 0x%02x\n",
91 get_system_type(),
92 ar7_chip_id(), ar7_chip_rev());
93}
diff --git a/arch/mips/ar7/time.c b/arch/mips/ar7/time.c
new file mode 100644
index 000000000000..a1fba894daa2
--- /dev/null
+++ b/arch/mips/ar7/time.c
@@ -0,0 +1,30 @@
1/*
2 * Carsten Langgaard, carstenl@mips.com
3 * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
4 *
5 * This program is free software; you can distribute it and/or modify it
6 * under the terms of the GNU General Public License (Version 2) as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
17 *
18 * Setting up the clock on the MIPS boards.
19 */
20
21#include <linux/init.h>
22#include <linux/time.h>
23
24#include <asm/time.h>
25#include <asm/mach-ar7/ar7.h>
26
27void __init plat_time_init(void)
28{
29 mips_hpt_frequency = ar7_cpu_freq() / 2;
30}
diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c
index 01b1ef94b361..4b92bfc662db 100644
--- a/arch/mips/cavium-octeon/dma-octeon.c
+++ b/arch/mips/cavium-octeon/dma-octeon.c
@@ -13,20 +13,327 @@
13 */ 13 */
14#include <linux/types.h> 14#include <linux/types.h>
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/module.h>
17#include <linux/string.h>
18#include <linux/dma-mapping.h>
19#include <linux/platform_device.h>
20#include <linux/scatterlist.h>
21
22#include <linux/cache.h>
23#include <linux/io.h>
24
25#include <asm/octeon/octeon.h>
26#include <asm/octeon/cvmx-npi-defs.h>
27#include <asm/octeon/cvmx-pci-defs.h>
16 28
17#include <dma-coherence.h> 29#include <dma-coherence.h>
18 30
31#ifdef CONFIG_PCI
32#include <asm/octeon/pci-octeon.h>
33#endif
34
35#define BAR2_PCI_ADDRESS 0x8000000000ul
36
37struct bar1_index_state {
38 int16_t ref_count; /* Number of PCI mappings using this index */
39 uint16_t address_bits; /* Upper bits of physical address. This is
40 shifted 22 bits */
41};
42
43#ifdef CONFIG_PCI
44static DEFINE_SPINLOCK(bar1_lock);
45static struct bar1_index_state bar1_state[32];
46#endif
47
19dma_addr_t octeon_map_dma_mem(struct device *dev, void *ptr, size_t size) 48dma_addr_t octeon_map_dma_mem(struct device *dev, void *ptr, size_t size)
20{ 49{
50#ifndef CONFIG_PCI
21 /* Without PCI/PCIe this function can be called for Octeon internal 51 /* Without PCI/PCIe this function can be called for Octeon internal
22 devices such as USB. These devices all support 64bit addressing */ 52 devices such as USB. These devices all support 64bit addressing */
23 mb(); 53 mb();
24 return virt_to_phys(ptr); 54 return virt_to_phys(ptr);
55#else
56 unsigned long flags;
57 uint64_t dma_mask;
58 int64_t start_index;
59 dma_addr_t result = -1;
60 uint64_t physical = virt_to_phys(ptr);
61 int64_t index;
62
63 mb();
64 /*
65 * Use the DMA masks to determine the allowed memory
66 * region. For us it doesn't limit the actual memory, just the
67 * address visible over PCI. Devices with limits need to use
68 * lower indexed Bar1 entries.
69 */
70 if (dev) {
71 dma_mask = dev->coherent_dma_mask;
72 if (dev->dma_mask)
73 dma_mask = *dev->dma_mask;
74 } else {
75 dma_mask = 0xfffffffful;
76 }
77
78 /*
79 * Platform devices, such as the internal USB, skip all
80 * translation and use Octeon physical addresses directly.
81 */
82 if (!dev || dev->bus == &platform_bus_type)
83 return physical;
84
85 switch (octeon_dma_bar_type) {
86 case OCTEON_DMA_BAR_TYPE_PCIE:
87 if (unlikely(physical < (16ul << 10)))
88 panic("dma_map_single: Not allowed to map first 16KB."
89 " It interferes with BAR0 special area\n");
90 else if ((physical + size >= (256ul << 20)) &&
91 (physical < (512ul << 20)))
92 panic("dma_map_single: Not allowed to map bootbus\n");
93 else if ((physical + size >= 0x400000000ull) &&
94 physical < 0x410000000ull)
95 panic("dma_map_single: "
96 "Attempt to map illegal memory address 0x%llx\n",
97 physical);
98 else if (physical >= 0x420000000ull)
99 panic("dma_map_single: "
100 "Attempt to map illegal memory address 0x%llx\n",
101 physical);
102 else if ((physical + size >=
103 (4ull<<30) - (OCTEON_PCI_BAR1_HOLE_SIZE<<20))
104 && physical < (4ull<<30))
105 pr_warning("dma_map_single: Warning: "
106 "Mapping memory address that might "
107 "conflict with devices 0x%llx-0x%llx\n",
108 physical, physical+size-1);
109 /* The 2nd 256MB is mapped at 256<<20 instead of 0x410000000 */
110 if ((physical >= 0x410000000ull) && physical < 0x420000000ull)
111 result = physical - 0x400000000ull;
112 else
113 result = physical;
114 if (((result+size-1) & dma_mask) != result+size-1)
115 panic("dma_map_single: Attempt to map address "
116 "0x%llx-0x%llx, which can't be accessed "
117 "according to the dma mask 0x%llx\n",
118 physical, physical+size-1, dma_mask);
119 goto done;
120
121 case OCTEON_DMA_BAR_TYPE_BIG:
122#ifdef CONFIG_64BIT
123 /* If the device supports 64bit addressing, then use BAR2 */
124 if (dma_mask > BAR2_PCI_ADDRESS) {
125 result = physical + BAR2_PCI_ADDRESS;
126 goto done;
127 }
128#endif
129 if (unlikely(physical < (4ul << 10))) {
130 panic("dma_map_single: Not allowed to map first 4KB. "
131 "It interferes with BAR0 special area\n");
132 } else if (physical < (256ul << 20)) {
133 if (unlikely(physical + size > (256ul << 20)))
134 panic("dma_map_single: Requested memory spans "
135 "Bar0 0:256MB and bootbus\n");
136 result = physical;
137 goto done;
138 } else if (unlikely(physical < (512ul << 20))) {
139 panic("dma_map_single: Not allowed to map bootbus\n");
140 } else if (physical < (2ul << 30)) {
141 if (unlikely(physical + size > (2ul << 30)))
142 panic("dma_map_single: Requested memory spans "
143 "Bar0 512MB:2GB and BAR1\n");
144 result = physical;
145 goto done;
146 } else if (physical < (2ul << 30) + (128 << 20)) {
147 /* Fall through */
148 } else if (physical <
149 (4ul << 30) - (OCTEON_PCI_BAR1_HOLE_SIZE << 20)) {
150 if (unlikely
151 (physical + size >
152 (4ul << 30) - (OCTEON_PCI_BAR1_HOLE_SIZE << 20)))
153 panic("dma_map_single: Requested memory "
154 "extends past Bar1 (4GB-%luMB)\n",
155 OCTEON_PCI_BAR1_HOLE_SIZE);
156 result = physical;
157 goto done;
158 } else if ((physical >= 0x410000000ull) &&
159 (physical < 0x420000000ull)) {
160 if (unlikely(physical + size > 0x420000000ull))
161 panic("dma_map_single: Requested memory spans "
162 "non existant memory\n");
163 /* BAR0 fixed mapping 256MB:512MB ->
164 * 16GB+256MB:16GB+512MB */
165 result = physical - 0x400000000ull;
166 goto done;
167 } else {
168 /* Continued below switch statement */
169 }
170 break;
171
172 case OCTEON_DMA_BAR_TYPE_SMALL:
173#ifdef CONFIG_64BIT
174 /* If the device supports 64bit addressing, then use BAR2 */
175 if (dma_mask > BAR2_PCI_ADDRESS) {
176 result = physical + BAR2_PCI_ADDRESS;
177 goto done;
178 }
179#endif
180 /* Continued below switch statement */
181 break;
182
183 default:
184 panic("dma_map_single: Invalid octeon_dma_bar_type\n");
185 }
186
187 /* Don't allow mapping to span multiple Bar entries. The hardware guys
188 won't guarantee that DMA across boards work */
189 if (unlikely((physical >> 22) != ((physical + size - 1) >> 22)))
190 panic("dma_map_single: "
191 "Requested memory spans more than one Bar1 entry\n");
192
193 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_BIG)
194 start_index = 31;
195 else if (unlikely(dma_mask < (1ul << 27)))
196 start_index = (dma_mask >> 22);
197 else
198 start_index = 31;
199
200 /* Only one processor can access the Bar register at once */
201 spin_lock_irqsave(&bar1_lock, flags);
202
203 /* Look through Bar1 for existing mapping that will work */
204 for (index = start_index; index >= 0; index--) {
205 if ((bar1_state[index].address_bits == physical >> 22) &&
206 (bar1_state[index].ref_count)) {
207 /* An existing mapping will work, use it */
208 bar1_state[index].ref_count++;
209 if (unlikely(bar1_state[index].ref_count < 0))
210 panic("dma_map_single: "
211 "Bar1[%d] reference count overflowed\n",
212 (int) index);
213 result = (index << 22) | (physical & ((1 << 22) - 1));
214 /* Large BAR1 is offset at 2GB */
215 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_BIG)
216 result += 2ul << 30;
217 goto done_unlock;
218 }
219 }
220
221 /* No existing mappings, look for a free entry */
222 for (index = start_index; index >= 0; index--) {
223 if (unlikely(bar1_state[index].ref_count == 0)) {
224 union cvmx_pci_bar1_indexx bar1_index;
225 /* We have a free entry, use it */
226 bar1_state[index].ref_count = 1;
227 bar1_state[index].address_bits = physical >> 22;
228 bar1_index.u32 = 0;
229 /* Address bits[35:22] sent to L2C */
230 bar1_index.s.addr_idx = physical >> 22;
231 /* Don't put PCI accesses in L2. */
232 bar1_index.s.ca = 1;
233 /* Endian Swap Mode */
234 bar1_index.s.end_swp = 1;
235 /* Set '1' when the selected address range is valid. */
236 bar1_index.s.addr_v = 1;
237 octeon_npi_write32(CVMX_NPI_PCI_BAR1_INDEXX(index),
238 bar1_index.u32);
239 /* An existing mapping will work, use it */
240 result = (index << 22) | (physical & ((1 << 22) - 1));
241 /* Large BAR1 is offset at 2GB */
242 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_BIG)
243 result += 2ul << 30;
244 goto done_unlock;
245 }
246 }
247
248 pr_err("dma_map_single: "
249 "Can't find empty BAR1 index for physical mapping 0x%llx\n",
250 (unsigned long long) physical);
251
252done_unlock:
253 spin_unlock_irqrestore(&bar1_lock, flags);
254done:
255 pr_debug("dma_map_single 0x%llx->0x%llx\n", physical, result);
256 return result;
257#endif
25} 258}
26 259
27void octeon_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 260void octeon_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr)
28{ 261{
29 /* Without PCI/PCIe this function can be called for Octeon internal 262#ifndef CONFIG_PCI
30 * devices such as USB. These devices all support 64bit addressing */ 263 /*
264 * Without PCI/PCIe this function can be called for Octeon internal
265 * devices such as USB. These devices all support 64bit addressing.
266 */
267 return;
268#else
269 unsigned long flags;
270 uint64_t index;
271
272 /*
273 * Platform devices, such as the internal USB, skip all
274 * translation and use Octeon physical addresses directly.
275 */
276 if (dev->bus == &platform_bus_type)
277 return;
278
279 switch (octeon_dma_bar_type) {
280 case OCTEON_DMA_BAR_TYPE_PCIE:
281 /* Nothing to do, all mappings are static */
282 goto done;
283
284 case OCTEON_DMA_BAR_TYPE_BIG:
285#ifdef CONFIG_64BIT
286 /* Nothing to do for addresses using BAR2 */
287 if (dma_addr >= BAR2_PCI_ADDRESS)
288 goto done;
289#endif
290 if (unlikely(dma_addr < (4ul << 10)))
291 panic("dma_unmap_single: Unexpect DMA address 0x%llx\n",
292 dma_addr);
293 else if (dma_addr < (2ul << 30))
294 /* Nothing to do for addresses using BAR0 */
295 goto done;
296 else if (dma_addr < (2ul << 30) + (128ul << 20))
297 /* Need to unmap, fall through */
298 index = (dma_addr - (2ul << 30)) >> 22;
299 else if (dma_addr <
300 (4ul << 30) - (OCTEON_PCI_BAR1_HOLE_SIZE << 20))
301 goto done; /* Nothing to do for the rest of BAR1 */
302 else
303 panic("dma_unmap_single: Unexpect DMA address 0x%llx\n",
304 dma_addr);
305 /* Continued below switch statement */
306 break;
307
308 case OCTEON_DMA_BAR_TYPE_SMALL:
309#ifdef CONFIG_64BIT
310 /* Nothing to do for addresses using BAR2 */
311 if (dma_addr >= BAR2_PCI_ADDRESS)
312 goto done;
313#endif
314 index = dma_addr >> 22;
315 /* Continued below switch statement */
316 break;
317
318 default:
319 panic("dma_unmap_single: Invalid octeon_dma_bar_type\n");
320 }
321
322 if (unlikely(index > 31))
323 panic("dma_unmap_single: "
324 "Attempt to unmap an invalid address (0x%llx)\n",
325 dma_addr);
326
327 spin_lock_irqsave(&bar1_lock, flags);
328 bar1_state[index].ref_count--;
329 if (bar1_state[index].ref_count == 0)
330 octeon_npi_write32(CVMX_NPI_PCI_BAR1_INDEXX(index), 0);
331 else if (unlikely(bar1_state[index].ref_count < 0))
332 panic("dma_unmap_single: Bar1[%u] reference count < 0\n",
333 (int) index);
334 spin_unlock_irqrestore(&bar1_lock, flags);
335done:
336 pr_debug("dma_unmap_single 0x%llx\n", dma_addr);
31 return; 337 return;
338#endif
32} 339}
diff --git a/arch/mips/cavium-octeon/executive/Makefile b/arch/mips/cavium-octeon/executive/Makefile
index 80d6cb26766b..2fd66db6939e 100644
--- a/arch/mips/cavium-octeon/executive/Makefile
+++ b/arch/mips/cavium-octeon/executive/Makefile
@@ -11,3 +11,4 @@
11 11
12obj-y += cvmx-bootmem.o cvmx-l2c.o cvmx-sysinfo.o octeon-model.o 12obj-y += cvmx-bootmem.o cvmx-l2c.o cvmx-sysinfo.o octeon-model.o
13 13
14obj-$(CONFIG_PCI) += cvmx-helper-errata.o cvmx-helper-jtag.o
diff --git a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
index 4f5a08b37ccd..25666da17b22 100644
--- a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
+++ b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
@@ -31,6 +31,7 @@
31 */ 31 */
32 32
33#include <linux/kernel.h> 33#include <linux/kernel.h>
34#include <linux/module.h>
34 35
35#include <asm/octeon/cvmx.h> 36#include <asm/octeon/cvmx.h>
36#include <asm/octeon/cvmx-spinlock.h> 37#include <asm/octeon/cvmx-spinlock.h>
@@ -97,6 +98,33 @@ void *cvmx_bootmem_alloc(uint64_t size, uint64_t alignment)
97 return cvmx_bootmem_alloc_range(size, alignment, 0, 0); 98 return cvmx_bootmem_alloc_range(size, alignment, 0, 0);
98} 99}
99 100
101void *cvmx_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
102 uint64_t max_addr, uint64_t align,
103 char *name)
104{
105 int64_t addr;
106
107 addr = cvmx_bootmem_phy_named_block_alloc(size, min_addr, max_addr,
108 align, name, 0);
109 if (addr >= 0)
110 return cvmx_phys_to_ptr(addr);
111 else
112 return NULL;
113}
114
115void *cvmx_bootmem_alloc_named_address(uint64_t size, uint64_t address,
116 char *name)
117{
118 return cvmx_bootmem_alloc_named_range(size, address, address + size,
119 0, name);
120}
121
122void *cvmx_bootmem_alloc_named(uint64_t size, uint64_t alignment, char *name)
123{
124 return cvmx_bootmem_alloc_named_range(size, 0, 0, alignment, name);
125}
126EXPORT_SYMBOL(cvmx_bootmem_alloc_named);
127
100int cvmx_bootmem_free_named(char *name) 128int cvmx_bootmem_free_named(char *name)
101{ 129{
102 return cvmx_bootmem_phy_named_block_free(name, 0); 130 return cvmx_bootmem_phy_named_block_free(name, 0);
@@ -106,6 +134,7 @@ struct cvmx_bootmem_named_block_desc *cvmx_bootmem_find_named_block(char *name)
106{ 134{
107 return cvmx_bootmem_phy_named_block_find(name, 0); 135 return cvmx_bootmem_phy_named_block_find(name, 0);
108} 136}
137EXPORT_SYMBOL(cvmx_bootmem_find_named_block);
109 138
110void cvmx_bootmem_lock(void) 139void cvmx_bootmem_lock(void)
111{ 140{
@@ -584,3 +613,78 @@ int cvmx_bootmem_phy_named_block_free(char *name, uint32_t flags)
584 cvmx_bootmem_unlock(); 613 cvmx_bootmem_unlock();
585 return named_block_ptr != NULL; /* 0 on failure, 1 on success */ 614 return named_block_ptr != NULL; /* 0 on failure, 1 on success */
586} 615}
616
617int64_t cvmx_bootmem_phy_named_block_alloc(uint64_t size, uint64_t min_addr,
618 uint64_t max_addr,
619 uint64_t alignment,
620 char *name,
621 uint32_t flags)
622{
623 int64_t addr_allocated;
624 struct cvmx_bootmem_named_block_desc *named_block_desc_ptr;
625
626#ifdef DEBUG
627 cvmx_dprintf("cvmx_bootmem_phy_named_block_alloc: size: 0x%llx, min: "
628 "0x%llx, max: 0x%llx, align: 0x%llx, name: %s\n",
629 (unsigned long long)size,
630 (unsigned long long)min_addr,
631 (unsigned long long)max_addr,
632 (unsigned long long)alignment,
633 name);
634#endif
635 if (cvmx_bootmem_desc->major_version != 3) {
636 cvmx_dprintf("ERROR: Incompatible bootmem descriptor version: "
637 "%d.%d at addr: %p\n",
638 (int)cvmx_bootmem_desc->major_version,
639 (int)cvmx_bootmem_desc->minor_version,
640 cvmx_bootmem_desc);
641 return -1;
642 }
643
644 /*
645 * Take lock here, as name lookup/block alloc/name add need to
646 * be atomic.
647 */
648 if (!(flags & CVMX_BOOTMEM_FLAG_NO_LOCKING))
649 cvmx_spinlock_lock((cvmx_spinlock_t *)&(cvmx_bootmem_desc->lock));
650
651 /* Get pointer to first available named block descriptor */
652 named_block_desc_ptr =
653 cvmx_bootmem_phy_named_block_find(NULL,
654 flags | CVMX_BOOTMEM_FLAG_NO_LOCKING);
655
656 /*
657 * Check to see if name already in use, return error if name
658 * not available or no more room for blocks.
659 */
660 if (cvmx_bootmem_phy_named_block_find(name,
661 flags | CVMX_BOOTMEM_FLAG_NO_LOCKING) || !named_block_desc_ptr) {
662 if (!(flags & CVMX_BOOTMEM_FLAG_NO_LOCKING))
663 cvmx_spinlock_unlock((cvmx_spinlock_t *)&(cvmx_bootmem_desc->lock));
664 return -1;
665 }
666
667
668 /*
669 * Round size up to mult of minimum alignment bytes We need
670 * the actual size allocated to allow for blocks to be
671 * coallesced when they are freed. The alloc routine does the
672 * same rounding up on all allocations.
673 */
674 size = __ALIGN_MASK(size, (CVMX_BOOTMEM_ALIGNMENT_SIZE - 1));
675
676 addr_allocated = cvmx_bootmem_phy_alloc(size, min_addr, max_addr,
677 alignment,
678 flags | CVMX_BOOTMEM_FLAG_NO_LOCKING);
679 if (addr_allocated >= 0) {
680 named_block_desc_ptr->base_addr = addr_allocated;
681 named_block_desc_ptr->size = size;
682 strncpy(named_block_desc_ptr->name, name,
683 cvmx_bootmem_desc->named_block_name_len);
684 named_block_desc_ptr->name[cvmx_bootmem_desc->named_block_name_len - 1] = 0;
685 }
686
687 if (!(flags & CVMX_BOOTMEM_FLAG_NO_LOCKING))
688 cvmx_spinlock_unlock((cvmx_spinlock_t *)&(cvmx_bootmem_desc->lock));
689 return addr_allocated;
690}
diff --git a/arch/mips/cavium-octeon/executive/cvmx-helper-errata.c b/arch/mips/cavium-octeon/executive/cvmx-helper-errata.c
new file mode 100644
index 000000000000..868659e64d4a
--- /dev/null
+++ b/arch/mips/cavium-octeon/executive/cvmx-helper-errata.c
@@ -0,0 +1,73 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28/**
29 *
30 * Fixes and workaround for Octeon chip errata. This file
31 * contains functions called by cvmx-helper to workaround known
32 * chip errata. For the most part, code doesn't need to call
33 * these functions directly.
34 *
35 */
36#include <linux/module.h>
37
38#include <asm/octeon/octeon.h>
39
40#include <asm/octeon/cvmx-helper-jtag.h>
41
42/**
43 * Due to errata G-720, the 2nd order CDR circuit on CN52XX pass
44 * 1 doesn't work properly. The following code disables 2nd order
45 * CDR for the specified QLM.
46 *
47 * @qlm: QLM to disable 2nd order CDR for.
48 */
49void __cvmx_helper_errata_qlm_disable_2nd_order_cdr(int qlm)
50{
51 int lane;
52 cvmx_helper_qlm_jtag_init();
53 /* We need to load all four lanes of the QLM, a total of 1072 bits */
54 for (lane = 0; lane < 4; lane++) {
55 /*
56 * Each lane has 268 bits. We need to set
57 * cfg_cdr_incx<67:64> = 3 and cfg_cdr_secord<77> =
58 * 1. All other bits are zero. Bits go in LSB first,
59 * so start off with the zeros for bits <63:0>.
60 */
61 cvmx_helper_qlm_jtag_shift_zeros(qlm, 63 - 0 + 1);
62 /* cfg_cdr_incx<67:64>=3 */
63 cvmx_helper_qlm_jtag_shift(qlm, 67 - 64 + 1, 3);
64 /* Zeros for bits <76:68> */
65 cvmx_helper_qlm_jtag_shift_zeros(qlm, 76 - 68 + 1);
66 /* cfg_cdr_secord<77>=1 */
67 cvmx_helper_qlm_jtag_shift(qlm, 77 - 77 + 1, 1);
68 /* Zeros for bits <267:78> */
69 cvmx_helper_qlm_jtag_shift_zeros(qlm, 267 - 78 + 1);
70 }
71 cvmx_helper_qlm_jtag_update(qlm);
72}
73EXPORT_SYMBOL(__cvmx_helper_errata_qlm_disable_2nd_order_cdr);
diff --git a/arch/mips/cavium-octeon/executive/cvmx-helper-jtag.c b/arch/mips/cavium-octeon/executive/cvmx-helper-jtag.c
new file mode 100644
index 000000000000..c1c54890bae0
--- /dev/null
+++ b/arch/mips/cavium-octeon/executive/cvmx-helper-jtag.c
@@ -0,0 +1,144 @@
1
2/***********************license start***************
3 * Author: Cavium Networks
4 *
5 * Contact: support@caviumnetworks.com
6 * This file is part of the OCTEON SDK
7 *
8 * Copyright (c) 2003-2008 Cavium Networks
9 *
10 * This file is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License, Version 2, as
12 * published by the Free Software Foundation.
13 *
14 * This file is distributed in the hope that it will be useful, but
15 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
16 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
17 * NONINFRINGEMENT. See the GNU General Public License for more
18 * details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this file; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 * or visit http://www.gnu.org/licenses/.
24 *
25 * This file may also be available under a different license from Cavium.
26 * Contact Cavium Networks for more information
27 ***********************license end**************************************/
28
29/**
30 *
31 * Helper utilities for qlm_jtag.
32 *
33 */
34
35#include <asm/octeon/octeon.h>
36#include <asm/octeon/cvmx-helper-jtag.h>
37
38
39/**
40 * Initialize the internal QLM JTAG logic to allow programming
41 * of the JTAG chain by the cvmx_helper_qlm_jtag_*() functions.
42 * These functions should only be used at the direction of Cavium
43 * Networks. Programming incorrect values into the JTAG chain
44 * can cause chip damage.
45 */
46void cvmx_helper_qlm_jtag_init(void)
47{
48 union cvmx_ciu_qlm_jtgc jtgc;
49 uint32_t clock_div = 0;
50 uint32_t divisor = cvmx_sysinfo_get()->cpu_clock_hz / (25 * 1000000);
51 divisor = (divisor - 1) >> 2;
52 /* Convert the divisor into a power of 2 shift */
53 while (divisor) {
54 clock_div++;
55 divisor = divisor >> 1;
56 }
57
58 /*
59 * Clock divider for QLM JTAG operations. eclk is divided by
60 * 2^(CLK_DIV + 2)
61 */
62 jtgc.u64 = 0;
63 jtgc.s.clk_div = clock_div;
64 jtgc.s.mux_sel = 0;
65 if (OCTEON_IS_MODEL(OCTEON_CN52XX))
66 jtgc.s.bypass = 0x3;
67 else
68 jtgc.s.bypass = 0xf;
69 cvmx_write_csr(CVMX_CIU_QLM_JTGC, jtgc.u64);
70 cvmx_read_csr(CVMX_CIU_QLM_JTGC);
71}
72
73/**
74 * Write up to 32bits into the QLM jtag chain. Bits are shifted
75 * into the MSB and out the LSB, so you should shift in the low
76 * order bits followed by the high order bits. The JTAG chain is
77 * 4 * 268 bits long, or 1072.
78 *
79 * @qlm: QLM to shift value into
80 * @bits: Number of bits to shift in (1-32).
81 * @data: Data to shift in. Bit 0 enters the chain first, followed by
82 * bit 1, etc.
83 *
84 * Returns The low order bits of the JTAG chain that shifted out of the
85 * circle.
86 */
87uint32_t cvmx_helper_qlm_jtag_shift(int qlm, int bits, uint32_t data)
88{
89 union cvmx_ciu_qlm_jtgd jtgd;
90 jtgd.u64 = 0;
91 jtgd.s.shift = 1;
92 jtgd.s.shft_cnt = bits - 1;
93 jtgd.s.shft_reg = data;
94 if (!OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X))
95 jtgd.s.select = 1 << qlm;
96 cvmx_write_csr(CVMX_CIU_QLM_JTGD, jtgd.u64);
97 do {
98 jtgd.u64 = cvmx_read_csr(CVMX_CIU_QLM_JTGD);
99 } while (jtgd.s.shift);
100 return jtgd.s.shft_reg >> (32 - bits);
101}
102
103/**
104 * Shift long sequences of zeros into the QLM JTAG chain. It is
105 * common to need to shift more than 32 bits of zeros into the
106 * chain. This function is a convience wrapper around
107 * cvmx_helper_qlm_jtag_shift() to shift more than 32 bits of
108 * zeros at a time.
109 *
110 * @qlm: QLM to shift zeros into
111 * @bits:
112 */
113void cvmx_helper_qlm_jtag_shift_zeros(int qlm, int bits)
114{
115 while (bits > 0) {
116 int n = bits;
117 if (n > 32)
118 n = 32;
119 cvmx_helper_qlm_jtag_shift(qlm, n, 0);
120 bits -= n;
121 }
122}
123
124/**
125 * Program the QLM JTAG chain into all lanes of the QLM. You must
126 * have already shifted in 268*4, or 1072 bits into the JTAG
127 * chain. Updating invalid values can possibly cause chip damage.
128 *
129 * @qlm: QLM to program
130 */
131void cvmx_helper_qlm_jtag_update(int qlm)
132{
133 union cvmx_ciu_qlm_jtgd jtgd;
134
135 /* Update the new data */
136 jtgd.u64 = 0;
137 jtgd.s.update = 1;
138 if (!OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X))
139 jtgd.s.select = 1 << qlm;
140 cvmx_write_csr(CVMX_CIU_QLM_JTGD, jtgd.u64);
141 do {
142 jtgd.u64 = cvmx_read_csr(CVMX_CIU_QLM_JTGD);
143 } while (jtgd.s.update);
144}
diff --git a/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c b/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c
index 4812370706a1..e5838890cba5 100644
--- a/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c
+++ b/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c
@@ -29,6 +29,7 @@
29 * This module provides system/board/application information obtained 29 * This module provides system/board/application information obtained
30 * by the bootloader. 30 * by the bootloader.
31 */ 31 */
32#include <linux/module.h>
32 33
33#include <asm/octeon/cvmx.h> 34#include <asm/octeon/cvmx.h>
34#include <asm/octeon/cvmx-spinlock.h> 35#include <asm/octeon/cvmx-spinlock.h>
@@ -69,6 +70,7 @@ struct cvmx_sysinfo *cvmx_sysinfo_get(void)
69{ 70{
70 return &(state.sysinfo); 71 return &(state.sysinfo);
71} 72}
73EXPORT_SYMBOL(cvmx_sysinfo_get);
72 74
73/** 75/**
74 * This function is used in non-simple executive environments (such as 76 * This function is used in non-simple executive environments (such as
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
index d3a0c8154bec..384f1842bfb1 100644
--- a/arch/mips/cavium-octeon/octeon-irq.c
+++ b/arch/mips/cavium-octeon/octeon-irq.c
@@ -7,9 +7,11 @@
7 */ 7 */
8#include <linux/irq.h> 8#include <linux/irq.h>
9#include <linux/interrupt.h> 9#include <linux/interrupt.h>
10#include <linux/hardirq.h> 10#include <linux/smp.h>
11 11
12#include <asm/octeon/octeon.h> 12#include <asm/octeon/octeon.h>
13#include <asm/octeon/cvmx-pexp-defs.h>
14#include <asm/octeon/cvmx-npi-defs.h>
13 15
14DEFINE_RWLOCK(octeon_irq_ciu0_rwlock); 16DEFINE_RWLOCK(octeon_irq_ciu0_rwlock);
15DEFINE_RWLOCK(octeon_irq_ciu1_rwlock); 17DEFINE_RWLOCK(octeon_irq_ciu1_rwlock);
@@ -499,3 +501,62 @@ asmlinkage void plat_irq_dispatch(void)
499 } 501 }
500 } 502 }
501} 503}
504
505#ifdef CONFIG_HOTPLUG_CPU
506static int is_irq_enabled_on_cpu(unsigned int irq, unsigned int cpu)
507{
508 unsigned int isset;
509#ifdef CONFIG_SMP
510 int coreid = cpu_logical_map(cpu);
511#else
512 int coreid = cvmx_get_core_num();
513#endif
514 int bit = (irq < OCTEON_IRQ_WDOG0) ?
515 irq - OCTEON_IRQ_WORKQ0 : irq - OCTEON_IRQ_WDOG0;
516 if (irq < 64) {
517 isset = (cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)) &
518 (1ull << bit)) >> bit;
519 } else {
520 isset = (cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)) &
521 (1ull << bit)) >> bit;
522 }
523 return isset;
524}
525
526void fixup_irqs(void)
527{
528 int irq;
529
530 for (irq = OCTEON_IRQ_SW0; irq <= OCTEON_IRQ_TIMER; irq++)
531 octeon_irq_core_disable_local(irq);
532
533 for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_GPIO15; irq++) {
534 if (is_irq_enabled_on_cpu(irq, smp_processor_id())) {
535 /* ciu irq migrates to next cpu */
536 octeon_irq_chip_ciu0.disable(irq);
537 octeon_irq_ciu0_set_affinity(irq, &cpu_online_map);
538 }
539 }
540
541#if 0
542 for (irq = OCTEON_IRQ_MBOX0; irq <= OCTEON_IRQ_MBOX1; irq++)
543 octeon_irq_mailbox_mask(irq);
544#endif
545 for (irq = OCTEON_IRQ_UART0; irq <= OCTEON_IRQ_BOOTDMA; irq++) {
546 if (is_irq_enabled_on_cpu(irq, smp_processor_id())) {
547 /* ciu irq migrates to next cpu */
548 octeon_irq_chip_ciu0.disable(irq);
549 octeon_irq_ciu0_set_affinity(irq, &cpu_online_map);
550 }
551 }
552
553 for (irq = OCTEON_IRQ_UART2; irq <= OCTEON_IRQ_RESERVED135; irq++) {
554 if (is_irq_enabled_on_cpu(irq, smp_processor_id())) {
555 /* ciu irq migrates to next cpu */
556 octeon_irq_chip_ciu1.disable(irq);
557 octeon_irq_ciu1_set_affinity(irq, &cpu_online_map);
558 }
559 }
560}
561
562#endif /* CONFIG_HOTPLUG_CPU */
diff --git a/arch/mips/cavium-octeon/octeon_boot.h b/arch/mips/cavium-octeon/octeon_boot.h
new file mode 100644
index 000000000000..0f7f84accf9a
--- /dev/null
+++ b/arch/mips/cavium-octeon/octeon_boot.h
@@ -0,0 +1,70 @@
1/*
2 * (C) Copyright 2004, 2005 Cavium Networks
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of
7 * the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
17 * MA 02111-1307 USA
18 */
19
20#ifndef __OCTEON_BOOT_H__
21#define __OCTEON_BOOT_H__
22
23#include <linux/types.h>
24
25struct boot_init_vector {
26 uint32_t stack_addr;
27 uint32_t code_addr;
28 uint32_t app_start_func_addr;
29 uint32_t k0_val;
30 uint32_t flags;
31 uint32_t boot_info_addr;
32 uint32_t pad;
33 uint32_t pad2;
34};
35
36/* similar to bootloader's linux_app_boot_info but without global data */
37struct linux_app_boot_info {
38 uint32_t labi_signature;
39 uint32_t start_core0_addr;
40 uint32_t avail_coremask;
41 uint32_t pci_console_active;
42 uint32_t icache_prefetch_disable;
43 uint32_t InitTLBStart_addr;
44 uint32_t start_app_addr;
45 uint32_t cur_exception_base;
46 uint32_t no_mark_private_data;
47 uint32_t compact_flash_common_base_addr;
48 uint32_t compact_flash_attribute_base_addr;
49 uint32_t led_display_base_addr;
50};
51
52/* If not to copy a lot of bootloader's structures
53 here is only offset of requested member */
54#define AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK 0x765c
55
56/* hardcoded in bootloader */
57#define LABI_ADDR_IN_BOOTLOADER 0x700
58
59#define LINUX_APP_BOOT_BLOCK_NAME "linux-app-boot"
60
61#define LABI_SIGNATURE 0xAABBCCDD
62
63/* from uboot-headers/octeon_mem_map.h */
64#define EXCEPTION_BASE_INCR (4 * 1024)
65 /* Increment size for exception base addresses (4k minimum) */
66#define EXCEPTION_BASE_BASE 0
67#define BOOTLOADER_PRIV_DATA_BASE (EXCEPTION_BASE_BASE + 0x800)
68#define BOOTLOADER_BOOT_VECTOR (BOOTLOADER_PRIV_DATA_BASE)
69
70#endif /* __OCTEON_BOOT_H__ */
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c
index 5f4e49ba4713..da559249cc2f 100644
--- a/arch/mips/cavium-octeon/setup.c
+++ b/arch/mips/cavium-octeon/setup.c
@@ -13,6 +13,7 @@
13#include <linux/io.h> 13#include <linux/io.h>
14#include <linux/irq.h> 14#include <linux/irq.h>
15#include <linux/serial.h> 15#include <linux/serial.h>
16#include <linux/smp.h>
16#include <linux/types.h> 17#include <linux/types.h>
17#include <linux/string.h> /* for memset */ 18#include <linux/string.h> /* for memset */
18#include <linux/tty.h> 19#include <linux/tty.h>
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
index 24e0ad63980a..32d51a31dc48 100644
--- a/arch/mips/cavium-octeon/smp.c
+++ b/arch/mips/cavium-octeon/smp.c
@@ -5,6 +5,7 @@
5 * 5 *
6 * Copyright (C) 2004-2008 Cavium Networks 6 * Copyright (C) 2004-2008 Cavium Networks
7 */ 7 */
8#include <linux/cpu.h>
8#include <linux/init.h> 9#include <linux/init.h>
9#include <linux/delay.h> 10#include <linux/delay.h>
10#include <linux/smp.h> 11#include <linux/smp.h>
@@ -19,10 +20,16 @@
19 20
20#include <asm/octeon/octeon.h> 21#include <asm/octeon/octeon.h>
21 22
23#include "octeon_boot.h"
24
22volatile unsigned long octeon_processor_boot = 0xff; 25volatile unsigned long octeon_processor_boot = 0xff;
23volatile unsigned long octeon_processor_sp; 26volatile unsigned long octeon_processor_sp;
24volatile unsigned long octeon_processor_gp; 27volatile unsigned long octeon_processor_gp;
25 28
29#ifdef CONFIG_HOTPLUG_CPU
30static unsigned int InitTLBStart_addr;
31#endif
32
26static irqreturn_t mailbox_interrupt(int irq, void *dev_id) 33static irqreturn_t mailbox_interrupt(int irq, void *dev_id)
27{ 34{
28 const int coreid = cvmx_get_core_num(); 35 const int coreid = cvmx_get_core_num();
@@ -67,8 +74,28 @@ static inline void octeon_send_ipi_mask(cpumask_t mask, unsigned int action)
67} 74}
68 75
69/** 76/**
70 * Detect available CPUs, populate phys_cpu_present_map 77 * Detect available CPUs, populate cpu_possible_map
71 */ 78 */
79static void octeon_smp_hotplug_setup(void)
80{
81#ifdef CONFIG_HOTPLUG_CPU
82 uint32_t labi_signature;
83
84 labi_signature =
85 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
86 LABI_ADDR_IN_BOOTLOADER +
87 offsetof(struct linux_app_boot_info,
88 labi_signature)));
89 if (labi_signature != LABI_SIGNATURE)
90 pr_err("The bootloader version on this board is incorrect\n");
91 InitTLBStart_addr =
92 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
93 LABI_ADDR_IN_BOOTLOADER +
94 offsetof(struct linux_app_boot_info,
95 InitTLBStart_addr)));
96#endif
97}
98
72static void octeon_smp_setup(void) 99static void octeon_smp_setup(void)
73{ 100{
74 const int coreid = cvmx_get_core_num(); 101 const int coreid = cvmx_get_core_num();
@@ -91,6 +118,9 @@ static void octeon_smp_setup(void)
91 cpus++; 118 cpus++;
92 } 119 }
93 } 120 }
121 cpu_present_map = cpu_possible_map;
122
123 octeon_smp_hotplug_setup();
94} 124}
95 125
96/** 126/**
@@ -128,6 +158,17 @@ static void octeon_init_secondary(void)
128 const int coreid = cvmx_get_core_num(); 158 const int coreid = cvmx_get_core_num();
129 union cvmx_ciu_intx_sum0 interrupt_enable; 159 union cvmx_ciu_intx_sum0 interrupt_enable;
130 160
161#ifdef CONFIG_HOTPLUG_CPU
162 unsigned int cur_exception_base;
163
164 cur_exception_base = cvmx_read64_uint32(
165 CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
166 LABI_ADDR_IN_BOOTLOADER +
167 offsetof(struct linux_app_boot_info,
168 cur_exception_base)));
169 /* cur_exception_base is incremented in bootloader after setting */
170 write_c0_ebase((unsigned int)(cur_exception_base - EXCEPTION_BASE_INCR));
171#endif
131 octeon_check_cpu_bist(); 172 octeon_check_cpu_bist();
132 octeon_init_cvmcount(); 173 octeon_init_cvmcount();
133 /* 174 /*
@@ -153,11 +194,11 @@ static void octeon_init_secondary(void)
153void octeon_prepare_cpus(unsigned int max_cpus) 194void octeon_prepare_cpus(unsigned int max_cpus)
154{ 195{
155 cvmx_write_csr(CVMX_CIU_MBOX_CLRX(cvmx_get_core_num()), 0xffffffff); 196 cvmx_write_csr(CVMX_CIU_MBOX_CLRX(cvmx_get_core_num()), 0xffffffff);
156 if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, IRQF_SHARED, 197 if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, IRQF_DISABLED,
157 "mailbox0", mailbox_interrupt)) { 198 "mailbox0", mailbox_interrupt)) {
158 panic("Cannot request_irq(OCTEON_IRQ_MBOX0)\n"); 199 panic("Cannot request_irq(OCTEON_IRQ_MBOX0)\n");
159 } 200 }
160 if (request_irq(OCTEON_IRQ_MBOX1, mailbox_interrupt, IRQF_SHARED, 201 if (request_irq(OCTEON_IRQ_MBOX1, mailbox_interrupt, IRQF_DISABLED,
161 "mailbox1", mailbox_interrupt)) { 202 "mailbox1", mailbox_interrupt)) {
162 panic("Cannot request_irq(OCTEON_IRQ_MBOX1)\n"); 203 panic("Cannot request_irq(OCTEON_IRQ_MBOX1)\n");
163 } 204 }
@@ -199,6 +240,193 @@ static void octeon_cpus_done(void)
199#endif 240#endif
200} 241}
201 242
243#ifdef CONFIG_HOTPLUG_CPU
244
245/* State of each CPU. */
246DEFINE_PER_CPU(int, cpu_state);
247
248extern void fixup_irqs(void);
249
250static DEFINE_SPINLOCK(smp_reserve_lock);
251
252static int octeon_cpu_disable(void)
253{
254 unsigned int cpu = smp_processor_id();
255
256 if (cpu == 0)
257 return -EBUSY;
258
259 spin_lock(&smp_reserve_lock);
260
261 cpu_clear(cpu, cpu_online_map);
262 cpu_clear(cpu, cpu_callin_map);
263 local_irq_disable();
264 fixup_irqs();
265 local_irq_enable();
266
267 flush_cache_all();
268 local_flush_tlb_all();
269
270 spin_unlock(&smp_reserve_lock);
271
272 return 0;
273}
274
275static void octeon_cpu_die(unsigned int cpu)
276{
277 int coreid = cpu_logical_map(cpu);
278 uint32_t avail_coremask;
279 struct cvmx_bootmem_named_block_desc *block_desc;
280
281#ifdef CONFIG_CAVIUM_OCTEON_WATCHDOG
282 /* Disable the watchdog */
283 cvmx_ciu_wdogx_t ciu_wdog;
284 ciu_wdog.u64 = cvmx_read_csr(CVMX_CIU_WDOGX(cpu));
285 ciu_wdog.s.mode = 0;
286 cvmx_write_csr(CVMX_CIU_WDOGX(cpu), ciu_wdog.u64);
287#endif
288
289 while (per_cpu(cpu_state, cpu) != CPU_DEAD)
290 cpu_relax();
291
292 /*
293 * This is a bit complicated strategics of getting/settig available
294 * cores mask, copied from bootloader
295 */
296 /* LINUX_APP_BOOT_BLOCK is initialized in bootoct binary */
297 block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME);
298
299 if (!block_desc) {
300 avail_coremask =
301 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
302 LABI_ADDR_IN_BOOTLOADER +
303 offsetof
304 (struct linux_app_boot_info,
305 avail_coremask)));
306 } else { /* alternative, already initialized */
307 avail_coremask =
308 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
309 block_desc->base_addr +
310 AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK));
311 }
312
313 avail_coremask |= 1 << coreid;
314
315 /* Setting avail_coremask for bootoct binary */
316 if (!block_desc) {
317 cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
318 LABI_ADDR_IN_BOOTLOADER +
319 offsetof(struct linux_app_boot_info,
320 avail_coremask)),
321 avail_coremask);
322 } else {
323 cvmx_write64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
324 block_desc->base_addr +
325 AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK),
326 avail_coremask);
327 }
328
329 pr_info("Reset core %d. Available Coremask = %x \n", coreid,
330 avail_coremask);
331 cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid);
332 cvmx_write_csr(CVMX_CIU_PP_RST, 0);
333}
334
335void play_dead(void)
336{
337 int coreid = cvmx_get_core_num();
338
339 idle_task_exit();
340 octeon_processor_boot = 0xff;
341 per_cpu(cpu_state, coreid) = CPU_DEAD;
342
343 while (1) /* core will be reset here */
344 ;
345}
346
347extern void kernel_entry(unsigned long arg1, ...);
348
349static void start_after_reset(void)
350{
351 kernel_entry(0, 0, 0); /* set a2 = 0 for secondary core */
352}
353
354int octeon_update_boot_vector(unsigned int cpu)
355{
356
357 int coreid = cpu_logical_map(cpu);
358 unsigned int avail_coremask;
359 struct cvmx_bootmem_named_block_desc *block_desc;
360 struct boot_init_vector *boot_vect =
361 (struct boot_init_vector *) cvmx_phys_to_ptr(0x0 +
362 BOOTLOADER_BOOT_VECTOR);
363
364 block_desc = cvmx_bootmem_find_named_block(LINUX_APP_BOOT_BLOCK_NAME);
365
366 if (!block_desc) {
367 avail_coremask =
368 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
369 LABI_ADDR_IN_BOOTLOADER +
370 offsetof(struct linux_app_boot_info,
371 avail_coremask)));
372 } else { /* alternative, already initialized */
373 avail_coremask =
374 cvmx_read64_uint32(CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
375 block_desc->base_addr +
376 AVAIL_COREMASK_OFFSET_IN_LINUX_APP_BOOT_BLOCK));
377 }
378
379 if (!(avail_coremask & (1 << coreid))) {
380 /* core not available, assume, that catched by simple-executive */
381 cvmx_write_csr(CVMX_CIU_PP_RST, 1 << coreid);
382 cvmx_write_csr(CVMX_CIU_PP_RST, 0);
383 }
384
385 boot_vect[coreid].app_start_func_addr =
386 (uint32_t) (unsigned long) start_after_reset;
387 boot_vect[coreid].code_addr = InitTLBStart_addr;
388
389 CVMX_SYNC;
390
391 cvmx_write_csr(CVMX_CIU_NMI, (1 << coreid) & avail_coremask);
392
393 return 0;
394}
395
396static int __cpuinit octeon_cpu_callback(struct notifier_block *nfb,
397 unsigned long action, void *hcpu)
398{
399 unsigned int cpu = (unsigned long)hcpu;
400
401 switch (action) {
402 case CPU_UP_PREPARE:
403 octeon_update_boot_vector(cpu);
404 break;
405 case CPU_ONLINE:
406 pr_info("Cpu %d online\n", cpu);
407 break;
408 case CPU_DEAD:
409 break;
410 }
411
412 return NOTIFY_OK;
413}
414
415static struct notifier_block __cpuinitdata octeon_cpu_notifier = {
416 .notifier_call = octeon_cpu_callback,
417};
418
419static int __cpuinit register_cavium_notifier(void)
420{
421 register_hotcpu_notifier(&octeon_cpu_notifier);
422
423 return 0;
424}
425
426late_initcall(register_cavium_notifier);
427
428#endif /* CONFIG_HOTPLUG_CPU */
429
202struct plat_smp_ops octeon_smp_ops = { 430struct plat_smp_ops octeon_smp_ops = {
203 .send_ipi_single = octeon_send_ipi_single, 431 .send_ipi_single = octeon_send_ipi_single,
204 .send_ipi_mask = octeon_send_ipi_mask, 432 .send_ipi_mask = octeon_send_ipi_mask,
@@ -208,4 +436,8 @@ struct plat_smp_ops octeon_smp_ops = {
208 .boot_secondary = octeon_boot_secondary, 436 .boot_secondary = octeon_boot_secondary,
209 .smp_setup = octeon_smp_setup, 437 .smp_setup = octeon_smp_setup,
210 .prepare_cpus = octeon_prepare_cpus, 438 .prepare_cpus = octeon_prepare_cpus,
439#ifdef CONFIG_HOTPLUG_CPU
440 .cpu_disable = octeon_cpu_disable,
441 .cpu_die = octeon_cpu_die,
442#endif
211}; 443};
diff --git a/arch/mips/cobalt/buttons.c b/arch/mips/cobalt/buttons.c
index 9e143989c7b8..4eaec8b46e0c 100644
--- a/arch/mips/cobalt/buttons.c
+++ b/arch/mips/cobalt/buttons.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Cobalt buttons platform device. 2 * Cobalt buttons platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/lcd.c b/arch/mips/cobalt/lcd.c
index 0720e4fae311..0f1cd90f37ed 100644
--- a/arch/mips/cobalt/lcd.c
+++ b/arch/mips/cobalt/lcd.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of Cobalt LCD platform device. 2 * Registration of Cobalt LCD platform device.
3 * 3 *
4 * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/led.c b/arch/mips/cobalt/led.c
index 1c6ebd468b07..d3ce6fa1dc74 100644
--- a/arch/mips/cobalt/led.c
+++ b/arch/mips/cobalt/led.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of Cobalt LED platform device. 2 * Registration of Cobalt LED platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/mtd.c b/arch/mips/cobalt/mtd.c
index 2b088ef3839a..691d620b6766 100644
--- a/arch/mips/cobalt/mtd.c
+++ b/arch/mips/cobalt/mtd.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of Cobalt MTD device. 2 * Registration of Cobalt MTD device.
3 * 3 *
4 * Copyright (C) 2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2006 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/rtc.c b/arch/mips/cobalt/rtc.c
index e70794b8bcba..3ab39898b4e4 100644
--- a/arch/mips/cobalt/rtc.c
+++ b/arch/mips/cobalt/rtc.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of Cobalt RTC platform device. 2 * Registration of Cobalt RTC platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/serial.c b/arch/mips/cobalt/serial.c
index 53b8d0d6da90..7cb51f57275e 100644
--- a/arch/mips/cobalt/serial.c
+++ b/arch/mips/cobalt/serial.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of Cobalt UART platform device. 2 * Registration of Cobalt UART platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/cobalt/time.c b/arch/mips/cobalt/time.c
index 4a570e7145fe..0162f9edc693 100644
--- a/arch/mips/cobalt/time.c
+++ b/arch/mips/cobalt/time.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Cobalt time initialization. 2 * Cobalt time initialization.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/configs/ar7_defconfig b/arch/mips/configs/ar7_defconfig
new file mode 100644
index 000000000000..dad5b6769d74
--- /dev/null
+++ b/arch/mips/configs/ar7_defconfig
@@ -0,0 +1,1182 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.30
4# Wed Jun 24 14:08:59 2009
5#
6CONFIG_MIPS=y
7
8#
9# Machine selection
10#
11# CONFIG_MACH_ALCHEMY is not set
12CONFIG_AR7=y
13# CONFIG_BASLER_EXCITE is not set
14# CONFIG_BCM47XX is not set
15# CONFIG_MIPS_COBALT is not set
16# CONFIG_MACH_DECSTATION is not set
17# CONFIG_MACH_JAZZ is not set
18# CONFIG_LASAT is not set
19# CONFIG_LEMOTE_FULONG is not set
20# CONFIG_MIPS_MALTA is not set
21# CONFIG_MIPS_SIM is not set
22# CONFIG_NEC_MARKEINS is not set
23# CONFIG_MACH_VR41XX is not set
24# CONFIG_NXP_STB220 is not set
25# CONFIG_NXP_STB225 is not set
26# CONFIG_PNX8550_JBS is not set
27# CONFIG_PNX8550_STB810 is not set
28# CONFIG_PMC_MSP is not set
29# CONFIG_PMC_YOSEMITE is not set
30# CONFIG_SGI_IP22 is not set
31# CONFIG_SGI_IP27 is not set
32# CONFIG_SGI_IP28 is not set
33# CONFIG_SGI_IP32 is not set
34# CONFIG_SIBYTE_CRHINE is not set
35# CONFIG_SIBYTE_CARMEL is not set
36# CONFIG_SIBYTE_CRHONE is not set
37# CONFIG_SIBYTE_RHONE is not set
38# CONFIG_SIBYTE_SWARM is not set
39# CONFIG_SIBYTE_LITTLESUR is not set
40# CONFIG_SIBYTE_SENTOSA is not set
41# CONFIG_SIBYTE_BIGSUR is not set
42# CONFIG_SNI_RM is not set
43# CONFIG_MACH_TX39XX is not set
44# CONFIG_MACH_TX49XX is not set
45# CONFIG_MIKROTIK_RB532 is not set
46# CONFIG_WR_PPMC is not set
47# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
48# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
49# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
50CONFIG_RWSEM_GENERIC_SPINLOCK=y
51# CONFIG_ARCH_HAS_ILOG2_U32 is not set
52# CONFIG_ARCH_HAS_ILOG2_U64 is not set
53CONFIG_ARCH_SUPPORTS_OPROFILE=y
54CONFIG_GENERIC_FIND_NEXT_BIT=y
55CONFIG_GENERIC_HWEIGHT=y
56CONFIG_GENERIC_CALIBRATE_DELAY=y
57CONFIG_GENERIC_CLOCKEVENTS=y
58CONFIG_GENERIC_TIME=y
59CONFIG_GENERIC_CMOS_UPDATE=y
60CONFIG_SCHED_OMIT_FRAME_POINTER=y
61CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
62CONFIG_CEVT_R4K_LIB=y
63CONFIG_CEVT_R4K=y
64CONFIG_CSRC_R4K_LIB=y
65CONFIG_CSRC_R4K=y
66CONFIG_DMA_NONCOHERENT=y
67CONFIG_DMA_NEED_PCI_MAP_STATE=y
68CONFIG_EARLY_PRINTK=y
69CONFIG_SYS_HAS_EARLY_PRINTK=y
70# CONFIG_HOTPLUG_CPU is not set
71# CONFIG_NO_IOPORT is not set
72CONFIG_GENERIC_GPIO=y
73# CONFIG_CPU_BIG_ENDIAN is not set
74CONFIG_CPU_LITTLE_ENDIAN=y
75CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
76CONFIG_IRQ_CPU=y
77CONFIG_NO_EXCEPT_FILL=y
78CONFIG_SWAP_IO_SPACE=y
79CONFIG_BOOT_ELF32=y
80CONFIG_MIPS_L1_CACHE_SHIFT=5
81
82#
83# CPU selection
84#
85# CONFIG_CPU_LOONGSON2 is not set
86CONFIG_CPU_MIPS32_R1=y
87# CONFIG_CPU_MIPS32_R2 is not set
88# CONFIG_CPU_MIPS64_R1 is not set
89# CONFIG_CPU_MIPS64_R2 is not set
90# CONFIG_CPU_R3000 is not set
91# CONFIG_CPU_TX39XX is not set
92# CONFIG_CPU_VR41XX is not set
93# CONFIG_CPU_R4300 is not set
94# CONFIG_CPU_R4X00 is not set
95# CONFIG_CPU_TX49XX is not set
96# CONFIG_CPU_R5000 is not set
97# CONFIG_CPU_R5432 is not set
98# CONFIG_CPU_R5500 is not set
99# CONFIG_CPU_R6000 is not set
100# CONFIG_CPU_NEVADA is not set
101# CONFIG_CPU_R8000 is not set
102# CONFIG_CPU_R10000 is not set
103# CONFIG_CPU_RM7000 is not set
104# CONFIG_CPU_RM9000 is not set
105# CONFIG_CPU_SB1 is not set
106# CONFIG_CPU_CAVIUM_OCTEON is not set
107CONFIG_SYS_HAS_CPU_MIPS32_R1=y
108CONFIG_CPU_MIPS32=y
109CONFIG_CPU_MIPSR1=y
110CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
111CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
112CONFIG_HARDWARE_WATCHPOINTS=y
113
114#
115# Kernel type
116#
117CONFIG_32BIT=y
118# CONFIG_64BIT is not set
119CONFIG_PAGE_SIZE_4KB=y
120# CONFIG_PAGE_SIZE_8KB is not set
121# CONFIG_PAGE_SIZE_16KB is not set
122# CONFIG_PAGE_SIZE_32KB is not set
123# CONFIG_PAGE_SIZE_64KB is not set
124CONFIG_CPU_HAS_PREFETCH=y
125CONFIG_MIPS_MT_DISABLED=y
126# CONFIG_MIPS_MT_SMP is not set
127# CONFIG_MIPS_MT_SMTC is not set
128CONFIG_CPU_HAS_LLSC=y
129CONFIG_CPU_HAS_SYNC=y
130CONFIG_GENERIC_HARDIRQS=y
131CONFIG_GENERIC_IRQ_PROBE=y
132CONFIG_CPU_SUPPORTS_HIGHMEM=y
133CONFIG_ARCH_FLATMEM_ENABLE=y
134CONFIG_ARCH_POPULATES_NODE_MAP=y
135CONFIG_SELECT_MEMORY_MODEL=y
136CONFIG_FLATMEM_MANUAL=y
137# CONFIG_DISCONTIGMEM_MANUAL is not set
138# CONFIG_SPARSEMEM_MANUAL is not set
139CONFIG_FLATMEM=y
140CONFIG_FLAT_NODE_MEM_MAP=y
141CONFIG_PAGEFLAGS_EXTENDED=y
142CONFIG_SPLIT_PTLOCK_CPUS=4
143# CONFIG_PHYS_ADDR_T_64BIT is not set
144CONFIG_ZONE_DMA_FLAG=0
145CONFIG_VIRT_TO_BUS=y
146CONFIG_HAVE_MLOCK=y
147CONFIG_HAVE_MLOCKED_PAGE_BIT=y
148CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
149CONFIG_TICK_ONESHOT=y
150# CONFIG_NO_HZ is not set
151CONFIG_HIGH_RES_TIMERS=y
152CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
153# CONFIG_HZ_48 is not set
154CONFIG_HZ_100=y
155# CONFIG_HZ_128 is not set
156# CONFIG_HZ_250 is not set
157# CONFIG_HZ_256 is not set
158# CONFIG_HZ_1000 is not set
159# CONFIG_HZ_1024 is not set
160CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
161CONFIG_HZ=100
162CONFIG_PREEMPT_NONE=y
163# CONFIG_PREEMPT_VOLUNTARY is not set
164# CONFIG_PREEMPT is not set
165CONFIG_KEXEC=y
166# CONFIG_SECCOMP is not set
167CONFIG_LOCKDEP_SUPPORT=y
168CONFIG_STACKTRACE_SUPPORT=y
169CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
170
171#
172# General setup
173#
174CONFIG_EXPERIMENTAL=y
175CONFIG_BROKEN_ON_SMP=y
176CONFIG_INIT_ENV_ARG_LIMIT=32
177CONFIG_LOCALVERSION=""
178# CONFIG_LOCALVERSION_AUTO is not set
179CONFIG_SWAP=y
180CONFIG_SYSVIPC=y
181CONFIG_SYSVIPC_SYSCTL=y
182# CONFIG_POSIX_MQUEUE is not set
183CONFIG_BSD_PROCESS_ACCT=y
184# CONFIG_BSD_PROCESS_ACCT_V3 is not set
185# CONFIG_TASKSTATS is not set
186# CONFIG_AUDIT is not set
187
188#
189# RCU Subsystem
190#
191CONFIG_CLASSIC_RCU=y
192# CONFIG_TREE_RCU is not set
193# CONFIG_PREEMPT_RCU is not set
194# CONFIG_TREE_RCU_TRACE is not set
195# CONFIG_PREEMPT_RCU_TRACE is not set
196# CONFIG_IKCONFIG is not set
197CONFIG_LOG_BUF_SHIFT=14
198# CONFIG_GROUP_SCHED is not set
199# CONFIG_CGROUPS is not set
200CONFIG_SYSFS_DEPRECATED=y
201CONFIG_SYSFS_DEPRECATED_V2=y
202CONFIG_RELAY=y
203# CONFIG_NAMESPACES is not set
204CONFIG_BLK_DEV_INITRD=y
205CONFIG_INITRAMFS_SOURCE=""
206CONFIG_RD_GZIP=y
207# CONFIG_RD_BZIP2 is not set
208CONFIG_RD_LZMA=y
209CONFIG_CC_OPTIMIZE_FOR_SIZE=y
210CONFIG_SYSCTL=y
211CONFIG_ANON_INODES=y
212CONFIG_EMBEDDED=y
213CONFIG_SYSCTL_SYSCALL=y
214# CONFIG_KALLSYMS is not set
215CONFIG_HOTPLUG=y
216CONFIG_PRINTK=y
217CONFIG_BUG=y
218# CONFIG_ELF_CORE is not set
219# CONFIG_PCSPKR_PLATFORM is not set
220CONFIG_BASE_FULL=y
221CONFIG_FUTEX=y
222CONFIG_EPOLL=y
223CONFIG_SIGNALFD=y
224CONFIG_TIMERFD=y
225CONFIG_EVENTFD=y
226CONFIG_SHMEM=y
227CONFIG_AIO=y
228
229#
230# Performance Counters
231#
232# CONFIG_VM_EVENT_COUNTERS is not set
233CONFIG_STRIP_ASM_SYMS=y
234# CONFIG_COMPAT_BRK is not set
235CONFIG_SLAB=y
236# CONFIG_SLUB is not set
237# CONFIG_SLOB is not set
238# CONFIG_PROFILING is not set
239# CONFIG_MARKERS is not set
240CONFIG_HAVE_OPROFILE=y
241# CONFIG_SLOW_WORK is not set
242# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
243CONFIG_SLABINFO=y
244CONFIG_RT_MUTEXES=y
245CONFIG_BASE_SMALL=0
246CONFIG_MODULES=y
247# CONFIG_MODULE_FORCE_LOAD is not set
248CONFIG_MODULE_UNLOAD=y
249# CONFIG_MODULE_FORCE_UNLOAD is not set
250# CONFIG_MODVERSIONS is not set
251# CONFIG_MODULE_SRCVERSION_ALL is not set
252CONFIG_BLOCK=y
253# CONFIG_LBD is not set
254# CONFIG_BLK_DEV_BSG is not set
255# CONFIG_BLK_DEV_INTEGRITY is not set
256
257#
258# IO Schedulers
259#
260CONFIG_IOSCHED_NOOP=y
261# CONFIG_IOSCHED_AS is not set
262CONFIG_IOSCHED_DEADLINE=y
263# CONFIG_IOSCHED_CFQ is not set
264# CONFIG_DEFAULT_AS is not set
265CONFIG_DEFAULT_DEADLINE=y
266# CONFIG_DEFAULT_CFQ is not set
267# CONFIG_DEFAULT_NOOP is not set
268CONFIG_DEFAULT_IOSCHED="deadline"
269CONFIG_PROBE_INITRD_HEADER=y
270# CONFIG_FREEZER is not set
271
272#
273# Bus options (PCI, PCMCIA, EISA, ISA, TC)
274#
275# CONFIG_ARCH_SUPPORTS_MSI is not set
276CONFIG_MMU=y
277# CONFIG_PCCARD is not set
278
279#
280# Executable file formats
281#
282CONFIG_BINFMT_ELF=y
283# CONFIG_HAVE_AOUT is not set
284# CONFIG_BINFMT_MISC is not set
285CONFIG_TRAD_SIGNALS=y
286
287#
288# Power management options
289#
290CONFIG_ARCH_HIBERNATION_POSSIBLE=y
291CONFIG_ARCH_SUSPEND_POSSIBLE=y
292# CONFIG_PM is not set
293CONFIG_NET=y
294
295#
296# Networking options
297#
298CONFIG_PACKET=y
299CONFIG_PACKET_MMAP=y
300CONFIG_UNIX=y
301# CONFIG_NET_KEY is not set
302CONFIG_INET=y
303CONFIG_IP_MULTICAST=y
304CONFIG_IP_ADVANCED_ROUTER=y
305CONFIG_ASK_IP_FIB_HASH=y
306# CONFIG_IP_FIB_TRIE is not set
307CONFIG_IP_FIB_HASH=y
308CONFIG_IP_MULTIPLE_TABLES=y
309CONFIG_IP_ROUTE_MULTIPATH=y
310CONFIG_IP_ROUTE_VERBOSE=y
311# CONFIG_IP_PNP is not set
312# CONFIG_NET_IPIP is not set
313# CONFIG_NET_IPGRE is not set
314CONFIG_IP_MROUTE=y
315# CONFIG_IP_PIMSM_V1 is not set
316# CONFIG_IP_PIMSM_V2 is not set
317CONFIG_ARPD=y
318CONFIG_SYN_COOKIES=y
319# CONFIG_INET_AH is not set
320# CONFIG_INET_ESP is not set
321# CONFIG_INET_IPCOMP is not set
322# CONFIG_INET_XFRM_TUNNEL is not set
323# CONFIG_INET_TUNNEL is not set
324# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
325# CONFIG_INET_XFRM_MODE_TUNNEL is not set
326# CONFIG_INET_XFRM_MODE_BEET is not set
327# CONFIG_INET_LRO is not set
328# CONFIG_INET_DIAG is not set
329CONFIG_TCP_CONG_ADVANCED=y
330# CONFIG_TCP_CONG_BIC is not set
331# CONFIG_TCP_CONG_CUBIC is not set
332CONFIG_TCP_CONG_WESTWOOD=y
333# CONFIG_TCP_CONG_HTCP is not set
334# CONFIG_TCP_CONG_HSTCP is not set
335# CONFIG_TCP_CONG_HYBLA is not set
336# CONFIG_TCP_CONG_VEGAS is not set
337# CONFIG_TCP_CONG_SCALABLE is not set
338# CONFIG_TCP_CONG_LP is not set
339# CONFIG_TCP_CONG_VENO is not set
340# CONFIG_TCP_CONG_YEAH is not set
341# CONFIG_TCP_CONG_ILLINOIS is not set
342# CONFIG_DEFAULT_BIC is not set
343# CONFIG_DEFAULT_CUBIC is not set
344# CONFIG_DEFAULT_HTCP is not set
345# CONFIG_DEFAULT_VEGAS is not set
346CONFIG_DEFAULT_WESTWOOD=y
347# CONFIG_DEFAULT_RENO is not set
348CONFIG_DEFAULT_TCP_CONG="westwood"
349# CONFIG_TCP_MD5SIG is not set
350# CONFIG_IPV6 is not set
351# CONFIG_NETWORK_SECMARK is not set
352CONFIG_NETFILTER=y
353# CONFIG_NETFILTER_DEBUG is not set
354CONFIG_NETFILTER_ADVANCED=y
355# CONFIG_BRIDGE_NETFILTER is not set
356
357#
358# Core Netfilter Configuration
359#
360# CONFIG_NETFILTER_NETLINK_QUEUE is not set
361# CONFIG_NETFILTER_NETLINK_LOG is not set
362CONFIG_NF_CONNTRACK=m
363# CONFIG_NF_CT_ACCT is not set
364CONFIG_NF_CONNTRACK_MARK=y
365# CONFIG_NF_CONNTRACK_EVENTS is not set
366# CONFIG_NF_CT_PROTO_DCCP is not set
367# CONFIG_NF_CT_PROTO_SCTP is not set
368# CONFIG_NF_CT_PROTO_UDPLITE is not set
369# CONFIG_NF_CONNTRACK_AMANDA is not set
370CONFIG_NF_CONNTRACK_FTP=m
371# CONFIG_NF_CONNTRACK_H323 is not set
372CONFIG_NF_CONNTRACK_IRC=m
373# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
374# CONFIG_NF_CONNTRACK_PPTP is not set
375# CONFIG_NF_CONNTRACK_SANE is not set
376# CONFIG_NF_CONNTRACK_SIP is not set
377CONFIG_NF_CONNTRACK_TFTP=m
378# CONFIG_NF_CT_NETLINK is not set
379# CONFIG_NETFILTER_TPROXY is not set
380CONFIG_NETFILTER_XTABLES=m
381# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
382# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
383# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
384# CONFIG_NETFILTER_XT_TARGET_HL is not set
385# CONFIG_NETFILTER_XT_TARGET_LED is not set
386# CONFIG_NETFILTER_XT_TARGET_MARK is not set
387# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
388# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
389CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
390# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
391# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
392CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
393# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
394# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
395# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
396# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
397# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
398# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
399# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
400# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
401# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
402# CONFIG_NETFILTER_XT_MATCH_ESP is not set
403# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
404# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
405# CONFIG_NETFILTER_XT_MATCH_HL is not set
406# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
407# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
408CONFIG_NETFILTER_XT_MATCH_LIMIT=m
409CONFIG_NETFILTER_XT_MATCH_MAC=m
410# CONFIG_NETFILTER_XT_MATCH_MARK is not set
411CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
412# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
413# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
414# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
415# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
416# CONFIG_NETFILTER_XT_MATCH_REALM is not set
417# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
418# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
419CONFIG_NETFILTER_XT_MATCH_STATE=m
420# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
421# CONFIG_NETFILTER_XT_MATCH_STRING is not set
422# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
423# CONFIG_NETFILTER_XT_MATCH_TIME is not set
424# CONFIG_NETFILTER_XT_MATCH_U32 is not set
425# CONFIG_IP_VS is not set
426
427#
428# IP: Netfilter Configuration
429#
430CONFIG_NF_DEFRAG_IPV4=m
431CONFIG_NF_CONNTRACK_IPV4=m
432CONFIG_NF_CONNTRACK_PROC_COMPAT=y
433# CONFIG_IP_NF_QUEUE is not set
434CONFIG_IP_NF_IPTABLES=m
435# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
436# CONFIG_IP_NF_MATCH_AH is not set
437# CONFIG_IP_NF_MATCH_ECN is not set
438# CONFIG_IP_NF_MATCH_TTL is not set
439CONFIG_IP_NF_FILTER=m
440CONFIG_IP_NF_TARGET_REJECT=m
441CONFIG_IP_NF_TARGET_LOG=m
442# CONFIG_IP_NF_TARGET_ULOG is not set
443CONFIG_NF_NAT=m
444CONFIG_NF_NAT_NEEDED=y
445CONFIG_IP_NF_TARGET_MASQUERADE=m
446# CONFIG_IP_NF_TARGET_NETMAP is not set
447# CONFIG_IP_NF_TARGET_REDIRECT is not set
448# CONFIG_NF_NAT_SNMP_BASIC is not set
449CONFIG_NF_NAT_FTP=m
450CONFIG_NF_NAT_IRC=m
451CONFIG_NF_NAT_TFTP=m
452# CONFIG_NF_NAT_AMANDA is not set
453# CONFIG_NF_NAT_PPTP is not set
454# CONFIG_NF_NAT_H323 is not set
455# CONFIG_NF_NAT_SIP is not set
456CONFIG_IP_NF_MANGLE=m
457# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
458# CONFIG_IP_NF_TARGET_ECN is not set
459# CONFIG_IP_NF_TARGET_TTL is not set
460CONFIG_IP_NF_RAW=m
461# CONFIG_IP_NF_ARPTABLES is not set
462# CONFIG_IP_DCCP is not set
463# CONFIG_IP_SCTP is not set
464# CONFIG_TIPC is not set
465CONFIG_ATM=m
466# CONFIG_ATM_CLIP is not set
467# CONFIG_ATM_LANE is not set
468CONFIG_ATM_BR2684=m
469CONFIG_ATM_BR2684_IPFILTER=y
470CONFIG_STP=y
471CONFIG_BRIDGE=y
472# CONFIG_NET_DSA is not set
473CONFIG_VLAN_8021Q=y
474# CONFIG_VLAN_8021Q_GVRP is not set
475# CONFIG_DECNET is not set
476CONFIG_LLC=y
477# CONFIG_LLC2 is not set
478# CONFIG_IPX is not set
479# CONFIG_ATALK is not set
480# CONFIG_X25 is not set
481# CONFIG_LAPB is not set
482# CONFIG_ECONET is not set
483# CONFIG_WAN_ROUTER is not set
484# CONFIG_PHONET is not set
485# CONFIG_IEEE802154 is not set
486CONFIG_NET_SCHED=y
487
488#
489# Queueing/Scheduling
490#
491# CONFIG_NET_SCH_CBQ is not set
492# CONFIG_NET_SCH_HTB is not set
493# CONFIG_NET_SCH_HFSC is not set
494# CONFIG_NET_SCH_ATM is not set
495# CONFIG_NET_SCH_PRIO is not set
496# CONFIG_NET_SCH_MULTIQ is not set
497# CONFIG_NET_SCH_RED is not set
498# CONFIG_NET_SCH_SFQ is not set
499# CONFIG_NET_SCH_TEQL is not set
500# CONFIG_NET_SCH_TBF is not set
501# CONFIG_NET_SCH_GRED is not set
502# CONFIG_NET_SCH_DSMARK is not set
503# CONFIG_NET_SCH_NETEM is not set
504# CONFIG_NET_SCH_DRR is not set
505# CONFIG_NET_SCH_INGRESS is not set
506
507#
508# Classification
509#
510# CONFIG_NET_CLS_BASIC is not set
511# CONFIG_NET_CLS_TCINDEX is not set
512# CONFIG_NET_CLS_ROUTE4 is not set
513# CONFIG_NET_CLS_FW is not set
514# CONFIG_NET_CLS_U32 is not set
515# CONFIG_NET_CLS_RSVP is not set
516# CONFIG_NET_CLS_RSVP6 is not set
517# CONFIG_NET_CLS_FLOW is not set
518# CONFIG_NET_EMATCH is not set
519CONFIG_NET_CLS_ACT=y
520CONFIG_NET_ACT_POLICE=y
521# CONFIG_NET_ACT_GACT is not set
522# CONFIG_NET_ACT_MIRRED is not set
523# CONFIG_NET_ACT_IPT is not set
524# CONFIG_NET_ACT_NAT is not set
525# CONFIG_NET_ACT_PEDIT is not set
526# CONFIG_NET_ACT_SIMP is not set
527# CONFIG_NET_ACT_SKBEDIT is not set
528CONFIG_NET_SCH_FIFO=y
529# CONFIG_DCB is not set
530
531#
532# Network testing
533#
534# CONFIG_NET_PKTGEN is not set
535CONFIG_HAMRADIO=y
536
537#
538# Packet Radio protocols
539#
540# CONFIG_AX25 is not set
541# CONFIG_CAN is not set
542# CONFIG_IRDA is not set
543# CONFIG_BT is not set
544# CONFIG_AF_RXRPC is not set
545CONFIG_FIB_RULES=y
546CONFIG_WIRELESS=y
547CONFIG_CFG80211=m
548# CONFIG_CFG80211_REG_DEBUG is not set
549# CONFIG_CFG80211_DEBUGFS is not set
550# CONFIG_WIRELESS_OLD_REGULATORY is not set
551CONFIG_WIRELESS_EXT=y
552CONFIG_WIRELESS_EXT_SYSFS=y
553# CONFIG_LIB80211 is not set
554CONFIG_MAC80211=m
555CONFIG_MAC80211_DEFAULT_PS=y
556CONFIG_MAC80211_DEFAULT_PS_VALUE=1
557
558#
559# Rate control algorithm selection
560#
561CONFIG_MAC80211_RC_PID=y
562CONFIG_MAC80211_RC_MINSTREL=y
563CONFIG_MAC80211_RC_DEFAULT_PID=y
564# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
565CONFIG_MAC80211_RC_DEFAULT="pid"
566# CONFIG_MAC80211_MESH is not set
567# CONFIG_MAC80211_LEDS is not set
568# CONFIG_MAC80211_DEBUGFS is not set
569# CONFIG_MAC80211_DEBUG_MENU is not set
570# CONFIG_WIMAX is not set
571# CONFIG_RFKILL is not set
572# CONFIG_NET_9P is not set
573
574#
575# Device Drivers
576#
577
578#
579# Generic Driver Options
580#
581CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
582CONFIG_STANDALONE=y
583CONFIG_PREVENT_FIRMWARE_BUILD=y
584CONFIG_FW_LOADER=y
585# CONFIG_FIRMWARE_IN_KERNEL is not set
586CONFIG_EXTRA_FIRMWARE=""
587# CONFIG_SYS_HYPERVISOR is not set
588# CONFIG_CONNECTOR is not set
589CONFIG_MTD=y
590# CONFIG_MTD_DEBUG is not set
591# CONFIG_MTD_CONCAT is not set
592CONFIG_MTD_PARTITIONS=y
593# CONFIG_MTD_TESTS is not set
594# CONFIG_MTD_REDBOOT_PARTS is not set
595# CONFIG_MTD_CMDLINE_PARTS is not set
596# CONFIG_MTD_AR7_PARTS is not set
597
598#
599# User Modules And Translation Layers
600#
601CONFIG_MTD_CHAR=y
602CONFIG_MTD_BLKDEVS=y
603CONFIG_MTD_BLOCK=y
604# CONFIG_FTL is not set
605# CONFIG_NFTL is not set
606# CONFIG_INFTL is not set
607# CONFIG_RFD_FTL is not set
608# CONFIG_SSFDC is not set
609# CONFIG_MTD_OOPS is not set
610
611#
612# RAM/ROM/Flash chip drivers
613#
614CONFIG_MTD_CFI=y
615# CONFIG_MTD_JEDECPROBE is not set
616CONFIG_MTD_GEN_PROBE=y
617# CONFIG_MTD_CFI_ADV_OPTIONS is not set
618CONFIG_MTD_MAP_BANK_WIDTH_1=y
619CONFIG_MTD_MAP_BANK_WIDTH_2=y
620CONFIG_MTD_MAP_BANK_WIDTH_4=y
621# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
622# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
623# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
624CONFIG_MTD_CFI_I1=y
625CONFIG_MTD_CFI_I2=y
626# CONFIG_MTD_CFI_I4 is not set
627# CONFIG_MTD_CFI_I8 is not set
628CONFIG_MTD_CFI_INTELEXT=y
629CONFIG_MTD_CFI_AMDSTD=y
630CONFIG_MTD_CFI_STAA=y
631CONFIG_MTD_CFI_UTIL=y
632# CONFIG_MTD_RAM is not set
633# CONFIG_MTD_ROM is not set
634# CONFIG_MTD_ABSENT is not set
635
636#
637# Mapping drivers for chip access
638#
639CONFIG_MTD_COMPLEX_MAPPINGS=y
640CONFIG_MTD_PHYSMAP=y
641# CONFIG_MTD_PHYSMAP_COMPAT is not set
642# CONFIG_MTD_PLATRAM is not set
643
644#
645# Self-contained MTD device drivers
646#
647# CONFIG_MTD_SLRAM is not set
648# CONFIG_MTD_PHRAM is not set
649# CONFIG_MTD_MTDRAM is not set
650# CONFIG_MTD_BLOCK2MTD is not set
651
652#
653# Disk-On-Chip Device Drivers
654#
655# CONFIG_MTD_DOC2000 is not set
656# CONFIG_MTD_DOC2001 is not set
657# CONFIG_MTD_DOC2001PLUS is not set
658# CONFIG_MTD_NAND is not set
659# CONFIG_MTD_ONENAND is not set
660
661#
662# LPDDR flash memory drivers
663#
664# CONFIG_MTD_LPDDR is not set
665
666#
667# UBI - Unsorted block images
668#
669# CONFIG_MTD_UBI is not set
670# CONFIG_PARPORT is not set
671CONFIG_BLK_DEV=y
672# CONFIG_BLK_DEV_COW_COMMON is not set
673# CONFIG_BLK_DEV_LOOP is not set
674# CONFIG_BLK_DEV_NBD is not set
675# CONFIG_BLK_DEV_RAM is not set
676# CONFIG_CDROM_PKTCDVD is not set
677# CONFIG_ATA_OVER_ETH is not set
678# CONFIG_BLK_DEV_HD is not set
679CONFIG_MISC_DEVICES=y
680# CONFIG_ENCLOSURE_SERVICES is not set
681# CONFIG_C2PORT is not set
682
683#
684# EEPROM support
685#
686# CONFIG_EEPROM_93CX6 is not set
687CONFIG_HAVE_IDE=y
688# CONFIG_IDE is not set
689
690#
691# SCSI device support
692#
693# CONFIG_RAID_ATTRS is not set
694# CONFIG_SCSI is not set
695# CONFIG_SCSI_DMA is not set
696# CONFIG_SCSI_NETLINK is not set
697# CONFIG_ATA is not set
698# CONFIG_MD is not set
699CONFIG_NETDEVICES=y
700# CONFIG_IFB is not set
701# CONFIG_DUMMY is not set
702# CONFIG_BONDING is not set
703# CONFIG_MACVLAN is not set
704# CONFIG_EQUALIZER is not set
705# CONFIG_TUN is not set
706# CONFIG_VETH is not set
707CONFIG_PHYLIB=y
708
709#
710# MII PHY device drivers
711#
712# CONFIG_MARVELL_PHY is not set
713# CONFIG_DAVICOM_PHY is not set
714# CONFIG_QSEMI_PHY is not set
715# CONFIG_LXT_PHY is not set
716# CONFIG_CICADA_PHY is not set
717# CONFIG_VITESSE_PHY is not set
718# CONFIG_SMSC_PHY is not set
719# CONFIG_BROADCOM_PHY is not set
720# CONFIG_ICPLUS_PHY is not set
721# CONFIG_REALTEK_PHY is not set
722# CONFIG_NATIONAL_PHY is not set
723# CONFIG_STE10XP is not set
724# CONFIG_LSI_ET1011C_PHY is not set
725CONFIG_FIXED_PHY=y
726# CONFIG_MDIO_BITBANG is not set
727CONFIG_NET_ETHERNET=y
728CONFIG_MII=y
729# CONFIG_AX88796 is not set
730# CONFIG_SMC91X is not set
731# CONFIG_DM9000 is not set
732# CONFIG_ETHOC is not set
733# CONFIG_DNET is not set
734# CONFIG_IBM_NEW_EMAC_ZMII is not set
735# CONFIG_IBM_NEW_EMAC_RGMII is not set
736# CONFIG_IBM_NEW_EMAC_TAH is not set
737# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
738# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
739# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
740# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
741# CONFIG_B44 is not set
742# CONFIG_KS8842 is not set
743CONFIG_CPMAC=y
744# CONFIG_NETDEV_1000 is not set
745# CONFIG_NETDEV_10000 is not set
746
747#
748# Wireless LAN
749#
750# CONFIG_WLAN_PRE80211 is not set
751CONFIG_WLAN_80211=y
752# CONFIG_LIBERTAS is not set
753# CONFIG_LIBERTAS_THINFIRM is not set
754# CONFIG_MAC80211_HWSIM is not set
755# CONFIG_P54_COMMON is not set
756# CONFIG_HOSTAP is not set
757# CONFIG_B43 is not set
758# CONFIG_B43LEGACY is not set
759# CONFIG_RT2X00 is not set
760
761#
762# Enable WiMAX (Networking options) to see the WiMAX drivers
763#
764# CONFIG_WAN is not set
765CONFIG_ATM_DRIVERS=y
766# CONFIG_ATM_DUMMY is not set
767# CONFIG_ATM_TCP is not set
768CONFIG_PPP=m
769CONFIG_PPP_MULTILINK=y
770CONFIG_PPP_FILTER=y
771CONFIG_PPP_ASYNC=m
772# CONFIG_PPP_SYNC_TTY is not set
773# CONFIG_PPP_DEFLATE is not set
774# CONFIG_PPP_BSDCOMP is not set
775# CONFIG_PPP_MPPE is not set
776CONFIG_PPPOE=m
777CONFIG_PPPOATM=m
778# CONFIG_PPPOL2TP is not set
779# CONFIG_SLIP is not set
780CONFIG_SLHC=m
781# CONFIG_NETCONSOLE is not set
782# CONFIG_NETPOLL is not set
783# CONFIG_NET_POLL_CONTROLLER is not set
784# CONFIG_ISDN is not set
785# CONFIG_PHONE is not set
786
787#
788# Input device support
789#
790# CONFIG_INPUT is not set
791
792#
793# Hardware I/O ports
794#
795# CONFIG_SERIO is not set
796# CONFIG_GAMEPORT is not set
797
798#
799# Character devices
800#
801# CONFIG_VT is not set
802# CONFIG_DEVKMEM is not set
803# CONFIG_SERIAL_NONSTANDARD is not set
804
805#
806# Serial drivers
807#
808CONFIG_SERIAL_8250=y
809CONFIG_SERIAL_8250_CONSOLE=y
810CONFIG_SERIAL_8250_NR_UARTS=2
811CONFIG_SERIAL_8250_RUNTIME_UARTS=2
812# CONFIG_SERIAL_8250_EXTENDED is not set
813
814#
815# Non-8250 serial port support
816#
817CONFIG_SERIAL_CORE=y
818CONFIG_SERIAL_CORE_CONSOLE=y
819CONFIG_UNIX98_PTYS=y
820# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
821# CONFIG_LEGACY_PTYS is not set
822# CONFIG_IPMI_HANDLER is not set
823CONFIG_HW_RANDOM=y
824# CONFIG_HW_RANDOM_TIMERIOMEM is not set
825# CONFIG_R3964 is not set
826# CONFIG_RAW_DRIVER is not set
827# CONFIG_TCG_TPM is not set
828# CONFIG_I2C is not set
829# CONFIG_SPI is not set
830# CONFIG_W1 is not set
831# CONFIG_POWER_SUPPLY is not set
832# CONFIG_HWMON is not set
833# CONFIG_THERMAL is not set
834# CONFIG_THERMAL_HWMON is not set
835CONFIG_WATCHDOG=y
836# CONFIG_WATCHDOG_NOWAYOUT is not set
837
838#
839# Watchdog Device Drivers
840#
841# CONFIG_SOFT_WATCHDOG is not set
842CONFIG_AR7_WDT=y
843CONFIG_SSB_POSSIBLE=y
844
845#
846# Sonics Silicon Backplane
847#
848CONFIG_SSB=y
849# CONFIG_SSB_SILENT is not set
850# CONFIG_SSB_DEBUG is not set
851CONFIG_SSB_SERIAL=y
852CONFIG_SSB_DRIVER_MIPS=y
853CONFIG_SSB_EMBEDDED=y
854CONFIG_SSB_DRIVER_EXTIF=y
855
856#
857# Multifunction device drivers
858#
859# CONFIG_MFD_CORE is not set
860# CONFIG_MFD_SM501 is not set
861# CONFIG_HTC_PASIC3 is not set
862# CONFIG_MFD_TMIO is not set
863# CONFIG_REGULATOR is not set
864# CONFIG_MEDIA_SUPPORT is not set
865
866#
867# Graphics support
868#
869# CONFIG_VGASTATE is not set
870# CONFIG_VIDEO_OUTPUT_CONTROL is not set
871# CONFIG_FB is not set
872# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
873
874#
875# Display device support
876#
877# CONFIG_DISPLAY_SUPPORT is not set
878# CONFIG_SOUND is not set
879# CONFIG_USB_SUPPORT is not set
880# CONFIG_MMC is not set
881# CONFIG_MEMSTICK is not set
882CONFIG_NEW_LEDS=y
883CONFIG_LEDS_CLASS=y
884
885#
886# LED drivers
887#
888# CONFIG_LEDS_GPIO is not set
889
890#
891# LED Triggers
892#
893CONFIG_LEDS_TRIGGERS=y
894CONFIG_LEDS_TRIGGER_TIMER=y
895CONFIG_LEDS_TRIGGER_HEARTBEAT=y
896# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
897CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
898
899#
900# iptables trigger is under Netfilter config (LED target)
901#
902# CONFIG_ACCESSIBILITY is not set
903CONFIG_RTC_LIB=y
904# CONFIG_RTC_CLASS is not set
905# CONFIG_DMADEVICES is not set
906# CONFIG_AUXDISPLAY is not set
907# CONFIG_UIO is not set
908
909#
910# TI VLYNQ
911#
912CONFIG_VLYNQ=y
913# CONFIG_STAGING is not set
914
915#
916# File systems
917#
918# CONFIG_EXT2_FS is not set
919# CONFIG_EXT3_FS is not set
920# CONFIG_EXT4_FS is not set
921# CONFIG_REISERFS_FS is not set
922# CONFIG_JFS_FS is not set
923# CONFIG_FS_POSIX_ACL is not set
924# CONFIG_XFS_FS is not set
925# CONFIG_OCFS2_FS is not set
926# CONFIG_BTRFS_FS is not set
927CONFIG_FILE_LOCKING=y
928CONFIG_FSNOTIFY=y
929# CONFIG_DNOTIFY is not set
930# CONFIG_INOTIFY is not set
931CONFIG_INOTIFY_USER=y
932# CONFIG_QUOTA is not set
933# CONFIG_AUTOFS_FS is not set
934# CONFIG_AUTOFS4_FS is not set
935# CONFIG_FUSE_FS is not set
936
937#
938# Caches
939#
940# CONFIG_FSCACHE is not set
941
942#
943# CD-ROM/DVD Filesystems
944#
945# CONFIG_ISO9660_FS is not set
946# CONFIG_UDF_FS is not set
947
948#
949# DOS/FAT/NT Filesystems
950#
951# CONFIG_MSDOS_FS is not set
952# CONFIG_VFAT_FS is not set
953# CONFIG_NTFS_FS is not set
954
955#
956# Pseudo filesystems
957#
958CONFIG_PROC_FS=y
959CONFIG_PROC_KCORE=y
960CONFIG_PROC_SYSCTL=y
961# CONFIG_PROC_PAGE_MONITOR is not set
962CONFIG_SYSFS=y
963CONFIG_TMPFS=y
964# CONFIG_TMPFS_POSIX_ACL is not set
965# CONFIG_HUGETLB_PAGE is not set
966# CONFIG_CONFIGFS_FS is not set
967CONFIG_MISC_FILESYSTEMS=y
968# CONFIG_ADFS_FS is not set
969# CONFIG_AFFS_FS is not set
970# CONFIG_HFS_FS is not set
971# CONFIG_HFSPLUS_FS is not set
972# CONFIG_BEFS_FS is not set
973# CONFIG_BFS_FS is not set
974# CONFIG_EFS_FS is not set
975CONFIG_JFFS2_FS=y
976CONFIG_JFFS2_FS_DEBUG=0
977CONFIG_JFFS2_FS_WRITEBUFFER=y
978# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
979CONFIG_JFFS2_SUMMARY=y
980# CONFIG_JFFS2_FS_XATTR is not set
981CONFIG_JFFS2_COMPRESSION_OPTIONS=y
982CONFIG_JFFS2_ZLIB=y
983# CONFIG_JFFS2_LZO is not set
984CONFIG_JFFS2_RTIME=y
985# CONFIG_JFFS2_RUBIN is not set
986# CONFIG_JFFS2_CMODE_NONE is not set
987CONFIG_JFFS2_CMODE_PRIORITY=y
988# CONFIG_JFFS2_CMODE_SIZE is not set
989# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
990# CONFIG_CRAMFS is not set
991CONFIG_SQUASHFS=y
992# CONFIG_SQUASHFS_EMBEDDED is not set
993CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
994# CONFIG_VXFS_FS is not set
995# CONFIG_MINIX_FS is not set
996# CONFIG_OMFS_FS is not set
997# CONFIG_HPFS_FS is not set
998# CONFIG_QNX4FS_FS is not set
999# CONFIG_ROMFS_FS is not set
1000# CONFIG_SYSV_FS is not set
1001# CONFIG_UFS_FS is not set
1002# CONFIG_NILFS2_FS is not set
1003CONFIG_NETWORK_FILESYSTEMS=y
1004# CONFIG_NFS_FS is not set
1005# CONFIG_NFSD is not set
1006# CONFIG_SMB_FS is not set
1007# CONFIG_CIFS is not set
1008# CONFIG_NCP_FS is not set
1009# CONFIG_CODA_FS is not set
1010# CONFIG_AFS_FS is not set
1011
1012#
1013# Partition Types
1014#
1015CONFIG_PARTITION_ADVANCED=y
1016# CONFIG_ACORN_PARTITION is not set
1017# CONFIG_OSF_PARTITION is not set
1018# CONFIG_AMIGA_PARTITION is not set
1019# CONFIG_ATARI_PARTITION is not set
1020# CONFIG_MAC_PARTITION is not set
1021CONFIG_MSDOS_PARTITION=y
1022CONFIG_BSD_DISKLABEL=y
1023# CONFIG_MINIX_SUBPARTITION is not set
1024# CONFIG_SOLARIS_X86_PARTITION is not set
1025# CONFIG_UNIXWARE_DISKLABEL is not set
1026# CONFIG_LDM_PARTITION is not set
1027# CONFIG_SGI_PARTITION is not set
1028# CONFIG_ULTRIX_PARTITION is not set
1029# CONFIG_SUN_PARTITION is not set
1030# CONFIG_KARMA_PARTITION is not set
1031# CONFIG_EFI_PARTITION is not set
1032# CONFIG_SYSV68_PARTITION is not set
1033# CONFIG_NLS is not set
1034# CONFIG_DLM is not set
1035
1036#
1037# Kernel hacking
1038#
1039CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1040# CONFIG_PRINTK_TIME is not set
1041CONFIG_ENABLE_WARN_DEPRECATED=y
1042# CONFIG_ENABLE_MUST_CHECK is not set
1043CONFIG_FRAME_WARN=1024
1044# CONFIG_MAGIC_SYSRQ is not set
1045# CONFIG_UNUSED_SYMBOLS is not set
1046CONFIG_DEBUG_FS=y
1047# CONFIG_HEADERS_CHECK is not set
1048# CONFIG_DEBUG_KERNEL is not set
1049# CONFIG_DEBUG_MEMORY_INIT is not set
1050# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1051CONFIG_SYSCTL_SYSCALL_CHECK=y
1052CONFIG_TRACING_SUPPORT=y
1053# CONFIG_FTRACE is not set
1054# CONFIG_DYNAMIC_DEBUG is not set
1055# CONFIG_SAMPLES is not set
1056CONFIG_HAVE_ARCH_KGDB=y
1057CONFIG_CMDLINE="rootfstype=squashfs,jffs2"
1058
1059#
1060# Security options
1061#
1062# CONFIG_KEYS is not set
1063# CONFIG_SECURITY is not set
1064# CONFIG_SECURITYFS is not set
1065# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1066CONFIG_CRYPTO=y
1067
1068#
1069# Crypto core or helper
1070#
1071# CONFIG_CRYPTO_FIPS is not set
1072CONFIG_CRYPTO_ALGAPI=m
1073CONFIG_CRYPTO_ALGAPI2=m
1074CONFIG_CRYPTO_AEAD2=m
1075CONFIG_CRYPTO_BLKCIPHER=m
1076CONFIG_CRYPTO_BLKCIPHER2=m
1077CONFIG_CRYPTO_HASH2=m
1078CONFIG_CRYPTO_RNG2=m
1079CONFIG_CRYPTO_PCOMP=m
1080CONFIG_CRYPTO_MANAGER=m
1081CONFIG_CRYPTO_MANAGER2=m
1082# CONFIG_CRYPTO_GF128MUL is not set
1083# CONFIG_CRYPTO_NULL is not set
1084CONFIG_CRYPTO_WORKQUEUE=m
1085# CONFIG_CRYPTO_CRYPTD is not set
1086# CONFIG_CRYPTO_AUTHENC is not set
1087# CONFIG_CRYPTO_TEST is not set
1088
1089#
1090# Authenticated Encryption with Associated Data
1091#
1092# CONFIG_CRYPTO_CCM is not set
1093# CONFIG_CRYPTO_GCM is not set
1094# CONFIG_CRYPTO_SEQIV is not set
1095
1096#
1097# Block modes
1098#
1099# CONFIG_CRYPTO_CBC is not set
1100# CONFIG_CRYPTO_CTR is not set
1101# CONFIG_CRYPTO_CTS is not set
1102CONFIG_CRYPTO_ECB=m
1103# CONFIG_CRYPTO_LRW is not set
1104# CONFIG_CRYPTO_PCBC is not set
1105# CONFIG_CRYPTO_XTS is not set
1106
1107#
1108# Hash modes
1109#
1110# CONFIG_CRYPTO_HMAC is not set
1111# CONFIG_CRYPTO_XCBC is not set
1112
1113#
1114# Digest
1115#
1116# CONFIG_CRYPTO_CRC32C is not set
1117# CONFIG_CRYPTO_MD4 is not set
1118# CONFIG_CRYPTO_MD5 is not set
1119# CONFIG_CRYPTO_MICHAEL_MIC is not set
1120# CONFIG_CRYPTO_RMD128 is not set
1121# CONFIG_CRYPTO_RMD160 is not set
1122# CONFIG_CRYPTO_RMD256 is not set
1123# CONFIG_CRYPTO_RMD320 is not set
1124# CONFIG_CRYPTO_SHA1 is not set
1125# CONFIG_CRYPTO_SHA256 is not set
1126# CONFIG_CRYPTO_SHA512 is not set
1127# CONFIG_CRYPTO_TGR192 is not set
1128# CONFIG_CRYPTO_WP512 is not set
1129
1130#
1131# Ciphers
1132#
1133CONFIG_CRYPTO_AES=m
1134# CONFIG_CRYPTO_ANUBIS is not set
1135CONFIG_CRYPTO_ARC4=m
1136# CONFIG_CRYPTO_BLOWFISH is not set
1137# CONFIG_CRYPTO_CAMELLIA is not set
1138# CONFIG_CRYPTO_CAST5 is not set
1139# CONFIG_CRYPTO_CAST6 is not set
1140# CONFIG_CRYPTO_DES is not set
1141# CONFIG_CRYPTO_FCRYPT is not set
1142# CONFIG_CRYPTO_KHAZAD is not set
1143# CONFIG_CRYPTO_SALSA20 is not set
1144# CONFIG_CRYPTO_SEED is not set
1145# CONFIG_CRYPTO_SERPENT is not set
1146# CONFIG_CRYPTO_TEA is not set
1147# CONFIG_CRYPTO_TWOFISH is not set
1148
1149#
1150# Compression
1151#
1152# CONFIG_CRYPTO_DEFLATE is not set
1153# CONFIG_CRYPTO_ZLIB is not set
1154# CONFIG_CRYPTO_LZO is not set
1155
1156#
1157# Random Number Generation
1158#
1159# CONFIG_CRYPTO_ANSI_CPRNG is not set
1160# CONFIG_CRYPTO_HW is not set
1161# CONFIG_BINARY_PRINTF is not set
1162
1163#
1164# Library routines
1165#
1166CONFIG_BITREVERSE=y
1167CONFIG_GENERIC_FIND_LAST_BIT=y
1168CONFIG_CRC_CCITT=m
1169# CONFIG_CRC16 is not set
1170# CONFIG_CRC_T10DIF is not set
1171# CONFIG_CRC_ITU_T is not set
1172CONFIG_CRC32=y
1173# CONFIG_CRC7 is not set
1174# CONFIG_LIBCRC32C is not set
1175CONFIG_ZLIB_INFLATE=y
1176CONFIG_ZLIB_DEFLATE=y
1177CONFIG_DECOMPRESS_GZIP=y
1178CONFIG_DECOMPRESS_LZMA=y
1179CONFIG_HAS_IOMEM=y
1180CONFIG_HAS_IOPORT=y
1181CONFIG_HAS_DMA=y
1182CONFIG_NLATTR=y
diff --git a/arch/mips/dec/ecc-berr.c b/arch/mips/dec/ecc-berr.c
index 6a17c9b508ea..7abce661b90f 100644
--- a/arch/mips/dec/ecc-berr.c
+++ b/arch/mips/dec/ecc-berr.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/ecc-berr.c
3 *
4 * Bus error event handling code for systems equipped with ECC 2 * Bus error event handling code for systems equipped with ECC
5 * handling logic, i.e. DECstation/DECsystem 5000/200 (KN02), 3 * handling logic, i.e. DECstation/DECsystem 5000/200 (KN02),
6 * 5000/240 (KN03), 5000/260 (KN05) and DECsystem 5900 (KN03), 4 * 5000/240 (KN03), 5000/260 (KN05) and DECsystem 5900 (KN03),
diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S
index 00cecdcc75f2..82c852818781 100644
--- a/arch/mips/dec/int-handler.S
+++ b/arch/mips/dec/int-handler.S
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/dec/int-handler.S
3 *
4 * Copyright (C) 1995, 1996, 1997 Paul M. Antoine and Harald Koerfgen 2 * Copyright (C) 1995, 1996, 1997 Paul M. Antoine and Harald Koerfgen
5 * Copyright (C) 2000, 2001, 2002, 2003, 2005 Maciej W. Rozycki 3 * Copyright (C) 2000, 2001, 2002, 2003, 2005 Maciej W. Rozycki
6 * 4 *
diff --git a/arch/mips/dec/ioasic-irq.c b/arch/mips/dec/ioasic-irq.c
index 3acb133668dc..cb41954fc321 100644
--- a/arch/mips/dec/ioasic-irq.c
+++ b/arch/mips/dec/ioasic-irq.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/ioasic-irq.c
3 *
4 * DEC I/O ASIC interrupts. 2 * DEC I/O ASIC interrupts.
5 * 3 *
6 * Copyright (c) 2002, 2003 Maciej W. Rozycki 4 * Copyright (c) 2002, 2003 Maciej W. Rozycki
diff --git a/arch/mips/dec/kn01-berr.c b/arch/mips/dec/kn01-berr.c
index d3b8002bf1e7..b0dc6d53edd6 100644
--- a/arch/mips/dec/kn01-berr.c
+++ b/arch/mips/dec/kn01-berr.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/kn01-berr.c
3 *
4 * Bus error event handling code for DECstation/DECsystem 3100 2 * Bus error event handling code for DECstation/DECsystem 3100
5 * and 2100 (KN01) systems equipped with parity error detection 3 * and 2100 (KN01) systems equipped with parity error detection
6 * logic. 4 * logic.
diff --git a/arch/mips/dec/kn02-irq.c b/arch/mips/dec/kn02-irq.c
index 02439dc0ba83..ed90a8deabcc 100644
--- a/arch/mips/dec/kn02-irq.c
+++ b/arch/mips/dec/kn02-irq.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/kn02-irq.c
3 *
4 * DECstation 5000/200 (KN02) Control and Status Register 2 * DECstation 5000/200 (KN02) Control and Status Register
5 * interrupts. 3 * interrupts.
6 * 4 *
diff --git a/arch/mips/dec/kn02xa-berr.c b/arch/mips/dec/kn02xa-berr.c
index 5f04545c3606..07ca5405d48d 100644
--- a/arch/mips/dec/kn02xa-berr.c
+++ b/arch/mips/dec/kn02xa-berr.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/kn02xa-berr.c
3 *
4 * Bus error event handling code for 5000-series systems equipped 2 * Bus error event handling code for 5000-series systems equipped
5 * with parity error detection logic, i.e. DECstation/DECsystem 3 * with parity error detection logic, i.e. DECstation/DECsystem
6 * 5000/120, /125, /133 (KN02-BA), 5000/150 (KN04-BA) and Personal 4 * 5000/120, /125, /133 (KN02-BA), 5000/150 (KN04-BA) and Personal
diff --git a/arch/mips/dec/prom/call_o32.S b/arch/mips/dec/prom/call_o32.S
index e523454bda3a..8c8498159e43 100644
--- a/arch/mips/dec/prom/call_o32.S
+++ b/arch/mips/dec/prom/call_o32.S
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/dec/prom/call_o32.S
3 *
4 * O32 interface for the 64 (or N32) ABI. 2 * O32 interface for the 64 (or N32) ABI.
5 * 3 *
6 * Copyright (C) 2002 Maciej W. Rozycki 4 * Copyright (C) 2002 Maciej W. Rozycki
diff --git a/arch/mips/dec/prom/console.c b/arch/mips/dec/prom/console.c
index 078e1a12421d..caa6e047caf1 100644
--- a/arch/mips/dec/prom/console.c
+++ b/arch/mips/dec/prom/console.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/dec/prom/console.c
3 *
4 * DECstation PROM-based early console support. 2 * DECstation PROM-based early console support.
5 * 3 *
6 * Copyright (C) 2004, 2007 Maciej W. Rozycki 4 * Copyright (C) 2004, 2007 Maciej W. Rozycki
diff --git a/arch/mips/dec/time.c b/arch/mips/dec/time.c
index 1359c03ded51..463136e6685a 100644
--- a/arch/mips/dec/time.c
+++ b/arch/mips/dec/time.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/dec/time.c
3 *
4 * Copyright (C) 1991, 1992, 1995 Linus Torvalds 2 * Copyright (C) 1991, 1992, 1995 Linus Torvalds
5 * Copyright (C) 2000, 2003 Maciej W. Rozycki 3 * Copyright (C) 2000, 2003 Maciej W. Rozycki
6 * 4 *
diff --git a/arch/mips/emma/common/Makefile b/arch/mips/emma/common/Makefile
index c392d28c1ef1..f27d84d1904f 100644
--- a/arch/mips/emma/common/Makefile
+++ b/arch/mips/emma/common/Makefile
@@ -1,7 +1,4 @@
1# 1#
2# arch/mips/emma2rh/common/Makefile
3# Makefile for the common code of NEC EMMA2RH based board.
4#
5# Copyright (C) NEC Electronics Corporation 2005-2006 2# Copyright (C) NEC Electronics Corporation 2005-2006
6# 3#
7# This program is free software; you can redistribute it and/or modify 4# This program is free software; you can redistribute it and/or modify
diff --git a/arch/mips/emma/common/prom.c b/arch/mips/emma/common/prom.c
index 120f53fbdb45..708f08761406 100644
--- a/arch/mips/emma/common/prom.c
+++ b/arch/mips/emma/common/prom.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/emma2rh/common/prom.c
3 * This file is prom file.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/ddb5xxx/common/prom.c 4 * This file is based on the arch/mips/ddb5xxx/common/prom.c
diff --git a/arch/mips/emma/markeins/Makefile b/arch/mips/emma/markeins/Makefile
index 16e0017ba919..f8ba2508fa2b 100644
--- a/arch/mips/emma/markeins/Makefile
+++ b/arch/mips/emma/markeins/Makefile
@@ -1,7 +1,4 @@
1# 1#
2# arch/mips/emma2rh/markeins/Makefile
3# Makefile for the common code of NEC EMMA2RH based board.
4#
5# Copyright (C) NEC Electronics Corporation 2005-2006 2# Copyright (C) NEC Electronics Corporation 2005-2006
6# 3#
7# This program is free software; you can redistribute it and/or modify 4# This program is free software; you can redistribute it and/or modify
diff --git a/arch/mips/emma/markeins/irq.c b/arch/mips/emma/markeins/irq.c
index 43828ae796ec..9504b7ee0b7c 100644
--- a/arch/mips/emma/markeins/irq.c
+++ b/arch/mips/emma/markeins/irq.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/emma2rh/markeins/irq.c
3 * This file defines the irq handler for EMMA2RH.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/ddb5xxx/ddb5477/irq.c 4 * This file is based on the arch/mips/ddb5xxx/ddb5477/irq.c
diff --git a/arch/mips/emma/markeins/led.c b/arch/mips/emma/markeins/led.c
index 377a181b6561..49755896857f 100644
--- a/arch/mips/emma/markeins/led.c
+++ b/arch/mips/emma/markeins/led.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/emma2rh/markeins/led.c
3 * This file defines the led display for Mark-eins.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
diff --git a/arch/mips/emma/markeins/platform.c b/arch/mips/emma/markeins/platform.c
index 80ae12ef87db..b05b08b92a34 100644
--- a/arch/mips/emma/markeins/platform.c
+++ b/arch/mips/emma/markeins/platform.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/emma2rh/markeins/platofrm.c
3 * This file sets up platform devices for EMMA2RH Mark-eins.
4 *
5 * Copyright(C) MontaVista Software Inc, 2006 2 * Copyright(C) MontaVista Software Inc, 2006
6 * 3 *
7 * Author: dmitry pervushin <dpervushin@ru.mvista.com> 4 * Author: dmitry pervushin <dpervushin@ru.mvista.com>
diff --git a/arch/mips/emma/markeins/setup.c b/arch/mips/emma/markeins/setup.c
index 67f456500084..335dc8c1a1bb 100644
--- a/arch/mips/emma/markeins/setup.c
+++ b/arch/mips/emma/markeins/setup.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/emma2rh/markeins/setup.c
3 * This file is setup for EMMA2RH Mark-eins.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/ddb5xxx/ddb5477/setup.c. 4 * This file is based on the arch/mips/ddb5xxx/ddb5477/setup.c.
diff --git a/arch/mips/fw/lib/call_o32.S b/arch/mips/fw/lib/call_o32.S
index bdf7d1d4081a..e0a68713b3c3 100644
--- a/arch/mips/fw/lib/call_o32.S
+++ b/arch/mips/fw/lib/call_o32.S
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/dec/prom/call_o32.S
3 *
4 * O32 interface for the 64 (or N32) ABI. 2 * O32 interface for the 64 (or N32) ABI.
5 * 3 *
6 * Copyright (C) 2002 Maciej W. Rozycki 4 * Copyright (C) 2002 Maciej W. Rozycki
diff --git a/arch/mips/gt64120/wrppmc/serial.c b/arch/mips/gt64120/wrppmc/serial.c
index 5ec1c2ffd3a5..6f9d0858f596 100644
--- a/arch/mips/gt64120/wrppmc/serial.c
+++ b/arch/mips/gt64120/wrppmc/serial.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Registration of WRPPMC UART platform device. 2 * Registration of WRPPMC UART platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/amon.h b/arch/mips/include/asm/amon.h
new file mode 100644
index 000000000000..c3dc1a68dd8d
--- /dev/null
+++ b/arch/mips/include/asm/amon.h
@@ -0,0 +1,7 @@
1/*
2 * Amon support
3 */
4
5int amon_cpu_avail(int);
6void amon_cpu_start(int, unsigned long, unsigned long,
7 unsigned long, unsigned long);
diff --git a/arch/mips/include/asm/bug.h b/arch/mips/include/asm/bug.h
index 08ea46863fe5..6cf29c26e873 100644
--- a/arch/mips/include/asm/bug.h
+++ b/arch/mips/include/asm/bug.h
@@ -1,6 +1,7 @@
1#ifndef __ASM_BUG_H 1#ifndef __ASM_BUG_H
2#define __ASM_BUG_H 2#define __ASM_BUG_H
3 3
4#include <linux/compiler.h>
4#include <asm/sgidefs.h> 5#include <asm/sgidefs.h>
5 6
6#ifdef CONFIG_BUG 7#ifdef CONFIG_BUG
diff --git a/arch/mips/include/asm/bugs.h b/arch/mips/include/asm/bugs.h
index 9dc10df32078..b160a706795d 100644
--- a/arch/mips/include/asm/bugs.h
+++ b/arch/mips/include/asm/bugs.h
@@ -11,6 +11,7 @@
11 11
12#include <linux/bug.h> 12#include <linux/bug.h>
13#include <linux/delay.h> 13#include <linux/delay.h>
14#include <linux/smp.h>
14 15
15#include <asm/cpu.h> 16#include <asm/cpu.h>
16#include <asm/cpu-info.h> 17#include <asm/cpu-info.h>
diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h
index c0047f861337..8ab1d12ba7f4 100644
--- a/arch/mips/include/asm/cpu-features.h
+++ b/arch/mips/include/asm/cpu-features.h
@@ -147,6 +147,10 @@
147#define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \ 147#define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \
148 cpu_has_mips64r1 | cpu_has_mips64r2) 148 cpu_has_mips64r1 | cpu_has_mips64r2)
149 149
150#ifndef cpu_has_mips_r2_exec_hazard
151#define cpu_has_mips_r2_exec_hazard cpu_has_mips_r2
152#endif
153
150/* 154/*
151 * MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other 155 * MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other
152 * pre-MIPS32/MIPS53 processors have CLO, CLZ. For 64-bit kernels 156 * pre-MIPS32/MIPS53 processors have CLO, CLZ. For 64-bit kernels
@@ -230,4 +234,8 @@
230#define cpu_scache_line_size() cpu_data[0].scache.linesz 234#define cpu_scache_line_size() cpu_data[0].scache.linesz
231#endif 235#endif
232 236
237#ifndef cpu_hwrena_impl_bits
238#define cpu_hwrena_impl_bits 0
239#endif
240
233#endif /* __ASM_CPU_FEATURES_H */ 241#endif /* __ASM_CPU_FEATURES_H */
diff --git a/arch/mips/include/asm/delay.h b/arch/mips/include/asm/delay.h
index a07e51b2be13..d2d8949be6b7 100644
--- a/arch/mips/include/asm/delay.h
+++ b/arch/mips/include/asm/delay.h
@@ -15,7 +15,7 @@ extern void __delay(unsigned int loops);
15extern void __ndelay(unsigned int ns); 15extern void __ndelay(unsigned int ns);
16extern void __udelay(unsigned int us); 16extern void __udelay(unsigned int us);
17 17
18#define ndelay(ns) __udelay(ns) 18#define ndelay(ns) __ndelay(ns)
19#define udelay(us) __udelay(us) 19#define udelay(us) __udelay(us)
20 20
21/* make sure "usecs *= ..." in udelay do not overflow. */ 21/* make sure "usecs *= ..." in udelay do not overflow. */
diff --git a/arch/mips/include/asm/ds1287.h b/arch/mips/include/asm/ds1287.h
index ba1702e86931..3af0b8fb3b8c 100644
--- a/arch/mips/include/asm/ds1287.h
+++ b/arch/mips/include/asm/ds1287.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * DS1287 timer functions. 2 * DS1287 timer functions.
3 * 3 *
4 * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h
index d58f128aa747..7990694cda22 100644
--- a/arch/mips/include/asm/elf.h
+++ b/arch/mips/include/asm/elf.h
@@ -316,9 +316,13 @@ extern void elf_dump_regs(elf_greg_t *, struct pt_regs *regs);
316extern int dump_task_regs(struct task_struct *, elf_gregset_t *); 316extern int dump_task_regs(struct task_struct *, elf_gregset_t *);
317extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); 317extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *);
318 318
319#ifndef ELF_CORE_COPY_REGS
319#define ELF_CORE_COPY_REGS(elf_regs, regs) \ 320#define ELF_CORE_COPY_REGS(elf_regs, regs) \
320 elf_dump_regs((elf_greg_t *)&(elf_regs), regs); 321 elf_dump_regs((elf_greg_t *)&(elf_regs), regs);
322#endif
323#ifndef ELF_CORE_COPY_TASK_REGS
321#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) 324#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs)
325#endif
322#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) \ 326#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) \
323 dump_task_fpu(tsk, elf_fpregs) 327 dump_task_fpu(tsk, elf_fpregs)
324 328
diff --git a/arch/mips/include/asm/emma/emma2rh.h b/arch/mips/include/asm/emma/emma2rh.h
index 30aea91de626..2afb2fe11b30 100644
--- a/arch/mips/include/asm/emma/emma2rh.h
+++ b/arch/mips/include/asm/emma/emma2rh.h
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/include/asm/emma/emma2rh.h
3 * This file is EMMA2RH common header.
4 *
5 * Copyright (C) NEC Electronics Corporation 2005-2006 2 * Copyright (C) NEC Electronics Corporation 2005-2006
6 * 3 *
7 * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h 4 * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h
diff --git a/arch/mips/include/asm/emma/markeins.h b/arch/mips/include/asm/emma/markeins.h
index 973b0628490d..2618bf230248 100644
--- a/arch/mips/include/asm/emma/markeins.h
+++ b/arch/mips/include/asm/emma/markeins.h
@@ -1,7 +1,4 @@
1/* 1/*
2 * include/asm-mips/emma2rh/markeins.h
3 * This file is EMMA2RH board depended header.
4 *
5 * Copyright (C) NEC Electronics Corporation 2005-2006 2 * Copyright (C) NEC Electronics Corporation 2005-2006
6 * 3 *
7 * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h 4 * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h
diff --git a/arch/mips/include/asm/gcmpregs.h b/arch/mips/include/asm/gcmpregs.h
index d74a8a4ca861..36fd969d64d6 100644
--- a/arch/mips/include/asm/gcmpregs.h
+++ b/arch/mips/include/asm/gcmpregs.h
@@ -114,4 +114,6 @@
114#define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */ 114#define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */
115#define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ 115#define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */
116 116
117extern int __init gcmp_probe(unsigned long, unsigned long);
118
117#endif /* _ASM_GCMPREGS_H */ 119#endif /* _ASM_GCMPREGS_H */
diff --git a/arch/mips/include/asm/gic.h b/arch/mips/include/asm/gic.h
index 954807d9d66a..a8f57341f123 100644
--- a/arch/mips/include/asm/gic.h
+++ b/arch/mips/include/asm/gic.h
@@ -20,7 +20,11 @@
20#define GIC_TRIG_EDGE 1 20#define GIC_TRIG_EDGE 1
21#define GIC_TRIG_LEVEL 0 21#define GIC_TRIG_LEVEL 0
22 22
23#ifdef CONFIG_SMP
24#define GIC_NUM_INTRS (24 + NR_CPUS * 2)
25#else
23#define GIC_NUM_INTRS 32 26#define GIC_NUM_INTRS 32
27#endif
24 28
25#define MSK(n) ((1 << (n)) - 1) 29#define MSK(n) ((1 << (n)) - 1)
26#define REG32(addr) (*(volatile unsigned int *) (addr)) 30#define REG32(addr) (*(volatile unsigned int *) (addr))
@@ -483,5 +487,7 @@ extern void gic_init(unsigned long gic_base_addr,
483 487
484extern unsigned int gic_get_int(void); 488extern unsigned int gic_get_int(void);
485extern void gic_send_ipi(unsigned int intr); 489extern void gic_send_ipi(unsigned int intr);
490extern unsigned int plat_ipi_call_int_xlate(unsigned int);
491extern unsigned int plat_ipi_resched_int_xlate(unsigned int);
486 492
487#endif /* _ASM_GICREGS_H */ 493#endif /* _ASM_GICREGS_H */
diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h
new file mode 100644
index 000000000000..f5e856015329
--- /dev/null
+++ b/arch/mips/include/asm/hugetlb.h
@@ -0,0 +1,114 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2008, 2009 Cavium Networks, Inc.
7 */
8
9#ifndef __ASM_HUGETLB_H
10#define __ASM_HUGETLB_H
11
12#include <asm/page.h>
13
14
15static inline int is_hugepage_only_range(struct mm_struct *mm,
16 unsigned long addr,
17 unsigned long len)
18{
19 return 0;
20}
21
22static inline int prepare_hugepage_range(struct file *file,
23 unsigned long addr,
24 unsigned long len)
25{
26 unsigned long task_size = STACK_TOP;
27 struct hstate *h = hstate_file(file);
28
29 if (len & ~huge_page_mask(h))
30 return -EINVAL;
31 if (addr & ~huge_page_mask(h))
32 return -EINVAL;
33 if (len > task_size)
34 return -ENOMEM;
35 if (task_size - len < addr)
36 return -EINVAL;
37 return 0;
38}
39
40static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm)
41{
42}
43
44static inline void hugetlb_free_pgd_range(struct mmu_gather *tlb,
45 unsigned long addr,
46 unsigned long end,
47 unsigned long floor,
48 unsigned long ceiling)
49{
50 free_pgd_range(tlb, addr, end, floor, ceiling);
51}
52
53static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
54 pte_t *ptep, pte_t pte)
55{
56 set_pte_at(mm, addr, ptep, pte);
57}
58
59static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
60 unsigned long addr, pte_t *ptep)
61{
62 pte_t clear;
63 pte_t pte = *ptep;
64
65 pte_val(clear) = (unsigned long)invalid_pte_table;
66 set_pte_at(mm, addr, ptep, clear);
67 return pte;
68}
69
70static inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
71 unsigned long addr, pte_t *ptep)
72{
73}
74
75static inline int huge_pte_none(pte_t pte)
76{
77 unsigned long val = pte_val(pte) & ~_PAGE_GLOBAL;
78 return !val || (val == (unsigned long)invalid_pte_table);
79}
80
81static inline pte_t huge_pte_wrprotect(pte_t pte)
82{
83 return pte_wrprotect(pte);
84}
85
86static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
87 unsigned long addr, pte_t *ptep)
88{
89 ptep_set_wrprotect(mm, addr, ptep);
90}
91
92static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
93 unsigned long addr,
94 pte_t *ptep, pte_t pte,
95 int dirty)
96{
97 return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
98}
99
100static inline pte_t huge_ptep_get(pte_t *ptep)
101{
102 return *ptep;
103}
104
105static inline int arch_prepare_hugepage(struct page *page)
106{
107 return 0;
108}
109
110static inline void arch_release_hugepage(struct page *page)
111{
112}
113
114#endif /* __ASM_HUGETLB_H */
diff --git a/arch/mips/include/asm/ioctl.h b/arch/mips/include/asm/ioctl.h
index 916163401b2c..c515a1a4c47c 100644
--- a/arch/mips/include/asm/ioctl.h
+++ b/arch/mips/include/asm/ioctl.h
@@ -3,40 +3,16 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1995, 96, 99, 2001 Ralf Baechle 6 * Copyright (C) 1995, 96, 99, 2001 Ralf Baechle <ralf@linux-mips.org>
7 * Copyright (C) 2009 Wind River Systems
8 * Written by Ralf Baechle <ralf@linux-mips.org>
7 */ 9 */
8#ifndef _ASM_IOCTL_H 10#ifndef __ASM_IOCTL_H
9#define _ASM_IOCTL_H 11#define __ASM_IOCTL_H
10 12
11/*
12 * The original linux ioctl numbering scheme was just a general
13 * "anything goes" setup, where more or less random numbers were
14 * assigned. Sorry, I was clueless when I started out on this.
15 *
16 * On the alpha, we'll try to clean it up a bit, using a more sane
17 * ioctl numbering, and also trying to be compatible with OSF/1 in
18 * the process. I'd like to clean it up for the i386 as well, but
19 * it's so painful recognizing both the new and the old numbers..
20 *
21 * The same applies for for the MIPS ABI; in fact even the macros
22 * from Linux/Alpha fit almost perfectly.
23 */
24
25#define _IOC_NRBITS 8
26#define _IOC_TYPEBITS 8
27#define _IOC_SIZEBITS 13 13#define _IOC_SIZEBITS 13
28#define _IOC_DIRBITS 3 14#define _IOC_DIRBITS 3
29 15
30#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
31#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
32#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
33#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
34
35#define _IOC_NRSHIFT 0
36#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
37#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
38#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
39
40/* 16/*
41 * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit. 17 * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit.
42 * And this turns out useful to catch old ioctl numbers in header 18 * And this turns out useful to catch old ioctl numbers in header
@@ -46,53 +22,6 @@
46#define _IOC_READ 2U 22#define _IOC_READ 2U
47#define _IOC_WRITE 4U 23#define _IOC_WRITE 4U
48 24
49/* 25#include <asm-generic/ioctl.h>
50 * The following are included for compatibility
51 */
52#define _IOC_VOID 0x20000000
53#define _IOC_OUT 0x40000000
54#define _IOC_IN 0x80000000
55#define _IOC_INOUT (IOC_IN|IOC_OUT)
56
57#define _IOC(dir, type, nr, size) \
58 (((dir) << _IOC_DIRSHIFT) | \
59 ((type) << _IOC_TYPESHIFT) | \
60 ((nr) << _IOC_NRSHIFT) | \
61 ((size) << _IOC_SIZESHIFT))
62
63#ifdef __KERNEL__
64/* provoke compile error for invalid uses of size argument */
65extern unsigned int __invalid_size_argument_for_IOC;
66#define _IOC_TYPECHECK(t) \
67 ((sizeof(t) == sizeof(t[1]) && \
68 sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
69 sizeof(t) : __invalid_size_argument_for_IOC)
70#else
71#define _IOC_TYPECHECK(t) (sizeof(t))
72#endif
73
74/* used to create numbers */
75#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0)
76#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), (_IOC_TYPECHECK(size)))
77#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), (_IOC_TYPECHECK(size)))
78#define _IOWR(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), (_IOC_TYPECHECK(size)))
79#define _IOR_BAD(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof(size))
80#define _IOW_BAD(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof(size))
81#define _IOWR_BAD(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), sizeof(size))
82
83
84/* used to decode them.. */
85#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
86#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
87#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
88#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
89
90/* ...and for the drivers/sound files... */
91
92#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
93#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
94#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
95#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
96#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
97 26
98#endif /* _ASM_IOCTL_H */ 27#endif /* __ASM_IOCTL_H */
diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h
index 4f1eed107b08..09b08d05ff72 100644
--- a/arch/mips/include/asm/irq.h
+++ b/arch/mips/include/asm/irq.h
@@ -10,6 +10,7 @@
10#define _ASM_IRQ_H 10#define _ASM_IRQ_H
11 11
12#include <linux/linkage.h> 12#include <linux/linkage.h>
13#include <linux/smp.h>
13 14
14#include <asm/mipsmtregs.h> 15#include <asm/mipsmtregs.h>
15 16
diff --git a/arch/mips/include/asm/irq_gt641xx.h b/arch/mips/include/asm/irq_gt641xx.h
index f9a7c3ac2e66..250a2407b599 100644
--- a/arch/mips/include/asm/irq_gt641xx.h
+++ b/arch/mips/include/asm/irq_gt641xx.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Galileo/Marvell GT641xx IRQ definitions. 2 * Galileo/Marvell GT641xx IRQ definitions.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/mach-ar7/ar7.h b/arch/mips/include/asm/mach-ar7/ar7.h
new file mode 100644
index 000000000000..de71694614de
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/ar7.h
@@ -0,0 +1,178 @@
1/*
2 * Copyright (C) 2006,2007 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2006,2007 Eugene Konev <ejka@openwrt.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#ifndef __AR7_H__
21#define __AR7_H__
22
23#include <linux/delay.h>
24#include <linux/io.h>
25#include <linux/errno.h>
26
27#include <asm/addrspace.h>
28
29#define AR7_SDRAM_BASE 0x14000000
30
31#define AR7_REGS_BASE 0x08610000
32
33#define AR7_REGS_MAC0 (AR7_REGS_BASE + 0x0000)
34#define AR7_REGS_GPIO (AR7_REGS_BASE + 0x0900)
35/* 0x08610A00 - 0x08610BFF (512 bytes, 128 bytes / clock) */
36#define AR7_REGS_POWER (AR7_REGS_BASE + 0x0a00)
37#define AR7_REGS_CLOCKS (AR7_REGS_POWER + 0x80)
38#define UR8_REGS_CLOCKS (AR7_REGS_POWER + 0x20)
39#define AR7_REGS_UART0 (AR7_REGS_BASE + 0x0e00)
40#define AR7_REGS_USB (AR7_REGS_BASE + 0x1200)
41#define AR7_REGS_RESET (AR7_REGS_BASE + 0x1600)
42#define AR7_REGS_VLYNQ0 (AR7_REGS_BASE + 0x1800)
43#define AR7_REGS_DCL (AR7_REGS_BASE + 0x1a00)
44#define AR7_REGS_VLYNQ1 (AR7_REGS_BASE + 0x1c00)
45#define AR7_REGS_MDIO (AR7_REGS_BASE + 0x1e00)
46#define AR7_REGS_IRQ (AR7_REGS_BASE + 0x2400)
47#define AR7_REGS_MAC1 (AR7_REGS_BASE + 0x2800)
48
49#define AR7_REGS_WDT (AR7_REGS_BASE + 0x1f00)
50#define UR8_REGS_WDT (AR7_REGS_BASE + 0x0b00)
51#define UR8_REGS_UART1 (AR7_REGS_BASE + 0x0f00)
52
53#define AR7_RESET_PEREPHERIAL 0x0
54#define AR7_RESET_SOFTWARE 0x4
55#define AR7_RESET_STATUS 0x8
56
57#define AR7_RESET_BIT_CPMAC_LO 17
58#define AR7_RESET_BIT_CPMAC_HI 21
59#define AR7_RESET_BIT_MDIO 22
60#define AR7_RESET_BIT_EPHY 26
61
62/* GPIO control registers */
63#define AR7_GPIO_INPUT 0x0
64#define AR7_GPIO_OUTPUT 0x4
65#define AR7_GPIO_DIR 0x8
66#define AR7_GPIO_ENABLE 0xc
67
68#define AR7_CHIP_7100 0x18
69#define AR7_CHIP_7200 0x2b
70#define AR7_CHIP_7300 0x05
71
72/* Interrupts */
73#define AR7_IRQ_UART0 15
74#define AR7_IRQ_UART1 16
75
76/* Clocks */
77#define AR7_AFE_CLOCK 35328000
78#define AR7_REF_CLOCK 25000000
79#define AR7_XTAL_CLOCK 24000000
80
81struct plat_cpmac_data {
82 int reset_bit;
83 int power_bit;
84 u32 phy_mask;
85 char dev_addr[6];
86};
87
88struct plat_dsl_data {
89 int reset_bit_dsl;
90 int reset_bit_sar;
91};
92
93extern int ar7_cpu_clock, ar7_bus_clock, ar7_dsp_clock;
94
95static inline u16 ar7_chip_id(void)
96{
97 return readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) & 0xffff;
98}
99
100static inline u8 ar7_chip_rev(void)
101{
102 return (readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) >> 16) & 0xff;
103}
104
105static inline int ar7_cpu_freq(void)
106{
107 return ar7_cpu_clock;
108}
109
110static inline int ar7_bus_freq(void)
111{
112 return ar7_bus_clock;
113}
114
115static inline int ar7_vbus_freq(void)
116{
117 return ar7_bus_clock / 2;
118}
119#define ar7_cpmac_freq ar7_vbus_freq
120
121static inline int ar7_dsp_freq(void)
122{
123 return ar7_dsp_clock;
124}
125
126static inline int ar7_has_high_cpmac(void)
127{
128 u16 chip_id = ar7_chip_id();
129 switch (chip_id) {
130 case AR7_CHIP_7100:
131 case AR7_CHIP_7200:
132 return 0;
133 case AR7_CHIP_7300:
134 return 1;
135 default:
136 return -ENXIO;
137 }
138}
139#define ar7_has_high_vlynq ar7_has_high_cpmac
140#define ar7_has_second_uart ar7_has_high_cpmac
141
142static inline void ar7_device_enable(u32 bit)
143{
144 void *reset_reg =
145 (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL);
146 writel(readl(reset_reg) | (1 << bit), reset_reg);
147 msleep(20);
148}
149
150static inline void ar7_device_disable(u32 bit)
151{
152 void *reset_reg =
153 (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL);
154 writel(readl(reset_reg) & ~(1 << bit), reset_reg);
155 msleep(20);
156}
157
158static inline void ar7_device_reset(u32 bit)
159{
160 ar7_device_disable(bit);
161 ar7_device_enable(bit);
162}
163
164static inline void ar7_device_on(u32 bit)
165{
166 void *power_reg = (void *)KSEG1ADDR(AR7_REGS_POWER);
167 writel(readl(power_reg) | (1 << bit), power_reg);
168 msleep(20);
169}
170
171static inline void ar7_device_off(u32 bit)
172{
173 void *power_reg = (void *)KSEG1ADDR(AR7_REGS_POWER);
174 writel(readl(power_reg) & ~(1 << bit), power_reg);
175 msleep(20);
176}
177
178#endif /* __AR7_H__ */
diff --git a/arch/mips/include/asm/mach-ar7/gpio.h b/arch/mips/include/asm/mach-ar7/gpio.h
new file mode 100644
index 000000000000..cbe9c4f126df
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/gpio.h
@@ -0,0 +1,110 @@
1/*
2 * Copyright (C) 2007 Florian Fainelli <florian@openwrt.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19#ifndef __AR7_GPIO_H__
20#define __AR7_GPIO_H__
21
22#include <asm/mach-ar7/ar7.h>
23
24#define AR7_GPIO_MAX 32
25
26extern int gpio_request(unsigned gpio, const char *label);
27extern void gpio_free(unsigned gpio);
28
29/* Common GPIO layer */
30static inline int gpio_get_value(unsigned gpio)
31{
32 void __iomem *gpio_in =
33 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_INPUT);
34
35 return readl(gpio_in) & (1 << gpio);
36}
37
38static inline void gpio_set_value(unsigned gpio, int value)
39{
40 void __iomem *gpio_out =
41 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_OUTPUT);
42 unsigned tmp;
43
44 tmp = readl(gpio_out) & ~(1 << gpio);
45 if (value)
46 tmp |= 1 << gpio;
47 writel(tmp, gpio_out);
48}
49
50static inline int gpio_direction_input(unsigned gpio)
51{
52 void __iomem *gpio_dir =
53 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_DIR);
54
55 if (gpio >= AR7_GPIO_MAX)
56 return -EINVAL;
57
58 writel(readl(gpio_dir) | (1 << gpio), gpio_dir);
59
60 return 0;
61}
62
63static inline int gpio_direction_output(unsigned gpio, int value)
64{
65 void __iomem *gpio_dir =
66 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_DIR);
67
68 if (gpio >= AR7_GPIO_MAX)
69 return -EINVAL;
70
71 gpio_set_value(gpio, value);
72 writel(readl(gpio_dir) & ~(1 << gpio), gpio_dir);
73
74 return 0;
75}
76
77static inline int gpio_to_irq(unsigned gpio)
78{
79 return -EINVAL;
80}
81
82static inline int irq_to_gpio(unsigned irq)
83{
84 return -EINVAL;
85}
86
87/* Board specific GPIO functions */
88static inline int ar7_gpio_enable(unsigned gpio)
89{
90 void __iomem *gpio_en =
91 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_ENABLE);
92
93 writel(readl(gpio_en) | (1 << gpio), gpio_en);
94
95 return 0;
96}
97
98static inline int ar7_gpio_disable(unsigned gpio)
99{
100 void __iomem *gpio_en =
101 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + AR7_GPIO_ENABLE);
102
103 writel(readl(gpio_en) & ~(1 << gpio), gpio_en);
104
105 return 0;
106}
107
108#include <asm-generic/gpio.h>
109
110#endif
diff --git a/arch/mips/include/asm/mach-ar7/irq.h b/arch/mips/include/asm/mach-ar7/irq.h
new file mode 100644
index 000000000000..39e9757e3d93
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/irq.h
@@ -0,0 +1,16 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Shamelessly copied from asm-mips/mach-emma2rh/
7 * Copyright (C) 2003 by Ralf Baechle
8 */
9#ifndef __ASM_AR7_IRQ_H
10#define __ASM_AR7_IRQ_H
11
12#define NR_IRQS 256
13
14#include_next <irq.h>
15
16#endif /* __ASM_AR7_IRQ_H */
diff --git a/arch/mips/include/asm/mach-ar7/prom.h b/arch/mips/include/asm/mach-ar7/prom.h
new file mode 100644
index 000000000000..088f61fe85ea
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/prom.h
@@ -0,0 +1,25 @@
1/*
2 * Copyright (C) 2006, 2007 Florian Fainelli <florian@openwrt.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19#ifndef __PROM_H__
20#define __PROM_H__
21
22extern char *prom_getenv(const char *name);
23extern void prom_meminit(void);
24
25#endif /* __PROM_H__ */
diff --git a/arch/mips/include/asm/mach-ar7/spaces.h b/arch/mips/include/asm/mach-ar7/spaces.h
new file mode 100644
index 000000000000..ac28f273449c
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/spaces.h
@@ -0,0 +1,22 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1994 - 1999, 2000, 03, 04 Ralf Baechle
7 * Copyright (C) 2000, 2002 Maciej W. Rozycki
8 * Copyright (C) 1990, 1999, 2000 Silicon Graphics, Inc.
9 */
10#ifndef _ASM_AR7_SPACES_H
11#define _ASM_AR7_SPACES_H
12
13/*
14 * This handles the memory map.
15 * We handle pages at KSEG0 for kernels with 32 bit address space.
16 */
17#define PAGE_OFFSET 0x94000000UL
18#define PHYS_OFFSET 0x14000000UL
19
20#include <asm/mach-generic/spaces.h>
21
22#endif /* __ASM_AR7_SPACES_H */
diff --git a/arch/mips/include/asm/mach-ar7/war.h b/arch/mips/include/asm/mach-ar7/war.h
new file mode 100644
index 000000000000..f4862b563080
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar7/war.h
@@ -0,0 +1,25 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
7 */
8#ifndef __ASM_MIPS_MACH_AR7_WAR_H
9#define __ASM_MIPS_MACH_AR7_WAR_H
10
11#define R4600_V1_INDEX_ICACHEOP_WAR 0
12#define R4600_V1_HIT_CACHEOP_WAR 0
13#define R4600_V2_HIT_CACHEOP_WAR 0
14#define R5432_CP0_INTERRUPT_WAR 0
15#define BCM1250_M3_WAR 0
16#define SIBYTE_1956_WAR 0
17#define MIPS4K_ICACHE_REFILL_WAR 0
18#define MIPS_CACHE_SYNC_WAR 0
19#define TX49XX_ICACHE_INDEX_INV_WAR 0
20#define RM9000_CDEX_SMP_WAR 0
21#define ICACHE_REFILLS_WORKAROUND_WAR 0
22#define R10000_LLSC_WAR 0
23#define MIPS34K_MISSED_ITLB_WAR 0
24
25#endif /* __ASM_MIPS_MACH_AR7_WAR_H */
diff --git a/arch/mips/include/asm/mach-au1x00/au1000_gpio.h b/arch/mips/include/asm/mach-au1x00/au1000_gpio.h
deleted file mode 100644
index d8c96fda5549..000000000000
--- a/arch/mips/include/asm/mach-au1x00/au1000_gpio.h
+++ /dev/null
@@ -1,56 +0,0 @@
1/*
2 * FILE NAME au1000_gpio.h
3 *
4 * BRIEF MODULE DESCRIPTION
5 * API to Alchemy Au1xx0 GPIO device.
6 *
7 * Author: MontaVista Software, Inc. <source@mvista.com>
8 * Steve Longerbeam
9 *
10 * Copyright 2001, 2008 MontaVista Software Inc.
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version.
16 *
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
20 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * You should have received a copy of the GNU General Public License along
29 * with this program; if not, write to the Free Software Foundation, Inc.,
30 * 675 Mass Ave, Cambridge, MA 02139, USA.
31 */
32
33#ifndef __AU1000_GPIO_H
34#define __AU1000_GPIO_H
35
36#include <linux/ioctl.h>
37
38#define AU1000GPIO_IOC_MAGIC 'A'
39
40#define AU1000GPIO_IN _IOR(AU1000GPIO_IOC_MAGIC, 0, int)
41#define AU1000GPIO_SET _IOW(AU1000GPIO_IOC_MAGIC, 1, int)
42#define AU1000GPIO_CLEAR _IOW(AU1000GPIO_IOC_MAGIC, 2, int)
43#define AU1000GPIO_OUT _IOW(AU1000GPIO_IOC_MAGIC, 3, int)
44#define AU1000GPIO_TRISTATE _IOW(AU1000GPIO_IOC_MAGIC, 4, int)
45#define AU1000GPIO_AVAIL_MASK _IOR(AU1000GPIO_IOC_MAGIC, 5, int)
46
47#ifdef __KERNEL__
48extern u32 get_au1000_avail_gpio_mask(void);
49extern int au1000gpio_tristate(u32 data);
50extern int au1000gpio_in(u32 *data);
51extern int au1000gpio_set(u32 data);
52extern int au1000gpio_clear(u32 data);
53extern int au1000gpio_out(u32 data);
54#endif
55
56#endif
diff --git a/arch/mips/include/asm/mach-au1x00/gpio-au1000.h b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h
new file mode 100644
index 000000000000..127d4ed9f073
--- /dev/null
+++ b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h
@@ -0,0 +1,604 @@
1/*
2 * GPIO functions for Au1000, Au1500, Au1100, Au1550, Au1200
3 *
4 * Copyright (c) 2009 Manuel Lauss.
5 *
6 * Licensed under the terms outlined in the file COPYING.
7 */
8
9#ifndef _ALCHEMY_GPIO_AU1000_H_
10#define _ALCHEMY_GPIO_AU1000_H_
11
12#include <asm/mach-au1x00/au1000.h>
13
14/* The default GPIO numberspace as documented in the Alchemy manuals.
15 * GPIO0-31 from GPIO1 block, GPIO200-215 from GPIO2 block.
16 */
17#define ALCHEMY_GPIO1_BASE 0
18#define ALCHEMY_GPIO2_BASE 200
19
20#define ALCHEMY_GPIO1_NUM 32
21#define ALCHEMY_GPIO2_NUM 16
22#define ALCHEMY_GPIO1_MAX (ALCHEMY_GPIO1_BASE + ALCHEMY_GPIO1_NUM - 1)
23#define ALCHEMY_GPIO2_MAX (ALCHEMY_GPIO2_BASE + ALCHEMY_GPIO2_NUM - 1)
24
25#define MAKE_IRQ(intc, off) (AU1000_INTC##intc##_INT_BASE + (off))
26
27
28static inline int au1000_gpio1_to_irq(int gpio)
29{
30 return MAKE_IRQ(1, gpio - ALCHEMY_GPIO1_BASE);
31}
32
33static inline int au1000_gpio2_to_irq(int gpio)
34{
35 return -ENXIO;
36}
37
38#ifdef CONFIG_SOC_AU1000
39static inline int au1000_irq_to_gpio(int irq)
40{
41 if ((irq >= AU1000_GPIO_0) && (irq <= AU1000_GPIO_31))
42 return ALCHEMY_GPIO1_BASE + (irq - AU1000_GPIO_0) + 0;
43
44 return -ENXIO;
45}
46#endif
47
48static inline int au1500_gpio1_to_irq(int gpio)
49{
50 gpio -= ALCHEMY_GPIO1_BASE;
51
52 switch (gpio) {
53 case 0 ... 15:
54 case 20:
55 case 23 ... 28: return MAKE_IRQ(1, gpio);
56 }
57
58 return -ENXIO;
59}
60
61static inline int au1500_gpio2_to_irq(int gpio)
62{
63 gpio -= ALCHEMY_GPIO2_BASE;
64
65 switch (gpio) {
66 case 0 ... 3: return MAKE_IRQ(1, 16 + gpio - 0);
67 case 4 ... 5: return MAKE_IRQ(1, 21 + gpio - 4);
68 case 6 ... 7: return MAKE_IRQ(1, 29 + gpio - 6);
69 }
70
71 return -ENXIO;
72}
73
74#ifdef CONFIG_SOC_AU1500
75static inline int au1500_irq_to_gpio(int irq)
76{
77 switch (irq) {
78 case AU1000_GPIO_0 ... AU1000_GPIO_15:
79 case AU1500_GPIO_20:
80 case AU1500_GPIO_23 ... AU1500_GPIO_28:
81 return ALCHEMY_GPIO1_BASE + (irq - AU1000_GPIO_0) + 0;
82 case AU1500_GPIO_200 ... AU1500_GPIO_203:
83 return ALCHEMY_GPIO2_BASE + (irq - AU1500_GPIO_200) + 0;
84 case AU1500_GPIO_204 ... AU1500_GPIO_205:
85 return ALCHEMY_GPIO2_BASE + (irq - AU1500_GPIO_204) + 4;
86 case AU1500_GPIO_206 ... AU1500_GPIO_207:
87 return ALCHEMY_GPIO2_BASE + (irq - AU1500_GPIO_206) + 6;
88 case AU1500_GPIO_208_215:
89 return ALCHEMY_GPIO2_BASE + 8;
90 }
91
92 return -ENXIO;
93}
94#endif
95
96static inline int au1100_gpio1_to_irq(int gpio)
97{
98 return MAKE_IRQ(1, gpio - ALCHEMY_GPIO1_BASE);
99}
100
101static inline int au1100_gpio2_to_irq(int gpio)
102{
103 gpio -= ALCHEMY_GPIO2_BASE;
104
105 if ((gpio >= 8) && (gpio <= 15))
106 return MAKE_IRQ(0, 29); /* shared GPIO208_215 */
107}
108
109#ifdef CONFIG_SOC_AU1100
110static inline int au1100_irq_to_gpio(int irq)
111{
112 switch (irq) {
113 case AU1000_GPIO_0 ... AU1000_GPIO_31:
114 return ALCHEMY_GPIO1_BASE + (irq - AU1000_GPIO_0) + 0;
115 case AU1100_GPIO_208_215:
116 return ALCHEMY_GPIO2_BASE + 8;
117 }
118
119 return -ENXIO;
120}
121#endif
122
123static inline int au1550_gpio1_to_irq(int gpio)
124{
125 gpio -= ALCHEMY_GPIO1_BASE;
126
127 switch (gpio) {
128 case 0 ... 15:
129 case 20 ... 28: return MAKE_IRQ(1, gpio);
130 case 16 ... 17: return MAKE_IRQ(1, 18 + gpio - 16);
131 }
132
133 return -ENXIO;
134}
135
136static inline int au1550_gpio2_to_irq(int gpio)
137{
138 gpio -= ALCHEMY_GPIO2_BASE;
139
140 switch (gpio) {
141 case 0: return MAKE_IRQ(1, 16);
142 case 1 ... 5: return MAKE_IRQ(1, 17); /* shared GPIO201_205 */
143 case 6 ... 7: return MAKE_IRQ(1, 29 + gpio - 6);
144 case 8 ... 15: return MAKE_IRQ(1, 31); /* shared GPIO208_215 */
145 }
146
147 return -ENXIO;
148}
149
150#ifdef CONFIG_SOC_AU1550
151static inline int au1550_irq_to_gpio(int irq)
152{
153 switch (irq) {
154 case AU1000_GPIO_0 ... AU1000_GPIO_15:
155 return ALCHEMY_GPIO1_BASE + (irq - AU1000_GPIO_0) + 0;
156 case AU1550_GPIO_200:
157 case AU1500_GPIO_201_205:
158 return ALCHEMY_GPIO2_BASE + (irq - AU1550_GPIO_200) + 0;
159 case AU1500_GPIO_16 ... AU1500_GPIO_28:
160 return ALCHEMY_GPIO1_BASE + (irq - AU1500_GPIO_16) + 16;
161 case AU1500_GPIO_206 ... AU1500_GPIO_208_218:
162 return ALCHEMY_GPIO2_BASE + (irq - AU1500_GPIO_206) + 6;
163 }
164
165 return -ENXIO;
166}
167#endif
168
169static inline int au1200_gpio1_to_irq(int gpio)
170{
171 return MAKE_IRQ(1, gpio - ALCHEMY_GPIO1_BASE);
172}
173
174static inline int au1200_gpio2_to_irq(int gpio)
175{
176 gpio -= ALCHEMY_GPIO2_BASE;
177
178 switch (gpio) {
179 case 0 ... 2: return MAKE_IRQ(0, 5 + gpio - 0);
180 case 3: return MAKE_IRQ(0, 22);
181 case 4 ... 7: return MAKE_IRQ(0, 24 + gpio - 4);
182 case 8 ... 15: return MAKE_IRQ(0, 28); /* shared GPIO208_215 */
183 }
184
185 return -ENXIO;
186}
187
188#ifdef CONFIG_SOC_AU1200
189static inline int au1200_irq_to_gpio(int irq)
190{
191 switch (irq) {
192 case AU1000_GPIO_0 ... AU1000_GPIO_31:
193 return ALCHEMY_GPIO1_BASE + (irq - AU1000_GPIO_0) + 0;
194 case AU1200_GPIO_200 ... AU1200_GPIO_202:
195 return ALCHEMY_GPIO2_BASE + (irq - AU1200_GPIO_200) + 0;
196 case AU1200_GPIO_203:
197 return ALCHEMY_GPIO2_BASE + 3;
198 case AU1200_GPIO_204 ... AU1200_GPIO_208_215:
199 return ALCHEMY_GPIO2_BASE + (irq - AU1200_GPIO_204) + 4;
200 }
201
202 return -ENXIO;
203}
204#endif
205
206/*
207 * GPIO1 block macros for common linux gpio functions.
208 */
209static inline void alchemy_gpio1_set_value(int gpio, int v)
210{
211 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE);
212 unsigned long r = v ? SYS_OUTPUTSET : SYS_OUTPUTCLR;
213 au_writel(mask, r);
214 au_sync();
215}
216
217static inline int alchemy_gpio1_get_value(int gpio)
218{
219 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE);
220 return au_readl(SYS_PINSTATERD) & mask;
221}
222
223static inline int alchemy_gpio1_direction_input(int gpio)
224{
225 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO1_BASE);
226 au_writel(mask, SYS_TRIOUTCLR);
227 au_sync();
228 return 0;
229}
230
231static inline int alchemy_gpio1_direction_output(int gpio, int v)
232{
233 /* hardware switches to "output" mode when one of the two
234 * "set_value" registers is accessed.
235 */
236 alchemy_gpio1_set_value(gpio, v);
237 return 0;
238}
239
240static inline int alchemy_gpio1_is_valid(int gpio)
241{
242 return ((gpio >= ALCHEMY_GPIO1_BASE) && (gpio <= ALCHEMY_GPIO1_MAX));
243}
244
245static inline int alchemy_gpio1_to_irq(int gpio)
246{
247#if defined(CONFIG_SOC_AU1000)
248 return au1000_gpio1_to_irq(gpio);
249#elif defined(CONFIG_SOC_AU1100)
250 return au1100_gpio1_to_irq(gpio);
251#elif defined(CONFIG_SOC_AU1500)
252 return au1500_gpio1_to_irq(gpio);
253#elif defined(CONFIG_SOC_AU1550)
254 return au1550_gpio1_to_irq(gpio);
255#elif defined(CONFIG_SOC_AU1200)
256 return au1200_gpio1_to_irq(gpio);
257#else
258 return -ENXIO;
259#endif
260}
261
262/*
263 * GPIO2 block macros for common linux GPIO functions. The 'gpio'
264 * parameter must be in range of ALCHEMY_GPIO2_BASE..ALCHEMY_GPIO2_MAX.
265 */
266static inline void __alchemy_gpio2_mod_dir(int gpio, int to_out)
267{
268 unsigned long mask = 1 << (gpio - ALCHEMY_GPIO2_BASE);
269 unsigned long d = au_readl(GPIO2_DIR);
270 if (to_out)
271 d |= mask;
272 else
273 d &= ~mask;
274 au_writel(d, GPIO2_DIR);
275 au_sync();
276}
277
278static inline void alchemy_gpio2_set_value(int gpio, int v)
279{
280 unsigned long mask;
281 mask = ((v) ? 0x00010001 : 0x00010000) << (gpio - ALCHEMY_GPIO2_BASE);
282 au_writel(mask, GPIO2_OUTPUT);
283 au_sync();
284}
285
286static inline int alchemy_gpio2_get_value(int gpio)
287{
288 return au_readl(GPIO2_PINSTATE) & (1 << (gpio - ALCHEMY_GPIO2_BASE));
289}
290
291static inline int alchemy_gpio2_direction_input(int gpio)
292{
293 unsigned long flags;
294 local_irq_save(flags);
295 __alchemy_gpio2_mod_dir(gpio, 0);
296 local_irq_restore(flags);
297 return 0;
298}
299
300static inline int alchemy_gpio2_direction_output(int gpio, int v)
301{
302 unsigned long flags;
303 alchemy_gpio2_set_value(gpio, v);
304 local_irq_save(flags);
305 __alchemy_gpio2_mod_dir(gpio, 1);
306 local_irq_restore(flags);
307 return 0;
308}
309
310static inline int alchemy_gpio2_is_valid(int gpio)
311{
312 return ((gpio >= ALCHEMY_GPIO2_BASE) && (gpio <= ALCHEMY_GPIO2_MAX));
313}
314
315static inline int alchemy_gpio2_to_irq(int gpio)
316{
317#if defined(CONFIG_SOC_AU1000)
318 return au1000_gpio2_to_irq(gpio);
319#elif defined(CONFIG_SOC_AU1100)
320 return au1100_gpio2_to_irq(gpio);
321#elif defined(CONFIG_SOC_AU1500)
322 return au1500_gpio2_to_irq(gpio);
323#elif defined(CONFIG_SOC_AU1550)
324 return au1550_gpio2_to_irq(gpio);
325#elif defined(CONFIG_SOC_AU1200)
326 return au1200_gpio2_to_irq(gpio);
327#else
328 return -ENXIO;
329#endif
330}
331
332/**********************************************************************/
333
334/* On Au1000, Au1500 and Au1100 GPIOs won't work as inputs before
335 * SYS_PININPUTEN is written to at least once. On Au1550/Au1200 this
336 * register enables use of GPIOs as wake source.
337 */
338static inline void alchemy_gpio1_input_enable(void)
339{
340 au_writel(0, SYS_PININPUTEN); /* the write op is key */
341 au_sync();
342}
343
344/* GPIO2 shared interrupts and control */
345
346static inline void __alchemy_gpio2_mod_int(int gpio2, int en)
347{
348 unsigned long r = au_readl(GPIO2_INTENABLE);
349 if (en)
350 r |= 1 << gpio2;
351 else
352 r &= ~(1 << gpio2);
353 au_writel(r, GPIO2_INTENABLE);
354 au_sync();
355}
356
357/**
358 * alchemy_gpio2_enable_int - Enable a GPIO2 pins' shared irq contribution.
359 * @gpio2: The GPIO2 pin to activate (200...215).
360 *
361 * GPIO208-215 have one shared interrupt line to the INTC. They are
362 * and'ed with a per-pin enable bit and finally or'ed together to form
363 * a single irq request (useful for active-high sources).
364 * With this function, a pins' individual contribution to the int request
365 * can be enabled. As with all other GPIO-based interrupts, the INTC
366 * must be programmed to accept the GPIO208_215 interrupt as well.
367 *
368 * NOTE: Calling this macro is only necessary for GPIO208-215; all other
369 * GPIO2-based interrupts have their own request to the INTC. Please
370 * consult your Alchemy databook for more information!
371 *
372 * NOTE: On the Au1550, GPIOs 201-205 also have a shared interrupt request
373 * line to the INTC, GPIO201_205. This function can be used for those
374 * as well.
375 *
376 * NOTE: 'gpio2' parameter must be in range of the GPIO2 numberspace
377 * (200-215 by default). No sanity checks are made,
378 */
379static inline void alchemy_gpio2_enable_int(int gpio2)
380{
381 unsigned long flags;
382
383 gpio2 -= ALCHEMY_GPIO2_BASE;
384
385#if defined(CONFIG_SOC_AU1100) || defined(CONFIG_SOC_AU1500)
386 /* Au1100/Au1500 have GPIO208-215 enable bits at 0..7 */
387 gpio2 -= 8;
388#endif
389 local_irq_save(flags);
390 __alchemy_gpio2_mod_int(gpio2, 1);
391 local_irq_restore(flags);
392}
393
394/**
395 * alchemy_gpio2_disable_int - Disable a GPIO2 pins' shared irq contribution.
396 * @gpio2: The GPIO2 pin to activate (200...215).
397 *
398 * see function alchemy_gpio2_enable_int() for more information.
399 */
400static inline void alchemy_gpio2_disable_int(int gpio2)
401{
402 unsigned long flags;
403
404 gpio2 -= ALCHEMY_GPIO2_BASE;
405
406#if defined(CONFIG_SOC_AU1100) || defined(CONFIG_SOC_AU1500)
407 /* Au1100/Au1500 have GPIO208-215 enable bits at 0..7 */
408 gpio2 -= 8;
409#endif
410 local_irq_save(flags);
411 __alchemy_gpio2_mod_int(gpio2, 0);
412 local_irq_restore(flags);
413}
414
415/**
416 * alchemy_gpio2_enable - Activate GPIO2 block.
417 *
418 * The GPIO2 block must be enabled excplicitly to work. On systems
419 * where this isn't done by the bootloader, this macro can be used.
420 */
421static inline void alchemy_gpio2_enable(void)
422{
423 au_writel(3, GPIO2_ENABLE); /* reset, clock enabled */
424 au_sync();
425 au_writel(1, GPIO2_ENABLE); /* clock enabled */
426 au_sync();
427}
428
429/**
430 * alchemy_gpio2_disable - disable GPIO2 block.
431 *
432 * Disable and put GPIO2 block in low-power mode.
433 */
434static inline void alchemy_gpio2_disable(void)
435{
436 au_writel(2, GPIO2_ENABLE); /* reset, clock disabled */
437 au_sync();
438}
439
440/**********************************************************************/
441
442/* wrappers for on-chip gpios; can be used before gpio chips have been
443 * registered with gpiolib.
444 */
445static inline int alchemy_gpio_direction_input(int gpio)
446{
447 return (gpio >= ALCHEMY_GPIO2_BASE) ?
448 alchemy_gpio2_direction_input(gpio) :
449 alchemy_gpio1_direction_input(gpio);
450}
451
452static inline int alchemy_gpio_direction_output(int gpio, int v)
453{
454 return (gpio >= ALCHEMY_GPIO2_BASE) ?
455 alchemy_gpio2_direction_output(gpio, v) :
456 alchemy_gpio1_direction_output(gpio, v);
457}
458
459static inline int alchemy_gpio_get_value(int gpio)
460{
461 return (gpio >= ALCHEMY_GPIO2_BASE) ?
462 alchemy_gpio2_get_value(gpio) :
463 alchemy_gpio1_get_value(gpio);
464}
465
466static inline void alchemy_gpio_set_value(int gpio, int v)
467{
468 if (gpio >= ALCHEMY_GPIO2_BASE)
469 alchemy_gpio2_set_value(gpio, v);
470 else
471 alchemy_gpio1_set_value(gpio, v);
472}
473
474static inline int alchemy_gpio_is_valid(int gpio)
475{
476 return (gpio >= ALCHEMY_GPIO2_BASE) ?
477 alchemy_gpio2_is_valid(gpio) :
478 alchemy_gpio1_is_valid(gpio);
479}
480
481static inline int alchemy_gpio_cansleep(int gpio)
482{
483 return 0; /* Alchemy never gets tired */
484}
485
486static inline int alchemy_gpio_to_irq(int gpio)
487{
488 return (gpio >= ALCHEMY_GPIO2_BASE) ?
489 alchemy_gpio2_to_irq(gpio) :
490 alchemy_gpio1_to_irq(gpio);
491}
492
493static inline int alchemy_irq_to_gpio(int irq)
494{
495#if defined(CONFIG_SOC_AU1000)
496 return au1000_irq_to_gpio(irq);
497#elif defined(CONFIG_SOC_AU1100)
498 return au1100_irq_to_gpio(irq);
499#elif defined(CONFIG_SOC_AU1500)
500 return au1500_irq_to_gpio(irq);
501#elif defined(CONFIG_SOC_AU1550)
502 return au1550_irq_to_gpio(irq);
503#elif defined(CONFIG_SOC_AU1200)
504 return au1200_irq_to_gpio(irq);
505#else
506 return -ENXIO;
507#endif
508}
509
510/**********************************************************************/
511
512/* Linux gpio framework integration.
513 *
514 * 4 use cases of Au1000-Au1200 GPIOS:
515 *(1) GPIOLIB=y, ALCHEMY_GPIO_INDIRECT=y:
516 * Board must register gpiochips.
517 *(2) GPIOLIB=y, ALCHEMY_GPIO_INDIRECT=n:
518 * 2 (1 for Au1000) gpio_chips are registered.
519 *
520 *(3) GPIOLIB=n, ALCHEMY_GPIO_INDIRECT=y:
521 * the boards' gpio.h must provide the linux gpio wrapper functions,
522 *
523 *(4) GPIOLIB=n, ALCHEMY_GPIO_INDIRECT=n:
524 * inlinable gpio functions are provided which enable access to the
525 * Au1000 gpios only by using the numbers straight out of the data-
526 * sheets.
527
528 * Cases 1 and 3 are intended for boards which want to provide their own
529 * GPIO namespace and -operations (i.e. for example you have 8 GPIOs
530 * which are in part provided by spare Au1000 GPIO pins and in part by
531 * an external FPGA but you still want them to be accssible in linux
532 * as gpio0-7. The board can of course use the alchemy_gpioX_* functions
533 * as required).
534 */
535
536#ifndef CONFIG_GPIOLIB
537
538
539#ifndef CONFIG_ALCHEMY_GPIO_INDIRECT /* case (4) */
540
541static inline int gpio_direction_input(int gpio)
542{
543 return alchemy_gpio_direction_input(gpio);
544}
545
546static inline int gpio_direction_output(int gpio, int v)
547{
548 return alchemy_gpio_direction_output(gpio, v);
549}
550
551static inline int gpio_get_value(int gpio)
552{
553 return alchemy_gpio_get_value(gpio);
554}
555
556static inline void gpio_set_value(int gpio, int v)
557{
558 alchemy_gpio_set_value(gpio, v);
559}
560
561static inline int gpio_is_valid(int gpio)
562{
563 return alchemy_gpio_is_valid(gpio);
564}
565
566static inline int gpio_cansleep(int gpio)
567{
568 return alchemy_gpio_cansleep(gpio);
569}
570
571static inline int gpio_to_irq(int gpio)
572{
573 return alchemy_gpio_to_irq(gpio);
574}
575
576static inline int irq_to_gpio(int irq)
577{
578 return alchemy_irq_to_gpio(irq);
579}
580
581#endif /* !CONFIG_ALCHEMY_GPIO_INDIRECT */
582
583
584#else /* CONFIG GPIOLIB */
585
586
587 /* using gpiolib to provide up to 2 gpio_chips for on-chip gpios */
588#ifndef CONFIG_ALCHEMY_GPIO_INDIRECT /* case (2) */
589
590/* get everything through gpiolib */
591#define gpio_to_irq __gpio_to_irq
592#define gpio_get_value __gpio_get_value
593#define gpio_set_value __gpio_set_value
594#define gpio_cansleep __gpio_cansleep
595#define irq_to_gpio alchemy_irq_to_gpio
596
597#include <asm-generic/gpio.h>
598
599#endif /* !CONFIG_ALCHEMY_GPIO_INDIRECT */
600
601
602#endif /* !CONFIG_GPIOLIB */
603
604#endif /* _ALCHEMY_GPIO_AU1000_H_ */
diff --git a/arch/mips/include/asm/mach-au1x00/gpio.h b/arch/mips/include/asm/mach-au1x00/gpio.h
index 34d9b7279024..f9b7d41c659a 100644
--- a/arch/mips/include/asm/mach-au1x00/gpio.h
+++ b/arch/mips/include/asm/mach-au1x00/gpio.h
@@ -1,33 +1,10 @@
1#ifndef _AU1XXX_GPIO_H_ 1#ifndef _ALCHEMY_GPIO_H_
2#define _AU1XXX_GPIO_H_ 2#define _ALCHEMY_GPIO_H_
3 3
4#include <linux/types.h> 4#if defined(CONFIG_ALCHEMY_GPIO_AU1000)
5 5
6#define AU1XXX_GPIO_BASE 200 6#include <asm/mach-au1x00/gpio-au1000.h>
7 7
8/* GPIO bank 1 offsets */ 8#endif
9#define AU1000_GPIO1_TRI_OUT 0x0100
10#define AU1000_GPIO1_OUT 0x0108
11#define AU1000_GPIO1_ST 0x0110
12#define AU1000_GPIO1_CLR 0x010C
13 9
14/* GPIO bank 2 offsets */ 10#endif /* _ALCHEMY_GPIO_H_ */
15#define AU1000_GPIO2_DIR 0x00
16#define AU1000_GPIO2_RSVD 0x04
17#define AU1000_GPIO2_OUT 0x08
18#define AU1000_GPIO2_ST 0x0C
19#define AU1000_GPIO2_INT 0x10
20#define AU1000_GPIO2_EN 0x14
21
22#define GPIO2_OUT_EN_MASK 0x00010000
23
24#define gpio_to_irq(gpio) NULL
25
26#define gpio_get_value __gpio_get_value
27#define gpio_set_value __gpio_set_value
28
29#define gpio_cansleep __gpio_cansleep
30
31#include <asm-generic/gpio.h>
32
33#endif /* _AU1XXX_GPIO_H_ */
diff --git a/arch/mips/include/asm/mach-bcm47xx/gpio.h b/arch/mips/include/asm/mach-bcm47xx/gpio.h
index 1784fde2e28f..98504142124e 100644
--- a/arch/mips/include/asm/mach-bcm47xx/gpio.h
+++ b/arch/mips/include/asm/mach-bcm47xx/gpio.h
@@ -37,6 +37,9 @@ static inline int gpio_direction_input(unsigned gpio)
37 37
38static inline int gpio_direction_output(unsigned gpio, int value) 38static inline int gpio_direction_output(unsigned gpio, int value)
39{ 39{
40 /* first set the gpio out value */
41 ssb_gpio_out(&ssb_bcm47xx, 1 << gpio, value ? 1 << gpio : 0);
42 /* then set the gpio mode */
40 ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 1 << gpio); 43 ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 1 << gpio);
41 return 0; 44 return 0;
42} 45}
diff --git a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
index 04ce6e6569da..3d830756b13a 100644
--- a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
+++ b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
@@ -47,11 +47,13 @@
47#define cpu_has_mips32r2 0 47#define cpu_has_mips32r2 0
48#define cpu_has_mips64r1 0 48#define cpu_has_mips64r1 0
49#define cpu_has_mips64r2 1 49#define cpu_has_mips64r2 1
50#define cpu_has_mips_r2_exec_hazard 0
50#define cpu_has_dsp 0 51#define cpu_has_dsp 0
51#define cpu_has_mipsmt 0 52#define cpu_has_mipsmt 0
52#define cpu_has_userlocal 0 53#define cpu_has_userlocal 0
53#define cpu_has_vint 0 54#define cpu_has_vint 0
54#define cpu_has_veic 0 55#define cpu_has_veic 0
56#define cpu_hwrena_impl_bits 0xc0000000
55#define ARCH_HAS_READ_CURRENT_TIMER 1 57#define ARCH_HAS_READ_CURRENT_TIMER 1
56#define ARCH_HAS_IRQ_PER_CPU 1 58#define ARCH_HAS_IRQ_PER_CPU 1
57#define ARCH_HAS_SPINLOCK_PREFETCH 1 59#define ARCH_HAS_SPINLOCK_PREFETCH 1
diff --git a/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h b/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
index f30fce92aabb..17d579471ec4 100644
--- a/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
+++ b/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
@@ -30,12 +30,14 @@ static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
30 return octeon_map_dma_mem(dev, page_address(page), PAGE_SIZE); 30 return octeon_map_dma_mem(dev, page_address(page), PAGE_SIZE);
31} 31}
32 32
33static inline unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 33static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
34 dma_addr_t dma_addr)
34{ 35{
35 return dma_addr; 36 return dma_addr;
36} 37}
37 38
38static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 39static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
40 size_t size, enum dma_data_direction direction)
39{ 41{
40 octeon_unmap_dma_mem(dev, dma_addr); 42 octeon_unmap_dma_mem(dev, dma_addr);
41} 43}
diff --git a/arch/mips/include/asm/mach-cobalt/irq.h b/arch/mips/include/asm/mach-cobalt/irq.h
index 57c8c9ac5851..9da9acf5dcba 100644
--- a/arch/mips/include/asm/mach-cobalt/irq.h
+++ b/arch/mips/include/asm/mach-cobalt/irq.h
@@ -8,7 +8,7 @@
8 * Copyright (C) 1997 Cobalt Microserver 8 * Copyright (C) 1997 Cobalt Microserver
9 * Copyright (C) 1997, 2003 Ralf Baechle 9 * Copyright (C) 1997, 2003 Ralf Baechle
10 * Copyright (C) 2001-2003 Liam Davies (ldavies@agile.tv) 10 * Copyright (C) 2001-2003 Liam Davies (ldavies@agile.tv)
11 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 11 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
12 */ 12 */
13#ifndef _ASM_COBALT_IRQ_H 13#ifndef _ASM_COBALT_IRQ_H
14#define _ASM_COBALT_IRQ_H 14#define _ASM_COBALT_IRQ_H
diff --git a/arch/mips/include/asm/mach-cobalt/mach-gt64120.h b/arch/mips/include/asm/mach-cobalt/mach-gt64120.h
index ae9c5523c7ef..f8afec3f2943 100644
--- a/arch/mips/include/asm/mach-cobalt/mach-gt64120.h
+++ b/arch/mips/include/asm/mach-cobalt/mach-gt64120.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (C) 2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 2 * Copyright (C) 2006 Yoichi Yuasa <yuasa@linux-mips.org>
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by 5 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/mach-generic/dma-coherence.h b/arch/mips/include/asm/mach-generic/dma-coherence.h
index 36c611b6c597..8da98073e952 100644
--- a/arch/mips/include/asm/mach-generic/dma-coherence.h
+++ b/arch/mips/include/asm/mach-generic/dma-coherence.h
@@ -23,12 +23,14 @@ static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
23 return page_to_phys(page); 23 return page_to_phys(page);
24} 24}
25 25
26static inline unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 26static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
27 dma_addr_t dma_addr)
27{ 28{
28 return dma_addr; 29 return dma_addr;
29} 30}
30 31
31static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 32static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
33 size_t size, enum dma_data_direction direction)
32{ 34{
33} 35}
34 36
diff --git a/arch/mips/include/asm/mach-ip27/dma-coherence.h b/arch/mips/include/asm/mach-ip27/dma-coherence.h
index 4c21bfca10c3..d3d04018a858 100644
--- a/arch/mips/include/asm/mach-ip27/dma-coherence.h
+++ b/arch/mips/include/asm/mach-ip27/dma-coherence.h
@@ -33,12 +33,14 @@ static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
33 return pa; 33 return pa;
34} 34}
35 35
36static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 36static unsigned long plat_dma_addr_to_phys(struct device *dev,
37 dma_addr_t dma_addr)
37{ 38{
38 return dma_addr & ~(0xffUL << 56); 39 return dma_addr & ~(0xffUL << 56);
39} 40}
40 41
41static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 42static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
43 size_t size, enum dma_data_direction direction)
42{ 44{
43} 45}
44 46
diff --git a/arch/mips/include/asm/mach-ip32/dma-coherence.h b/arch/mips/include/asm/mach-ip32/dma-coherence.h
index 7ae40f4b1c80..37855955b313 100644
--- a/arch/mips/include/asm/mach-ip32/dma-coherence.h
+++ b/arch/mips/include/asm/mach-ip32/dma-coherence.h
@@ -50,7 +50,8 @@ static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
50} 50}
51 51
52/* This is almost certainly wrong but it's what dma-ip32.c used to use */ 52/* This is almost certainly wrong but it's what dma-ip32.c used to use */
53static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 53static unsigned long plat_dma_addr_to_phys(struct device *dev,
54 dma_addr_t dma_addr)
54{ 55{
55 unsigned long addr = dma_addr & RAM_OFFSET_MASK; 56 unsigned long addr = dma_addr & RAM_OFFSET_MASK;
56 57
@@ -60,7 +61,8 @@ static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr)
60 return addr; 61 return addr;
61} 62}
62 63
63static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 64static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
65 size_t size, enum dma_data_direction direction)
64{ 66{
65} 67}
66 68
diff --git a/arch/mips/include/asm/mach-jazz/dma-coherence.h b/arch/mips/include/asm/mach-jazz/dma-coherence.h
index 1c7cd27efa7b..f93aee59454a 100644
--- a/arch/mips/include/asm/mach-jazz/dma-coherence.h
+++ b/arch/mips/include/asm/mach-jazz/dma-coherence.h
@@ -22,12 +22,14 @@ static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
22 return vdma_alloc(page_to_phys(page), PAGE_SIZE); 22 return vdma_alloc(page_to_phys(page), PAGE_SIZE);
23} 23}
24 24
25static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 25static unsigned long plat_dma_addr_to_phys(struct device *dev,
26 dma_addr_t dma_addr)
26{ 27{
27 return vdma_log2phys(dma_addr); 28 return vdma_log2phys(dma_addr);
28} 29}
29 30
30static void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 31static void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
32 size_t size, enum dma_data_direction direction)
31{ 33{
32 vdma_free(dma_addr); 34 vdma_free(dma_addr);
33} 35}
diff --git a/arch/mips/include/asm/mach-lemote/dma-coherence.h b/arch/mips/include/asm/mach-lemote/dma-coherence.h
index 38fad7dfe7da..c8de5e750777 100644
--- a/arch/mips/include/asm/mach-lemote/dma-coherence.h
+++ b/arch/mips/include/asm/mach-lemote/dma-coherence.h
@@ -25,12 +25,14 @@ static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
25 return page_to_phys(page) | 0x80000000; 25 return page_to_phys(page) | 0x80000000;
26} 26}
27 27
28static inline unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 28static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
29 dma_addr_t dma_addr)
29{ 30{
30 return dma_addr & 0x7fffffff; 31 return dma_addr & 0x7fffffff;
31} 32}
32 33
33static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr) 34static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
35 size_t size, enum dma_data_direction direction)
34{ 36{
35} 37}
36 38
diff --git a/arch/mips/include/asm/mach-rc32434/cpu-feature-overrides.h b/arch/mips/include/asm/mach-rc32434/cpu-feature-overrides.h
index f3bc7efa2608..c3e4d3a4c95d 100644
--- a/arch/mips/include/asm/mach-rc32434/cpu-feature-overrides.h
+++ b/arch/mips/include/asm/mach-rc32434/cpu-feature-overrides.h
@@ -53,11 +53,6 @@
53#define cpu_has_smartmips 0 53#define cpu_has_smartmips 0
54 54
55#define cpu_has_vtag_icache 0 55#define cpu_has_vtag_icache 0
56/* #define cpu_has_dc_aliases ? */
57/* #define cpu_has_ic_fills_f_dc ? */
58/* #define cpu_has_pindexed_dcache ? */
59
60/* #define cpu_icache_snoops_remote_store ? */
61 56
62#define cpu_has_mips32r1 1 57#define cpu_has_mips32r1 1
63#define cpu_has_mips32r2 0 58#define cpu_has_mips32r2 0
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
index 32ef8bec5c85..a581d60cbcc2 100644
--- a/arch/mips/include/asm/mipsregs.h
+++ b/arch/mips/include/asm/mipsregs.h
@@ -220,6 +220,22 @@
220#error Bad page size configuration! 220#error Bad page size configuration!
221#endif 221#endif
222 222
223/*
224 * Default huge tlb size for a given kernel configuration
225 */
226#ifdef CONFIG_PAGE_SIZE_4KB
227#define PM_HUGE_MASK PM_1M
228#elif defined(CONFIG_PAGE_SIZE_8KB)
229#define PM_HUGE_MASK PM_4M
230#elif defined(CONFIG_PAGE_SIZE_16KB)
231#define PM_HUGE_MASK PM_16M
232#elif defined(CONFIG_PAGE_SIZE_32KB)
233#define PM_HUGE_MASK PM_64M
234#elif defined(CONFIG_PAGE_SIZE_64KB)
235#define PM_HUGE_MASK PM_256M
236#elif defined(CONFIG_HUGETLB_PAGE)
237#error Bad page size configuration for hugetlbfs!
238#endif
223 239
224/* 240/*
225 * Values used for computation of new tlb entries 241 * Values used for computation of new tlb entries
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h
index d7f3eb03ad12..d3bea88d8744 100644
--- a/arch/mips/include/asm/mmu_context.h
+++ b/arch/mips/include/asm/mmu_context.h
@@ -13,6 +13,7 @@
13 13
14#include <linux/errno.h> 14#include <linux/errno.h>
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/smp.h>
16#include <linux/slab.h> 17#include <linux/slab.h>
17#include <asm/cacheflush.h> 18#include <asm/cacheflush.h>
18#include <asm/tlbflush.h> 19#include <asm/tlbflush.h>
diff --git a/arch/mips/include/asm/octeon/cvmx-bootinfo.h b/arch/mips/include/asm/octeon/cvmx-bootinfo.h
index 692989acd8a9..f3c23a43f845 100644
--- a/arch/mips/include/asm/octeon/cvmx-bootinfo.h
+++ b/arch/mips/include/asm/octeon/cvmx-bootinfo.h
@@ -157,6 +157,13 @@ enum cvmx_board_types_enum {
157 CVMX_BOARD_TYPE_NIC_XLE_4G = 21, 157 CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
158 CVMX_BOARD_TYPE_EBT5600 = 22, 158 CVMX_BOARD_TYPE_EBT5600 = 22,
159 CVMX_BOARD_TYPE_EBH5201 = 23, 159 CVMX_BOARD_TYPE_EBH5201 = 23,
160 CVMX_BOARD_TYPE_EBT5200 = 24,
161 CVMX_BOARD_TYPE_CB5600 = 25,
162 CVMX_BOARD_TYPE_CB5601 = 26,
163 CVMX_BOARD_TYPE_CB5200 = 27,
164 /* Special 'generic' board type, supports many boards */
165 CVMX_BOARD_TYPE_GENERIC = 28,
166 CVMX_BOARD_TYPE_EBH5610 = 29,
160 CVMX_BOARD_TYPE_MAX, 167 CVMX_BOARD_TYPE_MAX,
161 168
162 /* 169 /*
@@ -228,6 +235,12 @@ static inline const char *cvmx_board_type_to_string(enum
228 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G) 235 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
229 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600) 236 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
230 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201) 237 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
238 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
239 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
240 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
241 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
242 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
243 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
231 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX) 244 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
232 245
233 /* Customer boards listed here */ 246 /* Customer boards listed here */
diff --git a/arch/mips/include/asm/octeon/cvmx-bootmem.h b/arch/mips/include/asm/octeon/cvmx-bootmem.h
index 1cbe4b55889d..8e708bdb43f7 100644
--- a/arch/mips/include/asm/octeon/cvmx-bootmem.h
+++ b/arch/mips/include/asm/octeon/cvmx-bootmem.h
@@ -183,6 +183,64 @@ extern void *cvmx_bootmem_alloc_range(uint64_t size, uint64_t alignment,
183 * Returns 0 on failure, 183 * Returns 0 on failure,
184 * !0 on success 184 * !0 on success
185 */ 185 */
186
187
188/**
189 * Allocate a block of memory from the free list that was passed
190 * to the application by the bootloader, and assign it a name in the
191 * global named block table. (part of the cvmx_bootmem_descriptor_t structure)
192 * Named blocks can later be freed.
193 *
194 * @size: Size in bytes of block to allocate
195 * @alignment: Alignment required - must be power of 2
196 * @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
197 *
198 * Returns a pointer to block of memory, NULL on error
199 */
200extern void *cvmx_bootmem_alloc_named(uint64_t size, uint64_t alignment,
201 char *name);
202
203
204
205/**
206 * Allocate a block of memory from the free list that was passed
207 * to the application by the bootloader, and assign it a name in the
208 * global named block table. (part of the cvmx_bootmem_descriptor_t structure)
209 * Named blocks can later be freed.
210 *
211 * @size: Size in bytes of block to allocate
212 * @address: Physical address to allocate memory at. If this
213 * memory is not available, the allocation fails.
214 * @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN
215 * bytes
216 *
217 * Returns a pointer to block of memory, NULL on error
218 */
219extern void *cvmx_bootmem_alloc_named_address(uint64_t size, uint64_t address,
220 char *name);
221
222
223
224/**
225 * Allocate a block of memory from a specific range of the free list
226 * that was passed to the application by the bootloader, and assign it
227 * a name in the global named block table. (part of the
228 * cvmx_bootmem_descriptor_t structure) Named blocks can later be
229 * freed. If request cannot be satisfied within the address range
230 * specified, NULL is returned
231 *
232 * @size: Size in bytes of block to allocate
233 * @min_addr: minimum address of range
234 * @max_addr: maximum address of range
235 * @align: Alignment of memory to be allocated. (must be a power of 2)
236 * @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
237 *
238 * Returns a pointer to block of memory, NULL on error
239 */
240extern void *cvmx_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
241 uint64_t max_addr, uint64_t align,
242 char *name);
243
186extern int cvmx_bootmem_free_named(char *name); 244extern int cvmx_bootmem_free_named(char *name);
187 245
188/** 246/**
@@ -224,6 +282,33 @@ int64_t cvmx_bootmem_phy_alloc(uint64_t req_size, uint64_t address_min,
224 uint32_t flags); 282 uint32_t flags);
225 283
226/** 284/**
285 * Allocates a named block of physical memory from the free list, at
286 * (optional) requested address and alignment.
287 *
288 * @param size size of region to allocate. All requests are rounded
289 * up to be a multiple CVMX_BOOTMEM_ALIGNMENT_SIZE
290 * bytes size
291 * @param min_addr Minimum address that block can occupy.
292 * @param max_addr Specifies the maximum address_min (inclusive) that
293 * the allocation can use.
294 * @param alignment Requested alignment of the block. If this
295 * alignment cannot be met, the allocation fails.
296 * This must be a power of 2. (Note: Alignment of
297 * CVMX_BOOTMEM_ALIGNMENT_SIZE bytes is required, and
298 * internally enforced. Requested alignments of less
299 * than CVMX_BOOTMEM_ALIGNMENT_SIZE are set to
300 * CVMX_BOOTMEM_ALIGNMENT_SIZE.)
301 * @param name name to assign to named block
302 * @param flags Flags to control options for the allocation.
303 *
304 * @return physical address of block allocated, or -1 on failure
305 */
306int64_t cvmx_bootmem_phy_named_block_alloc(uint64_t size, uint64_t min_addr,
307 uint64_t max_addr,
308 uint64_t alignment,
309 char *name, uint32_t flags);
310
311/**
227 * Finds a named memory block by name. 312 * Finds a named memory block by name.
228 * Also used for finding an unused entry in the named block table. 313 * Also used for finding an unused entry in the named block table.
229 * 314 *
diff --git a/arch/mips/include/asm/octeon/cvmx-helper-errata.h b/arch/mips/include/asm/octeon/cvmx-helper-errata.h
new file mode 100644
index 000000000000..5fc99189ff58
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-helper-errata.h
@@ -0,0 +1,33 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_HELPER_ERRATA_H__
29#define __CVMX_HELPER_ERRATA_H__
30
31extern void __cvmx_helper_errata_qlm_disable_2nd_order_cdr(int qlm);
32
33#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-helper-jtag.h b/arch/mips/include/asm/octeon/cvmx-helper-jtag.h
new file mode 100644
index 000000000000..29f016ddb895
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-helper-jtag.h
@@ -0,0 +1,43 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28/**
29 * @file
30 *
31 * Helper utilities for qlm_jtag.
32 *
33 */
34
35#ifndef __CVMX_HELPER_JTAG_H__
36#define __CVMX_HELPER_JTAG_H__
37
38extern void cvmx_helper_qlm_jtag_init(void);
39extern uint32_t cvmx_helper_qlm_jtag_shift(int qlm, int bits, uint32_t data);
40extern void cvmx_helper_qlm_jtag_shift_zeros(int qlm, int bits);
41extern void cvmx_helper_qlm_jtag_update(int qlm);
42
43#endif /* __CVMX_HELPER_JTAG_H__ */
diff --git a/arch/mips/include/asm/octeon/cvmx-npei-defs.h b/arch/mips/include/asm/octeon/cvmx-npei-defs.h
new file mode 100644
index 000000000000..4b347bb8ce80
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-npei-defs.h
@@ -0,0 +1,2560 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_NPEI_DEFS_H__
29#define __CVMX_NPEI_DEFS_H__
30
31#define CVMX_NPEI_BAR1_INDEXX(offset) \
32 (0x0000000000000000ull + (((offset) & 31) * 16))
33#define CVMX_NPEI_BIST_STATUS \
34 (0x0000000000000580ull)
35#define CVMX_NPEI_BIST_STATUS2 \
36 (0x0000000000000680ull)
37#define CVMX_NPEI_CTL_PORT0 \
38 (0x0000000000000250ull)
39#define CVMX_NPEI_CTL_PORT1 \
40 (0x0000000000000260ull)
41#define CVMX_NPEI_CTL_STATUS \
42 (0x0000000000000570ull)
43#define CVMX_NPEI_CTL_STATUS2 \
44 (0x0000000000003C00ull)
45#define CVMX_NPEI_DATA_OUT_CNT \
46 (0x00000000000005F0ull)
47#define CVMX_NPEI_DBG_DATA \
48 (0x0000000000000510ull)
49#define CVMX_NPEI_DBG_SELECT \
50 (0x0000000000000500ull)
51#define CVMX_NPEI_DMA0_INT_LEVEL \
52 (0x00000000000005C0ull)
53#define CVMX_NPEI_DMA1_INT_LEVEL \
54 (0x00000000000005D0ull)
55#define CVMX_NPEI_DMAX_COUNTS(offset) \
56 (0x0000000000000450ull + (((offset) & 7) * 16))
57#define CVMX_NPEI_DMAX_DBELL(offset) \
58 (0x00000000000003B0ull + (((offset) & 7) * 16))
59#define CVMX_NPEI_DMAX_IBUFF_SADDR(offset) \
60 (0x0000000000000400ull + (((offset) & 7) * 16))
61#define CVMX_NPEI_DMAX_NADDR(offset) \
62 (0x00000000000004A0ull + (((offset) & 7) * 16))
63#define CVMX_NPEI_DMA_CNTS \
64 (0x00000000000005E0ull)
65#define CVMX_NPEI_DMA_CONTROL \
66 (0x00000000000003A0ull)
67#define CVMX_NPEI_INT_A_ENB \
68 (0x0000000000000560ull)
69#define CVMX_NPEI_INT_A_ENB2 \
70 (0x0000000000003CE0ull)
71#define CVMX_NPEI_INT_A_SUM \
72 (0x0000000000000550ull)
73#define CVMX_NPEI_INT_ENB \
74 (0x0000000000000540ull)
75#define CVMX_NPEI_INT_ENB2 \
76 (0x0000000000003CD0ull)
77#define CVMX_NPEI_INT_INFO \
78 (0x0000000000000590ull)
79#define CVMX_NPEI_INT_SUM \
80 (0x0000000000000530ull)
81#define CVMX_NPEI_INT_SUM2 \
82 (0x0000000000003CC0ull)
83#define CVMX_NPEI_LAST_WIN_RDATA0 \
84 (0x0000000000000600ull)
85#define CVMX_NPEI_LAST_WIN_RDATA1 \
86 (0x0000000000000610ull)
87#define CVMX_NPEI_MEM_ACCESS_CTL \
88 (0x00000000000004F0ull)
89#define CVMX_NPEI_MEM_ACCESS_SUBIDX(offset) \
90 (0x0000000000000340ull + (((offset) & 31) * 16) - 16 * 12)
91#define CVMX_NPEI_MSI_ENB0 \
92 (0x0000000000003C50ull)
93#define CVMX_NPEI_MSI_ENB1 \
94 (0x0000000000003C60ull)
95#define CVMX_NPEI_MSI_ENB2 \
96 (0x0000000000003C70ull)
97#define CVMX_NPEI_MSI_ENB3 \
98 (0x0000000000003C80ull)
99#define CVMX_NPEI_MSI_RCV0 \
100 (0x0000000000003C10ull)
101#define CVMX_NPEI_MSI_RCV1 \
102 (0x0000000000003C20ull)
103#define CVMX_NPEI_MSI_RCV2 \
104 (0x0000000000003C30ull)
105#define CVMX_NPEI_MSI_RCV3 \
106 (0x0000000000003C40ull)
107#define CVMX_NPEI_MSI_RD_MAP \
108 (0x0000000000003CA0ull)
109#define CVMX_NPEI_MSI_W1C_ENB0 \
110 (0x0000000000003CF0ull)
111#define CVMX_NPEI_MSI_W1C_ENB1 \
112 (0x0000000000003D00ull)
113#define CVMX_NPEI_MSI_W1C_ENB2 \
114 (0x0000000000003D10ull)
115#define CVMX_NPEI_MSI_W1C_ENB3 \
116 (0x0000000000003D20ull)
117#define CVMX_NPEI_MSI_W1S_ENB0 \
118 (0x0000000000003D30ull)
119#define CVMX_NPEI_MSI_W1S_ENB1 \
120 (0x0000000000003D40ull)
121#define CVMX_NPEI_MSI_W1S_ENB2 \
122 (0x0000000000003D50ull)
123#define CVMX_NPEI_MSI_W1S_ENB3 \
124 (0x0000000000003D60ull)
125#define CVMX_NPEI_MSI_WR_MAP \
126 (0x0000000000003C90ull)
127#define CVMX_NPEI_PCIE_CREDIT_CNT \
128 (0x0000000000003D70ull)
129#define CVMX_NPEI_PCIE_MSI_RCV \
130 (0x0000000000003CB0ull)
131#define CVMX_NPEI_PCIE_MSI_RCV_B1 \
132 (0x0000000000000650ull)
133#define CVMX_NPEI_PCIE_MSI_RCV_B2 \
134 (0x0000000000000660ull)
135#define CVMX_NPEI_PCIE_MSI_RCV_B3 \
136 (0x0000000000000670ull)
137#define CVMX_NPEI_PKTX_CNTS(offset) \
138 (0x0000000000002400ull + (((offset) & 31) * 16))
139#define CVMX_NPEI_PKTX_INSTR_BADDR(offset) \
140 (0x0000000000002800ull + (((offset) & 31) * 16))
141#define CVMX_NPEI_PKTX_INSTR_BAOFF_DBELL(offset) \
142 (0x0000000000002C00ull + (((offset) & 31) * 16))
143#define CVMX_NPEI_PKTX_INSTR_FIFO_RSIZE(offset) \
144 (0x0000000000003000ull + (((offset) & 31) * 16))
145#define CVMX_NPEI_PKTX_INSTR_HEADER(offset) \
146 (0x0000000000003400ull + (((offset) & 31) * 16))
147#define CVMX_NPEI_PKTX_IN_BP(offset) \
148 (0x0000000000003800ull + (((offset) & 31) * 16))
149#define CVMX_NPEI_PKTX_SLIST_BADDR(offset) \
150 (0x0000000000001400ull + (((offset) & 31) * 16))
151#define CVMX_NPEI_PKTX_SLIST_BAOFF_DBELL(offset) \
152 (0x0000000000001800ull + (((offset) & 31) * 16))
153#define CVMX_NPEI_PKTX_SLIST_FIFO_RSIZE(offset) \
154 (0x0000000000001C00ull + (((offset) & 31) * 16))
155#define CVMX_NPEI_PKT_CNT_INT \
156 (0x0000000000001110ull)
157#define CVMX_NPEI_PKT_CNT_INT_ENB \
158 (0x0000000000001130ull)
159#define CVMX_NPEI_PKT_DATA_OUT_ES \
160 (0x00000000000010B0ull)
161#define CVMX_NPEI_PKT_DATA_OUT_NS \
162 (0x00000000000010A0ull)
163#define CVMX_NPEI_PKT_DATA_OUT_ROR \
164 (0x0000000000001090ull)
165#define CVMX_NPEI_PKT_DPADDR \
166 (0x0000000000001080ull)
167#define CVMX_NPEI_PKT_INPUT_CONTROL \
168 (0x0000000000001150ull)
169#define CVMX_NPEI_PKT_INSTR_ENB \
170 (0x0000000000001000ull)
171#define CVMX_NPEI_PKT_INSTR_RD_SIZE \
172 (0x0000000000001190ull)
173#define CVMX_NPEI_PKT_INSTR_SIZE \
174 (0x0000000000001020ull)
175#define CVMX_NPEI_PKT_INT_LEVELS \
176 (0x0000000000001100ull)
177#define CVMX_NPEI_PKT_IN_BP \
178 (0x00000000000006B0ull)
179#define CVMX_NPEI_PKT_IN_DONEX_CNTS(offset) \
180 (0x0000000000002000ull + (((offset) & 31) * 16))
181#define CVMX_NPEI_PKT_IN_INSTR_COUNTS \
182 (0x00000000000006A0ull)
183#define CVMX_NPEI_PKT_IN_PCIE_PORT \
184 (0x00000000000011A0ull)
185#define CVMX_NPEI_PKT_IPTR \
186 (0x0000000000001070ull)
187#define CVMX_NPEI_PKT_OUTPUT_WMARK \
188 (0x0000000000001160ull)
189#define CVMX_NPEI_PKT_OUT_BMODE \
190 (0x00000000000010D0ull)
191#define CVMX_NPEI_PKT_OUT_ENB \
192 (0x0000000000001010ull)
193#define CVMX_NPEI_PKT_PCIE_PORT \
194 (0x00000000000010E0ull)
195#define CVMX_NPEI_PKT_PORT_IN_RST \
196 (0x0000000000000690ull)
197#define CVMX_NPEI_PKT_SLIST_ES \
198 (0x0000000000001050ull)
199#define CVMX_NPEI_PKT_SLIST_ID_SIZE \
200 (0x0000000000001180ull)
201#define CVMX_NPEI_PKT_SLIST_NS \
202 (0x0000000000001040ull)
203#define CVMX_NPEI_PKT_SLIST_ROR \
204 (0x0000000000001030ull)
205#define CVMX_NPEI_PKT_TIME_INT \
206 (0x0000000000001120ull)
207#define CVMX_NPEI_PKT_TIME_INT_ENB \
208 (0x0000000000001140ull)
209#define CVMX_NPEI_RSL_INT_BLOCKS \
210 (0x0000000000000520ull)
211#define CVMX_NPEI_SCRATCH_1 \
212 (0x0000000000000270ull)
213#define CVMX_NPEI_STATE1 \
214 (0x0000000000000620ull)
215#define CVMX_NPEI_STATE2 \
216 (0x0000000000000630ull)
217#define CVMX_NPEI_STATE3 \
218 (0x0000000000000640ull)
219#define CVMX_NPEI_WINDOW_CTL \
220 (0x0000000000000380ull)
221#define CVMX_NPEI_WIN_RD_ADDR \
222 (0x0000000000000210ull)
223#define CVMX_NPEI_WIN_RD_DATA \
224 (0x0000000000000240ull)
225#define CVMX_NPEI_WIN_WR_ADDR \
226 (0x0000000000000200ull)
227#define CVMX_NPEI_WIN_WR_DATA \
228 (0x0000000000000220ull)
229#define CVMX_NPEI_WIN_WR_MASK \
230 (0x0000000000000230ull)
231
232union cvmx_npei_bar1_indexx {
233 uint32_t u32;
234 struct cvmx_npei_bar1_indexx_s {
235 uint32_t reserved_18_31:14;
236 uint32_t addr_idx:14;
237 uint32_t ca:1;
238 uint32_t end_swp:2;
239 uint32_t addr_v:1;
240 } s;
241 struct cvmx_npei_bar1_indexx_s cn52xx;
242 struct cvmx_npei_bar1_indexx_s cn52xxp1;
243 struct cvmx_npei_bar1_indexx_s cn56xx;
244 struct cvmx_npei_bar1_indexx_s cn56xxp1;
245};
246
247union cvmx_npei_bist_status {
248 uint64_t u64;
249 struct cvmx_npei_bist_status_s {
250 uint64_t pkt_rdf:1;
251 uint64_t pkt_pmem:1;
252 uint64_t pkt_p1:1;
253 uint64_t reserved_60_60:1;
254 uint64_t pcr_gim:1;
255 uint64_t pkt_pif:1;
256 uint64_t pcsr_int:1;
257 uint64_t pcsr_im:1;
258 uint64_t pcsr_cnt:1;
259 uint64_t pcsr_id:1;
260 uint64_t pcsr_sl:1;
261 uint64_t reserved_50_52:3;
262 uint64_t pkt_ind:1;
263 uint64_t pkt_slm:1;
264 uint64_t reserved_36_47:12;
265 uint64_t d0_pst:1;
266 uint64_t d1_pst:1;
267 uint64_t d2_pst:1;
268 uint64_t d3_pst:1;
269 uint64_t reserved_31_31:1;
270 uint64_t n2p0_c:1;
271 uint64_t n2p0_o:1;
272 uint64_t n2p1_c:1;
273 uint64_t n2p1_o:1;
274 uint64_t cpl_p0:1;
275 uint64_t cpl_p1:1;
276 uint64_t p2n1_po:1;
277 uint64_t p2n1_no:1;
278 uint64_t p2n1_co:1;
279 uint64_t p2n0_po:1;
280 uint64_t p2n0_no:1;
281 uint64_t p2n0_co:1;
282 uint64_t p2n0_c0:1;
283 uint64_t p2n0_c1:1;
284 uint64_t p2n0_n:1;
285 uint64_t p2n0_p0:1;
286 uint64_t p2n0_p1:1;
287 uint64_t p2n1_c0:1;
288 uint64_t p2n1_c1:1;
289 uint64_t p2n1_n:1;
290 uint64_t p2n1_p0:1;
291 uint64_t p2n1_p1:1;
292 uint64_t csm0:1;
293 uint64_t csm1:1;
294 uint64_t dif0:1;
295 uint64_t dif1:1;
296 uint64_t dif2:1;
297 uint64_t dif3:1;
298 uint64_t reserved_2_2:1;
299 uint64_t msi:1;
300 uint64_t ncb_cmd:1;
301 } s;
302 struct cvmx_npei_bist_status_cn52xx {
303 uint64_t pkt_rdf:1;
304 uint64_t pkt_pmem:1;
305 uint64_t pkt_p1:1;
306 uint64_t reserved_60_60:1;
307 uint64_t pcr_gim:1;
308 uint64_t pkt_pif:1;
309 uint64_t pcsr_int:1;
310 uint64_t pcsr_im:1;
311 uint64_t pcsr_cnt:1;
312 uint64_t pcsr_id:1;
313 uint64_t pcsr_sl:1;
314 uint64_t pkt_imem:1;
315 uint64_t pkt_pfm:1;
316 uint64_t pkt_pof:1;
317 uint64_t reserved_48_49:2;
318 uint64_t pkt_pop0:1;
319 uint64_t pkt_pop1:1;
320 uint64_t d0_mem:1;
321 uint64_t d1_mem:1;
322 uint64_t d2_mem:1;
323 uint64_t d3_mem:1;
324 uint64_t d4_mem:1;
325 uint64_t ds_mem:1;
326 uint64_t reserved_36_39:4;
327 uint64_t d0_pst:1;
328 uint64_t d1_pst:1;
329 uint64_t d2_pst:1;
330 uint64_t d3_pst:1;
331 uint64_t d4_pst:1;
332 uint64_t n2p0_c:1;
333 uint64_t n2p0_o:1;
334 uint64_t n2p1_c:1;
335 uint64_t n2p1_o:1;
336 uint64_t cpl_p0:1;
337 uint64_t cpl_p1:1;
338 uint64_t p2n1_po:1;
339 uint64_t p2n1_no:1;
340 uint64_t p2n1_co:1;
341 uint64_t p2n0_po:1;
342 uint64_t p2n0_no:1;
343 uint64_t p2n0_co:1;
344 uint64_t p2n0_c0:1;
345 uint64_t p2n0_c1:1;
346 uint64_t p2n0_n:1;
347 uint64_t p2n0_p0:1;
348 uint64_t p2n0_p1:1;
349 uint64_t p2n1_c0:1;
350 uint64_t p2n1_c1:1;
351 uint64_t p2n1_n:1;
352 uint64_t p2n1_p0:1;
353 uint64_t p2n1_p1:1;
354 uint64_t csm0:1;
355 uint64_t csm1:1;
356 uint64_t dif0:1;
357 uint64_t dif1:1;
358 uint64_t dif2:1;
359 uint64_t dif3:1;
360 uint64_t dif4:1;
361 uint64_t msi:1;
362 uint64_t ncb_cmd:1;
363 } cn52xx;
364 struct cvmx_npei_bist_status_cn52xxp1 {
365 uint64_t reserved_46_63:18;
366 uint64_t d0_mem0:1;
367 uint64_t d1_mem1:1;
368 uint64_t d2_mem2:1;
369 uint64_t d3_mem3:1;
370 uint64_t dr0_mem:1;
371 uint64_t d0_mem:1;
372 uint64_t d1_mem:1;
373 uint64_t d2_mem:1;
374 uint64_t d3_mem:1;
375 uint64_t dr1_mem:1;
376 uint64_t d0_pst:1;
377 uint64_t d1_pst:1;
378 uint64_t d2_pst:1;
379 uint64_t d3_pst:1;
380 uint64_t dr2_mem:1;
381 uint64_t n2p0_c:1;
382 uint64_t n2p0_o:1;
383 uint64_t n2p1_c:1;
384 uint64_t n2p1_o:1;
385 uint64_t cpl_p0:1;
386 uint64_t cpl_p1:1;
387 uint64_t p2n1_po:1;
388 uint64_t p2n1_no:1;
389 uint64_t p2n1_co:1;
390 uint64_t p2n0_po:1;
391 uint64_t p2n0_no:1;
392 uint64_t p2n0_co:1;
393 uint64_t p2n0_c0:1;
394 uint64_t p2n0_c1:1;
395 uint64_t p2n0_n:1;
396 uint64_t p2n0_p0:1;
397 uint64_t p2n0_p1:1;
398 uint64_t p2n1_c0:1;
399 uint64_t p2n1_c1:1;
400 uint64_t p2n1_n:1;
401 uint64_t p2n1_p0:1;
402 uint64_t p2n1_p1:1;
403 uint64_t csm0:1;
404 uint64_t csm1:1;
405 uint64_t dif0:1;
406 uint64_t dif1:1;
407 uint64_t dif2:1;
408 uint64_t dif3:1;
409 uint64_t dr3_mem:1;
410 uint64_t msi:1;
411 uint64_t ncb_cmd:1;
412 } cn52xxp1;
413 struct cvmx_npei_bist_status_cn56xx {
414 uint64_t pkt_rdf:1;
415 uint64_t reserved_60_62:3;
416 uint64_t pcr_gim:1;
417 uint64_t pkt_pif:1;
418 uint64_t pcsr_int:1;
419 uint64_t pcsr_im:1;
420 uint64_t pcsr_cnt:1;
421 uint64_t pcsr_id:1;
422 uint64_t pcsr_sl:1;
423 uint64_t pkt_imem:1;
424 uint64_t pkt_pfm:1;
425 uint64_t pkt_pof:1;
426 uint64_t reserved_48_49:2;
427 uint64_t pkt_pop0:1;
428 uint64_t pkt_pop1:1;
429 uint64_t d0_mem:1;
430 uint64_t d1_mem:1;
431 uint64_t d2_mem:1;
432 uint64_t d3_mem:1;
433 uint64_t d4_mem:1;
434 uint64_t ds_mem:1;
435 uint64_t reserved_36_39:4;
436 uint64_t d0_pst:1;
437 uint64_t d1_pst:1;
438 uint64_t d2_pst:1;
439 uint64_t d3_pst:1;
440 uint64_t d4_pst:1;
441 uint64_t n2p0_c:1;
442 uint64_t n2p0_o:1;
443 uint64_t n2p1_c:1;
444 uint64_t n2p1_o:1;
445 uint64_t cpl_p0:1;
446 uint64_t cpl_p1:1;
447 uint64_t p2n1_po:1;
448 uint64_t p2n1_no:1;
449 uint64_t p2n1_co:1;
450 uint64_t p2n0_po:1;
451 uint64_t p2n0_no:1;
452 uint64_t p2n0_co:1;
453 uint64_t p2n0_c0:1;
454 uint64_t p2n0_c1:1;
455 uint64_t p2n0_n:1;
456 uint64_t p2n0_p0:1;
457 uint64_t p2n0_p1:1;
458 uint64_t p2n1_c0:1;
459 uint64_t p2n1_c1:1;
460 uint64_t p2n1_n:1;
461 uint64_t p2n1_p0:1;
462 uint64_t p2n1_p1:1;
463 uint64_t csm0:1;
464 uint64_t csm1:1;
465 uint64_t dif0:1;
466 uint64_t dif1:1;
467 uint64_t dif2:1;
468 uint64_t dif3:1;
469 uint64_t dif4:1;
470 uint64_t msi:1;
471 uint64_t ncb_cmd:1;
472 } cn56xx;
473 struct cvmx_npei_bist_status_cn56xxp1 {
474 uint64_t reserved_58_63:6;
475 uint64_t pcsr_int:1;
476 uint64_t pcsr_im:1;
477 uint64_t pcsr_cnt:1;
478 uint64_t pcsr_id:1;
479 uint64_t pcsr_sl:1;
480 uint64_t pkt_pout:1;
481 uint64_t pkt_imem:1;
482 uint64_t pkt_cntm:1;
483 uint64_t pkt_ind:1;
484 uint64_t pkt_slm:1;
485 uint64_t pkt_odf:1;
486 uint64_t pkt_oif:1;
487 uint64_t pkt_out:1;
488 uint64_t pkt_i0:1;
489 uint64_t pkt_i1:1;
490 uint64_t pkt_s0:1;
491 uint64_t pkt_s1:1;
492 uint64_t d0_mem:1;
493 uint64_t d1_mem:1;
494 uint64_t d2_mem:1;
495 uint64_t d3_mem:1;
496 uint64_t d4_mem:1;
497 uint64_t d0_pst:1;
498 uint64_t d1_pst:1;
499 uint64_t d2_pst:1;
500 uint64_t d3_pst:1;
501 uint64_t d4_pst:1;
502 uint64_t n2p0_c:1;
503 uint64_t n2p0_o:1;
504 uint64_t n2p1_c:1;
505 uint64_t n2p1_o:1;
506 uint64_t cpl_p0:1;
507 uint64_t cpl_p1:1;
508 uint64_t p2n1_po:1;
509 uint64_t p2n1_no:1;
510 uint64_t p2n1_co:1;
511 uint64_t p2n0_po:1;
512 uint64_t p2n0_no:1;
513 uint64_t p2n0_co:1;
514 uint64_t p2n0_c0:1;
515 uint64_t p2n0_c1:1;
516 uint64_t p2n0_n:1;
517 uint64_t p2n0_p0:1;
518 uint64_t p2n0_p1:1;
519 uint64_t p2n1_c0:1;
520 uint64_t p2n1_c1:1;
521 uint64_t p2n1_n:1;
522 uint64_t p2n1_p0:1;
523 uint64_t p2n1_p1:1;
524 uint64_t csm0:1;
525 uint64_t csm1:1;
526 uint64_t dif0:1;
527 uint64_t dif1:1;
528 uint64_t dif2:1;
529 uint64_t dif3:1;
530 uint64_t dif4:1;
531 uint64_t msi:1;
532 uint64_t ncb_cmd:1;
533 } cn56xxp1;
534};
535
536union cvmx_npei_bist_status2 {
537 uint64_t u64;
538 struct cvmx_npei_bist_status2_s {
539 uint64_t reserved_5_63:59;
540 uint64_t psc_p0:1;
541 uint64_t psc_p1:1;
542 uint64_t pkt_gd:1;
543 uint64_t pkt_gl:1;
544 uint64_t pkt_blk:1;
545 } s;
546 struct cvmx_npei_bist_status2_s cn52xx;
547 struct cvmx_npei_bist_status2_s cn56xx;
548};
549
550union cvmx_npei_ctl_port0 {
551 uint64_t u64;
552 struct cvmx_npei_ctl_port0_s {
553 uint64_t reserved_21_63:43;
554 uint64_t waitl_com:1;
555 uint64_t intd:1;
556 uint64_t intc:1;
557 uint64_t intb:1;
558 uint64_t inta:1;
559 uint64_t intd_map:2;
560 uint64_t intc_map:2;
561 uint64_t intb_map:2;
562 uint64_t inta_map:2;
563 uint64_t ctlp_ro:1;
564 uint64_t reserved_6_6:1;
565 uint64_t ptlp_ro:1;
566 uint64_t bar2_enb:1;
567 uint64_t bar2_esx:2;
568 uint64_t bar2_cax:1;
569 uint64_t wait_com:1;
570 } s;
571 struct cvmx_npei_ctl_port0_s cn52xx;
572 struct cvmx_npei_ctl_port0_s cn52xxp1;
573 struct cvmx_npei_ctl_port0_s cn56xx;
574 struct cvmx_npei_ctl_port0_s cn56xxp1;
575};
576
577union cvmx_npei_ctl_port1 {
578 uint64_t u64;
579 struct cvmx_npei_ctl_port1_s {
580 uint64_t reserved_21_63:43;
581 uint64_t waitl_com:1;
582 uint64_t intd:1;
583 uint64_t intc:1;
584 uint64_t intb:1;
585 uint64_t inta:1;
586 uint64_t intd_map:2;
587 uint64_t intc_map:2;
588 uint64_t intb_map:2;
589 uint64_t inta_map:2;
590 uint64_t ctlp_ro:1;
591 uint64_t reserved_6_6:1;
592 uint64_t ptlp_ro:1;
593 uint64_t bar2_enb:1;
594 uint64_t bar2_esx:2;
595 uint64_t bar2_cax:1;
596 uint64_t wait_com:1;
597 } s;
598 struct cvmx_npei_ctl_port1_s cn52xx;
599 struct cvmx_npei_ctl_port1_s cn52xxp1;
600 struct cvmx_npei_ctl_port1_s cn56xx;
601 struct cvmx_npei_ctl_port1_s cn56xxp1;
602};
603
604union cvmx_npei_ctl_status {
605 uint64_t u64;
606 struct cvmx_npei_ctl_status_s {
607 uint64_t reserved_44_63:20;
608 uint64_t p1_ntags:6;
609 uint64_t p0_ntags:6;
610 uint64_t cfg_rtry:16;
611 uint64_t ring_en:1;
612 uint64_t lnk_rst:1;
613 uint64_t arb:1;
614 uint64_t pkt_bp:4;
615 uint64_t host_mode:1;
616 uint64_t chip_rev:8;
617 } s;
618 struct cvmx_npei_ctl_status_s cn52xx;
619 struct cvmx_npei_ctl_status_cn52xxp1 {
620 uint64_t reserved_44_63:20;
621 uint64_t p1_ntags:6;
622 uint64_t p0_ntags:6;
623 uint64_t cfg_rtry:16;
624 uint64_t reserved_15_15:1;
625 uint64_t lnk_rst:1;
626 uint64_t arb:1;
627 uint64_t reserved_9_12:4;
628 uint64_t host_mode:1;
629 uint64_t chip_rev:8;
630 } cn52xxp1;
631 struct cvmx_npei_ctl_status_s cn56xx;
632 struct cvmx_npei_ctl_status_cn56xxp1 {
633 uint64_t reserved_16_63:48;
634 uint64_t ring_en:1;
635 uint64_t lnk_rst:1;
636 uint64_t arb:1;
637 uint64_t pkt_bp:4;
638 uint64_t host_mode:1;
639 uint64_t chip_rev:8;
640 } cn56xxp1;
641};
642
643union cvmx_npei_ctl_status2 {
644 uint64_t u64;
645 struct cvmx_npei_ctl_status2_s {
646 uint64_t reserved_16_63:48;
647 uint64_t mps:1;
648 uint64_t mrrs:3;
649 uint64_t c1_w_flt:1;
650 uint64_t c0_w_flt:1;
651 uint64_t c1_b1_s:3;
652 uint64_t c0_b1_s:3;
653 uint64_t c1_wi_d:1;
654 uint64_t c1_b0_d:1;
655 uint64_t c0_wi_d:1;
656 uint64_t c0_b0_d:1;
657 } s;
658 struct cvmx_npei_ctl_status2_s cn52xx;
659 struct cvmx_npei_ctl_status2_s cn52xxp1;
660 struct cvmx_npei_ctl_status2_s cn56xx;
661 struct cvmx_npei_ctl_status2_s cn56xxp1;
662};
663
664union cvmx_npei_data_out_cnt {
665 uint64_t u64;
666 struct cvmx_npei_data_out_cnt_s {
667 uint64_t reserved_44_63:20;
668 uint64_t p1_ucnt:16;
669 uint64_t p1_fcnt:6;
670 uint64_t p0_ucnt:16;
671 uint64_t p0_fcnt:6;
672 } s;
673 struct cvmx_npei_data_out_cnt_s cn52xx;
674 struct cvmx_npei_data_out_cnt_s cn52xxp1;
675 struct cvmx_npei_data_out_cnt_s cn56xx;
676 struct cvmx_npei_data_out_cnt_s cn56xxp1;
677};
678
679union cvmx_npei_dbg_data {
680 uint64_t u64;
681 struct cvmx_npei_dbg_data_s {
682 uint64_t reserved_28_63:36;
683 uint64_t qlm0_rev_lanes:1;
684 uint64_t reserved_25_26:2;
685 uint64_t qlm1_spd:2;
686 uint64_t c_mul:5;
687 uint64_t dsel_ext:1;
688 uint64_t data:17;
689 } s;
690 struct cvmx_npei_dbg_data_cn52xx {
691 uint64_t reserved_29_63:35;
692 uint64_t qlm0_link_width:1;
693 uint64_t qlm0_rev_lanes:1;
694 uint64_t qlm1_mode:2;
695 uint64_t qlm1_spd:2;
696 uint64_t c_mul:5;
697 uint64_t dsel_ext:1;
698 uint64_t data:17;
699 } cn52xx;
700 struct cvmx_npei_dbg_data_cn52xx cn52xxp1;
701 struct cvmx_npei_dbg_data_cn56xx {
702 uint64_t reserved_29_63:35;
703 uint64_t qlm2_rev_lanes:1;
704 uint64_t qlm0_rev_lanes:1;
705 uint64_t qlm3_spd:2;
706 uint64_t qlm1_spd:2;
707 uint64_t c_mul:5;
708 uint64_t dsel_ext:1;
709 uint64_t data:17;
710 } cn56xx;
711 struct cvmx_npei_dbg_data_cn56xx cn56xxp1;
712};
713
714union cvmx_npei_dbg_select {
715 uint64_t u64;
716 struct cvmx_npei_dbg_select_s {
717 uint64_t reserved_16_63:48;
718 uint64_t dbg_sel:16;
719 } s;
720 struct cvmx_npei_dbg_select_s cn52xx;
721 struct cvmx_npei_dbg_select_s cn52xxp1;
722 struct cvmx_npei_dbg_select_s cn56xx;
723 struct cvmx_npei_dbg_select_s cn56xxp1;
724};
725
726union cvmx_npei_dmax_counts {
727 uint64_t u64;
728 struct cvmx_npei_dmax_counts_s {
729 uint64_t reserved_39_63:25;
730 uint64_t fcnt:7;
731 uint64_t dbell:32;
732 } s;
733 struct cvmx_npei_dmax_counts_s cn52xx;
734 struct cvmx_npei_dmax_counts_s cn52xxp1;
735 struct cvmx_npei_dmax_counts_s cn56xx;
736 struct cvmx_npei_dmax_counts_s cn56xxp1;
737};
738
739union cvmx_npei_dmax_dbell {
740 uint32_t u32;
741 struct cvmx_npei_dmax_dbell_s {
742 uint32_t reserved_16_31:16;
743 uint32_t dbell:16;
744 } s;
745 struct cvmx_npei_dmax_dbell_s cn52xx;
746 struct cvmx_npei_dmax_dbell_s cn52xxp1;
747 struct cvmx_npei_dmax_dbell_s cn56xx;
748 struct cvmx_npei_dmax_dbell_s cn56xxp1;
749};
750
751union cvmx_npei_dmax_ibuff_saddr {
752 uint64_t u64;
753 struct cvmx_npei_dmax_ibuff_saddr_s {
754 uint64_t reserved_37_63:27;
755 uint64_t idle:1;
756 uint64_t saddr:29;
757 uint64_t reserved_0_6:7;
758 } s;
759 struct cvmx_npei_dmax_ibuff_saddr_cn52xx {
760 uint64_t reserved_36_63:28;
761 uint64_t saddr:29;
762 uint64_t reserved_0_6:7;
763 } cn52xx;
764 struct cvmx_npei_dmax_ibuff_saddr_cn52xx cn52xxp1;
765 struct cvmx_npei_dmax_ibuff_saddr_s cn56xx;
766 struct cvmx_npei_dmax_ibuff_saddr_cn52xx cn56xxp1;
767};
768
769union cvmx_npei_dmax_naddr {
770 uint64_t u64;
771 struct cvmx_npei_dmax_naddr_s {
772 uint64_t reserved_36_63:28;
773 uint64_t addr:36;
774 } s;
775 struct cvmx_npei_dmax_naddr_s cn52xx;
776 struct cvmx_npei_dmax_naddr_s cn52xxp1;
777 struct cvmx_npei_dmax_naddr_s cn56xx;
778 struct cvmx_npei_dmax_naddr_s cn56xxp1;
779};
780
781union cvmx_npei_dma0_int_level {
782 uint64_t u64;
783 struct cvmx_npei_dma0_int_level_s {
784 uint64_t time:32;
785 uint64_t cnt:32;
786 } s;
787 struct cvmx_npei_dma0_int_level_s cn52xx;
788 struct cvmx_npei_dma0_int_level_s cn52xxp1;
789 struct cvmx_npei_dma0_int_level_s cn56xx;
790 struct cvmx_npei_dma0_int_level_s cn56xxp1;
791};
792
793union cvmx_npei_dma1_int_level {
794 uint64_t u64;
795 struct cvmx_npei_dma1_int_level_s {
796 uint64_t time:32;
797 uint64_t cnt:32;
798 } s;
799 struct cvmx_npei_dma1_int_level_s cn52xx;
800 struct cvmx_npei_dma1_int_level_s cn52xxp1;
801 struct cvmx_npei_dma1_int_level_s cn56xx;
802 struct cvmx_npei_dma1_int_level_s cn56xxp1;
803};
804
805union cvmx_npei_dma_cnts {
806 uint64_t u64;
807 struct cvmx_npei_dma_cnts_s {
808 uint64_t dma1:32;
809 uint64_t dma0:32;
810 } s;
811 struct cvmx_npei_dma_cnts_s cn52xx;
812 struct cvmx_npei_dma_cnts_s cn52xxp1;
813 struct cvmx_npei_dma_cnts_s cn56xx;
814 struct cvmx_npei_dma_cnts_s cn56xxp1;
815};
816
817union cvmx_npei_dma_control {
818 uint64_t u64;
819 struct cvmx_npei_dma_control_s {
820 uint64_t reserved_39_63:25;
821 uint64_t dma4_enb:1;
822 uint64_t dma3_enb:1;
823 uint64_t dma2_enb:1;
824 uint64_t dma1_enb:1;
825 uint64_t dma0_enb:1;
826 uint64_t b0_lend:1;
827 uint64_t dwb_denb:1;
828 uint64_t dwb_ichk:9;
829 uint64_t fpa_que:3;
830 uint64_t o_add1:1;
831 uint64_t o_ro:1;
832 uint64_t o_ns:1;
833 uint64_t o_es:2;
834 uint64_t o_mode:1;
835 uint64_t csize:14;
836 } s;
837 struct cvmx_npei_dma_control_s cn52xx;
838 struct cvmx_npei_dma_control_cn52xxp1 {
839 uint64_t reserved_38_63:26;
840 uint64_t dma3_enb:1;
841 uint64_t dma2_enb:1;
842 uint64_t dma1_enb:1;
843 uint64_t dma0_enb:1;
844 uint64_t b0_lend:1;
845 uint64_t dwb_denb:1;
846 uint64_t dwb_ichk:9;
847 uint64_t fpa_que:3;
848 uint64_t o_add1:1;
849 uint64_t o_ro:1;
850 uint64_t o_ns:1;
851 uint64_t o_es:2;
852 uint64_t o_mode:1;
853 uint64_t csize:14;
854 } cn52xxp1;
855 struct cvmx_npei_dma_control_s cn56xx;
856 struct cvmx_npei_dma_control_s cn56xxp1;
857};
858
859union cvmx_npei_int_a_enb {
860 uint64_t u64;
861 struct cvmx_npei_int_a_enb_s {
862 uint64_t reserved_10_63:54;
863 uint64_t pout_err:1;
864 uint64_t pin_bp:1;
865 uint64_t p1_rdlk:1;
866 uint64_t p0_rdlk:1;
867 uint64_t pgl_err:1;
868 uint64_t pdi_err:1;
869 uint64_t pop_err:1;
870 uint64_t pins_err:1;
871 uint64_t dma1_cpl:1;
872 uint64_t dma0_cpl:1;
873 } s;
874 struct cvmx_npei_int_a_enb_cn52xx {
875 uint64_t reserved_8_63:56;
876 uint64_t p1_rdlk:1;
877 uint64_t p0_rdlk:1;
878 uint64_t pgl_err:1;
879 uint64_t pdi_err:1;
880 uint64_t pop_err:1;
881 uint64_t pins_err:1;
882 uint64_t dma1_cpl:1;
883 uint64_t dma0_cpl:1;
884 } cn52xx;
885 struct cvmx_npei_int_a_enb_cn52xxp1 {
886 uint64_t reserved_2_63:62;
887 uint64_t dma1_cpl:1;
888 uint64_t dma0_cpl:1;
889 } cn52xxp1;
890 struct cvmx_npei_int_a_enb_s cn56xx;
891};
892
893union cvmx_npei_int_a_enb2 {
894 uint64_t u64;
895 struct cvmx_npei_int_a_enb2_s {
896 uint64_t reserved_10_63:54;
897 uint64_t pout_err:1;
898 uint64_t pin_bp:1;
899 uint64_t p1_rdlk:1;
900 uint64_t p0_rdlk:1;
901 uint64_t pgl_err:1;
902 uint64_t pdi_err:1;
903 uint64_t pop_err:1;
904 uint64_t pins_err:1;
905 uint64_t dma1_cpl:1;
906 uint64_t dma0_cpl:1;
907 } s;
908 struct cvmx_npei_int_a_enb2_cn52xx {
909 uint64_t reserved_8_63:56;
910 uint64_t p1_rdlk:1;
911 uint64_t p0_rdlk:1;
912 uint64_t pgl_err:1;
913 uint64_t pdi_err:1;
914 uint64_t pop_err:1;
915 uint64_t pins_err:1;
916 uint64_t reserved_0_1:2;
917 } cn52xx;
918 struct cvmx_npei_int_a_enb2_cn52xxp1 {
919 uint64_t reserved_2_63:62;
920 uint64_t dma1_cpl:1;
921 uint64_t dma0_cpl:1;
922 } cn52xxp1;
923 struct cvmx_npei_int_a_enb2_s cn56xx;
924};
925
926union cvmx_npei_int_a_sum {
927 uint64_t u64;
928 struct cvmx_npei_int_a_sum_s {
929 uint64_t reserved_10_63:54;
930 uint64_t pout_err:1;
931 uint64_t pin_bp:1;
932 uint64_t p1_rdlk:1;
933 uint64_t p0_rdlk:1;
934 uint64_t pgl_err:1;
935 uint64_t pdi_err:1;
936 uint64_t pop_err:1;
937 uint64_t pins_err:1;
938 uint64_t dma1_cpl:1;
939 uint64_t dma0_cpl:1;
940 } s;
941 struct cvmx_npei_int_a_sum_cn52xx {
942 uint64_t reserved_8_63:56;
943 uint64_t p1_rdlk:1;
944 uint64_t p0_rdlk:1;
945 uint64_t pgl_err:1;
946 uint64_t pdi_err:1;
947 uint64_t pop_err:1;
948 uint64_t pins_err:1;
949 uint64_t dma1_cpl:1;
950 uint64_t dma0_cpl:1;
951 } cn52xx;
952 struct cvmx_npei_int_a_sum_cn52xxp1 {
953 uint64_t reserved_2_63:62;
954 uint64_t dma1_cpl:1;
955 uint64_t dma0_cpl:1;
956 } cn52xxp1;
957 struct cvmx_npei_int_a_sum_s cn56xx;
958};
959
960union cvmx_npei_int_enb {
961 uint64_t u64;
962 struct cvmx_npei_int_enb_s {
963 uint64_t mio_inta:1;
964 uint64_t reserved_62_62:1;
965 uint64_t int_a:1;
966 uint64_t c1_ldwn:1;
967 uint64_t c0_ldwn:1;
968 uint64_t c1_exc:1;
969 uint64_t c0_exc:1;
970 uint64_t c1_up_wf:1;
971 uint64_t c0_up_wf:1;
972 uint64_t c1_un_wf:1;
973 uint64_t c0_un_wf:1;
974 uint64_t c1_un_bx:1;
975 uint64_t c1_un_wi:1;
976 uint64_t c1_un_b2:1;
977 uint64_t c1_un_b1:1;
978 uint64_t c1_un_b0:1;
979 uint64_t c1_up_bx:1;
980 uint64_t c1_up_wi:1;
981 uint64_t c1_up_b2:1;
982 uint64_t c1_up_b1:1;
983 uint64_t c1_up_b0:1;
984 uint64_t c0_un_bx:1;
985 uint64_t c0_un_wi:1;
986 uint64_t c0_un_b2:1;
987 uint64_t c0_un_b1:1;
988 uint64_t c0_un_b0:1;
989 uint64_t c0_up_bx:1;
990 uint64_t c0_up_wi:1;
991 uint64_t c0_up_b2:1;
992 uint64_t c0_up_b1:1;
993 uint64_t c0_up_b0:1;
994 uint64_t c1_hpint:1;
995 uint64_t c1_pmei:1;
996 uint64_t c1_wake:1;
997 uint64_t crs1_dr:1;
998 uint64_t c1_se:1;
999 uint64_t crs1_er:1;
1000 uint64_t c1_aeri:1;
1001 uint64_t c0_hpint:1;
1002 uint64_t c0_pmei:1;
1003 uint64_t c0_wake:1;
1004 uint64_t crs0_dr:1;
1005 uint64_t c0_se:1;
1006 uint64_t crs0_er:1;
1007 uint64_t c0_aeri:1;
1008 uint64_t ptime:1;
1009 uint64_t pcnt:1;
1010 uint64_t pidbof:1;
1011 uint64_t psldbof:1;
1012 uint64_t dtime1:1;
1013 uint64_t dtime0:1;
1014 uint64_t dcnt1:1;
1015 uint64_t dcnt0:1;
1016 uint64_t dma1fi:1;
1017 uint64_t dma0fi:1;
1018 uint64_t dma4dbo:1;
1019 uint64_t dma3dbo:1;
1020 uint64_t dma2dbo:1;
1021 uint64_t dma1dbo:1;
1022 uint64_t dma0dbo:1;
1023 uint64_t iob2big:1;
1024 uint64_t bar0_to:1;
1025 uint64_t rml_wto:1;
1026 uint64_t rml_rto:1;
1027 } s;
1028 struct cvmx_npei_int_enb_s cn52xx;
1029 struct cvmx_npei_int_enb_cn52xxp1 {
1030 uint64_t mio_inta:1;
1031 uint64_t reserved_62_62:1;
1032 uint64_t int_a:1;
1033 uint64_t c1_ldwn:1;
1034 uint64_t c0_ldwn:1;
1035 uint64_t c1_exc:1;
1036 uint64_t c0_exc:1;
1037 uint64_t c1_up_wf:1;
1038 uint64_t c0_up_wf:1;
1039 uint64_t c1_un_wf:1;
1040 uint64_t c0_un_wf:1;
1041 uint64_t c1_un_bx:1;
1042 uint64_t c1_un_wi:1;
1043 uint64_t c1_un_b2:1;
1044 uint64_t c1_un_b1:1;
1045 uint64_t c1_un_b0:1;
1046 uint64_t c1_up_bx:1;
1047 uint64_t c1_up_wi:1;
1048 uint64_t c1_up_b2:1;
1049 uint64_t c1_up_b1:1;
1050 uint64_t c1_up_b0:1;
1051 uint64_t c0_un_bx:1;
1052 uint64_t c0_un_wi:1;
1053 uint64_t c0_un_b2:1;
1054 uint64_t c0_un_b1:1;
1055 uint64_t c0_un_b0:1;
1056 uint64_t c0_up_bx:1;
1057 uint64_t c0_up_wi:1;
1058 uint64_t c0_up_b2:1;
1059 uint64_t c0_up_b1:1;
1060 uint64_t c0_up_b0:1;
1061 uint64_t c1_hpint:1;
1062 uint64_t c1_pmei:1;
1063 uint64_t c1_wake:1;
1064 uint64_t crs1_dr:1;
1065 uint64_t c1_se:1;
1066 uint64_t crs1_er:1;
1067 uint64_t c1_aeri:1;
1068 uint64_t c0_hpint:1;
1069 uint64_t c0_pmei:1;
1070 uint64_t c0_wake:1;
1071 uint64_t crs0_dr:1;
1072 uint64_t c0_se:1;
1073 uint64_t crs0_er:1;
1074 uint64_t c0_aeri:1;
1075 uint64_t ptime:1;
1076 uint64_t pcnt:1;
1077 uint64_t pidbof:1;
1078 uint64_t psldbof:1;
1079 uint64_t dtime1:1;
1080 uint64_t dtime0:1;
1081 uint64_t dcnt1:1;
1082 uint64_t dcnt0:1;
1083 uint64_t dma1fi:1;
1084 uint64_t dma0fi:1;
1085 uint64_t reserved_8_8:1;
1086 uint64_t dma3dbo:1;
1087 uint64_t dma2dbo:1;
1088 uint64_t dma1dbo:1;
1089 uint64_t dma0dbo:1;
1090 uint64_t iob2big:1;
1091 uint64_t bar0_to:1;
1092 uint64_t rml_wto:1;
1093 uint64_t rml_rto:1;
1094 } cn52xxp1;
1095 struct cvmx_npei_int_enb_s cn56xx;
1096 struct cvmx_npei_int_enb_cn56xxp1 {
1097 uint64_t mio_inta:1;
1098 uint64_t reserved_61_62:2;
1099 uint64_t c1_ldwn:1;
1100 uint64_t c0_ldwn:1;
1101 uint64_t c1_exc:1;
1102 uint64_t c0_exc:1;
1103 uint64_t c1_up_wf:1;
1104 uint64_t c0_up_wf:1;
1105 uint64_t c1_un_wf:1;
1106 uint64_t c0_un_wf:1;
1107 uint64_t c1_un_bx:1;
1108 uint64_t c1_un_wi:1;
1109 uint64_t c1_un_b2:1;
1110 uint64_t c1_un_b1:1;
1111 uint64_t c1_un_b0:1;
1112 uint64_t c1_up_bx:1;
1113 uint64_t c1_up_wi:1;
1114 uint64_t c1_up_b2:1;
1115 uint64_t c1_up_b1:1;
1116 uint64_t c1_up_b0:1;
1117 uint64_t c0_un_bx:1;
1118 uint64_t c0_un_wi:1;
1119 uint64_t c0_un_b2:1;
1120 uint64_t c0_un_b1:1;
1121 uint64_t c0_un_b0:1;
1122 uint64_t c0_up_bx:1;
1123 uint64_t c0_up_wi:1;
1124 uint64_t c0_up_b2:1;
1125 uint64_t c0_up_b1:1;
1126 uint64_t c0_up_b0:1;
1127 uint64_t c1_hpint:1;
1128 uint64_t c1_pmei:1;
1129 uint64_t c1_wake:1;
1130 uint64_t reserved_29_29:1;
1131 uint64_t c1_se:1;
1132 uint64_t reserved_27_27:1;
1133 uint64_t c1_aeri:1;
1134 uint64_t c0_hpint:1;
1135 uint64_t c0_pmei:1;
1136 uint64_t c0_wake:1;
1137 uint64_t reserved_22_22:1;
1138 uint64_t c0_se:1;
1139 uint64_t reserved_20_20:1;
1140 uint64_t c0_aeri:1;
1141 uint64_t ptime:1;
1142 uint64_t pcnt:1;
1143 uint64_t pidbof:1;
1144 uint64_t psldbof:1;
1145 uint64_t dtime1:1;
1146 uint64_t dtime0:1;
1147 uint64_t dcnt1:1;
1148 uint64_t dcnt0:1;
1149 uint64_t dma1fi:1;
1150 uint64_t dma0fi:1;
1151 uint64_t dma4dbo:1;
1152 uint64_t dma3dbo:1;
1153 uint64_t dma2dbo:1;
1154 uint64_t dma1dbo:1;
1155 uint64_t dma0dbo:1;
1156 uint64_t iob2big:1;
1157 uint64_t bar0_to:1;
1158 uint64_t rml_wto:1;
1159 uint64_t rml_rto:1;
1160 } cn56xxp1;
1161};
1162
1163union cvmx_npei_int_enb2 {
1164 uint64_t u64;
1165 struct cvmx_npei_int_enb2_s {
1166 uint64_t reserved_62_63:2;
1167 uint64_t int_a:1;
1168 uint64_t c1_ldwn:1;
1169 uint64_t c0_ldwn:1;
1170 uint64_t c1_exc:1;
1171 uint64_t c0_exc:1;
1172 uint64_t c1_up_wf:1;
1173 uint64_t c0_up_wf:1;
1174 uint64_t c1_un_wf:1;
1175 uint64_t c0_un_wf:1;
1176 uint64_t c1_un_bx:1;
1177 uint64_t c1_un_wi:1;
1178 uint64_t c1_un_b2:1;
1179 uint64_t c1_un_b1:1;
1180 uint64_t c1_un_b0:1;
1181 uint64_t c1_up_bx:1;
1182 uint64_t c1_up_wi:1;
1183 uint64_t c1_up_b2:1;
1184 uint64_t c1_up_b1:1;
1185 uint64_t c1_up_b0:1;
1186 uint64_t c0_un_bx:1;
1187 uint64_t c0_un_wi:1;
1188 uint64_t c0_un_b2:1;
1189 uint64_t c0_un_b1:1;
1190 uint64_t c0_un_b0:1;
1191 uint64_t c0_up_bx:1;
1192 uint64_t c0_up_wi:1;
1193 uint64_t c0_up_b2:1;
1194 uint64_t c0_up_b1:1;
1195 uint64_t c0_up_b0:1;
1196 uint64_t c1_hpint:1;
1197 uint64_t c1_pmei:1;
1198 uint64_t c1_wake:1;
1199 uint64_t crs1_dr:1;
1200 uint64_t c1_se:1;
1201 uint64_t crs1_er:1;
1202 uint64_t c1_aeri:1;
1203 uint64_t c0_hpint:1;
1204 uint64_t c0_pmei:1;
1205 uint64_t c0_wake:1;
1206 uint64_t crs0_dr:1;
1207 uint64_t c0_se:1;
1208 uint64_t crs0_er:1;
1209 uint64_t c0_aeri:1;
1210 uint64_t ptime:1;
1211 uint64_t pcnt:1;
1212 uint64_t pidbof:1;
1213 uint64_t psldbof:1;
1214 uint64_t dtime1:1;
1215 uint64_t dtime0:1;
1216 uint64_t dcnt1:1;
1217 uint64_t dcnt0:1;
1218 uint64_t dma1fi:1;
1219 uint64_t dma0fi:1;
1220 uint64_t dma4dbo:1;
1221 uint64_t dma3dbo:1;
1222 uint64_t dma2dbo:1;
1223 uint64_t dma1dbo:1;
1224 uint64_t dma0dbo:1;
1225 uint64_t iob2big:1;
1226 uint64_t bar0_to:1;
1227 uint64_t rml_wto:1;
1228 uint64_t rml_rto:1;
1229 } s;
1230 struct cvmx_npei_int_enb2_s cn52xx;
1231 struct cvmx_npei_int_enb2_cn52xxp1 {
1232 uint64_t reserved_62_63:2;
1233 uint64_t int_a:1;
1234 uint64_t c1_ldwn:1;
1235 uint64_t c0_ldwn:1;
1236 uint64_t c1_exc:1;
1237 uint64_t c0_exc:1;
1238 uint64_t c1_up_wf:1;
1239 uint64_t c0_up_wf:1;
1240 uint64_t c1_un_wf:1;
1241 uint64_t c0_un_wf:1;
1242 uint64_t c1_un_bx:1;
1243 uint64_t c1_un_wi:1;
1244 uint64_t c1_un_b2:1;
1245 uint64_t c1_un_b1:1;
1246 uint64_t c1_un_b0:1;
1247 uint64_t c1_up_bx:1;
1248 uint64_t c1_up_wi:1;
1249 uint64_t c1_up_b2:1;
1250 uint64_t c1_up_b1:1;
1251 uint64_t c1_up_b0:1;
1252 uint64_t c0_un_bx:1;
1253 uint64_t c0_un_wi:1;
1254 uint64_t c0_un_b2:1;
1255 uint64_t c0_un_b1:1;
1256 uint64_t c0_un_b0:1;
1257 uint64_t c0_up_bx:1;
1258 uint64_t c0_up_wi:1;
1259 uint64_t c0_up_b2:1;
1260 uint64_t c0_up_b1:1;
1261 uint64_t c0_up_b0:1;
1262 uint64_t c1_hpint:1;
1263 uint64_t c1_pmei:1;
1264 uint64_t c1_wake:1;
1265 uint64_t crs1_dr:1;
1266 uint64_t c1_se:1;
1267 uint64_t crs1_er:1;
1268 uint64_t c1_aeri:1;
1269 uint64_t c0_hpint:1;
1270 uint64_t c0_pmei:1;
1271 uint64_t c0_wake:1;
1272 uint64_t crs0_dr:1;
1273 uint64_t c0_se:1;
1274 uint64_t crs0_er:1;
1275 uint64_t c0_aeri:1;
1276 uint64_t ptime:1;
1277 uint64_t pcnt:1;
1278 uint64_t pidbof:1;
1279 uint64_t psldbof:1;
1280 uint64_t dtime1:1;
1281 uint64_t dtime0:1;
1282 uint64_t dcnt1:1;
1283 uint64_t dcnt0:1;
1284 uint64_t dma1fi:1;
1285 uint64_t dma0fi:1;
1286 uint64_t reserved_8_8:1;
1287 uint64_t dma3dbo:1;
1288 uint64_t dma2dbo:1;
1289 uint64_t dma1dbo:1;
1290 uint64_t dma0dbo:1;
1291 uint64_t iob2big:1;
1292 uint64_t bar0_to:1;
1293 uint64_t rml_wto:1;
1294 uint64_t rml_rto:1;
1295 } cn52xxp1;
1296 struct cvmx_npei_int_enb2_s cn56xx;
1297 struct cvmx_npei_int_enb2_cn56xxp1 {
1298 uint64_t reserved_61_63:3;
1299 uint64_t c1_ldwn:1;
1300 uint64_t c0_ldwn:1;
1301 uint64_t c1_exc:1;
1302 uint64_t c0_exc:1;
1303 uint64_t c1_up_wf:1;
1304 uint64_t c0_up_wf:1;
1305 uint64_t c1_un_wf:1;
1306 uint64_t c0_un_wf:1;
1307 uint64_t c1_un_bx:1;
1308 uint64_t c1_un_wi:1;
1309 uint64_t c1_un_b2:1;
1310 uint64_t c1_un_b1:1;
1311 uint64_t c1_un_b0:1;
1312 uint64_t c1_up_bx:1;
1313 uint64_t c1_up_wi:1;
1314 uint64_t c1_up_b2:1;
1315 uint64_t c1_up_b1:1;
1316 uint64_t c1_up_b0:1;
1317 uint64_t c0_un_bx:1;
1318 uint64_t c0_un_wi:1;
1319 uint64_t c0_un_b2:1;
1320 uint64_t c0_un_b1:1;
1321 uint64_t c0_un_b0:1;
1322 uint64_t c0_up_bx:1;
1323 uint64_t c0_up_wi:1;
1324 uint64_t c0_up_b2:1;
1325 uint64_t c0_up_b1:1;
1326 uint64_t c0_up_b0:1;
1327 uint64_t c1_hpint:1;
1328 uint64_t c1_pmei:1;
1329 uint64_t c1_wake:1;
1330 uint64_t reserved_29_29:1;
1331 uint64_t c1_se:1;
1332 uint64_t reserved_27_27:1;
1333 uint64_t c1_aeri:1;
1334 uint64_t c0_hpint:1;
1335 uint64_t c0_pmei:1;
1336 uint64_t c0_wake:1;
1337 uint64_t reserved_22_22:1;
1338 uint64_t c0_se:1;
1339 uint64_t reserved_20_20:1;
1340 uint64_t c0_aeri:1;
1341 uint64_t ptime:1;
1342 uint64_t pcnt:1;
1343 uint64_t pidbof:1;
1344 uint64_t psldbof:1;
1345 uint64_t dtime1:1;
1346 uint64_t dtime0:1;
1347 uint64_t dcnt1:1;
1348 uint64_t dcnt0:1;
1349 uint64_t dma1fi:1;
1350 uint64_t dma0fi:1;
1351 uint64_t dma4dbo:1;
1352 uint64_t dma3dbo:1;
1353 uint64_t dma2dbo:1;
1354 uint64_t dma1dbo:1;
1355 uint64_t dma0dbo:1;
1356 uint64_t iob2big:1;
1357 uint64_t bar0_to:1;
1358 uint64_t rml_wto:1;
1359 uint64_t rml_rto:1;
1360 } cn56xxp1;
1361};
1362
1363union cvmx_npei_int_info {
1364 uint64_t u64;
1365 struct cvmx_npei_int_info_s {
1366 uint64_t reserved_12_63:52;
1367 uint64_t pidbof:6;
1368 uint64_t psldbof:6;
1369 } s;
1370 struct cvmx_npei_int_info_s cn52xx;
1371 struct cvmx_npei_int_info_s cn56xx;
1372 struct cvmx_npei_int_info_s cn56xxp1;
1373};
1374
1375union cvmx_npei_int_sum {
1376 uint64_t u64;
1377 struct cvmx_npei_int_sum_s {
1378 uint64_t mio_inta:1;
1379 uint64_t reserved_62_62:1;
1380 uint64_t int_a:1;
1381 uint64_t c1_ldwn:1;
1382 uint64_t c0_ldwn:1;
1383 uint64_t c1_exc:1;
1384 uint64_t c0_exc:1;
1385 uint64_t c1_up_wf:1;
1386 uint64_t c0_up_wf:1;
1387 uint64_t c1_un_wf:1;
1388 uint64_t c0_un_wf:1;
1389 uint64_t c1_un_bx:1;
1390 uint64_t c1_un_wi:1;
1391 uint64_t c1_un_b2:1;
1392 uint64_t c1_un_b1:1;
1393 uint64_t c1_un_b0:1;
1394 uint64_t c1_up_bx:1;
1395 uint64_t c1_up_wi:1;
1396 uint64_t c1_up_b2:1;
1397 uint64_t c1_up_b1:1;
1398 uint64_t c1_up_b0:1;
1399 uint64_t c0_un_bx:1;
1400 uint64_t c0_un_wi:1;
1401 uint64_t c0_un_b2:1;
1402 uint64_t c0_un_b1:1;
1403 uint64_t c0_un_b0:1;
1404 uint64_t c0_up_bx:1;
1405 uint64_t c0_up_wi:1;
1406 uint64_t c0_up_b2:1;
1407 uint64_t c0_up_b1:1;
1408 uint64_t c0_up_b0:1;
1409 uint64_t c1_hpint:1;
1410 uint64_t c1_pmei:1;
1411 uint64_t c1_wake:1;
1412 uint64_t crs1_dr:1;
1413 uint64_t c1_se:1;
1414 uint64_t crs1_er:1;
1415 uint64_t c1_aeri:1;
1416 uint64_t c0_hpint:1;
1417 uint64_t c0_pmei:1;
1418 uint64_t c0_wake:1;
1419 uint64_t crs0_dr:1;
1420 uint64_t c0_se:1;
1421 uint64_t crs0_er:1;
1422 uint64_t c0_aeri:1;
1423 uint64_t ptime:1;
1424 uint64_t pcnt:1;
1425 uint64_t pidbof:1;
1426 uint64_t psldbof:1;
1427 uint64_t dtime1:1;
1428 uint64_t dtime0:1;
1429 uint64_t dcnt1:1;
1430 uint64_t dcnt0:1;
1431 uint64_t dma1fi:1;
1432 uint64_t dma0fi:1;
1433 uint64_t dma4dbo:1;
1434 uint64_t dma3dbo:1;
1435 uint64_t dma2dbo:1;
1436 uint64_t dma1dbo:1;
1437 uint64_t dma0dbo:1;
1438 uint64_t iob2big:1;
1439 uint64_t bar0_to:1;
1440 uint64_t rml_wto:1;
1441 uint64_t rml_rto:1;
1442 } s;
1443 struct cvmx_npei_int_sum_s cn52xx;
1444 struct cvmx_npei_int_sum_cn52xxp1 {
1445 uint64_t mio_inta:1;
1446 uint64_t reserved_62_62:1;
1447 uint64_t int_a:1;
1448 uint64_t c1_ldwn:1;
1449 uint64_t c0_ldwn:1;
1450 uint64_t c1_exc:1;
1451 uint64_t c0_exc:1;
1452 uint64_t c1_up_wf:1;
1453 uint64_t c0_up_wf:1;
1454 uint64_t c1_un_wf:1;
1455 uint64_t c0_un_wf:1;
1456 uint64_t c1_un_bx:1;
1457 uint64_t c1_un_wi:1;
1458 uint64_t c1_un_b2:1;
1459 uint64_t c1_un_b1:1;
1460 uint64_t c1_un_b0:1;
1461 uint64_t c1_up_bx:1;
1462 uint64_t c1_up_wi:1;
1463 uint64_t c1_up_b2:1;
1464 uint64_t c1_up_b1:1;
1465 uint64_t c1_up_b0:1;
1466 uint64_t c0_un_bx:1;
1467 uint64_t c0_un_wi:1;
1468 uint64_t c0_un_b2:1;
1469 uint64_t c0_un_b1:1;
1470 uint64_t c0_un_b0:1;
1471 uint64_t c0_up_bx:1;
1472 uint64_t c0_up_wi:1;
1473 uint64_t c0_up_b2:1;
1474 uint64_t c0_up_b1:1;
1475 uint64_t c0_up_b0:1;
1476 uint64_t c1_hpint:1;
1477 uint64_t c1_pmei:1;
1478 uint64_t c1_wake:1;
1479 uint64_t crs1_dr:1;
1480 uint64_t c1_se:1;
1481 uint64_t crs1_er:1;
1482 uint64_t c1_aeri:1;
1483 uint64_t c0_hpint:1;
1484 uint64_t c0_pmei:1;
1485 uint64_t c0_wake:1;
1486 uint64_t crs0_dr:1;
1487 uint64_t c0_se:1;
1488 uint64_t crs0_er:1;
1489 uint64_t c0_aeri:1;
1490 uint64_t reserved_15_18:4;
1491 uint64_t dtime1:1;
1492 uint64_t dtime0:1;
1493 uint64_t dcnt1:1;
1494 uint64_t dcnt0:1;
1495 uint64_t dma1fi:1;
1496 uint64_t dma0fi:1;
1497 uint64_t reserved_8_8:1;
1498 uint64_t dma3dbo:1;
1499 uint64_t dma2dbo:1;
1500 uint64_t dma1dbo:1;
1501 uint64_t dma0dbo:1;
1502 uint64_t iob2big:1;
1503 uint64_t bar0_to:1;
1504 uint64_t rml_wto:1;
1505 uint64_t rml_rto:1;
1506 } cn52xxp1;
1507 struct cvmx_npei_int_sum_s cn56xx;
1508 struct cvmx_npei_int_sum_cn56xxp1 {
1509 uint64_t mio_inta:1;
1510 uint64_t reserved_61_62:2;
1511 uint64_t c1_ldwn:1;
1512 uint64_t c0_ldwn:1;
1513 uint64_t c1_exc:1;
1514 uint64_t c0_exc:1;
1515 uint64_t c1_up_wf:1;
1516 uint64_t c0_up_wf:1;
1517 uint64_t c1_un_wf:1;
1518 uint64_t c0_un_wf:1;
1519 uint64_t c1_un_bx:1;
1520 uint64_t c1_un_wi:1;
1521 uint64_t c1_un_b2:1;
1522 uint64_t c1_un_b1:1;
1523 uint64_t c1_un_b0:1;
1524 uint64_t c1_up_bx:1;
1525 uint64_t c1_up_wi:1;
1526 uint64_t c1_up_b2:1;
1527 uint64_t c1_up_b1:1;
1528 uint64_t c1_up_b0:1;
1529 uint64_t c0_un_bx:1;
1530 uint64_t c0_un_wi:1;
1531 uint64_t c0_un_b2:1;
1532 uint64_t c0_un_b1:1;
1533 uint64_t c0_un_b0:1;
1534 uint64_t c0_up_bx:1;
1535 uint64_t c0_up_wi:1;
1536 uint64_t c0_up_b2:1;
1537 uint64_t c0_up_b1:1;
1538 uint64_t c0_up_b0:1;
1539 uint64_t c1_hpint:1;
1540 uint64_t c1_pmei:1;
1541 uint64_t c1_wake:1;
1542 uint64_t reserved_29_29:1;
1543 uint64_t c1_se:1;
1544 uint64_t reserved_27_27:1;
1545 uint64_t c1_aeri:1;
1546 uint64_t c0_hpint:1;
1547 uint64_t c0_pmei:1;
1548 uint64_t c0_wake:1;
1549 uint64_t reserved_22_22:1;
1550 uint64_t c0_se:1;
1551 uint64_t reserved_20_20:1;
1552 uint64_t c0_aeri:1;
1553 uint64_t ptime:1;
1554 uint64_t pcnt:1;
1555 uint64_t pidbof:1;
1556 uint64_t psldbof:1;
1557 uint64_t dtime1:1;
1558 uint64_t dtime0:1;
1559 uint64_t dcnt1:1;
1560 uint64_t dcnt0:1;
1561 uint64_t dma1fi:1;
1562 uint64_t dma0fi:1;
1563 uint64_t dma4dbo:1;
1564 uint64_t dma3dbo:1;
1565 uint64_t dma2dbo:1;
1566 uint64_t dma1dbo:1;
1567 uint64_t dma0dbo:1;
1568 uint64_t iob2big:1;
1569 uint64_t bar0_to:1;
1570 uint64_t rml_wto:1;
1571 uint64_t rml_rto:1;
1572 } cn56xxp1;
1573};
1574
1575union cvmx_npei_int_sum2 {
1576 uint64_t u64;
1577 struct cvmx_npei_int_sum2_s {
1578 uint64_t mio_inta:1;
1579 uint64_t reserved_62_62:1;
1580 uint64_t int_a:1;
1581 uint64_t c1_ldwn:1;
1582 uint64_t c0_ldwn:1;
1583 uint64_t c1_exc:1;
1584 uint64_t c0_exc:1;
1585 uint64_t c1_up_wf:1;
1586 uint64_t c0_up_wf:1;
1587 uint64_t c1_un_wf:1;
1588 uint64_t c0_un_wf:1;
1589 uint64_t c1_un_bx:1;
1590 uint64_t c1_un_wi:1;
1591 uint64_t c1_un_b2:1;
1592 uint64_t c1_un_b1:1;
1593 uint64_t c1_un_b0:1;
1594 uint64_t c1_up_bx:1;
1595 uint64_t c1_up_wi:1;
1596 uint64_t c1_up_b2:1;
1597 uint64_t c1_up_b1:1;
1598 uint64_t c1_up_b0:1;
1599 uint64_t c0_un_bx:1;
1600 uint64_t c0_un_wi:1;
1601 uint64_t c0_un_b2:1;
1602 uint64_t c0_un_b1:1;
1603 uint64_t c0_un_b0:1;
1604 uint64_t c0_up_bx:1;
1605 uint64_t c0_up_wi:1;
1606 uint64_t c0_up_b2:1;
1607 uint64_t c0_up_b1:1;
1608 uint64_t c0_up_b0:1;
1609 uint64_t c1_hpint:1;
1610 uint64_t c1_pmei:1;
1611 uint64_t c1_wake:1;
1612 uint64_t crs1_dr:1;
1613 uint64_t c1_se:1;
1614 uint64_t crs1_er:1;
1615 uint64_t c1_aeri:1;
1616 uint64_t c0_hpint:1;
1617 uint64_t c0_pmei:1;
1618 uint64_t c0_wake:1;
1619 uint64_t crs0_dr:1;
1620 uint64_t c0_se:1;
1621 uint64_t crs0_er:1;
1622 uint64_t c0_aeri:1;
1623 uint64_t reserved_15_18:4;
1624 uint64_t dtime1:1;
1625 uint64_t dtime0:1;
1626 uint64_t dcnt1:1;
1627 uint64_t dcnt0:1;
1628 uint64_t dma1fi:1;
1629 uint64_t dma0fi:1;
1630 uint64_t reserved_8_8:1;
1631 uint64_t dma3dbo:1;
1632 uint64_t dma2dbo:1;
1633 uint64_t dma1dbo:1;
1634 uint64_t dma0dbo:1;
1635 uint64_t iob2big:1;
1636 uint64_t bar0_to:1;
1637 uint64_t rml_wto:1;
1638 uint64_t rml_rto:1;
1639 } s;
1640 struct cvmx_npei_int_sum2_s cn52xx;
1641 struct cvmx_npei_int_sum2_s cn52xxp1;
1642 struct cvmx_npei_int_sum2_s cn56xx;
1643};
1644
1645union cvmx_npei_last_win_rdata0 {
1646 uint64_t u64;
1647 struct cvmx_npei_last_win_rdata0_s {
1648 uint64_t data:64;
1649 } s;
1650 struct cvmx_npei_last_win_rdata0_s cn52xx;
1651 struct cvmx_npei_last_win_rdata0_s cn52xxp1;
1652 struct cvmx_npei_last_win_rdata0_s cn56xx;
1653 struct cvmx_npei_last_win_rdata0_s cn56xxp1;
1654};
1655
1656union cvmx_npei_last_win_rdata1 {
1657 uint64_t u64;
1658 struct cvmx_npei_last_win_rdata1_s {
1659 uint64_t data:64;
1660 } s;
1661 struct cvmx_npei_last_win_rdata1_s cn52xx;
1662 struct cvmx_npei_last_win_rdata1_s cn52xxp1;
1663 struct cvmx_npei_last_win_rdata1_s cn56xx;
1664 struct cvmx_npei_last_win_rdata1_s cn56xxp1;
1665};
1666
1667union cvmx_npei_mem_access_ctl {
1668 uint64_t u64;
1669 struct cvmx_npei_mem_access_ctl_s {
1670 uint64_t reserved_14_63:50;
1671 uint64_t max_word:4;
1672 uint64_t timer:10;
1673 } s;
1674 struct cvmx_npei_mem_access_ctl_s cn52xx;
1675 struct cvmx_npei_mem_access_ctl_s cn52xxp1;
1676 struct cvmx_npei_mem_access_ctl_s cn56xx;
1677 struct cvmx_npei_mem_access_ctl_s cn56xxp1;
1678};
1679
1680union cvmx_npei_mem_access_subidx {
1681 uint64_t u64;
1682 struct cvmx_npei_mem_access_subidx_s {
1683 uint64_t reserved_42_63:22;
1684 uint64_t zero:1;
1685 uint64_t port:2;
1686 uint64_t nmerge:1;
1687 uint64_t esr:2;
1688 uint64_t esw:2;
1689 uint64_t nsr:1;
1690 uint64_t nsw:1;
1691 uint64_t ror:1;
1692 uint64_t row:1;
1693 uint64_t ba:30;
1694 } s;
1695 struct cvmx_npei_mem_access_subidx_s cn52xx;
1696 struct cvmx_npei_mem_access_subidx_s cn52xxp1;
1697 struct cvmx_npei_mem_access_subidx_s cn56xx;
1698 struct cvmx_npei_mem_access_subidx_s cn56xxp1;
1699};
1700
1701union cvmx_npei_msi_enb0 {
1702 uint64_t u64;
1703 struct cvmx_npei_msi_enb0_s {
1704 uint64_t enb:64;
1705 } s;
1706 struct cvmx_npei_msi_enb0_s cn52xx;
1707 struct cvmx_npei_msi_enb0_s cn52xxp1;
1708 struct cvmx_npei_msi_enb0_s cn56xx;
1709 struct cvmx_npei_msi_enb0_s cn56xxp1;
1710};
1711
1712union cvmx_npei_msi_enb1 {
1713 uint64_t u64;
1714 struct cvmx_npei_msi_enb1_s {
1715 uint64_t enb:64;
1716 } s;
1717 struct cvmx_npei_msi_enb1_s cn52xx;
1718 struct cvmx_npei_msi_enb1_s cn52xxp1;
1719 struct cvmx_npei_msi_enb1_s cn56xx;
1720 struct cvmx_npei_msi_enb1_s cn56xxp1;
1721};
1722
1723union cvmx_npei_msi_enb2 {
1724 uint64_t u64;
1725 struct cvmx_npei_msi_enb2_s {
1726 uint64_t enb:64;
1727 } s;
1728 struct cvmx_npei_msi_enb2_s cn52xx;
1729 struct cvmx_npei_msi_enb2_s cn52xxp1;
1730 struct cvmx_npei_msi_enb2_s cn56xx;
1731 struct cvmx_npei_msi_enb2_s cn56xxp1;
1732};
1733
1734union cvmx_npei_msi_enb3 {
1735 uint64_t u64;
1736 struct cvmx_npei_msi_enb3_s {
1737 uint64_t enb:64;
1738 } s;
1739 struct cvmx_npei_msi_enb3_s cn52xx;
1740 struct cvmx_npei_msi_enb3_s cn52xxp1;
1741 struct cvmx_npei_msi_enb3_s cn56xx;
1742 struct cvmx_npei_msi_enb3_s cn56xxp1;
1743};
1744
1745union cvmx_npei_msi_rcv0 {
1746 uint64_t u64;
1747 struct cvmx_npei_msi_rcv0_s {
1748 uint64_t intr:64;
1749 } s;
1750 struct cvmx_npei_msi_rcv0_s cn52xx;
1751 struct cvmx_npei_msi_rcv0_s cn52xxp1;
1752 struct cvmx_npei_msi_rcv0_s cn56xx;
1753 struct cvmx_npei_msi_rcv0_s cn56xxp1;
1754};
1755
1756union cvmx_npei_msi_rcv1 {
1757 uint64_t u64;
1758 struct cvmx_npei_msi_rcv1_s {
1759 uint64_t intr:64;
1760 } s;
1761 struct cvmx_npei_msi_rcv1_s cn52xx;
1762 struct cvmx_npei_msi_rcv1_s cn52xxp1;
1763 struct cvmx_npei_msi_rcv1_s cn56xx;
1764 struct cvmx_npei_msi_rcv1_s cn56xxp1;
1765};
1766
1767union cvmx_npei_msi_rcv2 {
1768 uint64_t u64;
1769 struct cvmx_npei_msi_rcv2_s {
1770 uint64_t intr:64;
1771 } s;
1772 struct cvmx_npei_msi_rcv2_s cn52xx;
1773 struct cvmx_npei_msi_rcv2_s cn52xxp1;
1774 struct cvmx_npei_msi_rcv2_s cn56xx;
1775 struct cvmx_npei_msi_rcv2_s cn56xxp1;
1776};
1777
1778union cvmx_npei_msi_rcv3 {
1779 uint64_t u64;
1780 struct cvmx_npei_msi_rcv3_s {
1781 uint64_t intr:64;
1782 } s;
1783 struct cvmx_npei_msi_rcv3_s cn52xx;
1784 struct cvmx_npei_msi_rcv3_s cn52xxp1;
1785 struct cvmx_npei_msi_rcv3_s cn56xx;
1786 struct cvmx_npei_msi_rcv3_s cn56xxp1;
1787};
1788
1789union cvmx_npei_msi_rd_map {
1790 uint64_t u64;
1791 struct cvmx_npei_msi_rd_map_s {
1792 uint64_t reserved_16_63:48;
1793 uint64_t rd_int:8;
1794 uint64_t msi_int:8;
1795 } s;
1796 struct cvmx_npei_msi_rd_map_s cn52xx;
1797 struct cvmx_npei_msi_rd_map_s cn52xxp1;
1798 struct cvmx_npei_msi_rd_map_s cn56xx;
1799 struct cvmx_npei_msi_rd_map_s cn56xxp1;
1800};
1801
1802union cvmx_npei_msi_w1c_enb0 {
1803 uint64_t u64;
1804 struct cvmx_npei_msi_w1c_enb0_s {
1805 uint64_t clr:64;
1806 } s;
1807 struct cvmx_npei_msi_w1c_enb0_s cn52xx;
1808 struct cvmx_npei_msi_w1c_enb0_s cn56xx;
1809};
1810
1811union cvmx_npei_msi_w1c_enb1 {
1812 uint64_t u64;
1813 struct cvmx_npei_msi_w1c_enb1_s {
1814 uint64_t clr:64;
1815 } s;
1816 struct cvmx_npei_msi_w1c_enb1_s cn52xx;
1817 struct cvmx_npei_msi_w1c_enb1_s cn56xx;
1818};
1819
1820union cvmx_npei_msi_w1c_enb2 {
1821 uint64_t u64;
1822 struct cvmx_npei_msi_w1c_enb2_s {
1823 uint64_t clr:64;
1824 } s;
1825 struct cvmx_npei_msi_w1c_enb2_s cn52xx;
1826 struct cvmx_npei_msi_w1c_enb2_s cn56xx;
1827};
1828
1829union cvmx_npei_msi_w1c_enb3 {
1830 uint64_t u64;
1831 struct cvmx_npei_msi_w1c_enb3_s {
1832 uint64_t clr:64;
1833 } s;
1834 struct cvmx_npei_msi_w1c_enb3_s cn52xx;
1835 struct cvmx_npei_msi_w1c_enb3_s cn56xx;
1836};
1837
1838union cvmx_npei_msi_w1s_enb0 {
1839 uint64_t u64;
1840 struct cvmx_npei_msi_w1s_enb0_s {
1841 uint64_t set:64;
1842 } s;
1843 struct cvmx_npei_msi_w1s_enb0_s cn52xx;
1844 struct cvmx_npei_msi_w1s_enb0_s cn56xx;
1845};
1846
1847union cvmx_npei_msi_w1s_enb1 {
1848 uint64_t u64;
1849 struct cvmx_npei_msi_w1s_enb1_s {
1850 uint64_t set:64;
1851 } s;
1852 struct cvmx_npei_msi_w1s_enb1_s cn52xx;
1853 struct cvmx_npei_msi_w1s_enb1_s cn56xx;
1854};
1855
1856union cvmx_npei_msi_w1s_enb2 {
1857 uint64_t u64;
1858 struct cvmx_npei_msi_w1s_enb2_s {
1859 uint64_t set:64;
1860 } s;
1861 struct cvmx_npei_msi_w1s_enb2_s cn52xx;
1862 struct cvmx_npei_msi_w1s_enb2_s cn56xx;
1863};
1864
1865union cvmx_npei_msi_w1s_enb3 {
1866 uint64_t u64;
1867 struct cvmx_npei_msi_w1s_enb3_s {
1868 uint64_t set:64;
1869 } s;
1870 struct cvmx_npei_msi_w1s_enb3_s cn52xx;
1871 struct cvmx_npei_msi_w1s_enb3_s cn56xx;
1872};
1873
1874union cvmx_npei_msi_wr_map {
1875 uint64_t u64;
1876 struct cvmx_npei_msi_wr_map_s {
1877 uint64_t reserved_16_63:48;
1878 uint64_t ciu_int:8;
1879 uint64_t msi_int:8;
1880 } s;
1881 struct cvmx_npei_msi_wr_map_s cn52xx;
1882 struct cvmx_npei_msi_wr_map_s cn52xxp1;
1883 struct cvmx_npei_msi_wr_map_s cn56xx;
1884 struct cvmx_npei_msi_wr_map_s cn56xxp1;
1885};
1886
1887union cvmx_npei_pcie_credit_cnt {
1888 uint64_t u64;
1889 struct cvmx_npei_pcie_credit_cnt_s {
1890 uint64_t reserved_48_63:16;
1891 uint64_t p1_ccnt:8;
1892 uint64_t p1_ncnt:8;
1893 uint64_t p1_pcnt:8;
1894 uint64_t p0_ccnt:8;
1895 uint64_t p0_ncnt:8;
1896 uint64_t p0_pcnt:8;
1897 } s;
1898 struct cvmx_npei_pcie_credit_cnt_s cn52xx;
1899 struct cvmx_npei_pcie_credit_cnt_s cn56xx;
1900};
1901
1902union cvmx_npei_pcie_msi_rcv {
1903 uint64_t u64;
1904 struct cvmx_npei_pcie_msi_rcv_s {
1905 uint64_t reserved_8_63:56;
1906 uint64_t intr:8;
1907 } s;
1908 struct cvmx_npei_pcie_msi_rcv_s cn52xx;
1909 struct cvmx_npei_pcie_msi_rcv_s cn52xxp1;
1910 struct cvmx_npei_pcie_msi_rcv_s cn56xx;
1911 struct cvmx_npei_pcie_msi_rcv_s cn56xxp1;
1912};
1913
1914union cvmx_npei_pcie_msi_rcv_b1 {
1915 uint64_t u64;
1916 struct cvmx_npei_pcie_msi_rcv_b1_s {
1917 uint64_t reserved_16_63:48;
1918 uint64_t intr:8;
1919 uint64_t reserved_0_7:8;
1920 } s;
1921 struct cvmx_npei_pcie_msi_rcv_b1_s cn52xx;
1922 struct cvmx_npei_pcie_msi_rcv_b1_s cn52xxp1;
1923 struct cvmx_npei_pcie_msi_rcv_b1_s cn56xx;
1924 struct cvmx_npei_pcie_msi_rcv_b1_s cn56xxp1;
1925};
1926
1927union cvmx_npei_pcie_msi_rcv_b2 {
1928 uint64_t u64;
1929 struct cvmx_npei_pcie_msi_rcv_b2_s {
1930 uint64_t reserved_24_63:40;
1931 uint64_t intr:8;
1932 uint64_t reserved_0_15:16;
1933 } s;
1934 struct cvmx_npei_pcie_msi_rcv_b2_s cn52xx;
1935 struct cvmx_npei_pcie_msi_rcv_b2_s cn52xxp1;
1936 struct cvmx_npei_pcie_msi_rcv_b2_s cn56xx;
1937 struct cvmx_npei_pcie_msi_rcv_b2_s cn56xxp1;
1938};
1939
1940union cvmx_npei_pcie_msi_rcv_b3 {
1941 uint64_t u64;
1942 struct cvmx_npei_pcie_msi_rcv_b3_s {
1943 uint64_t reserved_32_63:32;
1944 uint64_t intr:8;
1945 uint64_t reserved_0_23:24;
1946 } s;
1947 struct cvmx_npei_pcie_msi_rcv_b3_s cn52xx;
1948 struct cvmx_npei_pcie_msi_rcv_b3_s cn52xxp1;
1949 struct cvmx_npei_pcie_msi_rcv_b3_s cn56xx;
1950 struct cvmx_npei_pcie_msi_rcv_b3_s cn56xxp1;
1951};
1952
1953union cvmx_npei_pktx_cnts {
1954 uint64_t u64;
1955 struct cvmx_npei_pktx_cnts_s {
1956 uint64_t reserved_54_63:10;
1957 uint64_t timer:22;
1958 uint64_t cnt:32;
1959 } s;
1960 struct cvmx_npei_pktx_cnts_s cn52xx;
1961 struct cvmx_npei_pktx_cnts_s cn56xx;
1962 struct cvmx_npei_pktx_cnts_s cn56xxp1;
1963};
1964
1965union cvmx_npei_pktx_in_bp {
1966 uint64_t u64;
1967 struct cvmx_npei_pktx_in_bp_s {
1968 uint64_t wmark:32;
1969 uint64_t cnt:32;
1970 } s;
1971 struct cvmx_npei_pktx_in_bp_s cn52xx;
1972 struct cvmx_npei_pktx_in_bp_s cn56xx;
1973 struct cvmx_npei_pktx_in_bp_s cn56xxp1;
1974};
1975
1976union cvmx_npei_pktx_instr_baddr {
1977 uint64_t u64;
1978 struct cvmx_npei_pktx_instr_baddr_s {
1979 uint64_t addr:61;
1980 uint64_t reserved_0_2:3;
1981 } s;
1982 struct cvmx_npei_pktx_instr_baddr_s cn52xx;
1983 struct cvmx_npei_pktx_instr_baddr_s cn56xx;
1984 struct cvmx_npei_pktx_instr_baddr_s cn56xxp1;
1985};
1986
1987union cvmx_npei_pktx_instr_baoff_dbell {
1988 uint64_t u64;
1989 struct cvmx_npei_pktx_instr_baoff_dbell_s {
1990 uint64_t aoff:32;
1991 uint64_t dbell:32;
1992 } s;
1993 struct cvmx_npei_pktx_instr_baoff_dbell_s cn52xx;
1994 struct cvmx_npei_pktx_instr_baoff_dbell_s cn56xx;
1995 struct cvmx_npei_pktx_instr_baoff_dbell_s cn56xxp1;
1996};
1997
1998union cvmx_npei_pktx_instr_fifo_rsize {
1999 uint64_t u64;
2000 struct cvmx_npei_pktx_instr_fifo_rsize_s {
2001 uint64_t max:9;
2002 uint64_t rrp:9;
2003 uint64_t wrp:9;
2004 uint64_t fcnt:5;
2005 uint64_t rsize:32;
2006 } s;
2007 struct cvmx_npei_pktx_instr_fifo_rsize_s cn52xx;
2008 struct cvmx_npei_pktx_instr_fifo_rsize_s cn56xx;
2009 struct cvmx_npei_pktx_instr_fifo_rsize_s cn56xxp1;
2010};
2011
2012union cvmx_npei_pktx_instr_header {
2013 uint64_t u64;
2014 struct cvmx_npei_pktx_instr_header_s {
2015 uint64_t reserved_44_63:20;
2016 uint64_t pbp:1;
2017 uint64_t rsv_f:5;
2018 uint64_t rparmode:2;
2019 uint64_t rsv_e:1;
2020 uint64_t rskp_len:7;
2021 uint64_t rsv_d:6;
2022 uint64_t use_ihdr:1;
2023 uint64_t rsv_c:5;
2024 uint64_t par_mode:2;
2025 uint64_t rsv_b:1;
2026 uint64_t skp_len:7;
2027 uint64_t rsv_a:6;
2028 } s;
2029 struct cvmx_npei_pktx_instr_header_s cn52xx;
2030 struct cvmx_npei_pktx_instr_header_s cn56xx;
2031 struct cvmx_npei_pktx_instr_header_s cn56xxp1;
2032};
2033
2034union cvmx_npei_pktx_slist_baddr {
2035 uint64_t u64;
2036 struct cvmx_npei_pktx_slist_baddr_s {
2037 uint64_t addr:60;
2038 uint64_t reserved_0_3:4;
2039 } s;
2040 struct cvmx_npei_pktx_slist_baddr_s cn52xx;
2041 struct cvmx_npei_pktx_slist_baddr_s cn56xx;
2042 struct cvmx_npei_pktx_slist_baddr_s cn56xxp1;
2043};
2044
2045union cvmx_npei_pktx_slist_baoff_dbell {
2046 uint64_t u64;
2047 struct cvmx_npei_pktx_slist_baoff_dbell_s {
2048 uint64_t aoff:32;
2049 uint64_t dbell:32;
2050 } s;
2051 struct cvmx_npei_pktx_slist_baoff_dbell_s cn52xx;
2052 struct cvmx_npei_pktx_slist_baoff_dbell_s cn56xx;
2053 struct cvmx_npei_pktx_slist_baoff_dbell_s cn56xxp1;
2054};
2055
2056union cvmx_npei_pktx_slist_fifo_rsize {
2057 uint64_t u64;
2058 struct cvmx_npei_pktx_slist_fifo_rsize_s {
2059 uint64_t reserved_32_63:32;
2060 uint64_t rsize:32;
2061 } s;
2062 struct cvmx_npei_pktx_slist_fifo_rsize_s cn52xx;
2063 struct cvmx_npei_pktx_slist_fifo_rsize_s cn56xx;
2064 struct cvmx_npei_pktx_slist_fifo_rsize_s cn56xxp1;
2065};
2066
2067union cvmx_npei_pkt_cnt_int {
2068 uint64_t u64;
2069 struct cvmx_npei_pkt_cnt_int_s {
2070 uint64_t reserved_32_63:32;
2071 uint64_t port:32;
2072 } s;
2073 struct cvmx_npei_pkt_cnt_int_s cn52xx;
2074 struct cvmx_npei_pkt_cnt_int_s cn56xx;
2075 struct cvmx_npei_pkt_cnt_int_s cn56xxp1;
2076};
2077
2078union cvmx_npei_pkt_cnt_int_enb {
2079 uint64_t u64;
2080 struct cvmx_npei_pkt_cnt_int_enb_s {
2081 uint64_t reserved_32_63:32;
2082 uint64_t port:32;
2083 } s;
2084 struct cvmx_npei_pkt_cnt_int_enb_s cn52xx;
2085 struct cvmx_npei_pkt_cnt_int_enb_s cn56xx;
2086 struct cvmx_npei_pkt_cnt_int_enb_s cn56xxp1;
2087};
2088
2089union cvmx_npei_pkt_data_out_es {
2090 uint64_t u64;
2091 struct cvmx_npei_pkt_data_out_es_s {
2092 uint64_t es:64;
2093 } s;
2094 struct cvmx_npei_pkt_data_out_es_s cn52xx;
2095 struct cvmx_npei_pkt_data_out_es_s cn56xx;
2096 struct cvmx_npei_pkt_data_out_es_s cn56xxp1;
2097};
2098
2099union cvmx_npei_pkt_data_out_ns {
2100 uint64_t u64;
2101 struct cvmx_npei_pkt_data_out_ns_s {
2102 uint64_t reserved_32_63:32;
2103 uint64_t nsr:32;
2104 } s;
2105 struct cvmx_npei_pkt_data_out_ns_s cn52xx;
2106 struct cvmx_npei_pkt_data_out_ns_s cn56xx;
2107 struct cvmx_npei_pkt_data_out_ns_s cn56xxp1;
2108};
2109
2110union cvmx_npei_pkt_data_out_ror {
2111 uint64_t u64;
2112 struct cvmx_npei_pkt_data_out_ror_s {
2113 uint64_t reserved_32_63:32;
2114 uint64_t ror:32;
2115 } s;
2116 struct cvmx_npei_pkt_data_out_ror_s cn52xx;
2117 struct cvmx_npei_pkt_data_out_ror_s cn56xx;
2118 struct cvmx_npei_pkt_data_out_ror_s cn56xxp1;
2119};
2120
2121union cvmx_npei_pkt_dpaddr {
2122 uint64_t u64;
2123 struct cvmx_npei_pkt_dpaddr_s {
2124 uint64_t reserved_32_63:32;
2125 uint64_t dptr:32;
2126 } s;
2127 struct cvmx_npei_pkt_dpaddr_s cn52xx;
2128 struct cvmx_npei_pkt_dpaddr_s cn56xx;
2129 struct cvmx_npei_pkt_dpaddr_s cn56xxp1;
2130};
2131
2132union cvmx_npei_pkt_in_bp {
2133 uint64_t u64;
2134 struct cvmx_npei_pkt_in_bp_s {
2135 uint64_t reserved_32_63:32;
2136 uint64_t bp:32;
2137 } s;
2138 struct cvmx_npei_pkt_in_bp_s cn56xx;
2139};
2140
2141union cvmx_npei_pkt_in_donex_cnts {
2142 uint64_t u64;
2143 struct cvmx_npei_pkt_in_donex_cnts_s {
2144 uint64_t reserved_32_63:32;
2145 uint64_t cnt:32;
2146 } s;
2147 struct cvmx_npei_pkt_in_donex_cnts_s cn52xx;
2148 struct cvmx_npei_pkt_in_donex_cnts_s cn56xx;
2149 struct cvmx_npei_pkt_in_donex_cnts_s cn56xxp1;
2150};
2151
2152union cvmx_npei_pkt_in_instr_counts {
2153 uint64_t u64;
2154 struct cvmx_npei_pkt_in_instr_counts_s {
2155 uint64_t wr_cnt:32;
2156 uint64_t rd_cnt:32;
2157 } s;
2158 struct cvmx_npei_pkt_in_instr_counts_s cn52xx;
2159 struct cvmx_npei_pkt_in_instr_counts_s cn56xx;
2160};
2161
2162union cvmx_npei_pkt_in_pcie_port {
2163 uint64_t u64;
2164 struct cvmx_npei_pkt_in_pcie_port_s {
2165 uint64_t pp:64;
2166 } s;
2167 struct cvmx_npei_pkt_in_pcie_port_s cn52xx;
2168 struct cvmx_npei_pkt_in_pcie_port_s cn56xx;
2169};
2170
2171union cvmx_npei_pkt_input_control {
2172 uint64_t u64;
2173 struct cvmx_npei_pkt_input_control_s {
2174 uint64_t reserved_23_63:41;
2175 uint64_t pkt_rr:1;
2176 uint64_t pbp_dhi:13;
2177 uint64_t d_nsr:1;
2178 uint64_t d_esr:2;
2179 uint64_t d_ror:1;
2180 uint64_t use_csr:1;
2181 uint64_t nsr:1;
2182 uint64_t esr:2;
2183 uint64_t ror:1;
2184 } s;
2185 struct cvmx_npei_pkt_input_control_s cn52xx;
2186 struct cvmx_npei_pkt_input_control_s cn56xx;
2187 struct cvmx_npei_pkt_input_control_s cn56xxp1;
2188};
2189
2190union cvmx_npei_pkt_instr_enb {
2191 uint64_t u64;
2192 struct cvmx_npei_pkt_instr_enb_s {
2193 uint64_t reserved_32_63:32;
2194 uint64_t enb:32;
2195 } s;
2196 struct cvmx_npei_pkt_instr_enb_s cn52xx;
2197 struct cvmx_npei_pkt_instr_enb_s cn56xx;
2198 struct cvmx_npei_pkt_instr_enb_s cn56xxp1;
2199};
2200
2201union cvmx_npei_pkt_instr_rd_size {
2202 uint64_t u64;
2203 struct cvmx_npei_pkt_instr_rd_size_s {
2204 uint64_t rdsize:64;
2205 } s;
2206 struct cvmx_npei_pkt_instr_rd_size_s cn52xx;
2207 struct cvmx_npei_pkt_instr_rd_size_s cn56xx;
2208};
2209
2210union cvmx_npei_pkt_instr_size {
2211 uint64_t u64;
2212 struct cvmx_npei_pkt_instr_size_s {
2213 uint64_t reserved_32_63:32;
2214 uint64_t is_64b:32;
2215 } s;
2216 struct cvmx_npei_pkt_instr_size_s cn52xx;
2217 struct cvmx_npei_pkt_instr_size_s cn56xx;
2218 struct cvmx_npei_pkt_instr_size_s cn56xxp1;
2219};
2220
2221union cvmx_npei_pkt_int_levels {
2222 uint64_t u64;
2223 struct cvmx_npei_pkt_int_levels_s {
2224 uint64_t reserved_54_63:10;
2225 uint64_t time:22;
2226 uint64_t cnt:32;
2227 } s;
2228 struct cvmx_npei_pkt_int_levels_s cn52xx;
2229 struct cvmx_npei_pkt_int_levels_s cn56xx;
2230 struct cvmx_npei_pkt_int_levels_s cn56xxp1;
2231};
2232
2233union cvmx_npei_pkt_iptr {
2234 uint64_t u64;
2235 struct cvmx_npei_pkt_iptr_s {
2236 uint64_t reserved_32_63:32;
2237 uint64_t iptr:32;
2238 } s;
2239 struct cvmx_npei_pkt_iptr_s cn52xx;
2240 struct cvmx_npei_pkt_iptr_s cn56xx;
2241 struct cvmx_npei_pkt_iptr_s cn56xxp1;
2242};
2243
2244union cvmx_npei_pkt_out_bmode {
2245 uint64_t u64;
2246 struct cvmx_npei_pkt_out_bmode_s {
2247 uint64_t reserved_32_63:32;
2248 uint64_t bmode:32;
2249 } s;
2250 struct cvmx_npei_pkt_out_bmode_s cn52xx;
2251 struct cvmx_npei_pkt_out_bmode_s cn56xx;
2252 struct cvmx_npei_pkt_out_bmode_s cn56xxp1;
2253};
2254
2255union cvmx_npei_pkt_out_enb {
2256 uint64_t u64;
2257 struct cvmx_npei_pkt_out_enb_s {
2258 uint64_t reserved_32_63:32;
2259 uint64_t enb:32;
2260 } s;
2261 struct cvmx_npei_pkt_out_enb_s cn52xx;
2262 struct cvmx_npei_pkt_out_enb_s cn56xx;
2263 struct cvmx_npei_pkt_out_enb_s cn56xxp1;
2264};
2265
2266union cvmx_npei_pkt_output_wmark {
2267 uint64_t u64;
2268 struct cvmx_npei_pkt_output_wmark_s {
2269 uint64_t reserved_32_63:32;
2270 uint64_t wmark:32;
2271 } s;
2272 struct cvmx_npei_pkt_output_wmark_s cn52xx;
2273 struct cvmx_npei_pkt_output_wmark_s cn56xx;
2274};
2275
2276union cvmx_npei_pkt_pcie_port {
2277 uint64_t u64;
2278 struct cvmx_npei_pkt_pcie_port_s {
2279 uint64_t pp:64;
2280 } s;
2281 struct cvmx_npei_pkt_pcie_port_s cn52xx;
2282 struct cvmx_npei_pkt_pcie_port_s cn56xx;
2283 struct cvmx_npei_pkt_pcie_port_s cn56xxp1;
2284};
2285
2286union cvmx_npei_pkt_port_in_rst {
2287 uint64_t u64;
2288 struct cvmx_npei_pkt_port_in_rst_s {
2289 uint64_t in_rst:32;
2290 uint64_t out_rst:32;
2291 } s;
2292 struct cvmx_npei_pkt_port_in_rst_s cn52xx;
2293 struct cvmx_npei_pkt_port_in_rst_s cn56xx;
2294};
2295
2296union cvmx_npei_pkt_slist_es {
2297 uint64_t u64;
2298 struct cvmx_npei_pkt_slist_es_s {
2299 uint64_t es:64;
2300 } s;
2301 struct cvmx_npei_pkt_slist_es_s cn52xx;
2302 struct cvmx_npei_pkt_slist_es_s cn56xx;
2303 struct cvmx_npei_pkt_slist_es_s cn56xxp1;
2304};
2305
2306union cvmx_npei_pkt_slist_id_size {
2307 uint64_t u64;
2308 struct cvmx_npei_pkt_slist_id_size_s {
2309 uint64_t reserved_23_63:41;
2310 uint64_t isize:7;
2311 uint64_t bsize:16;
2312 } s;
2313 struct cvmx_npei_pkt_slist_id_size_s cn52xx;
2314 struct cvmx_npei_pkt_slist_id_size_s cn56xx;
2315 struct cvmx_npei_pkt_slist_id_size_s cn56xxp1;
2316};
2317
2318union cvmx_npei_pkt_slist_ns {
2319 uint64_t u64;
2320 struct cvmx_npei_pkt_slist_ns_s {
2321 uint64_t reserved_32_63:32;
2322 uint64_t nsr:32;
2323 } s;
2324 struct cvmx_npei_pkt_slist_ns_s cn52xx;
2325 struct cvmx_npei_pkt_slist_ns_s cn56xx;
2326 struct cvmx_npei_pkt_slist_ns_s cn56xxp1;
2327};
2328
2329union cvmx_npei_pkt_slist_ror {
2330 uint64_t u64;
2331 struct cvmx_npei_pkt_slist_ror_s {
2332 uint64_t reserved_32_63:32;
2333 uint64_t ror:32;
2334 } s;
2335 struct cvmx_npei_pkt_slist_ror_s cn52xx;
2336 struct cvmx_npei_pkt_slist_ror_s cn56xx;
2337 struct cvmx_npei_pkt_slist_ror_s cn56xxp1;
2338};
2339
2340union cvmx_npei_pkt_time_int {
2341 uint64_t u64;
2342 struct cvmx_npei_pkt_time_int_s {
2343 uint64_t reserved_32_63:32;
2344 uint64_t port:32;
2345 } s;
2346 struct cvmx_npei_pkt_time_int_s cn52xx;
2347 struct cvmx_npei_pkt_time_int_s cn56xx;
2348 struct cvmx_npei_pkt_time_int_s cn56xxp1;
2349};
2350
2351union cvmx_npei_pkt_time_int_enb {
2352 uint64_t u64;
2353 struct cvmx_npei_pkt_time_int_enb_s {
2354 uint64_t reserved_32_63:32;
2355 uint64_t port:32;
2356 } s;
2357 struct cvmx_npei_pkt_time_int_enb_s cn52xx;
2358 struct cvmx_npei_pkt_time_int_enb_s cn56xx;
2359 struct cvmx_npei_pkt_time_int_enb_s cn56xxp1;
2360};
2361
2362union cvmx_npei_rsl_int_blocks {
2363 uint64_t u64;
2364 struct cvmx_npei_rsl_int_blocks_s {
2365 uint64_t reserved_31_63:33;
2366 uint64_t iob:1;
2367 uint64_t lmc1:1;
2368 uint64_t agl:1;
2369 uint64_t reserved_24_27:4;
2370 uint64_t asxpcs1:1;
2371 uint64_t asxpcs0:1;
2372 uint64_t reserved_21_21:1;
2373 uint64_t pip:1;
2374 uint64_t reserved_18_19:2;
2375 uint64_t lmc0:1;
2376 uint64_t l2c:1;
2377 uint64_t usb1:1;
2378 uint64_t rad:1;
2379 uint64_t usb:1;
2380 uint64_t pow:1;
2381 uint64_t tim:1;
2382 uint64_t pko:1;
2383 uint64_t ipd:1;
2384 uint64_t reserved_8_8:1;
2385 uint64_t zip:1;
2386 uint64_t reserved_6_6:1;
2387 uint64_t fpa:1;
2388 uint64_t key:1;
2389 uint64_t npei:1;
2390 uint64_t gmx1:1;
2391 uint64_t gmx0:1;
2392 uint64_t mio:1;
2393 } s;
2394 struct cvmx_npei_rsl_int_blocks_s cn52xx;
2395 struct cvmx_npei_rsl_int_blocks_s cn52xxp1;
2396 struct cvmx_npei_rsl_int_blocks_cn56xx {
2397 uint64_t reserved_31_63:33;
2398 uint64_t iob:1;
2399 uint64_t lmc1:1;
2400 uint64_t agl:1;
2401 uint64_t reserved_24_27:4;
2402 uint64_t asxpcs1:1;
2403 uint64_t asxpcs0:1;
2404 uint64_t reserved_21_21:1;
2405 uint64_t pip:1;
2406 uint64_t reserved_18_19:2;
2407 uint64_t lmc0:1;
2408 uint64_t l2c:1;
2409 uint64_t reserved_15_15:1;
2410 uint64_t rad:1;
2411 uint64_t usb:1;
2412 uint64_t pow:1;
2413 uint64_t tim:1;
2414 uint64_t pko:1;
2415 uint64_t ipd:1;
2416 uint64_t reserved_8_8:1;
2417 uint64_t zip:1;
2418 uint64_t reserved_6_6:1;
2419 uint64_t fpa:1;
2420 uint64_t key:1;
2421 uint64_t npei:1;
2422 uint64_t gmx1:1;
2423 uint64_t gmx0:1;
2424 uint64_t mio:1;
2425 } cn56xx;
2426 struct cvmx_npei_rsl_int_blocks_cn56xx cn56xxp1;
2427};
2428
2429union cvmx_npei_scratch_1 {
2430 uint64_t u64;
2431 struct cvmx_npei_scratch_1_s {
2432 uint64_t data:64;
2433 } s;
2434 struct cvmx_npei_scratch_1_s cn52xx;
2435 struct cvmx_npei_scratch_1_s cn52xxp1;
2436 struct cvmx_npei_scratch_1_s cn56xx;
2437 struct cvmx_npei_scratch_1_s cn56xxp1;
2438};
2439
2440union cvmx_npei_state1 {
2441 uint64_t u64;
2442 struct cvmx_npei_state1_s {
2443 uint64_t cpl1:12;
2444 uint64_t cpl0:12;
2445 uint64_t arb:1;
2446 uint64_t csr:39;
2447 } s;
2448 struct cvmx_npei_state1_s cn52xx;
2449 struct cvmx_npei_state1_s cn52xxp1;
2450 struct cvmx_npei_state1_s cn56xx;
2451 struct cvmx_npei_state1_s cn56xxp1;
2452};
2453
2454union cvmx_npei_state2 {
2455 uint64_t u64;
2456 struct cvmx_npei_state2_s {
2457 uint64_t reserved_48_63:16;
2458 uint64_t npei:1;
2459 uint64_t rac:1;
2460 uint64_t csm1:15;
2461 uint64_t csm0:15;
2462 uint64_t nnp0:8;
2463 uint64_t nnd:8;
2464 } s;
2465 struct cvmx_npei_state2_s cn52xx;
2466 struct cvmx_npei_state2_s cn52xxp1;
2467 struct cvmx_npei_state2_s cn56xx;
2468 struct cvmx_npei_state2_s cn56xxp1;
2469};
2470
2471union cvmx_npei_state3 {
2472 uint64_t u64;
2473 struct cvmx_npei_state3_s {
2474 uint64_t reserved_56_63:8;
2475 uint64_t psm1:15;
2476 uint64_t psm0:15;
2477 uint64_t nsm1:13;
2478 uint64_t nsm0:13;
2479 } s;
2480 struct cvmx_npei_state3_s cn52xx;
2481 struct cvmx_npei_state3_s cn52xxp1;
2482 struct cvmx_npei_state3_s cn56xx;
2483 struct cvmx_npei_state3_s cn56xxp1;
2484};
2485
2486union cvmx_npei_win_rd_addr {
2487 uint64_t u64;
2488 struct cvmx_npei_win_rd_addr_s {
2489 uint64_t reserved_51_63:13;
2490 uint64_t ld_cmd:2;
2491 uint64_t iobit:1;
2492 uint64_t rd_addr:48;
2493 } s;
2494 struct cvmx_npei_win_rd_addr_s cn52xx;
2495 struct cvmx_npei_win_rd_addr_s cn52xxp1;
2496 struct cvmx_npei_win_rd_addr_s cn56xx;
2497 struct cvmx_npei_win_rd_addr_s cn56xxp1;
2498};
2499
2500union cvmx_npei_win_rd_data {
2501 uint64_t u64;
2502 struct cvmx_npei_win_rd_data_s {
2503 uint64_t rd_data:64;
2504 } s;
2505 struct cvmx_npei_win_rd_data_s cn52xx;
2506 struct cvmx_npei_win_rd_data_s cn52xxp1;
2507 struct cvmx_npei_win_rd_data_s cn56xx;
2508 struct cvmx_npei_win_rd_data_s cn56xxp1;
2509};
2510
2511union cvmx_npei_win_wr_addr {
2512 uint64_t u64;
2513 struct cvmx_npei_win_wr_addr_s {
2514 uint64_t reserved_49_63:15;
2515 uint64_t iobit:1;
2516 uint64_t wr_addr:46;
2517 uint64_t reserved_0_1:2;
2518 } s;
2519 struct cvmx_npei_win_wr_addr_s cn52xx;
2520 struct cvmx_npei_win_wr_addr_s cn52xxp1;
2521 struct cvmx_npei_win_wr_addr_s cn56xx;
2522 struct cvmx_npei_win_wr_addr_s cn56xxp1;
2523};
2524
2525union cvmx_npei_win_wr_data {
2526 uint64_t u64;
2527 struct cvmx_npei_win_wr_data_s {
2528 uint64_t wr_data:64;
2529 } s;
2530 struct cvmx_npei_win_wr_data_s cn52xx;
2531 struct cvmx_npei_win_wr_data_s cn52xxp1;
2532 struct cvmx_npei_win_wr_data_s cn56xx;
2533 struct cvmx_npei_win_wr_data_s cn56xxp1;
2534};
2535
2536union cvmx_npei_win_wr_mask {
2537 uint64_t u64;
2538 struct cvmx_npei_win_wr_mask_s {
2539 uint64_t reserved_8_63:56;
2540 uint64_t wr_mask:8;
2541 } s;
2542 struct cvmx_npei_win_wr_mask_s cn52xx;
2543 struct cvmx_npei_win_wr_mask_s cn52xxp1;
2544 struct cvmx_npei_win_wr_mask_s cn56xx;
2545 struct cvmx_npei_win_wr_mask_s cn56xxp1;
2546};
2547
2548union cvmx_npei_window_ctl {
2549 uint64_t u64;
2550 struct cvmx_npei_window_ctl_s {
2551 uint64_t reserved_32_63:32;
2552 uint64_t time:32;
2553 } s;
2554 struct cvmx_npei_window_ctl_s cn52xx;
2555 struct cvmx_npei_window_ctl_s cn52xxp1;
2556 struct cvmx_npei_window_ctl_s cn56xx;
2557 struct cvmx_npei_window_ctl_s cn56xxp1;
2558};
2559
2560#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-npi-defs.h b/arch/mips/include/asm/octeon/cvmx-npi-defs.h
new file mode 100644
index 000000000000..4e03cd8561e3
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-npi-defs.h
@@ -0,0 +1,1735 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_NPI_DEFS_H__
29#define __CVMX_NPI_DEFS_H__
30
31#define CVMX_NPI_BASE_ADDR_INPUT0 \
32 CVMX_ADD_IO_SEG(0x00011F0000000070ull)
33#define CVMX_NPI_BASE_ADDR_INPUT1 \
34 CVMX_ADD_IO_SEG(0x00011F0000000080ull)
35#define CVMX_NPI_BASE_ADDR_INPUT2 \
36 CVMX_ADD_IO_SEG(0x00011F0000000090ull)
37#define CVMX_NPI_BASE_ADDR_INPUT3 \
38 CVMX_ADD_IO_SEG(0x00011F00000000A0ull)
39#define CVMX_NPI_BASE_ADDR_INPUTX(offset) \
40 CVMX_ADD_IO_SEG(0x00011F0000000070ull + (((offset) & 3) * 16))
41#define CVMX_NPI_BASE_ADDR_OUTPUT0 \
42 CVMX_ADD_IO_SEG(0x00011F00000000B8ull)
43#define CVMX_NPI_BASE_ADDR_OUTPUT1 \
44 CVMX_ADD_IO_SEG(0x00011F00000000C0ull)
45#define CVMX_NPI_BASE_ADDR_OUTPUT2 \
46 CVMX_ADD_IO_SEG(0x00011F00000000C8ull)
47#define CVMX_NPI_BASE_ADDR_OUTPUT3 \
48 CVMX_ADD_IO_SEG(0x00011F00000000D0ull)
49#define CVMX_NPI_BASE_ADDR_OUTPUTX(offset) \
50 CVMX_ADD_IO_SEG(0x00011F00000000B8ull + (((offset) & 3) * 8))
51#define CVMX_NPI_BIST_STATUS \
52 CVMX_ADD_IO_SEG(0x00011F00000003F8ull)
53#define CVMX_NPI_BUFF_SIZE_OUTPUT0 \
54 CVMX_ADD_IO_SEG(0x00011F00000000E0ull)
55#define CVMX_NPI_BUFF_SIZE_OUTPUT1 \
56 CVMX_ADD_IO_SEG(0x00011F00000000E8ull)
57#define CVMX_NPI_BUFF_SIZE_OUTPUT2 \
58 CVMX_ADD_IO_SEG(0x00011F00000000F0ull)
59#define CVMX_NPI_BUFF_SIZE_OUTPUT3 \
60 CVMX_ADD_IO_SEG(0x00011F00000000F8ull)
61#define CVMX_NPI_BUFF_SIZE_OUTPUTX(offset) \
62 CVMX_ADD_IO_SEG(0x00011F00000000E0ull + (((offset) & 3) * 8))
63#define CVMX_NPI_COMP_CTL \
64 CVMX_ADD_IO_SEG(0x00011F0000000218ull)
65#define CVMX_NPI_CTL_STATUS \
66 CVMX_ADD_IO_SEG(0x00011F0000000010ull)
67#define CVMX_NPI_DBG_SELECT \
68 CVMX_ADD_IO_SEG(0x00011F0000000008ull)
69#define CVMX_NPI_DMA_CONTROL \
70 CVMX_ADD_IO_SEG(0x00011F0000000128ull)
71#define CVMX_NPI_DMA_HIGHP_COUNTS \
72 CVMX_ADD_IO_SEG(0x00011F0000000148ull)
73#define CVMX_NPI_DMA_HIGHP_NADDR \
74 CVMX_ADD_IO_SEG(0x00011F0000000158ull)
75#define CVMX_NPI_DMA_LOWP_COUNTS \
76 CVMX_ADD_IO_SEG(0x00011F0000000140ull)
77#define CVMX_NPI_DMA_LOWP_NADDR \
78 CVMX_ADD_IO_SEG(0x00011F0000000150ull)
79#define CVMX_NPI_HIGHP_DBELL \
80 CVMX_ADD_IO_SEG(0x00011F0000000120ull)
81#define CVMX_NPI_HIGHP_IBUFF_SADDR \
82 CVMX_ADD_IO_SEG(0x00011F0000000110ull)
83#define CVMX_NPI_INPUT_CONTROL \
84 CVMX_ADD_IO_SEG(0x00011F0000000138ull)
85#define CVMX_NPI_INT_ENB \
86 CVMX_ADD_IO_SEG(0x00011F0000000020ull)
87#define CVMX_NPI_INT_SUM \
88 CVMX_ADD_IO_SEG(0x00011F0000000018ull)
89#define CVMX_NPI_LOWP_DBELL \
90 CVMX_ADD_IO_SEG(0x00011F0000000118ull)
91#define CVMX_NPI_LOWP_IBUFF_SADDR \
92 CVMX_ADD_IO_SEG(0x00011F0000000108ull)
93#define CVMX_NPI_MEM_ACCESS_SUBID3 \
94 CVMX_ADD_IO_SEG(0x00011F0000000028ull)
95#define CVMX_NPI_MEM_ACCESS_SUBID4 \
96 CVMX_ADD_IO_SEG(0x00011F0000000030ull)
97#define CVMX_NPI_MEM_ACCESS_SUBID5 \
98 CVMX_ADD_IO_SEG(0x00011F0000000038ull)
99#define CVMX_NPI_MEM_ACCESS_SUBID6 \
100 CVMX_ADD_IO_SEG(0x00011F0000000040ull)
101#define CVMX_NPI_MEM_ACCESS_SUBIDX(offset) \
102 CVMX_ADD_IO_SEG(0x00011F0000000028ull + (((offset) & 7) * 8) - 8 * 3)
103#define CVMX_NPI_MSI_RCV \
104 (0x0000000000000190ull)
105#define CVMX_NPI_NPI_MSI_RCV \
106 CVMX_ADD_IO_SEG(0x00011F0000001190ull)
107#define CVMX_NPI_NUM_DESC_OUTPUT0 \
108 CVMX_ADD_IO_SEG(0x00011F0000000050ull)
109#define CVMX_NPI_NUM_DESC_OUTPUT1 \
110 CVMX_ADD_IO_SEG(0x00011F0000000058ull)
111#define CVMX_NPI_NUM_DESC_OUTPUT2 \
112 CVMX_ADD_IO_SEG(0x00011F0000000060ull)
113#define CVMX_NPI_NUM_DESC_OUTPUT3 \
114 CVMX_ADD_IO_SEG(0x00011F0000000068ull)
115#define CVMX_NPI_NUM_DESC_OUTPUTX(offset) \
116 CVMX_ADD_IO_SEG(0x00011F0000000050ull + (((offset) & 3) * 8))
117#define CVMX_NPI_OUTPUT_CONTROL \
118 CVMX_ADD_IO_SEG(0x00011F0000000100ull)
119#define CVMX_NPI_P0_DBPAIR_ADDR \
120 CVMX_ADD_IO_SEG(0x00011F0000000180ull)
121#define CVMX_NPI_P0_INSTR_ADDR \
122 CVMX_ADD_IO_SEG(0x00011F00000001C0ull)
123#define CVMX_NPI_P0_INSTR_CNTS \
124 CVMX_ADD_IO_SEG(0x00011F00000001A0ull)
125#define CVMX_NPI_P0_PAIR_CNTS \
126 CVMX_ADD_IO_SEG(0x00011F0000000160ull)
127#define CVMX_NPI_P1_DBPAIR_ADDR \
128 CVMX_ADD_IO_SEG(0x00011F0000000188ull)
129#define CVMX_NPI_P1_INSTR_ADDR \
130 CVMX_ADD_IO_SEG(0x00011F00000001C8ull)
131#define CVMX_NPI_P1_INSTR_CNTS \
132 CVMX_ADD_IO_SEG(0x00011F00000001A8ull)
133#define CVMX_NPI_P1_PAIR_CNTS \
134 CVMX_ADD_IO_SEG(0x00011F0000000168ull)
135#define CVMX_NPI_P2_DBPAIR_ADDR \
136 CVMX_ADD_IO_SEG(0x00011F0000000190ull)
137#define CVMX_NPI_P2_INSTR_ADDR \
138 CVMX_ADD_IO_SEG(0x00011F00000001D0ull)
139#define CVMX_NPI_P2_INSTR_CNTS \
140 CVMX_ADD_IO_SEG(0x00011F00000001B0ull)
141#define CVMX_NPI_P2_PAIR_CNTS \
142 CVMX_ADD_IO_SEG(0x00011F0000000170ull)
143#define CVMX_NPI_P3_DBPAIR_ADDR \
144 CVMX_ADD_IO_SEG(0x00011F0000000198ull)
145#define CVMX_NPI_P3_INSTR_ADDR \
146 CVMX_ADD_IO_SEG(0x00011F00000001D8ull)
147#define CVMX_NPI_P3_INSTR_CNTS \
148 CVMX_ADD_IO_SEG(0x00011F00000001B8ull)
149#define CVMX_NPI_P3_PAIR_CNTS \
150 CVMX_ADD_IO_SEG(0x00011F0000000178ull)
151#define CVMX_NPI_PCI_BAR1_INDEXX(offset) \
152 CVMX_ADD_IO_SEG(0x00011F0000001100ull + (((offset) & 31) * 4))
153#define CVMX_NPI_PCI_BIST_REG \
154 CVMX_ADD_IO_SEG(0x00011F00000011C0ull)
155#define CVMX_NPI_PCI_BURST_SIZE \
156 CVMX_ADD_IO_SEG(0x00011F00000000D8ull)
157#define CVMX_NPI_PCI_CFG00 \
158 CVMX_ADD_IO_SEG(0x00011F0000001800ull)
159#define CVMX_NPI_PCI_CFG01 \
160 CVMX_ADD_IO_SEG(0x00011F0000001804ull)
161#define CVMX_NPI_PCI_CFG02 \
162 CVMX_ADD_IO_SEG(0x00011F0000001808ull)
163#define CVMX_NPI_PCI_CFG03 \
164 CVMX_ADD_IO_SEG(0x00011F000000180Cull)
165#define CVMX_NPI_PCI_CFG04 \
166 CVMX_ADD_IO_SEG(0x00011F0000001810ull)
167#define CVMX_NPI_PCI_CFG05 \
168 CVMX_ADD_IO_SEG(0x00011F0000001814ull)
169#define CVMX_NPI_PCI_CFG06 \
170 CVMX_ADD_IO_SEG(0x00011F0000001818ull)
171#define CVMX_NPI_PCI_CFG07 \
172 CVMX_ADD_IO_SEG(0x00011F000000181Cull)
173#define CVMX_NPI_PCI_CFG08 \
174 CVMX_ADD_IO_SEG(0x00011F0000001820ull)
175#define CVMX_NPI_PCI_CFG09 \
176 CVMX_ADD_IO_SEG(0x00011F0000001824ull)
177#define CVMX_NPI_PCI_CFG10 \
178 CVMX_ADD_IO_SEG(0x00011F0000001828ull)
179#define CVMX_NPI_PCI_CFG11 \
180 CVMX_ADD_IO_SEG(0x00011F000000182Cull)
181#define CVMX_NPI_PCI_CFG12 \
182 CVMX_ADD_IO_SEG(0x00011F0000001830ull)
183#define CVMX_NPI_PCI_CFG13 \
184 CVMX_ADD_IO_SEG(0x00011F0000001834ull)
185#define CVMX_NPI_PCI_CFG15 \
186 CVMX_ADD_IO_SEG(0x00011F000000183Cull)
187#define CVMX_NPI_PCI_CFG16 \
188 CVMX_ADD_IO_SEG(0x00011F0000001840ull)
189#define CVMX_NPI_PCI_CFG17 \
190 CVMX_ADD_IO_SEG(0x00011F0000001844ull)
191#define CVMX_NPI_PCI_CFG18 \
192 CVMX_ADD_IO_SEG(0x00011F0000001848ull)
193#define CVMX_NPI_PCI_CFG19 \
194 CVMX_ADD_IO_SEG(0x00011F000000184Cull)
195#define CVMX_NPI_PCI_CFG20 \
196 CVMX_ADD_IO_SEG(0x00011F0000001850ull)
197#define CVMX_NPI_PCI_CFG21 \
198 CVMX_ADD_IO_SEG(0x00011F0000001854ull)
199#define CVMX_NPI_PCI_CFG22 \
200 CVMX_ADD_IO_SEG(0x00011F0000001858ull)
201#define CVMX_NPI_PCI_CFG56 \
202 CVMX_ADD_IO_SEG(0x00011F00000018E0ull)
203#define CVMX_NPI_PCI_CFG57 \
204 CVMX_ADD_IO_SEG(0x00011F00000018E4ull)
205#define CVMX_NPI_PCI_CFG58 \
206 CVMX_ADD_IO_SEG(0x00011F00000018E8ull)
207#define CVMX_NPI_PCI_CFG59 \
208 CVMX_ADD_IO_SEG(0x00011F00000018ECull)
209#define CVMX_NPI_PCI_CFG60 \
210 CVMX_ADD_IO_SEG(0x00011F00000018F0ull)
211#define CVMX_NPI_PCI_CFG61 \
212 CVMX_ADD_IO_SEG(0x00011F00000018F4ull)
213#define CVMX_NPI_PCI_CFG62 \
214 CVMX_ADD_IO_SEG(0x00011F00000018F8ull)
215#define CVMX_NPI_PCI_CFG63 \
216 CVMX_ADD_IO_SEG(0x00011F00000018FCull)
217#define CVMX_NPI_PCI_CNT_REG \
218 CVMX_ADD_IO_SEG(0x00011F00000011B8ull)
219#define CVMX_NPI_PCI_CTL_STATUS_2 \
220 CVMX_ADD_IO_SEG(0x00011F000000118Cull)
221#define CVMX_NPI_PCI_INT_ARB_CFG \
222 CVMX_ADD_IO_SEG(0x00011F0000000130ull)
223#define CVMX_NPI_PCI_INT_ENB2 \
224 CVMX_ADD_IO_SEG(0x00011F00000011A0ull)
225#define CVMX_NPI_PCI_INT_SUM2 \
226 CVMX_ADD_IO_SEG(0x00011F0000001198ull)
227#define CVMX_NPI_PCI_READ_CMD \
228 CVMX_ADD_IO_SEG(0x00011F0000000048ull)
229#define CVMX_NPI_PCI_READ_CMD_6 \
230 CVMX_ADD_IO_SEG(0x00011F0000001180ull)
231#define CVMX_NPI_PCI_READ_CMD_C \
232 CVMX_ADD_IO_SEG(0x00011F0000001184ull)
233#define CVMX_NPI_PCI_READ_CMD_E \
234 CVMX_ADD_IO_SEG(0x00011F0000001188ull)
235#define CVMX_NPI_PCI_SCM_REG \
236 CVMX_ADD_IO_SEG(0x00011F00000011A8ull)
237#define CVMX_NPI_PCI_TSR_REG \
238 CVMX_ADD_IO_SEG(0x00011F00000011B0ull)
239#define CVMX_NPI_PORT32_INSTR_HDR \
240 CVMX_ADD_IO_SEG(0x00011F00000001F8ull)
241#define CVMX_NPI_PORT33_INSTR_HDR \
242 CVMX_ADD_IO_SEG(0x00011F0000000200ull)
243#define CVMX_NPI_PORT34_INSTR_HDR \
244 CVMX_ADD_IO_SEG(0x00011F0000000208ull)
245#define CVMX_NPI_PORT35_INSTR_HDR \
246 CVMX_ADD_IO_SEG(0x00011F0000000210ull)
247#define CVMX_NPI_PORT_BP_CONTROL \
248 CVMX_ADD_IO_SEG(0x00011F00000001F0ull)
249#define CVMX_NPI_PX_DBPAIR_ADDR(offset) \
250 CVMX_ADD_IO_SEG(0x00011F0000000180ull + (((offset) & 3) * 8))
251#define CVMX_NPI_PX_INSTR_ADDR(offset) \
252 CVMX_ADD_IO_SEG(0x00011F00000001C0ull + (((offset) & 3) * 8))
253#define CVMX_NPI_PX_INSTR_CNTS(offset) \
254 CVMX_ADD_IO_SEG(0x00011F00000001A0ull + (((offset) & 3) * 8))
255#define CVMX_NPI_PX_PAIR_CNTS(offset) \
256 CVMX_ADD_IO_SEG(0x00011F0000000160ull + (((offset) & 3) * 8))
257#define CVMX_NPI_RSL_INT_BLOCKS \
258 CVMX_ADD_IO_SEG(0x00011F0000000000ull)
259#define CVMX_NPI_SIZE_INPUT0 \
260 CVMX_ADD_IO_SEG(0x00011F0000000078ull)
261#define CVMX_NPI_SIZE_INPUT1 \
262 CVMX_ADD_IO_SEG(0x00011F0000000088ull)
263#define CVMX_NPI_SIZE_INPUT2 \
264 CVMX_ADD_IO_SEG(0x00011F0000000098ull)
265#define CVMX_NPI_SIZE_INPUT3 \
266 CVMX_ADD_IO_SEG(0x00011F00000000A8ull)
267#define CVMX_NPI_SIZE_INPUTX(offset) \
268 CVMX_ADD_IO_SEG(0x00011F0000000078ull + (((offset) & 3) * 16))
269#define CVMX_NPI_WIN_READ_TO \
270 CVMX_ADD_IO_SEG(0x00011F00000001E0ull)
271
272union cvmx_npi_base_addr_inputx {
273 uint64_t u64;
274 struct cvmx_npi_base_addr_inputx_s {
275 uint64_t baddr:61;
276 uint64_t reserved_0_2:3;
277 } s;
278 struct cvmx_npi_base_addr_inputx_s cn30xx;
279 struct cvmx_npi_base_addr_inputx_s cn31xx;
280 struct cvmx_npi_base_addr_inputx_s cn38xx;
281 struct cvmx_npi_base_addr_inputx_s cn38xxp2;
282 struct cvmx_npi_base_addr_inputx_s cn50xx;
283 struct cvmx_npi_base_addr_inputx_s cn58xx;
284 struct cvmx_npi_base_addr_inputx_s cn58xxp1;
285};
286
287union cvmx_npi_base_addr_outputx {
288 uint64_t u64;
289 struct cvmx_npi_base_addr_outputx_s {
290 uint64_t baddr:61;
291 uint64_t reserved_0_2:3;
292 } s;
293 struct cvmx_npi_base_addr_outputx_s cn30xx;
294 struct cvmx_npi_base_addr_outputx_s cn31xx;
295 struct cvmx_npi_base_addr_outputx_s cn38xx;
296 struct cvmx_npi_base_addr_outputx_s cn38xxp2;
297 struct cvmx_npi_base_addr_outputx_s cn50xx;
298 struct cvmx_npi_base_addr_outputx_s cn58xx;
299 struct cvmx_npi_base_addr_outputx_s cn58xxp1;
300};
301
302union cvmx_npi_bist_status {
303 uint64_t u64;
304 struct cvmx_npi_bist_status_s {
305 uint64_t reserved_20_63:44;
306 uint64_t csr_bs:1;
307 uint64_t dif_bs:1;
308 uint64_t rdp_bs:1;
309 uint64_t pcnc_bs:1;
310 uint64_t pcn_bs:1;
311 uint64_t rdn_bs:1;
312 uint64_t pcac_bs:1;
313 uint64_t pcad_bs:1;
314 uint64_t rdnl_bs:1;
315 uint64_t pgf_bs:1;
316 uint64_t pig_bs:1;
317 uint64_t pof0_bs:1;
318 uint64_t pof1_bs:1;
319 uint64_t pof2_bs:1;
320 uint64_t pof3_bs:1;
321 uint64_t pos_bs:1;
322 uint64_t nus_bs:1;
323 uint64_t dob_bs:1;
324 uint64_t pdf_bs:1;
325 uint64_t dpi_bs:1;
326 } s;
327 struct cvmx_npi_bist_status_cn30xx {
328 uint64_t reserved_20_63:44;
329 uint64_t csr_bs:1;
330 uint64_t dif_bs:1;
331 uint64_t rdp_bs:1;
332 uint64_t pcnc_bs:1;
333 uint64_t pcn_bs:1;
334 uint64_t rdn_bs:1;
335 uint64_t pcac_bs:1;
336 uint64_t pcad_bs:1;
337 uint64_t rdnl_bs:1;
338 uint64_t pgf_bs:1;
339 uint64_t pig_bs:1;
340 uint64_t pof0_bs:1;
341 uint64_t reserved_5_7:3;
342 uint64_t pos_bs:1;
343 uint64_t nus_bs:1;
344 uint64_t dob_bs:1;
345 uint64_t pdf_bs:1;
346 uint64_t dpi_bs:1;
347 } cn30xx;
348 struct cvmx_npi_bist_status_s cn31xx;
349 struct cvmx_npi_bist_status_s cn38xx;
350 struct cvmx_npi_bist_status_s cn38xxp2;
351 struct cvmx_npi_bist_status_cn50xx {
352 uint64_t reserved_20_63:44;
353 uint64_t csr_bs:1;
354 uint64_t dif_bs:1;
355 uint64_t rdp_bs:1;
356 uint64_t pcnc_bs:1;
357 uint64_t pcn_bs:1;
358 uint64_t rdn_bs:1;
359 uint64_t pcac_bs:1;
360 uint64_t pcad_bs:1;
361 uint64_t rdnl_bs:1;
362 uint64_t pgf_bs:1;
363 uint64_t pig_bs:1;
364 uint64_t pof0_bs:1;
365 uint64_t pof1_bs:1;
366 uint64_t reserved_5_6:2;
367 uint64_t pos_bs:1;
368 uint64_t nus_bs:1;
369 uint64_t dob_bs:1;
370 uint64_t pdf_bs:1;
371 uint64_t dpi_bs:1;
372 } cn50xx;
373 struct cvmx_npi_bist_status_s cn58xx;
374 struct cvmx_npi_bist_status_s cn58xxp1;
375};
376
377union cvmx_npi_buff_size_outputx {
378 uint64_t u64;
379 struct cvmx_npi_buff_size_outputx_s {
380 uint64_t reserved_23_63:41;
381 uint64_t isize:7;
382 uint64_t bsize:16;
383 } s;
384 struct cvmx_npi_buff_size_outputx_s cn30xx;
385 struct cvmx_npi_buff_size_outputx_s cn31xx;
386 struct cvmx_npi_buff_size_outputx_s cn38xx;
387 struct cvmx_npi_buff_size_outputx_s cn38xxp2;
388 struct cvmx_npi_buff_size_outputx_s cn50xx;
389 struct cvmx_npi_buff_size_outputx_s cn58xx;
390 struct cvmx_npi_buff_size_outputx_s cn58xxp1;
391};
392
393union cvmx_npi_comp_ctl {
394 uint64_t u64;
395 struct cvmx_npi_comp_ctl_s {
396 uint64_t reserved_10_63:54;
397 uint64_t pctl:5;
398 uint64_t nctl:5;
399 } s;
400 struct cvmx_npi_comp_ctl_s cn50xx;
401 struct cvmx_npi_comp_ctl_s cn58xx;
402 struct cvmx_npi_comp_ctl_s cn58xxp1;
403};
404
405union cvmx_npi_ctl_status {
406 uint64_t u64;
407 struct cvmx_npi_ctl_status_s {
408 uint64_t reserved_63_63:1;
409 uint64_t chip_rev:8;
410 uint64_t dis_pniw:1;
411 uint64_t out3_enb:1;
412 uint64_t out2_enb:1;
413 uint64_t out1_enb:1;
414 uint64_t out0_enb:1;
415 uint64_t ins3_enb:1;
416 uint64_t ins2_enb:1;
417 uint64_t ins1_enb:1;
418 uint64_t ins0_enb:1;
419 uint64_t ins3_64b:1;
420 uint64_t ins2_64b:1;
421 uint64_t ins1_64b:1;
422 uint64_t ins0_64b:1;
423 uint64_t pci_wdis:1;
424 uint64_t wait_com:1;
425 uint64_t reserved_37_39:3;
426 uint64_t max_word:5;
427 uint64_t reserved_10_31:22;
428 uint64_t timer:10;
429 } s;
430 struct cvmx_npi_ctl_status_cn30xx {
431 uint64_t reserved_63_63:1;
432 uint64_t chip_rev:8;
433 uint64_t dis_pniw:1;
434 uint64_t reserved_51_53:3;
435 uint64_t out0_enb:1;
436 uint64_t reserved_47_49:3;
437 uint64_t ins0_enb:1;
438 uint64_t reserved_43_45:3;
439 uint64_t ins0_64b:1;
440 uint64_t pci_wdis:1;
441 uint64_t wait_com:1;
442 uint64_t reserved_37_39:3;
443 uint64_t max_word:5;
444 uint64_t reserved_10_31:22;
445 uint64_t timer:10;
446 } cn30xx;
447 struct cvmx_npi_ctl_status_cn31xx {
448 uint64_t reserved_63_63:1;
449 uint64_t chip_rev:8;
450 uint64_t dis_pniw:1;
451 uint64_t reserved_52_53:2;
452 uint64_t out1_enb:1;
453 uint64_t out0_enb:1;
454 uint64_t reserved_48_49:2;
455 uint64_t ins1_enb:1;
456 uint64_t ins0_enb:1;
457 uint64_t reserved_44_45:2;
458 uint64_t ins1_64b:1;
459 uint64_t ins0_64b:1;
460 uint64_t pci_wdis:1;
461 uint64_t wait_com:1;
462 uint64_t reserved_37_39:3;
463 uint64_t max_word:5;
464 uint64_t reserved_10_31:22;
465 uint64_t timer:10;
466 } cn31xx;
467 struct cvmx_npi_ctl_status_s cn38xx;
468 struct cvmx_npi_ctl_status_s cn38xxp2;
469 struct cvmx_npi_ctl_status_cn31xx cn50xx;
470 struct cvmx_npi_ctl_status_s cn58xx;
471 struct cvmx_npi_ctl_status_s cn58xxp1;
472};
473
474union cvmx_npi_dbg_select {
475 uint64_t u64;
476 struct cvmx_npi_dbg_select_s {
477 uint64_t reserved_16_63:48;
478 uint64_t dbg_sel:16;
479 } s;
480 struct cvmx_npi_dbg_select_s cn30xx;
481 struct cvmx_npi_dbg_select_s cn31xx;
482 struct cvmx_npi_dbg_select_s cn38xx;
483 struct cvmx_npi_dbg_select_s cn38xxp2;
484 struct cvmx_npi_dbg_select_s cn50xx;
485 struct cvmx_npi_dbg_select_s cn58xx;
486 struct cvmx_npi_dbg_select_s cn58xxp1;
487};
488
489union cvmx_npi_dma_control {
490 uint64_t u64;
491 struct cvmx_npi_dma_control_s {
492 uint64_t reserved_36_63:28;
493 uint64_t b0_lend:1;
494 uint64_t dwb_denb:1;
495 uint64_t dwb_ichk:9;
496 uint64_t fpa_que:3;
497 uint64_t o_add1:1;
498 uint64_t o_ro:1;
499 uint64_t o_ns:1;
500 uint64_t o_es:2;
501 uint64_t o_mode:1;
502 uint64_t hp_enb:1;
503 uint64_t lp_enb:1;
504 uint64_t csize:14;
505 } s;
506 struct cvmx_npi_dma_control_s cn30xx;
507 struct cvmx_npi_dma_control_s cn31xx;
508 struct cvmx_npi_dma_control_s cn38xx;
509 struct cvmx_npi_dma_control_s cn38xxp2;
510 struct cvmx_npi_dma_control_s cn50xx;
511 struct cvmx_npi_dma_control_s cn58xx;
512 struct cvmx_npi_dma_control_s cn58xxp1;
513};
514
515union cvmx_npi_dma_highp_counts {
516 uint64_t u64;
517 struct cvmx_npi_dma_highp_counts_s {
518 uint64_t reserved_39_63:25;
519 uint64_t fcnt:7;
520 uint64_t dbell:32;
521 } s;
522 struct cvmx_npi_dma_highp_counts_s cn30xx;
523 struct cvmx_npi_dma_highp_counts_s cn31xx;
524 struct cvmx_npi_dma_highp_counts_s cn38xx;
525 struct cvmx_npi_dma_highp_counts_s cn38xxp2;
526 struct cvmx_npi_dma_highp_counts_s cn50xx;
527 struct cvmx_npi_dma_highp_counts_s cn58xx;
528 struct cvmx_npi_dma_highp_counts_s cn58xxp1;
529};
530
531union cvmx_npi_dma_highp_naddr {
532 uint64_t u64;
533 struct cvmx_npi_dma_highp_naddr_s {
534 uint64_t reserved_40_63:24;
535 uint64_t state:4;
536 uint64_t addr:36;
537 } s;
538 struct cvmx_npi_dma_highp_naddr_s cn30xx;
539 struct cvmx_npi_dma_highp_naddr_s cn31xx;
540 struct cvmx_npi_dma_highp_naddr_s cn38xx;
541 struct cvmx_npi_dma_highp_naddr_s cn38xxp2;
542 struct cvmx_npi_dma_highp_naddr_s cn50xx;
543 struct cvmx_npi_dma_highp_naddr_s cn58xx;
544 struct cvmx_npi_dma_highp_naddr_s cn58xxp1;
545};
546
547union cvmx_npi_dma_lowp_counts {
548 uint64_t u64;
549 struct cvmx_npi_dma_lowp_counts_s {
550 uint64_t reserved_39_63:25;
551 uint64_t fcnt:7;
552 uint64_t dbell:32;
553 } s;
554 struct cvmx_npi_dma_lowp_counts_s cn30xx;
555 struct cvmx_npi_dma_lowp_counts_s cn31xx;
556 struct cvmx_npi_dma_lowp_counts_s cn38xx;
557 struct cvmx_npi_dma_lowp_counts_s cn38xxp2;
558 struct cvmx_npi_dma_lowp_counts_s cn50xx;
559 struct cvmx_npi_dma_lowp_counts_s cn58xx;
560 struct cvmx_npi_dma_lowp_counts_s cn58xxp1;
561};
562
563union cvmx_npi_dma_lowp_naddr {
564 uint64_t u64;
565 struct cvmx_npi_dma_lowp_naddr_s {
566 uint64_t reserved_40_63:24;
567 uint64_t state:4;
568 uint64_t addr:36;
569 } s;
570 struct cvmx_npi_dma_lowp_naddr_s cn30xx;
571 struct cvmx_npi_dma_lowp_naddr_s cn31xx;
572 struct cvmx_npi_dma_lowp_naddr_s cn38xx;
573 struct cvmx_npi_dma_lowp_naddr_s cn38xxp2;
574 struct cvmx_npi_dma_lowp_naddr_s cn50xx;
575 struct cvmx_npi_dma_lowp_naddr_s cn58xx;
576 struct cvmx_npi_dma_lowp_naddr_s cn58xxp1;
577};
578
579union cvmx_npi_highp_dbell {
580 uint64_t u64;
581 struct cvmx_npi_highp_dbell_s {
582 uint64_t reserved_16_63:48;
583 uint64_t dbell:16;
584 } s;
585 struct cvmx_npi_highp_dbell_s cn30xx;
586 struct cvmx_npi_highp_dbell_s cn31xx;
587 struct cvmx_npi_highp_dbell_s cn38xx;
588 struct cvmx_npi_highp_dbell_s cn38xxp2;
589 struct cvmx_npi_highp_dbell_s cn50xx;
590 struct cvmx_npi_highp_dbell_s cn58xx;
591 struct cvmx_npi_highp_dbell_s cn58xxp1;
592};
593
594union cvmx_npi_highp_ibuff_saddr {
595 uint64_t u64;
596 struct cvmx_npi_highp_ibuff_saddr_s {
597 uint64_t reserved_36_63:28;
598 uint64_t saddr:36;
599 } s;
600 struct cvmx_npi_highp_ibuff_saddr_s cn30xx;
601 struct cvmx_npi_highp_ibuff_saddr_s cn31xx;
602 struct cvmx_npi_highp_ibuff_saddr_s cn38xx;
603 struct cvmx_npi_highp_ibuff_saddr_s cn38xxp2;
604 struct cvmx_npi_highp_ibuff_saddr_s cn50xx;
605 struct cvmx_npi_highp_ibuff_saddr_s cn58xx;
606 struct cvmx_npi_highp_ibuff_saddr_s cn58xxp1;
607};
608
609union cvmx_npi_input_control {
610 uint64_t u64;
611 struct cvmx_npi_input_control_s {
612 uint64_t reserved_23_63:41;
613 uint64_t pkt_rr:1;
614 uint64_t pbp_dhi:13;
615 uint64_t d_nsr:1;
616 uint64_t d_esr:2;
617 uint64_t d_ror:1;
618 uint64_t use_csr:1;
619 uint64_t nsr:1;
620 uint64_t esr:2;
621 uint64_t ror:1;
622 } s;
623 struct cvmx_npi_input_control_cn30xx {
624 uint64_t reserved_22_63:42;
625 uint64_t pbp_dhi:13;
626 uint64_t d_nsr:1;
627 uint64_t d_esr:2;
628 uint64_t d_ror:1;
629 uint64_t use_csr:1;
630 uint64_t nsr:1;
631 uint64_t esr:2;
632 uint64_t ror:1;
633 } cn30xx;
634 struct cvmx_npi_input_control_cn30xx cn31xx;
635 struct cvmx_npi_input_control_s cn38xx;
636 struct cvmx_npi_input_control_cn30xx cn38xxp2;
637 struct cvmx_npi_input_control_s cn50xx;
638 struct cvmx_npi_input_control_s cn58xx;
639 struct cvmx_npi_input_control_s cn58xxp1;
640};
641
642union cvmx_npi_int_enb {
643 uint64_t u64;
644 struct cvmx_npi_int_enb_s {
645 uint64_t reserved_62_63:2;
646 uint64_t q1_a_f:1;
647 uint64_t q1_s_e:1;
648 uint64_t pdf_p_f:1;
649 uint64_t pdf_p_e:1;
650 uint64_t pcf_p_f:1;
651 uint64_t pcf_p_e:1;
652 uint64_t rdx_s_e:1;
653 uint64_t rwx_s_e:1;
654 uint64_t pnc_a_f:1;
655 uint64_t pnc_s_e:1;
656 uint64_t com_a_f:1;
657 uint64_t com_s_e:1;
658 uint64_t q3_a_f:1;
659 uint64_t q3_s_e:1;
660 uint64_t q2_a_f:1;
661 uint64_t q2_s_e:1;
662 uint64_t pcr_a_f:1;
663 uint64_t pcr_s_e:1;
664 uint64_t fcr_a_f:1;
665 uint64_t fcr_s_e:1;
666 uint64_t iobdma:1;
667 uint64_t p_dperr:1;
668 uint64_t win_rto:1;
669 uint64_t i3_pperr:1;
670 uint64_t i2_pperr:1;
671 uint64_t i1_pperr:1;
672 uint64_t i0_pperr:1;
673 uint64_t p3_ptout:1;
674 uint64_t p2_ptout:1;
675 uint64_t p1_ptout:1;
676 uint64_t p0_ptout:1;
677 uint64_t p3_pperr:1;
678 uint64_t p2_pperr:1;
679 uint64_t p1_pperr:1;
680 uint64_t p0_pperr:1;
681 uint64_t g3_rtout:1;
682 uint64_t g2_rtout:1;
683 uint64_t g1_rtout:1;
684 uint64_t g0_rtout:1;
685 uint64_t p3_perr:1;
686 uint64_t p2_perr:1;
687 uint64_t p1_perr:1;
688 uint64_t p0_perr:1;
689 uint64_t p3_rtout:1;
690 uint64_t p2_rtout:1;
691 uint64_t p1_rtout:1;
692 uint64_t p0_rtout:1;
693 uint64_t i3_overf:1;
694 uint64_t i2_overf:1;
695 uint64_t i1_overf:1;
696 uint64_t i0_overf:1;
697 uint64_t i3_rtout:1;
698 uint64_t i2_rtout:1;
699 uint64_t i1_rtout:1;
700 uint64_t i0_rtout:1;
701 uint64_t po3_2sml:1;
702 uint64_t po2_2sml:1;
703 uint64_t po1_2sml:1;
704 uint64_t po0_2sml:1;
705 uint64_t pci_rsl:1;
706 uint64_t rml_wto:1;
707 uint64_t rml_rto:1;
708 } s;
709 struct cvmx_npi_int_enb_cn30xx {
710 uint64_t reserved_62_63:2;
711 uint64_t q1_a_f:1;
712 uint64_t q1_s_e:1;
713 uint64_t pdf_p_f:1;
714 uint64_t pdf_p_e:1;
715 uint64_t pcf_p_f:1;
716 uint64_t pcf_p_e:1;
717 uint64_t rdx_s_e:1;
718 uint64_t rwx_s_e:1;
719 uint64_t pnc_a_f:1;
720 uint64_t pnc_s_e:1;
721 uint64_t com_a_f:1;
722 uint64_t com_s_e:1;
723 uint64_t q3_a_f:1;
724 uint64_t q3_s_e:1;
725 uint64_t q2_a_f:1;
726 uint64_t q2_s_e:1;
727 uint64_t pcr_a_f:1;
728 uint64_t pcr_s_e:1;
729 uint64_t fcr_a_f:1;
730 uint64_t fcr_s_e:1;
731 uint64_t iobdma:1;
732 uint64_t p_dperr:1;
733 uint64_t win_rto:1;
734 uint64_t reserved_36_38:3;
735 uint64_t i0_pperr:1;
736 uint64_t reserved_32_34:3;
737 uint64_t p0_ptout:1;
738 uint64_t reserved_28_30:3;
739 uint64_t p0_pperr:1;
740 uint64_t reserved_24_26:3;
741 uint64_t g0_rtout:1;
742 uint64_t reserved_20_22:3;
743 uint64_t p0_perr:1;
744 uint64_t reserved_16_18:3;
745 uint64_t p0_rtout:1;
746 uint64_t reserved_12_14:3;
747 uint64_t i0_overf:1;
748 uint64_t reserved_8_10:3;
749 uint64_t i0_rtout:1;
750 uint64_t reserved_4_6:3;
751 uint64_t po0_2sml:1;
752 uint64_t pci_rsl:1;
753 uint64_t rml_wto:1;
754 uint64_t rml_rto:1;
755 } cn30xx;
756 struct cvmx_npi_int_enb_cn31xx {
757 uint64_t reserved_62_63:2;
758 uint64_t q1_a_f:1;
759 uint64_t q1_s_e:1;
760 uint64_t pdf_p_f:1;
761 uint64_t pdf_p_e:1;
762 uint64_t pcf_p_f:1;
763 uint64_t pcf_p_e:1;
764 uint64_t rdx_s_e:1;
765 uint64_t rwx_s_e:1;
766 uint64_t pnc_a_f:1;
767 uint64_t pnc_s_e:1;
768 uint64_t com_a_f:1;
769 uint64_t com_s_e:1;
770 uint64_t q3_a_f:1;
771 uint64_t q3_s_e:1;
772 uint64_t q2_a_f:1;
773 uint64_t q2_s_e:1;
774 uint64_t pcr_a_f:1;
775 uint64_t pcr_s_e:1;
776 uint64_t fcr_a_f:1;
777 uint64_t fcr_s_e:1;
778 uint64_t iobdma:1;
779 uint64_t p_dperr:1;
780 uint64_t win_rto:1;
781 uint64_t reserved_37_38:2;
782 uint64_t i1_pperr:1;
783 uint64_t i0_pperr:1;
784 uint64_t reserved_33_34:2;
785 uint64_t p1_ptout:1;
786 uint64_t p0_ptout:1;
787 uint64_t reserved_29_30:2;
788 uint64_t p1_pperr:1;
789 uint64_t p0_pperr:1;
790 uint64_t reserved_25_26:2;
791 uint64_t g1_rtout:1;
792 uint64_t g0_rtout:1;
793 uint64_t reserved_21_22:2;
794 uint64_t p1_perr:1;
795 uint64_t p0_perr:1;
796 uint64_t reserved_17_18:2;
797 uint64_t p1_rtout:1;
798 uint64_t p0_rtout:1;
799 uint64_t reserved_13_14:2;
800 uint64_t i1_overf:1;
801 uint64_t i0_overf:1;
802 uint64_t reserved_9_10:2;
803 uint64_t i1_rtout:1;
804 uint64_t i0_rtout:1;
805 uint64_t reserved_5_6:2;
806 uint64_t po1_2sml:1;
807 uint64_t po0_2sml:1;
808 uint64_t pci_rsl:1;
809 uint64_t rml_wto:1;
810 uint64_t rml_rto:1;
811 } cn31xx;
812 struct cvmx_npi_int_enb_s cn38xx;
813 struct cvmx_npi_int_enb_cn38xxp2 {
814 uint64_t reserved_42_63:22;
815 uint64_t iobdma:1;
816 uint64_t p_dperr:1;
817 uint64_t win_rto:1;
818 uint64_t i3_pperr:1;
819 uint64_t i2_pperr:1;
820 uint64_t i1_pperr:1;
821 uint64_t i0_pperr:1;
822 uint64_t p3_ptout:1;
823 uint64_t p2_ptout:1;
824 uint64_t p1_ptout:1;
825 uint64_t p0_ptout:1;
826 uint64_t p3_pperr:1;
827 uint64_t p2_pperr:1;
828 uint64_t p1_pperr:1;
829 uint64_t p0_pperr:1;
830 uint64_t g3_rtout:1;
831 uint64_t g2_rtout:1;
832 uint64_t g1_rtout:1;
833 uint64_t g0_rtout:1;
834 uint64_t p3_perr:1;
835 uint64_t p2_perr:1;
836 uint64_t p1_perr:1;
837 uint64_t p0_perr:1;
838 uint64_t p3_rtout:1;
839 uint64_t p2_rtout:1;
840 uint64_t p1_rtout:1;
841 uint64_t p0_rtout:1;
842 uint64_t i3_overf:1;
843 uint64_t i2_overf:1;
844 uint64_t i1_overf:1;
845 uint64_t i0_overf:1;
846 uint64_t i3_rtout:1;
847 uint64_t i2_rtout:1;
848 uint64_t i1_rtout:1;
849 uint64_t i0_rtout:1;
850 uint64_t po3_2sml:1;
851 uint64_t po2_2sml:1;
852 uint64_t po1_2sml:1;
853 uint64_t po0_2sml:1;
854 uint64_t pci_rsl:1;
855 uint64_t rml_wto:1;
856 uint64_t rml_rto:1;
857 } cn38xxp2;
858 struct cvmx_npi_int_enb_cn31xx cn50xx;
859 struct cvmx_npi_int_enb_s cn58xx;
860 struct cvmx_npi_int_enb_s cn58xxp1;
861};
862
863union cvmx_npi_int_sum {
864 uint64_t u64;
865 struct cvmx_npi_int_sum_s {
866 uint64_t reserved_62_63:2;
867 uint64_t q1_a_f:1;
868 uint64_t q1_s_e:1;
869 uint64_t pdf_p_f:1;
870 uint64_t pdf_p_e:1;
871 uint64_t pcf_p_f:1;
872 uint64_t pcf_p_e:1;
873 uint64_t rdx_s_e:1;
874 uint64_t rwx_s_e:1;
875 uint64_t pnc_a_f:1;
876 uint64_t pnc_s_e:1;
877 uint64_t com_a_f:1;
878 uint64_t com_s_e:1;
879 uint64_t q3_a_f:1;
880 uint64_t q3_s_e:1;
881 uint64_t q2_a_f:1;
882 uint64_t q2_s_e:1;
883 uint64_t pcr_a_f:1;
884 uint64_t pcr_s_e:1;
885 uint64_t fcr_a_f:1;
886 uint64_t fcr_s_e:1;
887 uint64_t iobdma:1;
888 uint64_t p_dperr:1;
889 uint64_t win_rto:1;
890 uint64_t i3_pperr:1;
891 uint64_t i2_pperr:1;
892 uint64_t i1_pperr:1;
893 uint64_t i0_pperr:1;
894 uint64_t p3_ptout:1;
895 uint64_t p2_ptout:1;
896 uint64_t p1_ptout:1;
897 uint64_t p0_ptout:1;
898 uint64_t p3_pperr:1;
899 uint64_t p2_pperr:1;
900 uint64_t p1_pperr:1;
901 uint64_t p0_pperr:1;
902 uint64_t g3_rtout:1;
903 uint64_t g2_rtout:1;
904 uint64_t g1_rtout:1;
905 uint64_t g0_rtout:1;
906 uint64_t p3_perr:1;
907 uint64_t p2_perr:1;
908 uint64_t p1_perr:1;
909 uint64_t p0_perr:1;
910 uint64_t p3_rtout:1;
911 uint64_t p2_rtout:1;
912 uint64_t p1_rtout:1;
913 uint64_t p0_rtout:1;
914 uint64_t i3_overf:1;
915 uint64_t i2_overf:1;
916 uint64_t i1_overf:1;
917 uint64_t i0_overf:1;
918 uint64_t i3_rtout:1;
919 uint64_t i2_rtout:1;
920 uint64_t i1_rtout:1;
921 uint64_t i0_rtout:1;
922 uint64_t po3_2sml:1;
923 uint64_t po2_2sml:1;
924 uint64_t po1_2sml:1;
925 uint64_t po0_2sml:1;
926 uint64_t pci_rsl:1;
927 uint64_t rml_wto:1;
928 uint64_t rml_rto:1;
929 } s;
930 struct cvmx_npi_int_sum_cn30xx {
931 uint64_t reserved_62_63:2;
932 uint64_t q1_a_f:1;
933 uint64_t q1_s_e:1;
934 uint64_t pdf_p_f:1;
935 uint64_t pdf_p_e:1;
936 uint64_t pcf_p_f:1;
937 uint64_t pcf_p_e:1;
938 uint64_t rdx_s_e:1;
939 uint64_t rwx_s_e:1;
940 uint64_t pnc_a_f:1;
941 uint64_t pnc_s_e:1;
942 uint64_t com_a_f:1;
943 uint64_t com_s_e:1;
944 uint64_t q3_a_f:1;
945 uint64_t q3_s_e:1;
946 uint64_t q2_a_f:1;
947 uint64_t q2_s_e:1;
948 uint64_t pcr_a_f:1;
949 uint64_t pcr_s_e:1;
950 uint64_t fcr_a_f:1;
951 uint64_t fcr_s_e:1;
952 uint64_t iobdma:1;
953 uint64_t p_dperr:1;
954 uint64_t win_rto:1;
955 uint64_t reserved_36_38:3;
956 uint64_t i0_pperr:1;
957 uint64_t reserved_32_34:3;
958 uint64_t p0_ptout:1;
959 uint64_t reserved_28_30:3;
960 uint64_t p0_pperr:1;
961 uint64_t reserved_24_26:3;
962 uint64_t g0_rtout:1;
963 uint64_t reserved_20_22:3;
964 uint64_t p0_perr:1;
965 uint64_t reserved_16_18:3;
966 uint64_t p0_rtout:1;
967 uint64_t reserved_12_14:3;
968 uint64_t i0_overf:1;
969 uint64_t reserved_8_10:3;
970 uint64_t i0_rtout:1;
971 uint64_t reserved_4_6:3;
972 uint64_t po0_2sml:1;
973 uint64_t pci_rsl:1;
974 uint64_t rml_wto:1;
975 uint64_t rml_rto:1;
976 } cn30xx;
977 struct cvmx_npi_int_sum_cn31xx {
978 uint64_t reserved_62_63:2;
979 uint64_t q1_a_f:1;
980 uint64_t q1_s_e:1;
981 uint64_t pdf_p_f:1;
982 uint64_t pdf_p_e:1;
983 uint64_t pcf_p_f:1;
984 uint64_t pcf_p_e:1;
985 uint64_t rdx_s_e:1;
986 uint64_t rwx_s_e:1;
987 uint64_t pnc_a_f:1;
988 uint64_t pnc_s_e:1;
989 uint64_t com_a_f:1;
990 uint64_t com_s_e:1;
991 uint64_t q3_a_f:1;
992 uint64_t q3_s_e:1;
993 uint64_t q2_a_f:1;
994 uint64_t q2_s_e:1;
995 uint64_t pcr_a_f:1;
996 uint64_t pcr_s_e:1;
997 uint64_t fcr_a_f:1;
998 uint64_t fcr_s_e:1;
999 uint64_t iobdma:1;
1000 uint64_t p_dperr:1;
1001 uint64_t win_rto:1;
1002 uint64_t reserved_37_38:2;
1003 uint64_t i1_pperr:1;
1004 uint64_t i0_pperr:1;
1005 uint64_t reserved_33_34:2;
1006 uint64_t p1_ptout:1;
1007 uint64_t p0_ptout:1;
1008 uint64_t reserved_29_30:2;
1009 uint64_t p1_pperr:1;
1010 uint64_t p0_pperr:1;
1011 uint64_t reserved_25_26:2;
1012 uint64_t g1_rtout:1;
1013 uint64_t g0_rtout:1;
1014 uint64_t reserved_21_22:2;
1015 uint64_t p1_perr:1;
1016 uint64_t p0_perr:1;
1017 uint64_t reserved_17_18:2;
1018 uint64_t p1_rtout:1;
1019 uint64_t p0_rtout:1;
1020 uint64_t reserved_13_14:2;
1021 uint64_t i1_overf:1;
1022 uint64_t i0_overf:1;
1023 uint64_t reserved_9_10:2;
1024 uint64_t i1_rtout:1;
1025 uint64_t i0_rtout:1;
1026 uint64_t reserved_5_6:2;
1027 uint64_t po1_2sml:1;
1028 uint64_t po0_2sml:1;
1029 uint64_t pci_rsl:1;
1030 uint64_t rml_wto:1;
1031 uint64_t rml_rto:1;
1032 } cn31xx;
1033 struct cvmx_npi_int_sum_s cn38xx;
1034 struct cvmx_npi_int_sum_cn38xxp2 {
1035 uint64_t reserved_42_63:22;
1036 uint64_t iobdma:1;
1037 uint64_t p_dperr:1;
1038 uint64_t win_rto:1;
1039 uint64_t i3_pperr:1;
1040 uint64_t i2_pperr:1;
1041 uint64_t i1_pperr:1;
1042 uint64_t i0_pperr:1;
1043 uint64_t p3_ptout:1;
1044 uint64_t p2_ptout:1;
1045 uint64_t p1_ptout:1;
1046 uint64_t p0_ptout:1;
1047 uint64_t p3_pperr:1;
1048 uint64_t p2_pperr:1;
1049 uint64_t p1_pperr:1;
1050 uint64_t p0_pperr:1;
1051 uint64_t g3_rtout:1;
1052 uint64_t g2_rtout:1;
1053 uint64_t g1_rtout:1;
1054 uint64_t g0_rtout:1;
1055 uint64_t p3_perr:1;
1056 uint64_t p2_perr:1;
1057 uint64_t p1_perr:1;
1058 uint64_t p0_perr:1;
1059 uint64_t p3_rtout:1;
1060 uint64_t p2_rtout:1;
1061 uint64_t p1_rtout:1;
1062 uint64_t p0_rtout:1;
1063 uint64_t i3_overf:1;
1064 uint64_t i2_overf:1;
1065 uint64_t i1_overf:1;
1066 uint64_t i0_overf:1;
1067 uint64_t i3_rtout:1;
1068 uint64_t i2_rtout:1;
1069 uint64_t i1_rtout:1;
1070 uint64_t i0_rtout:1;
1071 uint64_t po3_2sml:1;
1072 uint64_t po2_2sml:1;
1073 uint64_t po1_2sml:1;
1074 uint64_t po0_2sml:1;
1075 uint64_t pci_rsl:1;
1076 uint64_t rml_wto:1;
1077 uint64_t rml_rto:1;
1078 } cn38xxp2;
1079 struct cvmx_npi_int_sum_cn31xx cn50xx;
1080 struct cvmx_npi_int_sum_s cn58xx;
1081 struct cvmx_npi_int_sum_s cn58xxp1;
1082};
1083
1084union cvmx_npi_lowp_dbell {
1085 uint64_t u64;
1086 struct cvmx_npi_lowp_dbell_s {
1087 uint64_t reserved_16_63:48;
1088 uint64_t dbell:16;
1089 } s;
1090 struct cvmx_npi_lowp_dbell_s cn30xx;
1091 struct cvmx_npi_lowp_dbell_s cn31xx;
1092 struct cvmx_npi_lowp_dbell_s cn38xx;
1093 struct cvmx_npi_lowp_dbell_s cn38xxp2;
1094 struct cvmx_npi_lowp_dbell_s cn50xx;
1095 struct cvmx_npi_lowp_dbell_s cn58xx;
1096 struct cvmx_npi_lowp_dbell_s cn58xxp1;
1097};
1098
1099union cvmx_npi_lowp_ibuff_saddr {
1100 uint64_t u64;
1101 struct cvmx_npi_lowp_ibuff_saddr_s {
1102 uint64_t reserved_36_63:28;
1103 uint64_t saddr:36;
1104 } s;
1105 struct cvmx_npi_lowp_ibuff_saddr_s cn30xx;
1106 struct cvmx_npi_lowp_ibuff_saddr_s cn31xx;
1107 struct cvmx_npi_lowp_ibuff_saddr_s cn38xx;
1108 struct cvmx_npi_lowp_ibuff_saddr_s cn38xxp2;
1109 struct cvmx_npi_lowp_ibuff_saddr_s cn50xx;
1110 struct cvmx_npi_lowp_ibuff_saddr_s cn58xx;
1111 struct cvmx_npi_lowp_ibuff_saddr_s cn58xxp1;
1112};
1113
1114union cvmx_npi_mem_access_subidx {
1115 uint64_t u64;
1116 struct cvmx_npi_mem_access_subidx_s {
1117 uint64_t reserved_38_63:26;
1118 uint64_t shortl:1;
1119 uint64_t nmerge:1;
1120 uint64_t esr:2;
1121 uint64_t esw:2;
1122 uint64_t nsr:1;
1123 uint64_t nsw:1;
1124 uint64_t ror:1;
1125 uint64_t row:1;
1126 uint64_t ba:28;
1127 } s;
1128 struct cvmx_npi_mem_access_subidx_s cn30xx;
1129 struct cvmx_npi_mem_access_subidx_cn31xx {
1130 uint64_t reserved_36_63:28;
1131 uint64_t esr:2;
1132 uint64_t esw:2;
1133 uint64_t nsr:1;
1134 uint64_t nsw:1;
1135 uint64_t ror:1;
1136 uint64_t row:1;
1137 uint64_t ba:28;
1138 } cn31xx;
1139 struct cvmx_npi_mem_access_subidx_s cn38xx;
1140 struct cvmx_npi_mem_access_subidx_cn31xx cn38xxp2;
1141 struct cvmx_npi_mem_access_subidx_s cn50xx;
1142 struct cvmx_npi_mem_access_subidx_s cn58xx;
1143 struct cvmx_npi_mem_access_subidx_s cn58xxp1;
1144};
1145
1146union cvmx_npi_msi_rcv {
1147 uint64_t u64;
1148 struct cvmx_npi_msi_rcv_s {
1149 uint64_t int_vec:64;
1150 } s;
1151 struct cvmx_npi_msi_rcv_s cn30xx;
1152 struct cvmx_npi_msi_rcv_s cn31xx;
1153 struct cvmx_npi_msi_rcv_s cn38xx;
1154 struct cvmx_npi_msi_rcv_s cn38xxp2;
1155 struct cvmx_npi_msi_rcv_s cn50xx;
1156 struct cvmx_npi_msi_rcv_s cn58xx;
1157 struct cvmx_npi_msi_rcv_s cn58xxp1;
1158};
1159
1160union cvmx_npi_num_desc_outputx {
1161 uint64_t u64;
1162 struct cvmx_npi_num_desc_outputx_s {
1163 uint64_t reserved_32_63:32;
1164 uint64_t size:32;
1165 } s;
1166 struct cvmx_npi_num_desc_outputx_s cn30xx;
1167 struct cvmx_npi_num_desc_outputx_s cn31xx;
1168 struct cvmx_npi_num_desc_outputx_s cn38xx;
1169 struct cvmx_npi_num_desc_outputx_s cn38xxp2;
1170 struct cvmx_npi_num_desc_outputx_s cn50xx;
1171 struct cvmx_npi_num_desc_outputx_s cn58xx;
1172 struct cvmx_npi_num_desc_outputx_s cn58xxp1;
1173};
1174
1175union cvmx_npi_output_control {
1176 uint64_t u64;
1177 struct cvmx_npi_output_control_s {
1178 uint64_t reserved_49_63:15;
1179 uint64_t pkt_rr:1;
1180 uint64_t p3_bmode:1;
1181 uint64_t p2_bmode:1;
1182 uint64_t p1_bmode:1;
1183 uint64_t p0_bmode:1;
1184 uint64_t o3_es:2;
1185 uint64_t o3_ns:1;
1186 uint64_t o3_ro:1;
1187 uint64_t o2_es:2;
1188 uint64_t o2_ns:1;
1189 uint64_t o2_ro:1;
1190 uint64_t o1_es:2;
1191 uint64_t o1_ns:1;
1192 uint64_t o1_ro:1;
1193 uint64_t o0_es:2;
1194 uint64_t o0_ns:1;
1195 uint64_t o0_ro:1;
1196 uint64_t o3_csrm:1;
1197 uint64_t o2_csrm:1;
1198 uint64_t o1_csrm:1;
1199 uint64_t o0_csrm:1;
1200 uint64_t reserved_20_23:4;
1201 uint64_t iptr_o3:1;
1202 uint64_t iptr_o2:1;
1203 uint64_t iptr_o1:1;
1204 uint64_t iptr_o0:1;
1205 uint64_t esr_sl3:2;
1206 uint64_t nsr_sl3:1;
1207 uint64_t ror_sl3:1;
1208 uint64_t esr_sl2:2;
1209 uint64_t nsr_sl2:1;
1210 uint64_t ror_sl2:1;
1211 uint64_t esr_sl1:2;
1212 uint64_t nsr_sl1:1;
1213 uint64_t ror_sl1:1;
1214 uint64_t esr_sl0:2;
1215 uint64_t nsr_sl0:1;
1216 uint64_t ror_sl0:1;
1217 } s;
1218 struct cvmx_npi_output_control_cn30xx {
1219 uint64_t reserved_45_63:19;
1220 uint64_t p0_bmode:1;
1221 uint64_t reserved_32_43:12;
1222 uint64_t o0_es:2;
1223 uint64_t o0_ns:1;
1224 uint64_t o0_ro:1;
1225 uint64_t reserved_25_27:3;
1226 uint64_t o0_csrm:1;
1227 uint64_t reserved_17_23:7;
1228 uint64_t iptr_o0:1;
1229 uint64_t reserved_4_15:12;
1230 uint64_t esr_sl0:2;
1231 uint64_t nsr_sl0:1;
1232 uint64_t ror_sl0:1;
1233 } cn30xx;
1234 struct cvmx_npi_output_control_cn31xx {
1235 uint64_t reserved_46_63:18;
1236 uint64_t p1_bmode:1;
1237 uint64_t p0_bmode:1;
1238 uint64_t reserved_36_43:8;
1239 uint64_t o1_es:2;
1240 uint64_t o1_ns:1;
1241 uint64_t o1_ro:1;
1242 uint64_t o0_es:2;
1243 uint64_t o0_ns:1;
1244 uint64_t o0_ro:1;
1245 uint64_t reserved_26_27:2;
1246 uint64_t o1_csrm:1;
1247 uint64_t o0_csrm:1;
1248 uint64_t reserved_18_23:6;
1249 uint64_t iptr_o1:1;
1250 uint64_t iptr_o0:1;
1251 uint64_t reserved_8_15:8;
1252 uint64_t esr_sl1:2;
1253 uint64_t nsr_sl1:1;
1254 uint64_t ror_sl1:1;
1255 uint64_t esr_sl0:2;
1256 uint64_t nsr_sl0:1;
1257 uint64_t ror_sl0:1;
1258 } cn31xx;
1259 struct cvmx_npi_output_control_s cn38xx;
1260 struct cvmx_npi_output_control_cn38xxp2 {
1261 uint64_t reserved_48_63:16;
1262 uint64_t p3_bmode:1;
1263 uint64_t p2_bmode:1;
1264 uint64_t p1_bmode:1;
1265 uint64_t p0_bmode:1;
1266 uint64_t o3_es:2;
1267 uint64_t o3_ns:1;
1268 uint64_t o3_ro:1;
1269 uint64_t o2_es:2;
1270 uint64_t o2_ns:1;
1271 uint64_t o2_ro:1;
1272 uint64_t o1_es:2;
1273 uint64_t o1_ns:1;
1274 uint64_t o1_ro:1;
1275 uint64_t o0_es:2;
1276 uint64_t o0_ns:1;
1277 uint64_t o0_ro:1;
1278 uint64_t o3_csrm:1;
1279 uint64_t o2_csrm:1;
1280 uint64_t o1_csrm:1;
1281 uint64_t o0_csrm:1;
1282 uint64_t reserved_20_23:4;
1283 uint64_t iptr_o3:1;
1284 uint64_t iptr_o2:1;
1285 uint64_t iptr_o1:1;
1286 uint64_t iptr_o0:1;
1287 uint64_t esr_sl3:2;
1288 uint64_t nsr_sl3:1;
1289 uint64_t ror_sl3:1;
1290 uint64_t esr_sl2:2;
1291 uint64_t nsr_sl2:1;
1292 uint64_t ror_sl2:1;
1293 uint64_t esr_sl1:2;
1294 uint64_t nsr_sl1:1;
1295 uint64_t ror_sl1:1;
1296 uint64_t esr_sl0:2;
1297 uint64_t nsr_sl0:1;
1298 uint64_t ror_sl0:1;
1299 } cn38xxp2;
1300 struct cvmx_npi_output_control_cn50xx {
1301 uint64_t reserved_49_63:15;
1302 uint64_t pkt_rr:1;
1303 uint64_t reserved_46_47:2;
1304 uint64_t p1_bmode:1;
1305 uint64_t p0_bmode:1;
1306 uint64_t reserved_36_43:8;
1307 uint64_t o1_es:2;
1308 uint64_t o1_ns:1;
1309 uint64_t o1_ro:1;
1310 uint64_t o0_es:2;
1311 uint64_t o0_ns:1;
1312 uint64_t o0_ro:1;
1313 uint64_t reserved_26_27:2;
1314 uint64_t o1_csrm:1;
1315 uint64_t o0_csrm:1;
1316 uint64_t reserved_18_23:6;
1317 uint64_t iptr_o1:1;
1318 uint64_t iptr_o0:1;
1319 uint64_t reserved_8_15:8;
1320 uint64_t esr_sl1:2;
1321 uint64_t nsr_sl1:1;
1322 uint64_t ror_sl1:1;
1323 uint64_t esr_sl0:2;
1324 uint64_t nsr_sl0:1;
1325 uint64_t ror_sl0:1;
1326 } cn50xx;
1327 struct cvmx_npi_output_control_s cn58xx;
1328 struct cvmx_npi_output_control_s cn58xxp1;
1329};
1330
1331union cvmx_npi_px_dbpair_addr {
1332 uint64_t u64;
1333 struct cvmx_npi_px_dbpair_addr_s {
1334 uint64_t reserved_63_63:1;
1335 uint64_t state:2;
1336 uint64_t naddr:61;
1337 } s;
1338 struct cvmx_npi_px_dbpair_addr_s cn30xx;
1339 struct cvmx_npi_px_dbpair_addr_s cn31xx;
1340 struct cvmx_npi_px_dbpair_addr_s cn38xx;
1341 struct cvmx_npi_px_dbpair_addr_s cn38xxp2;
1342 struct cvmx_npi_px_dbpair_addr_s cn50xx;
1343 struct cvmx_npi_px_dbpair_addr_s cn58xx;
1344 struct cvmx_npi_px_dbpair_addr_s cn58xxp1;
1345};
1346
1347union cvmx_npi_px_instr_addr {
1348 uint64_t u64;
1349 struct cvmx_npi_px_instr_addr_s {
1350 uint64_t state:3;
1351 uint64_t naddr:61;
1352 } s;
1353 struct cvmx_npi_px_instr_addr_s cn30xx;
1354 struct cvmx_npi_px_instr_addr_s cn31xx;
1355 struct cvmx_npi_px_instr_addr_s cn38xx;
1356 struct cvmx_npi_px_instr_addr_s cn38xxp2;
1357 struct cvmx_npi_px_instr_addr_s cn50xx;
1358 struct cvmx_npi_px_instr_addr_s cn58xx;
1359 struct cvmx_npi_px_instr_addr_s cn58xxp1;
1360};
1361
1362union cvmx_npi_px_instr_cnts {
1363 uint64_t u64;
1364 struct cvmx_npi_px_instr_cnts_s {
1365 uint64_t reserved_38_63:26;
1366 uint64_t fcnt:6;
1367 uint64_t avail:32;
1368 } s;
1369 struct cvmx_npi_px_instr_cnts_s cn30xx;
1370 struct cvmx_npi_px_instr_cnts_s cn31xx;
1371 struct cvmx_npi_px_instr_cnts_s cn38xx;
1372 struct cvmx_npi_px_instr_cnts_s cn38xxp2;
1373 struct cvmx_npi_px_instr_cnts_s cn50xx;
1374 struct cvmx_npi_px_instr_cnts_s cn58xx;
1375 struct cvmx_npi_px_instr_cnts_s cn58xxp1;
1376};
1377
1378union cvmx_npi_px_pair_cnts {
1379 uint64_t u64;
1380 struct cvmx_npi_px_pair_cnts_s {
1381 uint64_t reserved_37_63:27;
1382 uint64_t fcnt:5;
1383 uint64_t avail:32;
1384 } s;
1385 struct cvmx_npi_px_pair_cnts_s cn30xx;
1386 struct cvmx_npi_px_pair_cnts_s cn31xx;
1387 struct cvmx_npi_px_pair_cnts_s cn38xx;
1388 struct cvmx_npi_px_pair_cnts_s cn38xxp2;
1389 struct cvmx_npi_px_pair_cnts_s cn50xx;
1390 struct cvmx_npi_px_pair_cnts_s cn58xx;
1391 struct cvmx_npi_px_pair_cnts_s cn58xxp1;
1392};
1393
1394union cvmx_npi_pci_burst_size {
1395 uint64_t u64;
1396 struct cvmx_npi_pci_burst_size_s {
1397 uint64_t reserved_14_63:50;
1398 uint64_t wr_brst:7;
1399 uint64_t rd_brst:7;
1400 } s;
1401 struct cvmx_npi_pci_burst_size_s cn30xx;
1402 struct cvmx_npi_pci_burst_size_s cn31xx;
1403 struct cvmx_npi_pci_burst_size_s cn38xx;
1404 struct cvmx_npi_pci_burst_size_s cn38xxp2;
1405 struct cvmx_npi_pci_burst_size_s cn50xx;
1406 struct cvmx_npi_pci_burst_size_s cn58xx;
1407 struct cvmx_npi_pci_burst_size_s cn58xxp1;
1408};
1409
1410union cvmx_npi_pci_int_arb_cfg {
1411 uint64_t u64;
1412 struct cvmx_npi_pci_int_arb_cfg_s {
1413 uint64_t reserved_13_63:51;
1414 uint64_t hostmode:1;
1415 uint64_t pci_ovr:4;
1416 uint64_t reserved_5_7:3;
1417 uint64_t en:1;
1418 uint64_t park_mod:1;
1419 uint64_t park_dev:3;
1420 } s;
1421 struct cvmx_npi_pci_int_arb_cfg_cn30xx {
1422 uint64_t reserved_5_63:59;
1423 uint64_t en:1;
1424 uint64_t park_mod:1;
1425 uint64_t park_dev:3;
1426 } cn30xx;
1427 struct cvmx_npi_pci_int_arb_cfg_cn30xx cn31xx;
1428 struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xx;
1429 struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xxp2;
1430 struct cvmx_npi_pci_int_arb_cfg_s cn50xx;
1431 struct cvmx_npi_pci_int_arb_cfg_s cn58xx;
1432 struct cvmx_npi_pci_int_arb_cfg_s cn58xxp1;
1433};
1434
1435union cvmx_npi_pci_read_cmd {
1436 uint64_t u64;
1437 struct cvmx_npi_pci_read_cmd_s {
1438 uint64_t reserved_11_63:53;
1439 uint64_t cmd_size:11;
1440 } s;
1441 struct cvmx_npi_pci_read_cmd_s cn30xx;
1442 struct cvmx_npi_pci_read_cmd_s cn31xx;
1443 struct cvmx_npi_pci_read_cmd_s cn38xx;
1444 struct cvmx_npi_pci_read_cmd_s cn38xxp2;
1445 struct cvmx_npi_pci_read_cmd_s cn50xx;
1446 struct cvmx_npi_pci_read_cmd_s cn58xx;
1447 struct cvmx_npi_pci_read_cmd_s cn58xxp1;
1448};
1449
1450union cvmx_npi_port32_instr_hdr {
1451 uint64_t u64;
1452 struct cvmx_npi_port32_instr_hdr_s {
1453 uint64_t reserved_44_63:20;
1454 uint64_t pbp:1;
1455 uint64_t rsv_f:5;
1456 uint64_t rparmode:2;
1457 uint64_t rsv_e:1;
1458 uint64_t rskp_len:7;
1459 uint64_t rsv_d:6;
1460 uint64_t use_ihdr:1;
1461 uint64_t rsv_c:5;
1462 uint64_t par_mode:2;
1463 uint64_t rsv_b:1;
1464 uint64_t skp_len:7;
1465 uint64_t rsv_a:6;
1466 } s;
1467 struct cvmx_npi_port32_instr_hdr_s cn30xx;
1468 struct cvmx_npi_port32_instr_hdr_s cn31xx;
1469 struct cvmx_npi_port32_instr_hdr_s cn38xx;
1470 struct cvmx_npi_port32_instr_hdr_s cn38xxp2;
1471 struct cvmx_npi_port32_instr_hdr_s cn50xx;
1472 struct cvmx_npi_port32_instr_hdr_s cn58xx;
1473 struct cvmx_npi_port32_instr_hdr_s cn58xxp1;
1474};
1475
1476union cvmx_npi_port33_instr_hdr {
1477 uint64_t u64;
1478 struct cvmx_npi_port33_instr_hdr_s {
1479 uint64_t reserved_44_63:20;
1480 uint64_t pbp:1;
1481 uint64_t rsv_f:5;
1482 uint64_t rparmode:2;
1483 uint64_t rsv_e:1;
1484 uint64_t rskp_len:7;
1485 uint64_t rsv_d:6;
1486 uint64_t use_ihdr:1;
1487 uint64_t rsv_c:5;
1488 uint64_t par_mode:2;
1489 uint64_t rsv_b:1;
1490 uint64_t skp_len:7;
1491 uint64_t rsv_a:6;
1492 } s;
1493 struct cvmx_npi_port33_instr_hdr_s cn31xx;
1494 struct cvmx_npi_port33_instr_hdr_s cn38xx;
1495 struct cvmx_npi_port33_instr_hdr_s cn38xxp2;
1496 struct cvmx_npi_port33_instr_hdr_s cn50xx;
1497 struct cvmx_npi_port33_instr_hdr_s cn58xx;
1498 struct cvmx_npi_port33_instr_hdr_s cn58xxp1;
1499};
1500
1501union cvmx_npi_port34_instr_hdr {
1502 uint64_t u64;
1503 struct cvmx_npi_port34_instr_hdr_s {
1504 uint64_t reserved_44_63:20;
1505 uint64_t pbp:1;
1506 uint64_t rsv_f:5;
1507 uint64_t rparmode:2;
1508 uint64_t rsv_e:1;
1509 uint64_t rskp_len:7;
1510 uint64_t rsv_d:6;
1511 uint64_t use_ihdr:1;
1512 uint64_t rsv_c:5;
1513 uint64_t par_mode:2;
1514 uint64_t rsv_b:1;
1515 uint64_t skp_len:7;
1516 uint64_t rsv_a:6;
1517 } s;
1518 struct cvmx_npi_port34_instr_hdr_s cn38xx;
1519 struct cvmx_npi_port34_instr_hdr_s cn38xxp2;
1520 struct cvmx_npi_port34_instr_hdr_s cn58xx;
1521 struct cvmx_npi_port34_instr_hdr_s cn58xxp1;
1522};
1523
1524union cvmx_npi_port35_instr_hdr {
1525 uint64_t u64;
1526 struct cvmx_npi_port35_instr_hdr_s {
1527 uint64_t reserved_44_63:20;
1528 uint64_t pbp:1;
1529 uint64_t rsv_f:5;
1530 uint64_t rparmode:2;
1531 uint64_t rsv_e:1;
1532 uint64_t rskp_len:7;
1533 uint64_t rsv_d:6;
1534 uint64_t use_ihdr:1;
1535 uint64_t rsv_c:5;
1536 uint64_t par_mode:2;
1537 uint64_t rsv_b:1;
1538 uint64_t skp_len:7;
1539 uint64_t rsv_a:6;
1540 } s;
1541 struct cvmx_npi_port35_instr_hdr_s cn38xx;
1542 struct cvmx_npi_port35_instr_hdr_s cn38xxp2;
1543 struct cvmx_npi_port35_instr_hdr_s cn58xx;
1544 struct cvmx_npi_port35_instr_hdr_s cn58xxp1;
1545};
1546
1547union cvmx_npi_port_bp_control {
1548 uint64_t u64;
1549 struct cvmx_npi_port_bp_control_s {
1550 uint64_t reserved_8_63:56;
1551 uint64_t bp_on:4;
1552 uint64_t enb:4;
1553 } s;
1554 struct cvmx_npi_port_bp_control_s cn30xx;
1555 struct cvmx_npi_port_bp_control_s cn31xx;
1556 struct cvmx_npi_port_bp_control_s cn38xx;
1557 struct cvmx_npi_port_bp_control_s cn38xxp2;
1558 struct cvmx_npi_port_bp_control_s cn50xx;
1559 struct cvmx_npi_port_bp_control_s cn58xx;
1560 struct cvmx_npi_port_bp_control_s cn58xxp1;
1561};
1562
1563union cvmx_npi_rsl_int_blocks {
1564 uint64_t u64;
1565 struct cvmx_npi_rsl_int_blocks_s {
1566 uint64_t reserved_32_63:32;
1567 uint64_t rint_31:1;
1568 uint64_t iob:1;
1569 uint64_t reserved_28_29:2;
1570 uint64_t rint_27:1;
1571 uint64_t rint_26:1;
1572 uint64_t rint_25:1;
1573 uint64_t rint_24:1;
1574 uint64_t asx1:1;
1575 uint64_t asx0:1;
1576 uint64_t rint_21:1;
1577 uint64_t pip:1;
1578 uint64_t spx1:1;
1579 uint64_t spx0:1;
1580 uint64_t lmc:1;
1581 uint64_t l2c:1;
1582 uint64_t rint_15:1;
1583 uint64_t reserved_13_14:2;
1584 uint64_t pow:1;
1585 uint64_t tim:1;
1586 uint64_t pko:1;
1587 uint64_t ipd:1;
1588 uint64_t rint_8:1;
1589 uint64_t zip:1;
1590 uint64_t dfa:1;
1591 uint64_t fpa:1;
1592 uint64_t key:1;
1593 uint64_t npi:1;
1594 uint64_t gmx1:1;
1595 uint64_t gmx0:1;
1596 uint64_t mio:1;
1597 } s;
1598 struct cvmx_npi_rsl_int_blocks_cn30xx {
1599 uint64_t reserved_32_63:32;
1600 uint64_t rint_31:1;
1601 uint64_t iob:1;
1602 uint64_t rint_29:1;
1603 uint64_t rint_28:1;
1604 uint64_t rint_27:1;
1605 uint64_t rint_26:1;
1606 uint64_t rint_25:1;
1607 uint64_t rint_24:1;
1608 uint64_t asx1:1;
1609 uint64_t asx0:1;
1610 uint64_t rint_21:1;
1611 uint64_t pip:1;
1612 uint64_t spx1:1;
1613 uint64_t spx0:1;
1614 uint64_t lmc:1;
1615 uint64_t l2c:1;
1616 uint64_t rint_15:1;
1617 uint64_t rint_14:1;
1618 uint64_t usb:1;
1619 uint64_t pow:1;
1620 uint64_t tim:1;
1621 uint64_t pko:1;
1622 uint64_t ipd:1;
1623 uint64_t rint_8:1;
1624 uint64_t zip:1;
1625 uint64_t dfa:1;
1626 uint64_t fpa:1;
1627 uint64_t key:1;
1628 uint64_t npi:1;
1629 uint64_t gmx1:1;
1630 uint64_t gmx0:1;
1631 uint64_t mio:1;
1632 } cn30xx;
1633 struct cvmx_npi_rsl_int_blocks_cn30xx cn31xx;
1634 struct cvmx_npi_rsl_int_blocks_cn38xx {
1635 uint64_t reserved_32_63:32;
1636 uint64_t rint_31:1;
1637 uint64_t iob:1;
1638 uint64_t rint_29:1;
1639 uint64_t rint_28:1;
1640 uint64_t rint_27:1;
1641 uint64_t rint_26:1;
1642 uint64_t rint_25:1;
1643 uint64_t rint_24:1;
1644 uint64_t asx1:1;
1645 uint64_t asx0:1;
1646 uint64_t rint_21:1;
1647 uint64_t pip:1;
1648 uint64_t spx1:1;
1649 uint64_t spx0:1;
1650 uint64_t lmc:1;
1651 uint64_t l2c:1;
1652 uint64_t rint_15:1;
1653 uint64_t rint_14:1;
1654 uint64_t rint_13:1;
1655 uint64_t pow:1;
1656 uint64_t tim:1;
1657 uint64_t pko:1;
1658 uint64_t ipd:1;
1659 uint64_t rint_8:1;
1660 uint64_t zip:1;
1661 uint64_t dfa:1;
1662 uint64_t fpa:1;
1663 uint64_t key:1;
1664 uint64_t npi:1;
1665 uint64_t gmx1:1;
1666 uint64_t gmx0:1;
1667 uint64_t mio:1;
1668 } cn38xx;
1669 struct cvmx_npi_rsl_int_blocks_cn38xx cn38xxp2;
1670 struct cvmx_npi_rsl_int_blocks_cn50xx {
1671 uint64_t reserved_31_63:33;
1672 uint64_t iob:1;
1673 uint64_t lmc1:1;
1674 uint64_t agl:1;
1675 uint64_t reserved_24_27:4;
1676 uint64_t asx1:1;
1677 uint64_t asx0:1;
1678 uint64_t reserved_21_21:1;
1679 uint64_t pip:1;
1680 uint64_t spx1:1;
1681 uint64_t spx0:1;
1682 uint64_t lmc:1;
1683 uint64_t l2c:1;
1684 uint64_t reserved_15_15:1;
1685 uint64_t rad:1;
1686 uint64_t usb:1;
1687 uint64_t pow:1;
1688 uint64_t tim:1;
1689 uint64_t pko:1;
1690 uint64_t ipd:1;
1691 uint64_t reserved_8_8:1;
1692 uint64_t zip:1;
1693 uint64_t dfa:1;
1694 uint64_t fpa:1;
1695 uint64_t key:1;
1696 uint64_t npi:1;
1697 uint64_t gmx1:1;
1698 uint64_t gmx0:1;
1699 uint64_t mio:1;
1700 } cn50xx;
1701 struct cvmx_npi_rsl_int_blocks_cn38xx cn58xx;
1702 struct cvmx_npi_rsl_int_blocks_cn38xx cn58xxp1;
1703};
1704
1705union cvmx_npi_size_inputx {
1706 uint64_t u64;
1707 struct cvmx_npi_size_inputx_s {
1708 uint64_t reserved_32_63:32;
1709 uint64_t size:32;
1710 } s;
1711 struct cvmx_npi_size_inputx_s cn30xx;
1712 struct cvmx_npi_size_inputx_s cn31xx;
1713 struct cvmx_npi_size_inputx_s cn38xx;
1714 struct cvmx_npi_size_inputx_s cn38xxp2;
1715 struct cvmx_npi_size_inputx_s cn50xx;
1716 struct cvmx_npi_size_inputx_s cn58xx;
1717 struct cvmx_npi_size_inputx_s cn58xxp1;
1718};
1719
1720union cvmx_npi_win_read_to {
1721 uint64_t u64;
1722 struct cvmx_npi_win_read_to_s {
1723 uint64_t reserved_32_63:32;
1724 uint64_t time:32;
1725 } s;
1726 struct cvmx_npi_win_read_to_s cn30xx;
1727 struct cvmx_npi_win_read_to_s cn31xx;
1728 struct cvmx_npi_win_read_to_s cn38xx;
1729 struct cvmx_npi_win_read_to_s cn38xxp2;
1730 struct cvmx_npi_win_read_to_s cn50xx;
1731 struct cvmx_npi_win_read_to_s cn58xx;
1732 struct cvmx_npi_win_read_to_s cn58xxp1;
1733};
1734
1735#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-pci-defs.h b/arch/mips/include/asm/octeon/cvmx-pci-defs.h
new file mode 100644
index 000000000000..90f8d6535753
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-pci-defs.h
@@ -0,0 +1,1645 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_PCI_DEFS_H__
29#define __CVMX_PCI_DEFS_H__
30
31#define CVMX_PCI_BAR1_INDEXX(offset) \
32 (0x0000000000000100ull + (((offset) & 31) * 4))
33#define CVMX_PCI_BIST_REG \
34 (0x00000000000001C0ull)
35#define CVMX_PCI_CFG00 \
36 (0x0000000000000000ull)
37#define CVMX_PCI_CFG01 \
38 (0x0000000000000004ull)
39#define CVMX_PCI_CFG02 \
40 (0x0000000000000008ull)
41#define CVMX_PCI_CFG03 \
42 (0x000000000000000Cull)
43#define CVMX_PCI_CFG04 \
44 (0x0000000000000010ull)
45#define CVMX_PCI_CFG05 \
46 (0x0000000000000014ull)
47#define CVMX_PCI_CFG06 \
48 (0x0000000000000018ull)
49#define CVMX_PCI_CFG07 \
50 (0x000000000000001Cull)
51#define CVMX_PCI_CFG08 \
52 (0x0000000000000020ull)
53#define CVMX_PCI_CFG09 \
54 (0x0000000000000024ull)
55#define CVMX_PCI_CFG10 \
56 (0x0000000000000028ull)
57#define CVMX_PCI_CFG11 \
58 (0x000000000000002Cull)
59#define CVMX_PCI_CFG12 \
60 (0x0000000000000030ull)
61#define CVMX_PCI_CFG13 \
62 (0x0000000000000034ull)
63#define CVMX_PCI_CFG15 \
64 (0x000000000000003Cull)
65#define CVMX_PCI_CFG16 \
66 (0x0000000000000040ull)
67#define CVMX_PCI_CFG17 \
68 (0x0000000000000044ull)
69#define CVMX_PCI_CFG18 \
70 (0x0000000000000048ull)
71#define CVMX_PCI_CFG19 \
72 (0x000000000000004Cull)
73#define CVMX_PCI_CFG20 \
74 (0x0000000000000050ull)
75#define CVMX_PCI_CFG21 \
76 (0x0000000000000054ull)
77#define CVMX_PCI_CFG22 \
78 (0x0000000000000058ull)
79#define CVMX_PCI_CFG56 \
80 (0x00000000000000E0ull)
81#define CVMX_PCI_CFG57 \
82 (0x00000000000000E4ull)
83#define CVMX_PCI_CFG58 \
84 (0x00000000000000E8ull)
85#define CVMX_PCI_CFG59 \
86 (0x00000000000000ECull)
87#define CVMX_PCI_CFG60 \
88 (0x00000000000000F0ull)
89#define CVMX_PCI_CFG61 \
90 (0x00000000000000F4ull)
91#define CVMX_PCI_CFG62 \
92 (0x00000000000000F8ull)
93#define CVMX_PCI_CFG63 \
94 (0x00000000000000FCull)
95#define CVMX_PCI_CNT_REG \
96 (0x00000000000001B8ull)
97#define CVMX_PCI_CTL_STATUS_2 \
98 (0x000000000000018Cull)
99#define CVMX_PCI_DBELL_0 \
100 (0x0000000000000080ull)
101#define CVMX_PCI_DBELL_1 \
102 (0x0000000000000088ull)
103#define CVMX_PCI_DBELL_2 \
104 (0x0000000000000090ull)
105#define CVMX_PCI_DBELL_3 \
106 (0x0000000000000098ull)
107#define CVMX_PCI_DBELL_X(offset) \
108 (0x0000000000000080ull + (((offset) & 3) * 8))
109#define CVMX_PCI_DMA_CNT0 \
110 (0x00000000000000A0ull)
111#define CVMX_PCI_DMA_CNT1 \
112 (0x00000000000000A8ull)
113#define CVMX_PCI_DMA_CNTX(offset) \
114 (0x00000000000000A0ull + (((offset) & 1) * 8))
115#define CVMX_PCI_DMA_INT_LEV0 \
116 (0x00000000000000A4ull)
117#define CVMX_PCI_DMA_INT_LEV1 \
118 (0x00000000000000ACull)
119#define CVMX_PCI_DMA_INT_LEVX(offset) \
120 (0x00000000000000A4ull + (((offset) & 1) * 8))
121#define CVMX_PCI_DMA_TIME0 \
122 (0x00000000000000B0ull)
123#define CVMX_PCI_DMA_TIME1 \
124 (0x00000000000000B4ull)
125#define CVMX_PCI_DMA_TIMEX(offset) \
126 (0x00000000000000B0ull + (((offset) & 1) * 4))
127#define CVMX_PCI_INSTR_COUNT0 \
128 (0x0000000000000084ull)
129#define CVMX_PCI_INSTR_COUNT1 \
130 (0x000000000000008Cull)
131#define CVMX_PCI_INSTR_COUNT2 \
132 (0x0000000000000094ull)
133#define CVMX_PCI_INSTR_COUNT3 \
134 (0x000000000000009Cull)
135#define CVMX_PCI_INSTR_COUNTX(offset) \
136 (0x0000000000000084ull + (((offset) & 3) * 8))
137#define CVMX_PCI_INT_ENB \
138 (0x0000000000000038ull)
139#define CVMX_PCI_INT_ENB2 \
140 (0x00000000000001A0ull)
141#define CVMX_PCI_INT_SUM \
142 (0x0000000000000030ull)
143#define CVMX_PCI_INT_SUM2 \
144 (0x0000000000000198ull)
145#define CVMX_PCI_MSI_RCV \
146 (0x00000000000000F0ull)
147#define CVMX_PCI_PKTS_SENT0 \
148 (0x0000000000000040ull)
149#define CVMX_PCI_PKTS_SENT1 \
150 (0x0000000000000050ull)
151#define CVMX_PCI_PKTS_SENT2 \
152 (0x0000000000000060ull)
153#define CVMX_PCI_PKTS_SENT3 \
154 (0x0000000000000070ull)
155#define CVMX_PCI_PKTS_SENTX(offset) \
156 (0x0000000000000040ull + (((offset) & 3) * 16))
157#define CVMX_PCI_PKTS_SENT_INT_LEV0 \
158 (0x0000000000000048ull)
159#define CVMX_PCI_PKTS_SENT_INT_LEV1 \
160 (0x0000000000000058ull)
161#define CVMX_PCI_PKTS_SENT_INT_LEV2 \
162 (0x0000000000000068ull)
163#define CVMX_PCI_PKTS_SENT_INT_LEV3 \
164 (0x0000000000000078ull)
165#define CVMX_PCI_PKTS_SENT_INT_LEVX(offset) \
166 (0x0000000000000048ull + (((offset) & 3) * 16))
167#define CVMX_PCI_PKTS_SENT_TIME0 \
168 (0x000000000000004Cull)
169#define CVMX_PCI_PKTS_SENT_TIME1 \
170 (0x000000000000005Cull)
171#define CVMX_PCI_PKTS_SENT_TIME2 \
172 (0x000000000000006Cull)
173#define CVMX_PCI_PKTS_SENT_TIME3 \
174 (0x000000000000007Cull)
175#define CVMX_PCI_PKTS_SENT_TIMEX(offset) \
176 (0x000000000000004Cull + (((offset) & 3) * 16))
177#define CVMX_PCI_PKT_CREDITS0 \
178 (0x0000000000000044ull)
179#define CVMX_PCI_PKT_CREDITS1 \
180 (0x0000000000000054ull)
181#define CVMX_PCI_PKT_CREDITS2 \
182 (0x0000000000000064ull)
183#define CVMX_PCI_PKT_CREDITS3 \
184 (0x0000000000000074ull)
185#define CVMX_PCI_PKT_CREDITSX(offset) \
186 (0x0000000000000044ull + (((offset) & 3) * 16))
187#define CVMX_PCI_READ_CMD_6 \
188 (0x0000000000000180ull)
189#define CVMX_PCI_READ_CMD_C \
190 (0x0000000000000184ull)
191#define CVMX_PCI_READ_CMD_E \
192 (0x0000000000000188ull)
193#define CVMX_PCI_READ_TIMEOUT \
194 CVMX_ADD_IO_SEG(0x00011F00000000B0ull)
195#define CVMX_PCI_SCM_REG \
196 (0x00000000000001A8ull)
197#define CVMX_PCI_TSR_REG \
198 (0x00000000000001B0ull)
199#define CVMX_PCI_WIN_RD_ADDR \
200 (0x0000000000000008ull)
201#define CVMX_PCI_WIN_RD_DATA \
202 (0x0000000000000020ull)
203#define CVMX_PCI_WIN_WR_ADDR \
204 (0x0000000000000000ull)
205#define CVMX_PCI_WIN_WR_DATA \
206 (0x0000000000000010ull)
207#define CVMX_PCI_WIN_WR_MASK \
208 (0x0000000000000018ull)
209
210union cvmx_pci_bar1_indexx {
211 uint32_t u32;
212 struct cvmx_pci_bar1_indexx_s {
213 uint32_t reserved_18_31:14;
214 uint32_t addr_idx:14;
215 uint32_t ca:1;
216 uint32_t end_swp:2;
217 uint32_t addr_v:1;
218 } s;
219 struct cvmx_pci_bar1_indexx_s cn30xx;
220 struct cvmx_pci_bar1_indexx_s cn31xx;
221 struct cvmx_pci_bar1_indexx_s cn38xx;
222 struct cvmx_pci_bar1_indexx_s cn38xxp2;
223 struct cvmx_pci_bar1_indexx_s cn50xx;
224 struct cvmx_pci_bar1_indexx_s cn58xx;
225 struct cvmx_pci_bar1_indexx_s cn58xxp1;
226};
227
228union cvmx_pci_bist_reg {
229 uint64_t u64;
230 struct cvmx_pci_bist_reg_s {
231 uint64_t reserved_10_63:54;
232 uint64_t rsp_bs:1;
233 uint64_t dma0_bs:1;
234 uint64_t cmd0_bs:1;
235 uint64_t cmd_bs:1;
236 uint64_t csr2p_bs:1;
237 uint64_t csrr_bs:1;
238 uint64_t rsp2p_bs:1;
239 uint64_t csr2n_bs:1;
240 uint64_t dat2n_bs:1;
241 uint64_t dbg2n_bs:1;
242 } s;
243 struct cvmx_pci_bist_reg_s cn50xx;
244};
245
246union cvmx_pci_cfg00 {
247 uint32_t u32;
248 struct cvmx_pci_cfg00_s {
249 uint32_t devid:16;
250 uint32_t vendid:16;
251 } s;
252 struct cvmx_pci_cfg00_s cn30xx;
253 struct cvmx_pci_cfg00_s cn31xx;
254 struct cvmx_pci_cfg00_s cn38xx;
255 struct cvmx_pci_cfg00_s cn38xxp2;
256 struct cvmx_pci_cfg00_s cn50xx;
257 struct cvmx_pci_cfg00_s cn58xx;
258 struct cvmx_pci_cfg00_s cn58xxp1;
259};
260
261union cvmx_pci_cfg01 {
262 uint32_t u32;
263 struct cvmx_pci_cfg01_s {
264 uint32_t dpe:1;
265 uint32_t sse:1;
266 uint32_t rma:1;
267 uint32_t rta:1;
268 uint32_t sta:1;
269 uint32_t devt:2;
270 uint32_t mdpe:1;
271 uint32_t fbb:1;
272 uint32_t reserved_22_22:1;
273 uint32_t m66:1;
274 uint32_t cle:1;
275 uint32_t i_stat:1;
276 uint32_t reserved_11_18:8;
277 uint32_t i_dis:1;
278 uint32_t fbbe:1;
279 uint32_t see:1;
280 uint32_t ads:1;
281 uint32_t pee:1;
282 uint32_t vps:1;
283 uint32_t mwice:1;
284 uint32_t scse:1;
285 uint32_t me:1;
286 uint32_t msae:1;
287 uint32_t isae:1;
288 } s;
289 struct cvmx_pci_cfg01_s cn30xx;
290 struct cvmx_pci_cfg01_s cn31xx;
291 struct cvmx_pci_cfg01_s cn38xx;
292 struct cvmx_pci_cfg01_s cn38xxp2;
293 struct cvmx_pci_cfg01_s cn50xx;
294 struct cvmx_pci_cfg01_s cn58xx;
295 struct cvmx_pci_cfg01_s cn58xxp1;
296};
297
298union cvmx_pci_cfg02 {
299 uint32_t u32;
300 struct cvmx_pci_cfg02_s {
301 uint32_t cc:24;
302 uint32_t rid:8;
303 } s;
304 struct cvmx_pci_cfg02_s cn30xx;
305 struct cvmx_pci_cfg02_s cn31xx;
306 struct cvmx_pci_cfg02_s cn38xx;
307 struct cvmx_pci_cfg02_s cn38xxp2;
308 struct cvmx_pci_cfg02_s cn50xx;
309 struct cvmx_pci_cfg02_s cn58xx;
310 struct cvmx_pci_cfg02_s cn58xxp1;
311};
312
313union cvmx_pci_cfg03 {
314 uint32_t u32;
315 struct cvmx_pci_cfg03_s {
316 uint32_t bcap:1;
317 uint32_t brb:1;
318 uint32_t reserved_28_29:2;
319 uint32_t bcod:4;
320 uint32_t ht:8;
321 uint32_t lt:8;
322 uint32_t cls:8;
323 } s;
324 struct cvmx_pci_cfg03_s cn30xx;
325 struct cvmx_pci_cfg03_s cn31xx;
326 struct cvmx_pci_cfg03_s cn38xx;
327 struct cvmx_pci_cfg03_s cn38xxp2;
328 struct cvmx_pci_cfg03_s cn50xx;
329 struct cvmx_pci_cfg03_s cn58xx;
330 struct cvmx_pci_cfg03_s cn58xxp1;
331};
332
333union cvmx_pci_cfg04 {
334 uint32_t u32;
335 struct cvmx_pci_cfg04_s {
336 uint32_t lbase:20;
337 uint32_t lbasez:8;
338 uint32_t pf:1;
339 uint32_t typ:2;
340 uint32_t mspc:1;
341 } s;
342 struct cvmx_pci_cfg04_s cn30xx;
343 struct cvmx_pci_cfg04_s cn31xx;
344 struct cvmx_pci_cfg04_s cn38xx;
345 struct cvmx_pci_cfg04_s cn38xxp2;
346 struct cvmx_pci_cfg04_s cn50xx;
347 struct cvmx_pci_cfg04_s cn58xx;
348 struct cvmx_pci_cfg04_s cn58xxp1;
349};
350
351union cvmx_pci_cfg05 {
352 uint32_t u32;
353 struct cvmx_pci_cfg05_s {
354 uint32_t hbase:32;
355 } s;
356 struct cvmx_pci_cfg05_s cn30xx;
357 struct cvmx_pci_cfg05_s cn31xx;
358 struct cvmx_pci_cfg05_s cn38xx;
359 struct cvmx_pci_cfg05_s cn38xxp2;
360 struct cvmx_pci_cfg05_s cn50xx;
361 struct cvmx_pci_cfg05_s cn58xx;
362 struct cvmx_pci_cfg05_s cn58xxp1;
363};
364
365union cvmx_pci_cfg06 {
366 uint32_t u32;
367 struct cvmx_pci_cfg06_s {
368 uint32_t lbase:5;
369 uint32_t lbasez:23;
370 uint32_t pf:1;
371 uint32_t typ:2;
372 uint32_t mspc:1;
373 } s;
374 struct cvmx_pci_cfg06_s cn30xx;
375 struct cvmx_pci_cfg06_s cn31xx;
376 struct cvmx_pci_cfg06_s cn38xx;
377 struct cvmx_pci_cfg06_s cn38xxp2;
378 struct cvmx_pci_cfg06_s cn50xx;
379 struct cvmx_pci_cfg06_s cn58xx;
380 struct cvmx_pci_cfg06_s cn58xxp1;
381};
382
383union cvmx_pci_cfg07 {
384 uint32_t u32;
385 struct cvmx_pci_cfg07_s {
386 uint32_t hbase:32;
387 } s;
388 struct cvmx_pci_cfg07_s cn30xx;
389 struct cvmx_pci_cfg07_s cn31xx;
390 struct cvmx_pci_cfg07_s cn38xx;
391 struct cvmx_pci_cfg07_s cn38xxp2;
392 struct cvmx_pci_cfg07_s cn50xx;
393 struct cvmx_pci_cfg07_s cn58xx;
394 struct cvmx_pci_cfg07_s cn58xxp1;
395};
396
397union cvmx_pci_cfg08 {
398 uint32_t u32;
399 struct cvmx_pci_cfg08_s {
400 uint32_t lbasez:28;
401 uint32_t pf:1;
402 uint32_t typ:2;
403 uint32_t mspc:1;
404 } s;
405 struct cvmx_pci_cfg08_s cn30xx;
406 struct cvmx_pci_cfg08_s cn31xx;
407 struct cvmx_pci_cfg08_s cn38xx;
408 struct cvmx_pci_cfg08_s cn38xxp2;
409 struct cvmx_pci_cfg08_s cn50xx;
410 struct cvmx_pci_cfg08_s cn58xx;
411 struct cvmx_pci_cfg08_s cn58xxp1;
412};
413
414union cvmx_pci_cfg09 {
415 uint32_t u32;
416 struct cvmx_pci_cfg09_s {
417 uint32_t hbase:25;
418 uint32_t hbasez:7;
419 } s;
420 struct cvmx_pci_cfg09_s cn30xx;
421 struct cvmx_pci_cfg09_s cn31xx;
422 struct cvmx_pci_cfg09_s cn38xx;
423 struct cvmx_pci_cfg09_s cn38xxp2;
424 struct cvmx_pci_cfg09_s cn50xx;
425 struct cvmx_pci_cfg09_s cn58xx;
426 struct cvmx_pci_cfg09_s cn58xxp1;
427};
428
429union cvmx_pci_cfg10 {
430 uint32_t u32;
431 struct cvmx_pci_cfg10_s {
432 uint32_t cisp:32;
433 } s;
434 struct cvmx_pci_cfg10_s cn30xx;
435 struct cvmx_pci_cfg10_s cn31xx;
436 struct cvmx_pci_cfg10_s cn38xx;
437 struct cvmx_pci_cfg10_s cn38xxp2;
438 struct cvmx_pci_cfg10_s cn50xx;
439 struct cvmx_pci_cfg10_s cn58xx;
440 struct cvmx_pci_cfg10_s cn58xxp1;
441};
442
443union cvmx_pci_cfg11 {
444 uint32_t u32;
445 struct cvmx_pci_cfg11_s {
446 uint32_t ssid:16;
447 uint32_t ssvid:16;
448 } s;
449 struct cvmx_pci_cfg11_s cn30xx;
450 struct cvmx_pci_cfg11_s cn31xx;
451 struct cvmx_pci_cfg11_s cn38xx;
452 struct cvmx_pci_cfg11_s cn38xxp2;
453 struct cvmx_pci_cfg11_s cn50xx;
454 struct cvmx_pci_cfg11_s cn58xx;
455 struct cvmx_pci_cfg11_s cn58xxp1;
456};
457
458union cvmx_pci_cfg12 {
459 uint32_t u32;
460 struct cvmx_pci_cfg12_s {
461 uint32_t erbar:16;
462 uint32_t erbarz:5;
463 uint32_t reserved_1_10:10;
464 uint32_t erbar_en:1;
465 } s;
466 struct cvmx_pci_cfg12_s cn30xx;
467 struct cvmx_pci_cfg12_s cn31xx;
468 struct cvmx_pci_cfg12_s cn38xx;
469 struct cvmx_pci_cfg12_s cn38xxp2;
470 struct cvmx_pci_cfg12_s cn50xx;
471 struct cvmx_pci_cfg12_s cn58xx;
472 struct cvmx_pci_cfg12_s cn58xxp1;
473};
474
475union cvmx_pci_cfg13 {
476 uint32_t u32;
477 struct cvmx_pci_cfg13_s {
478 uint32_t reserved_8_31:24;
479 uint32_t cp:8;
480 } s;
481 struct cvmx_pci_cfg13_s cn30xx;
482 struct cvmx_pci_cfg13_s cn31xx;
483 struct cvmx_pci_cfg13_s cn38xx;
484 struct cvmx_pci_cfg13_s cn38xxp2;
485 struct cvmx_pci_cfg13_s cn50xx;
486 struct cvmx_pci_cfg13_s cn58xx;
487 struct cvmx_pci_cfg13_s cn58xxp1;
488};
489
490union cvmx_pci_cfg15 {
491 uint32_t u32;
492 struct cvmx_pci_cfg15_s {
493 uint32_t ml:8;
494 uint32_t mg:8;
495 uint32_t inta:8;
496 uint32_t il:8;
497 } s;
498 struct cvmx_pci_cfg15_s cn30xx;
499 struct cvmx_pci_cfg15_s cn31xx;
500 struct cvmx_pci_cfg15_s cn38xx;
501 struct cvmx_pci_cfg15_s cn38xxp2;
502 struct cvmx_pci_cfg15_s cn50xx;
503 struct cvmx_pci_cfg15_s cn58xx;
504 struct cvmx_pci_cfg15_s cn58xxp1;
505};
506
507union cvmx_pci_cfg16 {
508 uint32_t u32;
509 struct cvmx_pci_cfg16_s {
510 uint32_t trdnpr:1;
511 uint32_t trdard:1;
512 uint32_t rdsati:1;
513 uint32_t trdrs:1;
514 uint32_t trtae:1;
515 uint32_t twsei:1;
516 uint32_t twsen:1;
517 uint32_t twtae:1;
518 uint32_t tmae:1;
519 uint32_t tslte:3;
520 uint32_t tilt:4;
521 uint32_t pbe:12;
522 uint32_t dppmr:1;
523 uint32_t reserved_2_2:1;
524 uint32_t tswc:1;
525 uint32_t mltd:1;
526 } s;
527 struct cvmx_pci_cfg16_s cn30xx;
528 struct cvmx_pci_cfg16_s cn31xx;
529 struct cvmx_pci_cfg16_s cn38xx;
530 struct cvmx_pci_cfg16_s cn38xxp2;
531 struct cvmx_pci_cfg16_s cn50xx;
532 struct cvmx_pci_cfg16_s cn58xx;
533 struct cvmx_pci_cfg16_s cn58xxp1;
534};
535
536union cvmx_pci_cfg17 {
537 uint32_t u32;
538 struct cvmx_pci_cfg17_s {
539 uint32_t tscme:32;
540 } s;
541 struct cvmx_pci_cfg17_s cn30xx;
542 struct cvmx_pci_cfg17_s cn31xx;
543 struct cvmx_pci_cfg17_s cn38xx;
544 struct cvmx_pci_cfg17_s cn38xxp2;
545 struct cvmx_pci_cfg17_s cn50xx;
546 struct cvmx_pci_cfg17_s cn58xx;
547 struct cvmx_pci_cfg17_s cn58xxp1;
548};
549
550union cvmx_pci_cfg18 {
551 uint32_t u32;
552 struct cvmx_pci_cfg18_s {
553 uint32_t tdsrps:32;
554 } s;
555 struct cvmx_pci_cfg18_s cn30xx;
556 struct cvmx_pci_cfg18_s cn31xx;
557 struct cvmx_pci_cfg18_s cn38xx;
558 struct cvmx_pci_cfg18_s cn38xxp2;
559 struct cvmx_pci_cfg18_s cn50xx;
560 struct cvmx_pci_cfg18_s cn58xx;
561 struct cvmx_pci_cfg18_s cn58xxp1;
562};
563
564union cvmx_pci_cfg19 {
565 uint32_t u32;
566 struct cvmx_pci_cfg19_s {
567 uint32_t mrbcm:1;
568 uint32_t mrbci:1;
569 uint32_t mdwe:1;
570 uint32_t mdre:1;
571 uint32_t mdrimc:1;
572 uint32_t mdrrmc:3;
573 uint32_t tmes:8;
574 uint32_t teci:1;
575 uint32_t tmei:1;
576 uint32_t tmse:1;
577 uint32_t tmdpes:1;
578 uint32_t tmapes:1;
579 uint32_t reserved_9_10:2;
580 uint32_t tibcd:1;
581 uint32_t tibde:1;
582 uint32_t reserved_6_6:1;
583 uint32_t tidomc:1;
584 uint32_t tdomc:5;
585 } s;
586 struct cvmx_pci_cfg19_s cn30xx;
587 struct cvmx_pci_cfg19_s cn31xx;
588 struct cvmx_pci_cfg19_s cn38xx;
589 struct cvmx_pci_cfg19_s cn38xxp2;
590 struct cvmx_pci_cfg19_s cn50xx;
591 struct cvmx_pci_cfg19_s cn58xx;
592 struct cvmx_pci_cfg19_s cn58xxp1;
593};
594
595union cvmx_pci_cfg20 {
596 uint32_t u32;
597 struct cvmx_pci_cfg20_s {
598 uint32_t mdsp:32;
599 } s;
600 struct cvmx_pci_cfg20_s cn30xx;
601 struct cvmx_pci_cfg20_s cn31xx;
602 struct cvmx_pci_cfg20_s cn38xx;
603 struct cvmx_pci_cfg20_s cn38xxp2;
604 struct cvmx_pci_cfg20_s cn50xx;
605 struct cvmx_pci_cfg20_s cn58xx;
606 struct cvmx_pci_cfg20_s cn58xxp1;
607};
608
609union cvmx_pci_cfg21 {
610 uint32_t u32;
611 struct cvmx_pci_cfg21_s {
612 uint32_t scmre:32;
613 } s;
614 struct cvmx_pci_cfg21_s cn30xx;
615 struct cvmx_pci_cfg21_s cn31xx;
616 struct cvmx_pci_cfg21_s cn38xx;
617 struct cvmx_pci_cfg21_s cn38xxp2;
618 struct cvmx_pci_cfg21_s cn50xx;
619 struct cvmx_pci_cfg21_s cn58xx;
620 struct cvmx_pci_cfg21_s cn58xxp1;
621};
622
623union cvmx_pci_cfg22 {
624 uint32_t u32;
625 struct cvmx_pci_cfg22_s {
626 uint32_t mac:7;
627 uint32_t reserved_19_24:6;
628 uint32_t flush:1;
629 uint32_t mra:1;
630 uint32_t mtta:1;
631 uint32_t mrv:8;
632 uint32_t mttv:8;
633 } s;
634 struct cvmx_pci_cfg22_s cn30xx;
635 struct cvmx_pci_cfg22_s cn31xx;
636 struct cvmx_pci_cfg22_s cn38xx;
637 struct cvmx_pci_cfg22_s cn38xxp2;
638 struct cvmx_pci_cfg22_s cn50xx;
639 struct cvmx_pci_cfg22_s cn58xx;
640 struct cvmx_pci_cfg22_s cn58xxp1;
641};
642
643union cvmx_pci_cfg56 {
644 uint32_t u32;
645 struct cvmx_pci_cfg56_s {
646 uint32_t reserved_23_31:9;
647 uint32_t most:3;
648 uint32_t mmbc:2;
649 uint32_t roe:1;
650 uint32_t dpere:1;
651 uint32_t ncp:8;
652 uint32_t pxcid:8;
653 } s;
654 struct cvmx_pci_cfg56_s cn30xx;
655 struct cvmx_pci_cfg56_s cn31xx;
656 struct cvmx_pci_cfg56_s cn38xx;
657 struct cvmx_pci_cfg56_s cn38xxp2;
658 struct cvmx_pci_cfg56_s cn50xx;
659 struct cvmx_pci_cfg56_s cn58xx;
660 struct cvmx_pci_cfg56_s cn58xxp1;
661};
662
663union cvmx_pci_cfg57 {
664 uint32_t u32;
665 struct cvmx_pci_cfg57_s {
666 uint32_t reserved_30_31:2;
667 uint32_t scemr:1;
668 uint32_t mcrsd:3;
669 uint32_t mostd:3;
670 uint32_t mmrbcd:2;
671 uint32_t dc:1;
672 uint32_t usc:1;
673 uint32_t scd:1;
674 uint32_t m133:1;
675 uint32_t w64:1;
676 uint32_t bn:8;
677 uint32_t dn:5;
678 uint32_t fn:3;
679 } s;
680 struct cvmx_pci_cfg57_s cn30xx;
681 struct cvmx_pci_cfg57_s cn31xx;
682 struct cvmx_pci_cfg57_s cn38xx;
683 struct cvmx_pci_cfg57_s cn38xxp2;
684 struct cvmx_pci_cfg57_s cn50xx;
685 struct cvmx_pci_cfg57_s cn58xx;
686 struct cvmx_pci_cfg57_s cn58xxp1;
687};
688
689union cvmx_pci_cfg58 {
690 uint32_t u32;
691 struct cvmx_pci_cfg58_s {
692 uint32_t pmes:5;
693 uint32_t d2s:1;
694 uint32_t d1s:1;
695 uint32_t auxc:3;
696 uint32_t dsi:1;
697 uint32_t reserved_20_20:1;
698 uint32_t pmec:1;
699 uint32_t pcimiv:3;
700 uint32_t ncp:8;
701 uint32_t pmcid:8;
702 } s;
703 struct cvmx_pci_cfg58_s cn30xx;
704 struct cvmx_pci_cfg58_s cn31xx;
705 struct cvmx_pci_cfg58_s cn38xx;
706 struct cvmx_pci_cfg58_s cn38xxp2;
707 struct cvmx_pci_cfg58_s cn50xx;
708 struct cvmx_pci_cfg58_s cn58xx;
709 struct cvmx_pci_cfg58_s cn58xxp1;
710};
711
712union cvmx_pci_cfg59 {
713 uint32_t u32;
714 struct cvmx_pci_cfg59_s {
715 uint32_t pmdia:8;
716 uint32_t bpccen:1;
717 uint32_t bd3h:1;
718 uint32_t reserved_16_21:6;
719 uint32_t pmess:1;
720 uint32_t pmedsia:2;
721 uint32_t pmds:4;
722 uint32_t pmeens:1;
723 uint32_t reserved_2_7:6;
724 uint32_t ps:2;
725 } s;
726 struct cvmx_pci_cfg59_s cn30xx;
727 struct cvmx_pci_cfg59_s cn31xx;
728 struct cvmx_pci_cfg59_s cn38xx;
729 struct cvmx_pci_cfg59_s cn38xxp2;
730 struct cvmx_pci_cfg59_s cn50xx;
731 struct cvmx_pci_cfg59_s cn58xx;
732 struct cvmx_pci_cfg59_s cn58xxp1;
733};
734
735union cvmx_pci_cfg60 {
736 uint32_t u32;
737 struct cvmx_pci_cfg60_s {
738 uint32_t reserved_24_31:8;
739 uint32_t m64:1;
740 uint32_t mme:3;
741 uint32_t mmc:3;
742 uint32_t msien:1;
743 uint32_t ncp:8;
744 uint32_t msicid:8;
745 } s;
746 struct cvmx_pci_cfg60_s cn30xx;
747 struct cvmx_pci_cfg60_s cn31xx;
748 struct cvmx_pci_cfg60_s cn38xx;
749 struct cvmx_pci_cfg60_s cn38xxp2;
750 struct cvmx_pci_cfg60_s cn50xx;
751 struct cvmx_pci_cfg60_s cn58xx;
752 struct cvmx_pci_cfg60_s cn58xxp1;
753};
754
755union cvmx_pci_cfg61 {
756 uint32_t u32;
757 struct cvmx_pci_cfg61_s {
758 uint32_t msi31t2:30;
759 uint32_t reserved_0_1:2;
760 } s;
761 struct cvmx_pci_cfg61_s cn30xx;
762 struct cvmx_pci_cfg61_s cn31xx;
763 struct cvmx_pci_cfg61_s cn38xx;
764 struct cvmx_pci_cfg61_s cn38xxp2;
765 struct cvmx_pci_cfg61_s cn50xx;
766 struct cvmx_pci_cfg61_s cn58xx;
767 struct cvmx_pci_cfg61_s cn58xxp1;
768};
769
770union cvmx_pci_cfg62 {
771 uint32_t u32;
772 struct cvmx_pci_cfg62_s {
773 uint32_t msi:32;
774 } s;
775 struct cvmx_pci_cfg62_s cn30xx;
776 struct cvmx_pci_cfg62_s cn31xx;
777 struct cvmx_pci_cfg62_s cn38xx;
778 struct cvmx_pci_cfg62_s cn38xxp2;
779 struct cvmx_pci_cfg62_s cn50xx;
780 struct cvmx_pci_cfg62_s cn58xx;
781 struct cvmx_pci_cfg62_s cn58xxp1;
782};
783
784union cvmx_pci_cfg63 {
785 uint32_t u32;
786 struct cvmx_pci_cfg63_s {
787 uint32_t reserved_16_31:16;
788 uint32_t msimd:16;
789 } s;
790 struct cvmx_pci_cfg63_s cn30xx;
791 struct cvmx_pci_cfg63_s cn31xx;
792 struct cvmx_pci_cfg63_s cn38xx;
793 struct cvmx_pci_cfg63_s cn38xxp2;
794 struct cvmx_pci_cfg63_s cn50xx;
795 struct cvmx_pci_cfg63_s cn58xx;
796 struct cvmx_pci_cfg63_s cn58xxp1;
797};
798
799union cvmx_pci_cnt_reg {
800 uint64_t u64;
801 struct cvmx_pci_cnt_reg_s {
802 uint64_t reserved_38_63:26;
803 uint64_t hm_pcix:1;
804 uint64_t hm_speed:2;
805 uint64_t ap_pcix:1;
806 uint64_t ap_speed:2;
807 uint64_t pcicnt:32;
808 } s;
809 struct cvmx_pci_cnt_reg_s cn50xx;
810 struct cvmx_pci_cnt_reg_s cn58xx;
811 struct cvmx_pci_cnt_reg_s cn58xxp1;
812};
813
814union cvmx_pci_ctl_status_2 {
815 uint32_t u32;
816 struct cvmx_pci_ctl_status_2_s {
817 uint32_t reserved_29_31:3;
818 uint32_t bb1_hole:3;
819 uint32_t bb1_siz:1;
820 uint32_t bb_ca:1;
821 uint32_t bb_es:2;
822 uint32_t bb1:1;
823 uint32_t bb0:1;
824 uint32_t erst_n:1;
825 uint32_t bar2pres:1;
826 uint32_t scmtyp:1;
827 uint32_t scm:1;
828 uint32_t en_wfilt:1;
829 uint32_t reserved_14_14:1;
830 uint32_t ap_pcix:1;
831 uint32_t ap_64ad:1;
832 uint32_t b12_bist:1;
833 uint32_t pmo_amod:1;
834 uint32_t pmo_fpc:3;
835 uint32_t tsr_hwm:3;
836 uint32_t bar2_enb:1;
837 uint32_t bar2_esx:2;
838 uint32_t bar2_cax:1;
839 } s;
840 struct cvmx_pci_ctl_status_2_s cn30xx;
841 struct cvmx_pci_ctl_status_2_cn31xx {
842 uint32_t reserved_20_31:12;
843 uint32_t erst_n:1;
844 uint32_t bar2pres:1;
845 uint32_t scmtyp:1;
846 uint32_t scm:1;
847 uint32_t en_wfilt:1;
848 uint32_t reserved_14_14:1;
849 uint32_t ap_pcix:1;
850 uint32_t ap_64ad:1;
851 uint32_t b12_bist:1;
852 uint32_t pmo_amod:1;
853 uint32_t pmo_fpc:3;
854 uint32_t tsr_hwm:3;
855 uint32_t bar2_enb:1;
856 uint32_t bar2_esx:2;
857 uint32_t bar2_cax:1;
858 } cn31xx;
859 struct cvmx_pci_ctl_status_2_s cn38xx;
860 struct cvmx_pci_ctl_status_2_cn31xx cn38xxp2;
861 struct cvmx_pci_ctl_status_2_s cn50xx;
862 struct cvmx_pci_ctl_status_2_s cn58xx;
863 struct cvmx_pci_ctl_status_2_s cn58xxp1;
864};
865
866union cvmx_pci_dbellx {
867 uint32_t u32;
868 struct cvmx_pci_dbellx_s {
869 uint32_t reserved_16_31:16;
870 uint32_t inc_val:16;
871 } s;
872 struct cvmx_pci_dbellx_s cn30xx;
873 struct cvmx_pci_dbellx_s cn31xx;
874 struct cvmx_pci_dbellx_s cn38xx;
875 struct cvmx_pci_dbellx_s cn38xxp2;
876 struct cvmx_pci_dbellx_s cn50xx;
877 struct cvmx_pci_dbellx_s cn58xx;
878 struct cvmx_pci_dbellx_s cn58xxp1;
879};
880
881union cvmx_pci_dma_cntx {
882 uint32_t u32;
883 struct cvmx_pci_dma_cntx_s {
884 uint32_t dma_cnt:32;
885 } s;
886 struct cvmx_pci_dma_cntx_s cn30xx;
887 struct cvmx_pci_dma_cntx_s cn31xx;
888 struct cvmx_pci_dma_cntx_s cn38xx;
889 struct cvmx_pci_dma_cntx_s cn38xxp2;
890 struct cvmx_pci_dma_cntx_s cn50xx;
891 struct cvmx_pci_dma_cntx_s cn58xx;
892 struct cvmx_pci_dma_cntx_s cn58xxp1;
893};
894
895union cvmx_pci_dma_int_levx {
896 uint32_t u32;
897 struct cvmx_pci_dma_int_levx_s {
898 uint32_t pkt_cnt:32;
899 } s;
900 struct cvmx_pci_dma_int_levx_s cn30xx;
901 struct cvmx_pci_dma_int_levx_s cn31xx;
902 struct cvmx_pci_dma_int_levx_s cn38xx;
903 struct cvmx_pci_dma_int_levx_s cn38xxp2;
904 struct cvmx_pci_dma_int_levx_s cn50xx;
905 struct cvmx_pci_dma_int_levx_s cn58xx;
906 struct cvmx_pci_dma_int_levx_s cn58xxp1;
907};
908
909union cvmx_pci_dma_timex {
910 uint32_t u32;
911 struct cvmx_pci_dma_timex_s {
912 uint32_t dma_time:32;
913 } s;
914 struct cvmx_pci_dma_timex_s cn30xx;
915 struct cvmx_pci_dma_timex_s cn31xx;
916 struct cvmx_pci_dma_timex_s cn38xx;
917 struct cvmx_pci_dma_timex_s cn38xxp2;
918 struct cvmx_pci_dma_timex_s cn50xx;
919 struct cvmx_pci_dma_timex_s cn58xx;
920 struct cvmx_pci_dma_timex_s cn58xxp1;
921};
922
923union cvmx_pci_instr_countx {
924 uint32_t u32;
925 struct cvmx_pci_instr_countx_s {
926 uint32_t icnt:32;
927 } s;
928 struct cvmx_pci_instr_countx_s cn30xx;
929 struct cvmx_pci_instr_countx_s cn31xx;
930 struct cvmx_pci_instr_countx_s cn38xx;
931 struct cvmx_pci_instr_countx_s cn38xxp2;
932 struct cvmx_pci_instr_countx_s cn50xx;
933 struct cvmx_pci_instr_countx_s cn58xx;
934 struct cvmx_pci_instr_countx_s cn58xxp1;
935};
936
937union cvmx_pci_int_enb {
938 uint64_t u64;
939 struct cvmx_pci_int_enb_s {
940 uint64_t reserved_34_63:30;
941 uint64_t ill_rd:1;
942 uint64_t ill_wr:1;
943 uint64_t win_wr:1;
944 uint64_t dma1_fi:1;
945 uint64_t dma0_fi:1;
946 uint64_t idtime1:1;
947 uint64_t idtime0:1;
948 uint64_t idcnt1:1;
949 uint64_t idcnt0:1;
950 uint64_t iptime3:1;
951 uint64_t iptime2:1;
952 uint64_t iptime1:1;
953 uint64_t iptime0:1;
954 uint64_t ipcnt3:1;
955 uint64_t ipcnt2:1;
956 uint64_t ipcnt1:1;
957 uint64_t ipcnt0:1;
958 uint64_t irsl_int:1;
959 uint64_t ill_rrd:1;
960 uint64_t ill_rwr:1;
961 uint64_t idperr:1;
962 uint64_t iaperr:1;
963 uint64_t iserr:1;
964 uint64_t itsr_abt:1;
965 uint64_t imsc_msg:1;
966 uint64_t imsi_mabt:1;
967 uint64_t imsi_tabt:1;
968 uint64_t imsi_per:1;
969 uint64_t imr_tto:1;
970 uint64_t imr_abt:1;
971 uint64_t itr_abt:1;
972 uint64_t imr_wtto:1;
973 uint64_t imr_wabt:1;
974 uint64_t itr_wabt:1;
975 } s;
976 struct cvmx_pci_int_enb_cn30xx {
977 uint64_t reserved_34_63:30;
978 uint64_t ill_rd:1;
979 uint64_t ill_wr:1;
980 uint64_t win_wr:1;
981 uint64_t dma1_fi:1;
982 uint64_t dma0_fi:1;
983 uint64_t idtime1:1;
984 uint64_t idtime0:1;
985 uint64_t idcnt1:1;
986 uint64_t idcnt0:1;
987 uint64_t reserved_22_24:3;
988 uint64_t iptime0:1;
989 uint64_t reserved_18_20:3;
990 uint64_t ipcnt0:1;
991 uint64_t irsl_int:1;
992 uint64_t ill_rrd:1;
993 uint64_t ill_rwr:1;
994 uint64_t idperr:1;
995 uint64_t iaperr:1;
996 uint64_t iserr:1;
997 uint64_t itsr_abt:1;
998 uint64_t imsc_msg:1;
999 uint64_t imsi_mabt:1;
1000 uint64_t imsi_tabt:1;
1001 uint64_t imsi_per:1;
1002 uint64_t imr_tto:1;
1003 uint64_t imr_abt:1;
1004 uint64_t itr_abt:1;
1005 uint64_t imr_wtto:1;
1006 uint64_t imr_wabt:1;
1007 uint64_t itr_wabt:1;
1008 } cn30xx;
1009 struct cvmx_pci_int_enb_cn31xx {
1010 uint64_t reserved_34_63:30;
1011 uint64_t ill_rd:1;
1012 uint64_t ill_wr:1;
1013 uint64_t win_wr:1;
1014 uint64_t dma1_fi:1;
1015 uint64_t dma0_fi:1;
1016 uint64_t idtime1:1;
1017 uint64_t idtime0:1;
1018 uint64_t idcnt1:1;
1019 uint64_t idcnt0:1;
1020 uint64_t reserved_23_24:2;
1021 uint64_t iptime1:1;
1022 uint64_t iptime0:1;
1023 uint64_t reserved_19_20:2;
1024 uint64_t ipcnt1:1;
1025 uint64_t ipcnt0:1;
1026 uint64_t irsl_int:1;
1027 uint64_t ill_rrd:1;
1028 uint64_t ill_rwr:1;
1029 uint64_t idperr:1;
1030 uint64_t iaperr:1;
1031 uint64_t iserr:1;
1032 uint64_t itsr_abt:1;
1033 uint64_t imsc_msg:1;
1034 uint64_t imsi_mabt:1;
1035 uint64_t imsi_tabt:1;
1036 uint64_t imsi_per:1;
1037 uint64_t imr_tto:1;
1038 uint64_t imr_abt:1;
1039 uint64_t itr_abt:1;
1040 uint64_t imr_wtto:1;
1041 uint64_t imr_wabt:1;
1042 uint64_t itr_wabt:1;
1043 } cn31xx;
1044 struct cvmx_pci_int_enb_s cn38xx;
1045 struct cvmx_pci_int_enb_s cn38xxp2;
1046 struct cvmx_pci_int_enb_cn31xx cn50xx;
1047 struct cvmx_pci_int_enb_s cn58xx;
1048 struct cvmx_pci_int_enb_s cn58xxp1;
1049};
1050
1051union cvmx_pci_int_enb2 {
1052 uint64_t u64;
1053 struct cvmx_pci_int_enb2_s {
1054 uint64_t reserved_34_63:30;
1055 uint64_t ill_rd:1;
1056 uint64_t ill_wr:1;
1057 uint64_t win_wr:1;
1058 uint64_t dma1_fi:1;
1059 uint64_t dma0_fi:1;
1060 uint64_t rdtime1:1;
1061 uint64_t rdtime0:1;
1062 uint64_t rdcnt1:1;
1063 uint64_t rdcnt0:1;
1064 uint64_t rptime3:1;
1065 uint64_t rptime2:1;
1066 uint64_t rptime1:1;
1067 uint64_t rptime0:1;
1068 uint64_t rpcnt3:1;
1069 uint64_t rpcnt2:1;
1070 uint64_t rpcnt1:1;
1071 uint64_t rpcnt0:1;
1072 uint64_t rrsl_int:1;
1073 uint64_t ill_rrd:1;
1074 uint64_t ill_rwr:1;
1075 uint64_t rdperr:1;
1076 uint64_t raperr:1;
1077 uint64_t rserr:1;
1078 uint64_t rtsr_abt:1;
1079 uint64_t rmsc_msg:1;
1080 uint64_t rmsi_mabt:1;
1081 uint64_t rmsi_tabt:1;
1082 uint64_t rmsi_per:1;
1083 uint64_t rmr_tto:1;
1084 uint64_t rmr_abt:1;
1085 uint64_t rtr_abt:1;
1086 uint64_t rmr_wtto:1;
1087 uint64_t rmr_wabt:1;
1088 uint64_t rtr_wabt:1;
1089 } s;
1090 struct cvmx_pci_int_enb2_cn30xx {
1091 uint64_t reserved_34_63:30;
1092 uint64_t ill_rd:1;
1093 uint64_t ill_wr:1;
1094 uint64_t win_wr:1;
1095 uint64_t dma1_fi:1;
1096 uint64_t dma0_fi:1;
1097 uint64_t rdtime1:1;
1098 uint64_t rdtime0:1;
1099 uint64_t rdcnt1:1;
1100 uint64_t rdcnt0:1;
1101 uint64_t reserved_22_24:3;
1102 uint64_t rptime0:1;
1103 uint64_t reserved_18_20:3;
1104 uint64_t rpcnt0:1;
1105 uint64_t rrsl_int:1;
1106 uint64_t ill_rrd:1;
1107 uint64_t ill_rwr:1;
1108 uint64_t rdperr:1;
1109 uint64_t raperr:1;
1110 uint64_t rserr:1;
1111 uint64_t rtsr_abt:1;
1112 uint64_t rmsc_msg:1;
1113 uint64_t rmsi_mabt:1;
1114 uint64_t rmsi_tabt:1;
1115 uint64_t rmsi_per:1;
1116 uint64_t rmr_tto:1;
1117 uint64_t rmr_abt:1;
1118 uint64_t rtr_abt:1;
1119 uint64_t rmr_wtto:1;
1120 uint64_t rmr_wabt:1;
1121 uint64_t rtr_wabt:1;
1122 } cn30xx;
1123 struct cvmx_pci_int_enb2_cn31xx {
1124 uint64_t reserved_34_63:30;
1125 uint64_t ill_rd:1;
1126 uint64_t ill_wr:1;
1127 uint64_t win_wr:1;
1128 uint64_t dma1_fi:1;
1129 uint64_t dma0_fi:1;
1130 uint64_t rdtime1:1;
1131 uint64_t rdtime0:1;
1132 uint64_t rdcnt1:1;
1133 uint64_t rdcnt0:1;
1134 uint64_t reserved_23_24:2;
1135 uint64_t rptime1:1;
1136 uint64_t rptime0:1;
1137 uint64_t reserved_19_20:2;
1138 uint64_t rpcnt1:1;
1139 uint64_t rpcnt0:1;
1140 uint64_t rrsl_int:1;
1141 uint64_t ill_rrd:1;
1142 uint64_t ill_rwr:1;
1143 uint64_t rdperr:1;
1144 uint64_t raperr:1;
1145 uint64_t rserr:1;
1146 uint64_t rtsr_abt:1;
1147 uint64_t rmsc_msg:1;
1148 uint64_t rmsi_mabt:1;
1149 uint64_t rmsi_tabt:1;
1150 uint64_t rmsi_per:1;
1151 uint64_t rmr_tto:1;
1152 uint64_t rmr_abt:1;
1153 uint64_t rtr_abt:1;
1154 uint64_t rmr_wtto:1;
1155 uint64_t rmr_wabt:1;
1156 uint64_t rtr_wabt:1;
1157 } cn31xx;
1158 struct cvmx_pci_int_enb2_s cn38xx;
1159 struct cvmx_pci_int_enb2_s cn38xxp2;
1160 struct cvmx_pci_int_enb2_cn31xx cn50xx;
1161 struct cvmx_pci_int_enb2_s cn58xx;
1162 struct cvmx_pci_int_enb2_s cn58xxp1;
1163};
1164
1165union cvmx_pci_int_sum {
1166 uint64_t u64;
1167 struct cvmx_pci_int_sum_s {
1168 uint64_t reserved_34_63:30;
1169 uint64_t ill_rd:1;
1170 uint64_t ill_wr:1;
1171 uint64_t win_wr:1;
1172 uint64_t dma1_fi:1;
1173 uint64_t dma0_fi:1;
1174 uint64_t dtime1:1;
1175 uint64_t dtime0:1;
1176 uint64_t dcnt1:1;
1177 uint64_t dcnt0:1;
1178 uint64_t ptime3:1;
1179 uint64_t ptime2:1;
1180 uint64_t ptime1:1;
1181 uint64_t ptime0:1;
1182 uint64_t pcnt3:1;
1183 uint64_t pcnt2:1;
1184 uint64_t pcnt1:1;
1185 uint64_t pcnt0:1;
1186 uint64_t rsl_int:1;
1187 uint64_t ill_rrd:1;
1188 uint64_t ill_rwr:1;
1189 uint64_t dperr:1;
1190 uint64_t aperr:1;
1191 uint64_t serr:1;
1192 uint64_t tsr_abt:1;
1193 uint64_t msc_msg:1;
1194 uint64_t msi_mabt:1;
1195 uint64_t msi_tabt:1;
1196 uint64_t msi_per:1;
1197 uint64_t mr_tto:1;
1198 uint64_t mr_abt:1;
1199 uint64_t tr_abt:1;
1200 uint64_t mr_wtto:1;
1201 uint64_t mr_wabt:1;
1202 uint64_t tr_wabt:1;
1203 } s;
1204 struct cvmx_pci_int_sum_cn30xx {
1205 uint64_t reserved_34_63:30;
1206 uint64_t ill_rd:1;
1207 uint64_t ill_wr:1;
1208 uint64_t win_wr:1;
1209 uint64_t dma1_fi:1;
1210 uint64_t dma0_fi:1;
1211 uint64_t dtime1:1;
1212 uint64_t dtime0:1;
1213 uint64_t dcnt1:1;
1214 uint64_t dcnt0:1;
1215 uint64_t reserved_22_24:3;
1216 uint64_t ptime0:1;
1217 uint64_t reserved_18_20:3;
1218 uint64_t pcnt0:1;
1219 uint64_t rsl_int:1;
1220 uint64_t ill_rrd:1;
1221 uint64_t ill_rwr:1;
1222 uint64_t dperr:1;
1223 uint64_t aperr:1;
1224 uint64_t serr:1;
1225 uint64_t tsr_abt:1;
1226 uint64_t msc_msg:1;
1227 uint64_t msi_mabt:1;
1228 uint64_t msi_tabt:1;
1229 uint64_t msi_per:1;
1230 uint64_t mr_tto:1;
1231 uint64_t mr_abt:1;
1232 uint64_t tr_abt:1;
1233 uint64_t mr_wtto:1;
1234 uint64_t mr_wabt:1;
1235 uint64_t tr_wabt:1;
1236 } cn30xx;
1237 struct cvmx_pci_int_sum_cn31xx {
1238 uint64_t reserved_34_63:30;
1239 uint64_t ill_rd:1;
1240 uint64_t ill_wr:1;
1241 uint64_t win_wr:1;
1242 uint64_t dma1_fi:1;
1243 uint64_t dma0_fi:1;
1244 uint64_t dtime1:1;
1245 uint64_t dtime0:1;
1246 uint64_t dcnt1:1;
1247 uint64_t dcnt0:1;
1248 uint64_t reserved_23_24:2;
1249 uint64_t ptime1:1;
1250 uint64_t ptime0:1;
1251 uint64_t reserved_19_20:2;
1252 uint64_t pcnt1:1;
1253 uint64_t pcnt0:1;
1254 uint64_t rsl_int:1;
1255 uint64_t ill_rrd:1;
1256 uint64_t ill_rwr:1;
1257 uint64_t dperr:1;
1258 uint64_t aperr:1;
1259 uint64_t serr:1;
1260 uint64_t tsr_abt:1;
1261 uint64_t msc_msg:1;
1262 uint64_t msi_mabt:1;
1263 uint64_t msi_tabt:1;
1264 uint64_t msi_per:1;
1265 uint64_t mr_tto:1;
1266 uint64_t mr_abt:1;
1267 uint64_t tr_abt:1;
1268 uint64_t mr_wtto:1;
1269 uint64_t mr_wabt:1;
1270 uint64_t tr_wabt:1;
1271 } cn31xx;
1272 struct cvmx_pci_int_sum_s cn38xx;
1273 struct cvmx_pci_int_sum_s cn38xxp2;
1274 struct cvmx_pci_int_sum_cn31xx cn50xx;
1275 struct cvmx_pci_int_sum_s cn58xx;
1276 struct cvmx_pci_int_sum_s cn58xxp1;
1277};
1278
1279union cvmx_pci_int_sum2 {
1280 uint64_t u64;
1281 struct cvmx_pci_int_sum2_s {
1282 uint64_t reserved_34_63:30;
1283 uint64_t ill_rd:1;
1284 uint64_t ill_wr:1;
1285 uint64_t win_wr:1;
1286 uint64_t dma1_fi:1;
1287 uint64_t dma0_fi:1;
1288 uint64_t dtime1:1;
1289 uint64_t dtime0:1;
1290 uint64_t dcnt1:1;
1291 uint64_t dcnt0:1;
1292 uint64_t ptime3:1;
1293 uint64_t ptime2:1;
1294 uint64_t ptime1:1;
1295 uint64_t ptime0:1;
1296 uint64_t pcnt3:1;
1297 uint64_t pcnt2:1;
1298 uint64_t pcnt1:1;
1299 uint64_t pcnt0:1;
1300 uint64_t rsl_int:1;
1301 uint64_t ill_rrd:1;
1302 uint64_t ill_rwr:1;
1303 uint64_t dperr:1;
1304 uint64_t aperr:1;
1305 uint64_t serr:1;
1306 uint64_t tsr_abt:1;
1307 uint64_t msc_msg:1;
1308 uint64_t msi_mabt:1;
1309 uint64_t msi_tabt:1;
1310 uint64_t msi_per:1;
1311 uint64_t mr_tto:1;
1312 uint64_t mr_abt:1;
1313 uint64_t tr_abt:1;
1314 uint64_t mr_wtto:1;
1315 uint64_t mr_wabt:1;
1316 uint64_t tr_wabt:1;
1317 } s;
1318 struct cvmx_pci_int_sum2_cn30xx {
1319 uint64_t reserved_34_63:30;
1320 uint64_t ill_rd:1;
1321 uint64_t ill_wr:1;
1322 uint64_t win_wr:1;
1323 uint64_t dma1_fi:1;
1324 uint64_t dma0_fi:1;
1325 uint64_t dtime1:1;
1326 uint64_t dtime0:1;
1327 uint64_t dcnt1:1;
1328 uint64_t dcnt0:1;
1329 uint64_t reserved_22_24:3;
1330 uint64_t ptime0:1;
1331 uint64_t reserved_18_20:3;
1332 uint64_t pcnt0:1;
1333 uint64_t rsl_int:1;
1334 uint64_t ill_rrd:1;
1335 uint64_t ill_rwr:1;
1336 uint64_t dperr:1;
1337 uint64_t aperr:1;
1338 uint64_t serr:1;
1339 uint64_t tsr_abt:1;
1340 uint64_t msc_msg:1;
1341 uint64_t msi_mabt:1;
1342 uint64_t msi_tabt:1;
1343 uint64_t msi_per:1;
1344 uint64_t mr_tto:1;
1345 uint64_t mr_abt:1;
1346 uint64_t tr_abt:1;
1347 uint64_t mr_wtto:1;
1348 uint64_t mr_wabt:1;
1349 uint64_t tr_wabt:1;
1350 } cn30xx;
1351 struct cvmx_pci_int_sum2_cn31xx {
1352 uint64_t reserved_34_63:30;
1353 uint64_t ill_rd:1;
1354 uint64_t ill_wr:1;
1355 uint64_t win_wr:1;
1356 uint64_t dma1_fi:1;
1357 uint64_t dma0_fi:1;
1358 uint64_t dtime1:1;
1359 uint64_t dtime0:1;
1360 uint64_t dcnt1:1;
1361 uint64_t dcnt0:1;
1362 uint64_t reserved_23_24:2;
1363 uint64_t ptime1:1;
1364 uint64_t ptime0:1;
1365 uint64_t reserved_19_20:2;
1366 uint64_t pcnt1:1;
1367 uint64_t pcnt0:1;
1368 uint64_t rsl_int:1;
1369 uint64_t ill_rrd:1;
1370 uint64_t ill_rwr:1;
1371 uint64_t dperr:1;
1372 uint64_t aperr:1;
1373 uint64_t serr:1;
1374 uint64_t tsr_abt:1;
1375 uint64_t msc_msg:1;
1376 uint64_t msi_mabt:1;
1377 uint64_t msi_tabt:1;
1378 uint64_t msi_per:1;
1379 uint64_t mr_tto:1;
1380 uint64_t mr_abt:1;
1381 uint64_t tr_abt:1;
1382 uint64_t mr_wtto:1;
1383 uint64_t mr_wabt:1;
1384 uint64_t tr_wabt:1;
1385 } cn31xx;
1386 struct cvmx_pci_int_sum2_s cn38xx;
1387 struct cvmx_pci_int_sum2_s cn38xxp2;
1388 struct cvmx_pci_int_sum2_cn31xx cn50xx;
1389 struct cvmx_pci_int_sum2_s cn58xx;
1390 struct cvmx_pci_int_sum2_s cn58xxp1;
1391};
1392
1393union cvmx_pci_msi_rcv {
1394 uint32_t u32;
1395 struct cvmx_pci_msi_rcv_s {
1396 uint32_t reserved_6_31:26;
1397 uint32_t intr:6;
1398 } s;
1399 struct cvmx_pci_msi_rcv_s cn30xx;
1400 struct cvmx_pci_msi_rcv_s cn31xx;
1401 struct cvmx_pci_msi_rcv_s cn38xx;
1402 struct cvmx_pci_msi_rcv_s cn38xxp2;
1403 struct cvmx_pci_msi_rcv_s cn50xx;
1404 struct cvmx_pci_msi_rcv_s cn58xx;
1405 struct cvmx_pci_msi_rcv_s cn58xxp1;
1406};
1407
1408union cvmx_pci_pkt_creditsx {
1409 uint32_t u32;
1410 struct cvmx_pci_pkt_creditsx_s {
1411 uint32_t pkt_cnt:16;
1412 uint32_t ptr_cnt:16;
1413 } s;
1414 struct cvmx_pci_pkt_creditsx_s cn30xx;
1415 struct cvmx_pci_pkt_creditsx_s cn31xx;
1416 struct cvmx_pci_pkt_creditsx_s cn38xx;
1417 struct cvmx_pci_pkt_creditsx_s cn38xxp2;
1418 struct cvmx_pci_pkt_creditsx_s cn50xx;
1419 struct cvmx_pci_pkt_creditsx_s cn58xx;
1420 struct cvmx_pci_pkt_creditsx_s cn58xxp1;
1421};
1422
1423union cvmx_pci_pkts_sentx {
1424 uint32_t u32;
1425 struct cvmx_pci_pkts_sentx_s {
1426 uint32_t pkt_cnt:32;
1427 } s;
1428 struct cvmx_pci_pkts_sentx_s cn30xx;
1429 struct cvmx_pci_pkts_sentx_s cn31xx;
1430 struct cvmx_pci_pkts_sentx_s cn38xx;
1431 struct cvmx_pci_pkts_sentx_s cn38xxp2;
1432 struct cvmx_pci_pkts_sentx_s cn50xx;
1433 struct cvmx_pci_pkts_sentx_s cn58xx;
1434 struct cvmx_pci_pkts_sentx_s cn58xxp1;
1435};
1436
1437union cvmx_pci_pkts_sent_int_levx {
1438 uint32_t u32;
1439 struct cvmx_pci_pkts_sent_int_levx_s {
1440 uint32_t pkt_cnt:32;
1441 } s;
1442 struct cvmx_pci_pkts_sent_int_levx_s cn30xx;
1443 struct cvmx_pci_pkts_sent_int_levx_s cn31xx;
1444 struct cvmx_pci_pkts_sent_int_levx_s cn38xx;
1445 struct cvmx_pci_pkts_sent_int_levx_s cn38xxp2;
1446 struct cvmx_pci_pkts_sent_int_levx_s cn50xx;
1447 struct cvmx_pci_pkts_sent_int_levx_s cn58xx;
1448 struct cvmx_pci_pkts_sent_int_levx_s cn58xxp1;
1449};
1450
1451union cvmx_pci_pkts_sent_timex {
1452 uint32_t u32;
1453 struct cvmx_pci_pkts_sent_timex_s {
1454 uint32_t pkt_time:32;
1455 } s;
1456 struct cvmx_pci_pkts_sent_timex_s cn30xx;
1457 struct cvmx_pci_pkts_sent_timex_s cn31xx;
1458 struct cvmx_pci_pkts_sent_timex_s cn38xx;
1459 struct cvmx_pci_pkts_sent_timex_s cn38xxp2;
1460 struct cvmx_pci_pkts_sent_timex_s cn50xx;
1461 struct cvmx_pci_pkts_sent_timex_s cn58xx;
1462 struct cvmx_pci_pkts_sent_timex_s cn58xxp1;
1463};
1464
1465union cvmx_pci_read_cmd_6 {
1466 uint32_t u32;
1467 struct cvmx_pci_read_cmd_6_s {
1468 uint32_t reserved_9_31:23;
1469 uint32_t min_data:6;
1470 uint32_t prefetch:3;
1471 } s;
1472 struct cvmx_pci_read_cmd_6_s cn30xx;
1473 struct cvmx_pci_read_cmd_6_s cn31xx;
1474 struct cvmx_pci_read_cmd_6_s cn38xx;
1475 struct cvmx_pci_read_cmd_6_s cn38xxp2;
1476 struct cvmx_pci_read_cmd_6_s cn50xx;
1477 struct cvmx_pci_read_cmd_6_s cn58xx;
1478 struct cvmx_pci_read_cmd_6_s cn58xxp1;
1479};
1480
1481union cvmx_pci_read_cmd_c {
1482 uint32_t u32;
1483 struct cvmx_pci_read_cmd_c_s {
1484 uint32_t reserved_9_31:23;
1485 uint32_t min_data:6;
1486 uint32_t prefetch:3;
1487 } s;
1488 struct cvmx_pci_read_cmd_c_s cn30xx;
1489 struct cvmx_pci_read_cmd_c_s cn31xx;
1490 struct cvmx_pci_read_cmd_c_s cn38xx;
1491 struct cvmx_pci_read_cmd_c_s cn38xxp2;
1492 struct cvmx_pci_read_cmd_c_s cn50xx;
1493 struct cvmx_pci_read_cmd_c_s cn58xx;
1494 struct cvmx_pci_read_cmd_c_s cn58xxp1;
1495};
1496
1497union cvmx_pci_read_cmd_e {
1498 uint32_t u32;
1499 struct cvmx_pci_read_cmd_e_s {
1500 uint32_t reserved_9_31:23;
1501 uint32_t min_data:6;
1502 uint32_t prefetch:3;
1503 } s;
1504 struct cvmx_pci_read_cmd_e_s cn30xx;
1505 struct cvmx_pci_read_cmd_e_s cn31xx;
1506 struct cvmx_pci_read_cmd_e_s cn38xx;
1507 struct cvmx_pci_read_cmd_e_s cn38xxp2;
1508 struct cvmx_pci_read_cmd_e_s cn50xx;
1509 struct cvmx_pci_read_cmd_e_s cn58xx;
1510 struct cvmx_pci_read_cmd_e_s cn58xxp1;
1511};
1512
1513union cvmx_pci_read_timeout {
1514 uint64_t u64;
1515 struct cvmx_pci_read_timeout_s {
1516 uint64_t reserved_32_63:32;
1517 uint64_t enb:1;
1518 uint64_t cnt:31;
1519 } s;
1520 struct cvmx_pci_read_timeout_s cn30xx;
1521 struct cvmx_pci_read_timeout_s cn31xx;
1522 struct cvmx_pci_read_timeout_s cn38xx;
1523 struct cvmx_pci_read_timeout_s cn38xxp2;
1524 struct cvmx_pci_read_timeout_s cn50xx;
1525 struct cvmx_pci_read_timeout_s cn58xx;
1526 struct cvmx_pci_read_timeout_s cn58xxp1;
1527};
1528
1529union cvmx_pci_scm_reg {
1530 uint64_t u64;
1531 struct cvmx_pci_scm_reg_s {
1532 uint64_t reserved_32_63:32;
1533 uint64_t scm:32;
1534 } s;
1535 struct cvmx_pci_scm_reg_s cn30xx;
1536 struct cvmx_pci_scm_reg_s cn31xx;
1537 struct cvmx_pci_scm_reg_s cn38xx;
1538 struct cvmx_pci_scm_reg_s cn38xxp2;
1539 struct cvmx_pci_scm_reg_s cn50xx;
1540 struct cvmx_pci_scm_reg_s cn58xx;
1541 struct cvmx_pci_scm_reg_s cn58xxp1;
1542};
1543
1544union cvmx_pci_tsr_reg {
1545 uint64_t u64;
1546 struct cvmx_pci_tsr_reg_s {
1547 uint64_t reserved_36_63:28;
1548 uint64_t tsr:36;
1549 } s;
1550 struct cvmx_pci_tsr_reg_s cn30xx;
1551 struct cvmx_pci_tsr_reg_s cn31xx;
1552 struct cvmx_pci_tsr_reg_s cn38xx;
1553 struct cvmx_pci_tsr_reg_s cn38xxp2;
1554 struct cvmx_pci_tsr_reg_s cn50xx;
1555 struct cvmx_pci_tsr_reg_s cn58xx;
1556 struct cvmx_pci_tsr_reg_s cn58xxp1;
1557};
1558
1559union cvmx_pci_win_rd_addr {
1560 uint64_t u64;
1561 struct cvmx_pci_win_rd_addr_s {
1562 uint64_t reserved_49_63:15;
1563 uint64_t iobit:1;
1564 uint64_t reserved_0_47:48;
1565 } s;
1566 struct cvmx_pci_win_rd_addr_cn30xx {
1567 uint64_t reserved_49_63:15;
1568 uint64_t iobit:1;
1569 uint64_t rd_addr:46;
1570 uint64_t reserved_0_1:2;
1571 } cn30xx;
1572 struct cvmx_pci_win_rd_addr_cn30xx cn31xx;
1573 struct cvmx_pci_win_rd_addr_cn38xx {
1574 uint64_t reserved_49_63:15;
1575 uint64_t iobit:1;
1576 uint64_t rd_addr:45;
1577 uint64_t reserved_0_2:3;
1578 } cn38xx;
1579 struct cvmx_pci_win_rd_addr_cn38xx cn38xxp2;
1580 struct cvmx_pci_win_rd_addr_cn30xx cn50xx;
1581 struct cvmx_pci_win_rd_addr_cn38xx cn58xx;
1582 struct cvmx_pci_win_rd_addr_cn38xx cn58xxp1;
1583};
1584
1585union cvmx_pci_win_rd_data {
1586 uint64_t u64;
1587 struct cvmx_pci_win_rd_data_s {
1588 uint64_t rd_data:64;
1589 } s;
1590 struct cvmx_pci_win_rd_data_s cn30xx;
1591 struct cvmx_pci_win_rd_data_s cn31xx;
1592 struct cvmx_pci_win_rd_data_s cn38xx;
1593 struct cvmx_pci_win_rd_data_s cn38xxp2;
1594 struct cvmx_pci_win_rd_data_s cn50xx;
1595 struct cvmx_pci_win_rd_data_s cn58xx;
1596 struct cvmx_pci_win_rd_data_s cn58xxp1;
1597};
1598
1599union cvmx_pci_win_wr_addr {
1600 uint64_t u64;
1601 struct cvmx_pci_win_wr_addr_s {
1602 uint64_t reserved_49_63:15;
1603 uint64_t iobit:1;
1604 uint64_t wr_addr:45;
1605 uint64_t reserved_0_2:3;
1606 } s;
1607 struct cvmx_pci_win_wr_addr_s cn30xx;
1608 struct cvmx_pci_win_wr_addr_s cn31xx;
1609 struct cvmx_pci_win_wr_addr_s cn38xx;
1610 struct cvmx_pci_win_wr_addr_s cn38xxp2;
1611 struct cvmx_pci_win_wr_addr_s cn50xx;
1612 struct cvmx_pci_win_wr_addr_s cn58xx;
1613 struct cvmx_pci_win_wr_addr_s cn58xxp1;
1614};
1615
1616union cvmx_pci_win_wr_data {
1617 uint64_t u64;
1618 struct cvmx_pci_win_wr_data_s {
1619 uint64_t wr_data:64;
1620 } s;
1621 struct cvmx_pci_win_wr_data_s cn30xx;
1622 struct cvmx_pci_win_wr_data_s cn31xx;
1623 struct cvmx_pci_win_wr_data_s cn38xx;
1624 struct cvmx_pci_win_wr_data_s cn38xxp2;
1625 struct cvmx_pci_win_wr_data_s cn50xx;
1626 struct cvmx_pci_win_wr_data_s cn58xx;
1627 struct cvmx_pci_win_wr_data_s cn58xxp1;
1628};
1629
1630union cvmx_pci_win_wr_mask {
1631 uint64_t u64;
1632 struct cvmx_pci_win_wr_mask_s {
1633 uint64_t reserved_8_63:56;
1634 uint64_t wr_mask:8;
1635 } s;
1636 struct cvmx_pci_win_wr_mask_s cn30xx;
1637 struct cvmx_pci_win_wr_mask_s cn31xx;
1638 struct cvmx_pci_win_wr_mask_s cn38xx;
1639 struct cvmx_pci_win_wr_mask_s cn38xxp2;
1640 struct cvmx_pci_win_wr_mask_s cn50xx;
1641 struct cvmx_pci_win_wr_mask_s cn58xx;
1642 struct cvmx_pci_win_wr_mask_s cn58xxp1;
1643};
1644
1645#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-pcieep-defs.h b/arch/mips/include/asm/octeon/cvmx-pcieep-defs.h
new file mode 100644
index 000000000000..d553f8e88df6
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-pcieep-defs.h
@@ -0,0 +1,1365 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_PCIEEP_DEFS_H__
29#define __CVMX_PCIEEP_DEFS_H__
30
31#define CVMX_PCIEEP_CFG000 \
32 (0x0000000000000000ull)
33#define CVMX_PCIEEP_CFG001 \
34 (0x0000000000000004ull)
35#define CVMX_PCIEEP_CFG002 \
36 (0x0000000000000008ull)
37#define CVMX_PCIEEP_CFG003 \
38 (0x000000000000000Cull)
39#define CVMX_PCIEEP_CFG004 \
40 (0x0000000000000010ull)
41#define CVMX_PCIEEP_CFG004_MASK \
42 (0x0000000080000010ull)
43#define CVMX_PCIEEP_CFG005 \
44 (0x0000000000000014ull)
45#define CVMX_PCIEEP_CFG005_MASK \
46 (0x0000000080000014ull)
47#define CVMX_PCIEEP_CFG006 \
48 (0x0000000000000018ull)
49#define CVMX_PCIEEP_CFG006_MASK \
50 (0x0000000080000018ull)
51#define CVMX_PCIEEP_CFG007 \
52 (0x000000000000001Cull)
53#define CVMX_PCIEEP_CFG007_MASK \
54 (0x000000008000001Cull)
55#define CVMX_PCIEEP_CFG008 \
56 (0x0000000000000020ull)
57#define CVMX_PCIEEP_CFG008_MASK \
58 (0x0000000080000020ull)
59#define CVMX_PCIEEP_CFG009 \
60 (0x0000000000000024ull)
61#define CVMX_PCIEEP_CFG009_MASK \
62 (0x0000000080000024ull)
63#define CVMX_PCIEEP_CFG010 \
64 (0x0000000000000028ull)
65#define CVMX_PCIEEP_CFG011 \
66 (0x000000000000002Cull)
67#define CVMX_PCIEEP_CFG012 \
68 (0x0000000000000030ull)
69#define CVMX_PCIEEP_CFG012_MASK \
70 (0x0000000080000030ull)
71#define CVMX_PCIEEP_CFG013 \
72 (0x0000000000000034ull)
73#define CVMX_PCIEEP_CFG015 \
74 (0x000000000000003Cull)
75#define CVMX_PCIEEP_CFG016 \
76 (0x0000000000000040ull)
77#define CVMX_PCIEEP_CFG017 \
78 (0x0000000000000044ull)
79#define CVMX_PCIEEP_CFG020 \
80 (0x0000000000000050ull)
81#define CVMX_PCIEEP_CFG021 \
82 (0x0000000000000054ull)
83#define CVMX_PCIEEP_CFG022 \
84 (0x0000000000000058ull)
85#define CVMX_PCIEEP_CFG023 \
86 (0x000000000000005Cull)
87#define CVMX_PCIEEP_CFG028 \
88 (0x0000000000000070ull)
89#define CVMX_PCIEEP_CFG029 \
90 (0x0000000000000074ull)
91#define CVMX_PCIEEP_CFG030 \
92 (0x0000000000000078ull)
93#define CVMX_PCIEEP_CFG031 \
94 (0x000000000000007Cull)
95#define CVMX_PCIEEP_CFG032 \
96 (0x0000000000000080ull)
97#define CVMX_PCIEEP_CFG033 \
98 (0x0000000000000084ull)
99#define CVMX_PCIEEP_CFG034 \
100 (0x0000000000000088ull)
101#define CVMX_PCIEEP_CFG037 \
102 (0x0000000000000094ull)
103#define CVMX_PCIEEP_CFG038 \
104 (0x0000000000000098ull)
105#define CVMX_PCIEEP_CFG039 \
106 (0x000000000000009Cull)
107#define CVMX_PCIEEP_CFG040 \
108 (0x00000000000000A0ull)
109#define CVMX_PCIEEP_CFG041 \
110 (0x00000000000000A4ull)
111#define CVMX_PCIEEP_CFG042 \
112 (0x00000000000000A8ull)
113#define CVMX_PCIEEP_CFG064 \
114 (0x0000000000000100ull)
115#define CVMX_PCIEEP_CFG065 \
116 (0x0000000000000104ull)
117#define CVMX_PCIEEP_CFG066 \
118 (0x0000000000000108ull)
119#define CVMX_PCIEEP_CFG067 \
120 (0x000000000000010Cull)
121#define CVMX_PCIEEP_CFG068 \
122 (0x0000000000000110ull)
123#define CVMX_PCIEEP_CFG069 \
124 (0x0000000000000114ull)
125#define CVMX_PCIEEP_CFG070 \
126 (0x0000000000000118ull)
127#define CVMX_PCIEEP_CFG071 \
128 (0x000000000000011Cull)
129#define CVMX_PCIEEP_CFG072 \
130 (0x0000000000000120ull)
131#define CVMX_PCIEEP_CFG073 \
132 (0x0000000000000124ull)
133#define CVMX_PCIEEP_CFG074 \
134 (0x0000000000000128ull)
135#define CVMX_PCIEEP_CFG448 \
136 (0x0000000000000700ull)
137#define CVMX_PCIEEP_CFG449 \
138 (0x0000000000000704ull)
139#define CVMX_PCIEEP_CFG450 \
140 (0x0000000000000708ull)
141#define CVMX_PCIEEP_CFG451 \
142 (0x000000000000070Cull)
143#define CVMX_PCIEEP_CFG452 \
144 (0x0000000000000710ull)
145#define CVMX_PCIEEP_CFG453 \
146 (0x0000000000000714ull)
147#define CVMX_PCIEEP_CFG454 \
148 (0x0000000000000718ull)
149#define CVMX_PCIEEP_CFG455 \
150 (0x000000000000071Cull)
151#define CVMX_PCIEEP_CFG456 \
152 (0x0000000000000720ull)
153#define CVMX_PCIEEP_CFG458 \
154 (0x0000000000000728ull)
155#define CVMX_PCIEEP_CFG459 \
156 (0x000000000000072Cull)
157#define CVMX_PCIEEP_CFG460 \
158 (0x0000000000000730ull)
159#define CVMX_PCIEEP_CFG461 \
160 (0x0000000000000734ull)
161#define CVMX_PCIEEP_CFG462 \
162 (0x0000000000000738ull)
163#define CVMX_PCIEEP_CFG463 \
164 (0x000000000000073Cull)
165#define CVMX_PCIEEP_CFG464 \
166 (0x0000000000000740ull)
167#define CVMX_PCIEEP_CFG465 \
168 (0x0000000000000744ull)
169#define CVMX_PCIEEP_CFG466 \
170 (0x0000000000000748ull)
171#define CVMX_PCIEEP_CFG467 \
172 (0x000000000000074Cull)
173#define CVMX_PCIEEP_CFG468 \
174 (0x0000000000000750ull)
175#define CVMX_PCIEEP_CFG490 \
176 (0x00000000000007A8ull)
177#define CVMX_PCIEEP_CFG491 \
178 (0x00000000000007ACull)
179#define CVMX_PCIEEP_CFG492 \
180 (0x00000000000007B0ull)
181#define CVMX_PCIEEP_CFG516 \
182 (0x0000000000000810ull)
183#define CVMX_PCIEEP_CFG517 \
184 (0x0000000000000814ull)
185
186union cvmx_pcieep_cfg000 {
187 uint32_t u32;
188 struct cvmx_pcieep_cfg000_s {
189 uint32_t devid:16;
190 uint32_t vendid:16;
191 } s;
192 struct cvmx_pcieep_cfg000_s cn52xx;
193 struct cvmx_pcieep_cfg000_s cn52xxp1;
194 struct cvmx_pcieep_cfg000_s cn56xx;
195 struct cvmx_pcieep_cfg000_s cn56xxp1;
196};
197
198union cvmx_pcieep_cfg001 {
199 uint32_t u32;
200 struct cvmx_pcieep_cfg001_s {
201 uint32_t dpe:1;
202 uint32_t sse:1;
203 uint32_t rma:1;
204 uint32_t rta:1;
205 uint32_t sta:1;
206 uint32_t devt:2;
207 uint32_t mdpe:1;
208 uint32_t fbb:1;
209 uint32_t reserved_22_22:1;
210 uint32_t m66:1;
211 uint32_t cl:1;
212 uint32_t i_stat:1;
213 uint32_t reserved_11_18:8;
214 uint32_t i_dis:1;
215 uint32_t fbbe:1;
216 uint32_t see:1;
217 uint32_t ids_wcc:1;
218 uint32_t per:1;
219 uint32_t vps:1;
220 uint32_t mwice:1;
221 uint32_t scse:1;
222 uint32_t me:1;
223 uint32_t msae:1;
224 uint32_t isae:1;
225 } s;
226 struct cvmx_pcieep_cfg001_s cn52xx;
227 struct cvmx_pcieep_cfg001_s cn52xxp1;
228 struct cvmx_pcieep_cfg001_s cn56xx;
229 struct cvmx_pcieep_cfg001_s cn56xxp1;
230};
231
232union cvmx_pcieep_cfg002 {
233 uint32_t u32;
234 struct cvmx_pcieep_cfg002_s {
235 uint32_t bcc:8;
236 uint32_t sc:8;
237 uint32_t pi:8;
238 uint32_t rid:8;
239 } s;
240 struct cvmx_pcieep_cfg002_s cn52xx;
241 struct cvmx_pcieep_cfg002_s cn52xxp1;
242 struct cvmx_pcieep_cfg002_s cn56xx;
243 struct cvmx_pcieep_cfg002_s cn56xxp1;
244};
245
246union cvmx_pcieep_cfg003 {
247 uint32_t u32;
248 struct cvmx_pcieep_cfg003_s {
249 uint32_t bist:8;
250 uint32_t mfd:1;
251 uint32_t chf:7;
252 uint32_t lt:8;
253 uint32_t cls:8;
254 } s;
255 struct cvmx_pcieep_cfg003_s cn52xx;
256 struct cvmx_pcieep_cfg003_s cn52xxp1;
257 struct cvmx_pcieep_cfg003_s cn56xx;
258 struct cvmx_pcieep_cfg003_s cn56xxp1;
259};
260
261union cvmx_pcieep_cfg004 {
262 uint32_t u32;
263 struct cvmx_pcieep_cfg004_s {
264 uint32_t lbab:18;
265 uint32_t reserved_4_13:10;
266 uint32_t pf:1;
267 uint32_t typ:2;
268 uint32_t mspc:1;
269 } s;
270 struct cvmx_pcieep_cfg004_s cn52xx;
271 struct cvmx_pcieep_cfg004_s cn52xxp1;
272 struct cvmx_pcieep_cfg004_s cn56xx;
273 struct cvmx_pcieep_cfg004_s cn56xxp1;
274};
275
276union cvmx_pcieep_cfg004_mask {
277 uint32_t u32;
278 struct cvmx_pcieep_cfg004_mask_s {
279 uint32_t lmask:31;
280 uint32_t enb:1;
281 } s;
282 struct cvmx_pcieep_cfg004_mask_s cn52xx;
283 struct cvmx_pcieep_cfg004_mask_s cn52xxp1;
284 struct cvmx_pcieep_cfg004_mask_s cn56xx;
285 struct cvmx_pcieep_cfg004_mask_s cn56xxp1;
286};
287
288union cvmx_pcieep_cfg005 {
289 uint32_t u32;
290 struct cvmx_pcieep_cfg005_s {
291 uint32_t ubab:32;
292 } s;
293 struct cvmx_pcieep_cfg005_s cn52xx;
294 struct cvmx_pcieep_cfg005_s cn52xxp1;
295 struct cvmx_pcieep_cfg005_s cn56xx;
296 struct cvmx_pcieep_cfg005_s cn56xxp1;
297};
298
299union cvmx_pcieep_cfg005_mask {
300 uint32_t u32;
301 struct cvmx_pcieep_cfg005_mask_s {
302 uint32_t umask:32;
303 } s;
304 struct cvmx_pcieep_cfg005_mask_s cn52xx;
305 struct cvmx_pcieep_cfg005_mask_s cn52xxp1;
306 struct cvmx_pcieep_cfg005_mask_s cn56xx;
307 struct cvmx_pcieep_cfg005_mask_s cn56xxp1;
308};
309
310union cvmx_pcieep_cfg006 {
311 uint32_t u32;
312 struct cvmx_pcieep_cfg006_s {
313 uint32_t lbab:6;
314 uint32_t reserved_4_25:22;
315 uint32_t pf:1;
316 uint32_t typ:2;
317 uint32_t mspc:1;
318 } s;
319 struct cvmx_pcieep_cfg006_s cn52xx;
320 struct cvmx_pcieep_cfg006_s cn52xxp1;
321 struct cvmx_pcieep_cfg006_s cn56xx;
322 struct cvmx_pcieep_cfg006_s cn56xxp1;
323};
324
325union cvmx_pcieep_cfg006_mask {
326 uint32_t u32;
327 struct cvmx_pcieep_cfg006_mask_s {
328 uint32_t lmask:31;
329 uint32_t enb:1;
330 } s;
331 struct cvmx_pcieep_cfg006_mask_s cn52xx;
332 struct cvmx_pcieep_cfg006_mask_s cn52xxp1;
333 struct cvmx_pcieep_cfg006_mask_s cn56xx;
334 struct cvmx_pcieep_cfg006_mask_s cn56xxp1;
335};
336
337union cvmx_pcieep_cfg007 {
338 uint32_t u32;
339 struct cvmx_pcieep_cfg007_s {
340 uint32_t ubab:32;
341 } s;
342 struct cvmx_pcieep_cfg007_s cn52xx;
343 struct cvmx_pcieep_cfg007_s cn52xxp1;
344 struct cvmx_pcieep_cfg007_s cn56xx;
345 struct cvmx_pcieep_cfg007_s cn56xxp1;
346};
347
348union cvmx_pcieep_cfg007_mask {
349 uint32_t u32;
350 struct cvmx_pcieep_cfg007_mask_s {
351 uint32_t umask:32;
352 } s;
353 struct cvmx_pcieep_cfg007_mask_s cn52xx;
354 struct cvmx_pcieep_cfg007_mask_s cn52xxp1;
355 struct cvmx_pcieep_cfg007_mask_s cn56xx;
356 struct cvmx_pcieep_cfg007_mask_s cn56xxp1;
357};
358
359union cvmx_pcieep_cfg008 {
360 uint32_t u32;
361 struct cvmx_pcieep_cfg008_s {
362 uint32_t reserved_4_31:28;
363 uint32_t pf:1;
364 uint32_t typ:2;
365 uint32_t mspc:1;
366 } s;
367 struct cvmx_pcieep_cfg008_s cn52xx;
368 struct cvmx_pcieep_cfg008_s cn52xxp1;
369 struct cvmx_pcieep_cfg008_s cn56xx;
370 struct cvmx_pcieep_cfg008_s cn56xxp1;
371};
372
373union cvmx_pcieep_cfg008_mask {
374 uint32_t u32;
375 struct cvmx_pcieep_cfg008_mask_s {
376 uint32_t lmask:31;
377 uint32_t enb:1;
378 } s;
379 struct cvmx_pcieep_cfg008_mask_s cn52xx;
380 struct cvmx_pcieep_cfg008_mask_s cn52xxp1;
381 struct cvmx_pcieep_cfg008_mask_s cn56xx;
382 struct cvmx_pcieep_cfg008_mask_s cn56xxp1;
383};
384
385union cvmx_pcieep_cfg009 {
386 uint32_t u32;
387 struct cvmx_pcieep_cfg009_s {
388 uint32_t ubab:25;
389 uint32_t reserved_0_6:7;
390 } s;
391 struct cvmx_pcieep_cfg009_s cn52xx;
392 struct cvmx_pcieep_cfg009_s cn52xxp1;
393 struct cvmx_pcieep_cfg009_s cn56xx;
394 struct cvmx_pcieep_cfg009_s cn56xxp1;
395};
396
397union cvmx_pcieep_cfg009_mask {
398 uint32_t u32;
399 struct cvmx_pcieep_cfg009_mask_s {
400 uint32_t umask:32;
401 } s;
402 struct cvmx_pcieep_cfg009_mask_s cn52xx;
403 struct cvmx_pcieep_cfg009_mask_s cn52xxp1;
404 struct cvmx_pcieep_cfg009_mask_s cn56xx;
405 struct cvmx_pcieep_cfg009_mask_s cn56xxp1;
406};
407
408union cvmx_pcieep_cfg010 {
409 uint32_t u32;
410 struct cvmx_pcieep_cfg010_s {
411 uint32_t cisp:32;
412 } s;
413 struct cvmx_pcieep_cfg010_s cn52xx;
414 struct cvmx_pcieep_cfg010_s cn52xxp1;
415 struct cvmx_pcieep_cfg010_s cn56xx;
416 struct cvmx_pcieep_cfg010_s cn56xxp1;
417};
418
419union cvmx_pcieep_cfg011 {
420 uint32_t u32;
421 struct cvmx_pcieep_cfg011_s {
422 uint32_t ssid:16;
423 uint32_t ssvid:16;
424 } s;
425 struct cvmx_pcieep_cfg011_s cn52xx;
426 struct cvmx_pcieep_cfg011_s cn52xxp1;
427 struct cvmx_pcieep_cfg011_s cn56xx;
428 struct cvmx_pcieep_cfg011_s cn56xxp1;
429};
430
431union cvmx_pcieep_cfg012 {
432 uint32_t u32;
433 struct cvmx_pcieep_cfg012_s {
434 uint32_t eraddr:16;
435 uint32_t reserved_1_15:15;
436 uint32_t er_en:1;
437 } s;
438 struct cvmx_pcieep_cfg012_s cn52xx;
439 struct cvmx_pcieep_cfg012_s cn52xxp1;
440 struct cvmx_pcieep_cfg012_s cn56xx;
441 struct cvmx_pcieep_cfg012_s cn56xxp1;
442};
443
444union cvmx_pcieep_cfg012_mask {
445 uint32_t u32;
446 struct cvmx_pcieep_cfg012_mask_s {
447 uint32_t mask:31;
448 uint32_t enb:1;
449 } s;
450 struct cvmx_pcieep_cfg012_mask_s cn52xx;
451 struct cvmx_pcieep_cfg012_mask_s cn52xxp1;
452 struct cvmx_pcieep_cfg012_mask_s cn56xx;
453 struct cvmx_pcieep_cfg012_mask_s cn56xxp1;
454};
455
456union cvmx_pcieep_cfg013 {
457 uint32_t u32;
458 struct cvmx_pcieep_cfg013_s {
459 uint32_t reserved_8_31:24;
460 uint32_t cp:8;
461 } s;
462 struct cvmx_pcieep_cfg013_s cn52xx;
463 struct cvmx_pcieep_cfg013_s cn52xxp1;
464 struct cvmx_pcieep_cfg013_s cn56xx;
465 struct cvmx_pcieep_cfg013_s cn56xxp1;
466};
467
468union cvmx_pcieep_cfg015 {
469 uint32_t u32;
470 struct cvmx_pcieep_cfg015_s {
471 uint32_t ml:8;
472 uint32_t mg:8;
473 uint32_t inta:8;
474 uint32_t il:8;
475 } s;
476 struct cvmx_pcieep_cfg015_s cn52xx;
477 struct cvmx_pcieep_cfg015_s cn52xxp1;
478 struct cvmx_pcieep_cfg015_s cn56xx;
479 struct cvmx_pcieep_cfg015_s cn56xxp1;
480};
481
482union cvmx_pcieep_cfg016 {
483 uint32_t u32;
484 struct cvmx_pcieep_cfg016_s {
485 uint32_t pmes:5;
486 uint32_t d2s:1;
487 uint32_t d1s:1;
488 uint32_t auxc:3;
489 uint32_t dsi:1;
490 uint32_t reserved_20_20:1;
491 uint32_t pme_clock:1;
492 uint32_t pmsv:3;
493 uint32_t ncp:8;
494 uint32_t pmcid:8;
495 } s;
496 struct cvmx_pcieep_cfg016_s cn52xx;
497 struct cvmx_pcieep_cfg016_s cn52xxp1;
498 struct cvmx_pcieep_cfg016_s cn56xx;
499 struct cvmx_pcieep_cfg016_s cn56xxp1;
500};
501
502union cvmx_pcieep_cfg017 {
503 uint32_t u32;
504 struct cvmx_pcieep_cfg017_s {
505 uint32_t pmdia:8;
506 uint32_t bpccee:1;
507 uint32_t bd3h:1;
508 uint32_t reserved_16_21:6;
509 uint32_t pmess:1;
510 uint32_t pmedsia:2;
511 uint32_t pmds:4;
512 uint32_t pmeens:1;
513 uint32_t reserved_4_7:4;
514 uint32_t nsr:1;
515 uint32_t reserved_2_2:1;
516 uint32_t ps:2;
517 } s;
518 struct cvmx_pcieep_cfg017_s cn52xx;
519 struct cvmx_pcieep_cfg017_s cn52xxp1;
520 struct cvmx_pcieep_cfg017_s cn56xx;
521 struct cvmx_pcieep_cfg017_s cn56xxp1;
522};
523
524union cvmx_pcieep_cfg020 {
525 uint32_t u32;
526 struct cvmx_pcieep_cfg020_s {
527 uint32_t reserved_24_31:8;
528 uint32_t m64:1;
529 uint32_t mme:3;
530 uint32_t mmc:3;
531 uint32_t msien:1;
532 uint32_t ncp:8;
533 uint32_t msicid:8;
534 } s;
535 struct cvmx_pcieep_cfg020_s cn52xx;
536 struct cvmx_pcieep_cfg020_s cn52xxp1;
537 struct cvmx_pcieep_cfg020_s cn56xx;
538 struct cvmx_pcieep_cfg020_s cn56xxp1;
539};
540
541union cvmx_pcieep_cfg021 {
542 uint32_t u32;
543 struct cvmx_pcieep_cfg021_s {
544 uint32_t lmsi:30;
545 uint32_t reserved_0_1:2;
546 } s;
547 struct cvmx_pcieep_cfg021_s cn52xx;
548 struct cvmx_pcieep_cfg021_s cn52xxp1;
549 struct cvmx_pcieep_cfg021_s cn56xx;
550 struct cvmx_pcieep_cfg021_s cn56xxp1;
551};
552
553union cvmx_pcieep_cfg022 {
554 uint32_t u32;
555 struct cvmx_pcieep_cfg022_s {
556 uint32_t umsi:32;
557 } s;
558 struct cvmx_pcieep_cfg022_s cn52xx;
559 struct cvmx_pcieep_cfg022_s cn52xxp1;
560 struct cvmx_pcieep_cfg022_s cn56xx;
561 struct cvmx_pcieep_cfg022_s cn56xxp1;
562};
563
564union cvmx_pcieep_cfg023 {
565 uint32_t u32;
566 struct cvmx_pcieep_cfg023_s {
567 uint32_t reserved_16_31:16;
568 uint32_t msimd:16;
569 } s;
570 struct cvmx_pcieep_cfg023_s cn52xx;
571 struct cvmx_pcieep_cfg023_s cn52xxp1;
572 struct cvmx_pcieep_cfg023_s cn56xx;
573 struct cvmx_pcieep_cfg023_s cn56xxp1;
574};
575
576union cvmx_pcieep_cfg028 {
577 uint32_t u32;
578 struct cvmx_pcieep_cfg028_s {
579 uint32_t reserved_30_31:2;
580 uint32_t imn:5;
581 uint32_t si:1;
582 uint32_t dpt:4;
583 uint32_t pciecv:4;
584 uint32_t ncp:8;
585 uint32_t pcieid:8;
586 } s;
587 struct cvmx_pcieep_cfg028_s cn52xx;
588 struct cvmx_pcieep_cfg028_s cn52xxp1;
589 struct cvmx_pcieep_cfg028_s cn56xx;
590 struct cvmx_pcieep_cfg028_s cn56xxp1;
591};
592
593union cvmx_pcieep_cfg029 {
594 uint32_t u32;
595 struct cvmx_pcieep_cfg029_s {
596 uint32_t reserved_28_31:4;
597 uint32_t cspls:2;
598 uint32_t csplv:8;
599 uint32_t reserved_16_17:2;
600 uint32_t rber:1;
601 uint32_t reserved_12_14:3;
602 uint32_t el1al:3;
603 uint32_t el0al:3;
604 uint32_t etfs:1;
605 uint32_t pfs:2;
606 uint32_t mpss:3;
607 } s;
608 struct cvmx_pcieep_cfg029_s cn52xx;
609 struct cvmx_pcieep_cfg029_s cn52xxp1;
610 struct cvmx_pcieep_cfg029_s cn56xx;
611 struct cvmx_pcieep_cfg029_s cn56xxp1;
612};
613
614union cvmx_pcieep_cfg030 {
615 uint32_t u32;
616 struct cvmx_pcieep_cfg030_s {
617 uint32_t reserved_22_31:10;
618 uint32_t tp:1;
619 uint32_t ap_d:1;
620 uint32_t ur_d:1;
621 uint32_t fe_d:1;
622 uint32_t nfe_d:1;
623 uint32_t ce_d:1;
624 uint32_t reserved_15_15:1;
625 uint32_t mrrs:3;
626 uint32_t ns_en:1;
627 uint32_t ap_en:1;
628 uint32_t pf_en:1;
629 uint32_t etf_en:1;
630 uint32_t mps:3;
631 uint32_t ro_en:1;
632 uint32_t ur_en:1;
633 uint32_t fe_en:1;
634 uint32_t nfe_en:1;
635 uint32_t ce_en:1;
636 } s;
637 struct cvmx_pcieep_cfg030_s cn52xx;
638 struct cvmx_pcieep_cfg030_s cn52xxp1;
639 struct cvmx_pcieep_cfg030_s cn56xx;
640 struct cvmx_pcieep_cfg030_s cn56xxp1;
641};
642
643union cvmx_pcieep_cfg031 {
644 uint32_t u32;
645 struct cvmx_pcieep_cfg031_s {
646 uint32_t pnum:8;
647 uint32_t reserved_22_23:2;
648 uint32_t lbnc:1;
649 uint32_t dllarc:1;
650 uint32_t sderc:1;
651 uint32_t cpm:1;
652 uint32_t l1el:3;
653 uint32_t l0el:3;
654 uint32_t aslpms:2;
655 uint32_t mlw:6;
656 uint32_t mls:4;
657 } s;
658 struct cvmx_pcieep_cfg031_s cn52xx;
659 struct cvmx_pcieep_cfg031_s cn52xxp1;
660 struct cvmx_pcieep_cfg031_s cn56xx;
661 struct cvmx_pcieep_cfg031_s cn56xxp1;
662};
663
664union cvmx_pcieep_cfg032 {
665 uint32_t u32;
666 struct cvmx_pcieep_cfg032_s {
667 uint32_t reserved_30_31:2;
668 uint32_t dlla:1;
669 uint32_t scc:1;
670 uint32_t lt:1;
671 uint32_t reserved_26_26:1;
672 uint32_t nlw:6;
673 uint32_t ls:4;
674 uint32_t reserved_10_15:6;
675 uint32_t hawd:1;
676 uint32_t ecpm:1;
677 uint32_t es:1;
678 uint32_t ccc:1;
679 uint32_t rl:1;
680 uint32_t ld:1;
681 uint32_t rcb:1;
682 uint32_t reserved_2_2:1;
683 uint32_t aslpc:2;
684 } s;
685 struct cvmx_pcieep_cfg032_s cn52xx;
686 struct cvmx_pcieep_cfg032_s cn52xxp1;
687 struct cvmx_pcieep_cfg032_s cn56xx;
688 struct cvmx_pcieep_cfg032_s cn56xxp1;
689};
690
691union cvmx_pcieep_cfg033 {
692 uint32_t u32;
693 struct cvmx_pcieep_cfg033_s {
694 uint32_t ps_num:13;
695 uint32_t nccs:1;
696 uint32_t emip:1;
697 uint32_t sp_ls:2;
698 uint32_t sp_lv:8;
699 uint32_t hp_c:1;
700 uint32_t hp_s:1;
701 uint32_t pip:1;
702 uint32_t aip:1;
703 uint32_t mrlsp:1;
704 uint32_t pcp:1;
705 uint32_t abp:1;
706 } s;
707 struct cvmx_pcieep_cfg033_s cn52xx;
708 struct cvmx_pcieep_cfg033_s cn52xxp1;
709 struct cvmx_pcieep_cfg033_s cn56xx;
710 struct cvmx_pcieep_cfg033_s cn56xxp1;
711};
712
713union cvmx_pcieep_cfg034 {
714 uint32_t u32;
715 struct cvmx_pcieep_cfg034_s {
716 uint32_t reserved_25_31:7;
717 uint32_t dlls_c:1;
718 uint32_t emis:1;
719 uint32_t pds:1;
720 uint32_t mrlss:1;
721 uint32_t ccint_d:1;
722 uint32_t pd_c:1;
723 uint32_t mrls_c:1;
724 uint32_t pf_d:1;
725 uint32_t abp_d:1;
726 uint32_t reserved_13_15:3;
727 uint32_t dlls_en:1;
728 uint32_t emic:1;
729 uint32_t pcc:1;
730 uint32_t pic:2;
731 uint32_t aic:2;
732 uint32_t hpint_en:1;
733 uint32_t ccint_en:1;
734 uint32_t pd_en:1;
735 uint32_t mrls_en:1;
736 uint32_t pf_en:1;
737 uint32_t abp_en:1;
738 } s;
739 struct cvmx_pcieep_cfg034_s cn52xx;
740 struct cvmx_pcieep_cfg034_s cn52xxp1;
741 struct cvmx_pcieep_cfg034_s cn56xx;
742 struct cvmx_pcieep_cfg034_s cn56xxp1;
743};
744
745union cvmx_pcieep_cfg037 {
746 uint32_t u32;
747 struct cvmx_pcieep_cfg037_s {
748 uint32_t reserved_5_31:27;
749 uint32_t ctds:1;
750 uint32_t ctrs:4;
751 } s;
752 struct cvmx_pcieep_cfg037_s cn52xx;
753 struct cvmx_pcieep_cfg037_s cn52xxp1;
754 struct cvmx_pcieep_cfg037_s cn56xx;
755 struct cvmx_pcieep_cfg037_s cn56xxp1;
756};
757
758union cvmx_pcieep_cfg038 {
759 uint32_t u32;
760 struct cvmx_pcieep_cfg038_s {
761 uint32_t reserved_5_31:27;
762 uint32_t ctd:1;
763 uint32_t ctv:4;
764 } s;
765 struct cvmx_pcieep_cfg038_s cn52xx;
766 struct cvmx_pcieep_cfg038_s cn52xxp1;
767 struct cvmx_pcieep_cfg038_s cn56xx;
768 struct cvmx_pcieep_cfg038_s cn56xxp1;
769};
770
771union cvmx_pcieep_cfg039 {
772 uint32_t u32;
773 struct cvmx_pcieep_cfg039_s {
774 uint32_t reserved_0_31:32;
775 } s;
776 struct cvmx_pcieep_cfg039_s cn52xx;
777 struct cvmx_pcieep_cfg039_s cn52xxp1;
778 struct cvmx_pcieep_cfg039_s cn56xx;
779 struct cvmx_pcieep_cfg039_s cn56xxp1;
780};
781
782union cvmx_pcieep_cfg040 {
783 uint32_t u32;
784 struct cvmx_pcieep_cfg040_s {
785 uint32_t reserved_0_31:32;
786 } s;
787 struct cvmx_pcieep_cfg040_s cn52xx;
788 struct cvmx_pcieep_cfg040_s cn52xxp1;
789 struct cvmx_pcieep_cfg040_s cn56xx;
790 struct cvmx_pcieep_cfg040_s cn56xxp1;
791};
792
793union cvmx_pcieep_cfg041 {
794 uint32_t u32;
795 struct cvmx_pcieep_cfg041_s {
796 uint32_t reserved_0_31:32;
797 } s;
798 struct cvmx_pcieep_cfg041_s cn52xx;
799 struct cvmx_pcieep_cfg041_s cn52xxp1;
800 struct cvmx_pcieep_cfg041_s cn56xx;
801 struct cvmx_pcieep_cfg041_s cn56xxp1;
802};
803
804union cvmx_pcieep_cfg042 {
805 uint32_t u32;
806 struct cvmx_pcieep_cfg042_s {
807 uint32_t reserved_0_31:32;
808 } s;
809 struct cvmx_pcieep_cfg042_s cn52xx;
810 struct cvmx_pcieep_cfg042_s cn52xxp1;
811 struct cvmx_pcieep_cfg042_s cn56xx;
812 struct cvmx_pcieep_cfg042_s cn56xxp1;
813};
814
815union cvmx_pcieep_cfg064 {
816 uint32_t u32;
817 struct cvmx_pcieep_cfg064_s {
818 uint32_t nco:12;
819 uint32_t cv:4;
820 uint32_t pcieec:16;
821 } s;
822 struct cvmx_pcieep_cfg064_s cn52xx;
823 struct cvmx_pcieep_cfg064_s cn52xxp1;
824 struct cvmx_pcieep_cfg064_s cn56xx;
825 struct cvmx_pcieep_cfg064_s cn56xxp1;
826};
827
828union cvmx_pcieep_cfg065 {
829 uint32_t u32;
830 struct cvmx_pcieep_cfg065_s {
831 uint32_t reserved_21_31:11;
832 uint32_t ures:1;
833 uint32_t ecrces:1;
834 uint32_t mtlps:1;
835 uint32_t ros:1;
836 uint32_t ucs:1;
837 uint32_t cas:1;
838 uint32_t cts:1;
839 uint32_t fcpes:1;
840 uint32_t ptlps:1;
841 uint32_t reserved_6_11:6;
842 uint32_t sdes:1;
843 uint32_t dlpes:1;
844 uint32_t reserved_0_3:4;
845 } s;
846 struct cvmx_pcieep_cfg065_s cn52xx;
847 struct cvmx_pcieep_cfg065_s cn52xxp1;
848 struct cvmx_pcieep_cfg065_s cn56xx;
849 struct cvmx_pcieep_cfg065_s cn56xxp1;
850};
851
852union cvmx_pcieep_cfg066 {
853 uint32_t u32;
854 struct cvmx_pcieep_cfg066_s {
855 uint32_t reserved_21_31:11;
856 uint32_t urem:1;
857 uint32_t ecrcem:1;
858 uint32_t mtlpm:1;
859 uint32_t rom:1;
860 uint32_t ucm:1;
861 uint32_t cam:1;
862 uint32_t ctm:1;
863 uint32_t fcpem:1;
864 uint32_t ptlpm:1;
865 uint32_t reserved_6_11:6;
866 uint32_t sdem:1;
867 uint32_t dlpem:1;
868 uint32_t reserved_0_3:4;
869 } s;
870 struct cvmx_pcieep_cfg066_s cn52xx;
871 struct cvmx_pcieep_cfg066_s cn52xxp1;
872 struct cvmx_pcieep_cfg066_s cn56xx;
873 struct cvmx_pcieep_cfg066_s cn56xxp1;
874};
875
876union cvmx_pcieep_cfg067 {
877 uint32_t u32;
878 struct cvmx_pcieep_cfg067_s {
879 uint32_t reserved_21_31:11;
880 uint32_t ures:1;
881 uint32_t ecrces:1;
882 uint32_t mtlps:1;
883 uint32_t ros:1;
884 uint32_t ucs:1;
885 uint32_t cas:1;
886 uint32_t cts:1;
887 uint32_t fcpes:1;
888 uint32_t ptlps:1;
889 uint32_t reserved_6_11:6;
890 uint32_t sdes:1;
891 uint32_t dlpes:1;
892 uint32_t reserved_0_3:4;
893 } s;
894 struct cvmx_pcieep_cfg067_s cn52xx;
895 struct cvmx_pcieep_cfg067_s cn52xxp1;
896 struct cvmx_pcieep_cfg067_s cn56xx;
897 struct cvmx_pcieep_cfg067_s cn56xxp1;
898};
899
900union cvmx_pcieep_cfg068 {
901 uint32_t u32;
902 struct cvmx_pcieep_cfg068_s {
903 uint32_t reserved_14_31:18;
904 uint32_t anfes:1;
905 uint32_t rtts:1;
906 uint32_t reserved_9_11:3;
907 uint32_t rnrs:1;
908 uint32_t bdllps:1;
909 uint32_t btlps:1;
910 uint32_t reserved_1_5:5;
911 uint32_t res:1;
912 } s;
913 struct cvmx_pcieep_cfg068_s cn52xx;
914 struct cvmx_pcieep_cfg068_s cn52xxp1;
915 struct cvmx_pcieep_cfg068_s cn56xx;
916 struct cvmx_pcieep_cfg068_s cn56xxp1;
917};
918
919union cvmx_pcieep_cfg069 {
920 uint32_t u32;
921 struct cvmx_pcieep_cfg069_s {
922 uint32_t reserved_14_31:18;
923 uint32_t anfem:1;
924 uint32_t rttm:1;
925 uint32_t reserved_9_11:3;
926 uint32_t rnrm:1;
927 uint32_t bdllpm:1;
928 uint32_t btlpm:1;
929 uint32_t reserved_1_5:5;
930 uint32_t rem:1;
931 } s;
932 struct cvmx_pcieep_cfg069_s cn52xx;
933 struct cvmx_pcieep_cfg069_s cn52xxp1;
934 struct cvmx_pcieep_cfg069_s cn56xx;
935 struct cvmx_pcieep_cfg069_s cn56xxp1;
936};
937
938union cvmx_pcieep_cfg070 {
939 uint32_t u32;
940 struct cvmx_pcieep_cfg070_s {
941 uint32_t reserved_9_31:23;
942 uint32_t ce:1;
943 uint32_t cc:1;
944 uint32_t ge:1;
945 uint32_t gc:1;
946 uint32_t fep:5;
947 } s;
948 struct cvmx_pcieep_cfg070_s cn52xx;
949 struct cvmx_pcieep_cfg070_s cn52xxp1;
950 struct cvmx_pcieep_cfg070_s cn56xx;
951 struct cvmx_pcieep_cfg070_s cn56xxp1;
952};
953
954union cvmx_pcieep_cfg071 {
955 uint32_t u32;
956 struct cvmx_pcieep_cfg071_s {
957 uint32_t dword1:32;
958 } s;
959 struct cvmx_pcieep_cfg071_s cn52xx;
960 struct cvmx_pcieep_cfg071_s cn52xxp1;
961 struct cvmx_pcieep_cfg071_s cn56xx;
962 struct cvmx_pcieep_cfg071_s cn56xxp1;
963};
964
965union cvmx_pcieep_cfg072 {
966 uint32_t u32;
967 struct cvmx_pcieep_cfg072_s {
968 uint32_t dword2:32;
969 } s;
970 struct cvmx_pcieep_cfg072_s cn52xx;
971 struct cvmx_pcieep_cfg072_s cn52xxp1;
972 struct cvmx_pcieep_cfg072_s cn56xx;
973 struct cvmx_pcieep_cfg072_s cn56xxp1;
974};
975
976union cvmx_pcieep_cfg073 {
977 uint32_t u32;
978 struct cvmx_pcieep_cfg073_s {
979 uint32_t dword3:32;
980 } s;
981 struct cvmx_pcieep_cfg073_s cn52xx;
982 struct cvmx_pcieep_cfg073_s cn52xxp1;
983 struct cvmx_pcieep_cfg073_s cn56xx;
984 struct cvmx_pcieep_cfg073_s cn56xxp1;
985};
986
987union cvmx_pcieep_cfg074 {
988 uint32_t u32;
989 struct cvmx_pcieep_cfg074_s {
990 uint32_t dword4:32;
991 } s;
992 struct cvmx_pcieep_cfg074_s cn52xx;
993 struct cvmx_pcieep_cfg074_s cn52xxp1;
994 struct cvmx_pcieep_cfg074_s cn56xx;
995 struct cvmx_pcieep_cfg074_s cn56xxp1;
996};
997
998union cvmx_pcieep_cfg448 {
999 uint32_t u32;
1000 struct cvmx_pcieep_cfg448_s {
1001 uint32_t rtl:16;
1002 uint32_t rtltl:16;
1003 } s;
1004 struct cvmx_pcieep_cfg448_s cn52xx;
1005 struct cvmx_pcieep_cfg448_s cn52xxp1;
1006 struct cvmx_pcieep_cfg448_s cn56xx;
1007 struct cvmx_pcieep_cfg448_s cn56xxp1;
1008};
1009
1010union cvmx_pcieep_cfg449 {
1011 uint32_t u32;
1012 struct cvmx_pcieep_cfg449_s {
1013 uint32_t omr:32;
1014 } s;
1015 struct cvmx_pcieep_cfg449_s cn52xx;
1016 struct cvmx_pcieep_cfg449_s cn52xxp1;
1017 struct cvmx_pcieep_cfg449_s cn56xx;
1018 struct cvmx_pcieep_cfg449_s cn56xxp1;
1019};
1020
1021union cvmx_pcieep_cfg450 {
1022 uint32_t u32;
1023 struct cvmx_pcieep_cfg450_s {
1024 uint32_t lpec:8;
1025 uint32_t reserved_22_23:2;
1026 uint32_t link_state:6;
1027 uint32_t force_link:1;
1028 uint32_t reserved_8_14:7;
1029 uint32_t link_num:8;
1030 } s;
1031 struct cvmx_pcieep_cfg450_s cn52xx;
1032 struct cvmx_pcieep_cfg450_s cn52xxp1;
1033 struct cvmx_pcieep_cfg450_s cn56xx;
1034 struct cvmx_pcieep_cfg450_s cn56xxp1;
1035};
1036
1037union cvmx_pcieep_cfg451 {
1038 uint32_t u32;
1039 struct cvmx_pcieep_cfg451_s {
1040 uint32_t reserved_30_31:2;
1041 uint32_t l1el:3;
1042 uint32_t l0el:3;
1043 uint32_t n_fts_cc:8;
1044 uint32_t n_fts:8;
1045 uint32_t ack_freq:8;
1046 } s;
1047 struct cvmx_pcieep_cfg451_s cn52xx;
1048 struct cvmx_pcieep_cfg451_s cn52xxp1;
1049 struct cvmx_pcieep_cfg451_s cn56xx;
1050 struct cvmx_pcieep_cfg451_s cn56xxp1;
1051};
1052
1053union cvmx_pcieep_cfg452 {
1054 uint32_t u32;
1055 struct cvmx_pcieep_cfg452_s {
1056 uint32_t reserved_26_31:6;
1057 uint32_t eccrc:1;
1058 uint32_t reserved_22_24:3;
1059 uint32_t lme:6;
1060 uint32_t reserved_8_15:8;
1061 uint32_t flm:1;
1062 uint32_t reserved_6_6:1;
1063 uint32_t dllle:1;
1064 uint32_t reserved_4_4:1;
1065 uint32_t ra:1;
1066 uint32_t le:1;
1067 uint32_t sd:1;
1068 uint32_t omr:1;
1069 } s;
1070 struct cvmx_pcieep_cfg452_s cn52xx;
1071 struct cvmx_pcieep_cfg452_s cn52xxp1;
1072 struct cvmx_pcieep_cfg452_s cn56xx;
1073 struct cvmx_pcieep_cfg452_s cn56xxp1;
1074};
1075
1076union cvmx_pcieep_cfg453 {
1077 uint32_t u32;
1078 struct cvmx_pcieep_cfg453_s {
1079 uint32_t dlld:1;
1080 uint32_t reserved_26_30:5;
1081 uint32_t ack_nak:1;
1082 uint32_t fcd:1;
1083 uint32_t ilst:24;
1084 } s;
1085 struct cvmx_pcieep_cfg453_s cn52xx;
1086 struct cvmx_pcieep_cfg453_s cn52xxp1;
1087 struct cvmx_pcieep_cfg453_s cn56xx;
1088 struct cvmx_pcieep_cfg453_s cn56xxp1;
1089};
1090
1091union cvmx_pcieep_cfg454 {
1092 uint32_t u32;
1093 struct cvmx_pcieep_cfg454_s {
1094 uint32_t reserved_29_31:3;
1095 uint32_t tmfcwt:5;
1096 uint32_t tmanlt:5;
1097 uint32_t tmrt:5;
1098 uint32_t reserved_11_13:3;
1099 uint32_t nskps:3;
1100 uint32_t reserved_4_7:4;
1101 uint32_t ntss:4;
1102 } s;
1103 struct cvmx_pcieep_cfg454_s cn52xx;
1104 struct cvmx_pcieep_cfg454_s cn52xxp1;
1105 struct cvmx_pcieep_cfg454_s cn56xx;
1106 struct cvmx_pcieep_cfg454_s cn56xxp1;
1107};
1108
1109union cvmx_pcieep_cfg455 {
1110 uint32_t u32;
1111 struct cvmx_pcieep_cfg455_s {
1112 uint32_t m_cfg0_filt:1;
1113 uint32_t m_io_filt:1;
1114 uint32_t msg_ctrl:1;
1115 uint32_t m_cpl_ecrc_filt:1;
1116 uint32_t m_ecrc_filt:1;
1117 uint32_t m_cpl_len_err:1;
1118 uint32_t m_cpl_attr_err:1;
1119 uint32_t m_cpl_tc_err:1;
1120 uint32_t m_cpl_fun_err:1;
1121 uint32_t m_cpl_rid_err:1;
1122 uint32_t m_cpl_tag_err:1;
1123 uint32_t m_lk_filt:1;
1124 uint32_t m_cfg1_filt:1;
1125 uint32_t m_bar_match:1;
1126 uint32_t m_pois_filt:1;
1127 uint32_t m_fun:1;
1128 uint32_t dfcwt:1;
1129 uint32_t reserved_11_14:4;
1130 uint32_t skpiv:11;
1131 } s;
1132 struct cvmx_pcieep_cfg455_s cn52xx;
1133 struct cvmx_pcieep_cfg455_s cn52xxp1;
1134 struct cvmx_pcieep_cfg455_s cn56xx;
1135 struct cvmx_pcieep_cfg455_s cn56xxp1;
1136};
1137
1138union cvmx_pcieep_cfg456 {
1139 uint32_t u32;
1140 struct cvmx_pcieep_cfg456_s {
1141 uint32_t reserved_2_31:30;
1142 uint32_t m_vend1_drp:1;
1143 uint32_t m_vend0_drp:1;
1144 } s;
1145 struct cvmx_pcieep_cfg456_s cn52xx;
1146 struct cvmx_pcieep_cfg456_s cn52xxp1;
1147 struct cvmx_pcieep_cfg456_s cn56xx;
1148 struct cvmx_pcieep_cfg456_s cn56xxp1;
1149};
1150
1151union cvmx_pcieep_cfg458 {
1152 uint32_t u32;
1153 struct cvmx_pcieep_cfg458_s {
1154 uint32_t dbg_info_l32:32;
1155 } s;
1156 struct cvmx_pcieep_cfg458_s cn52xx;
1157 struct cvmx_pcieep_cfg458_s cn52xxp1;
1158 struct cvmx_pcieep_cfg458_s cn56xx;
1159 struct cvmx_pcieep_cfg458_s cn56xxp1;
1160};
1161
1162union cvmx_pcieep_cfg459 {
1163 uint32_t u32;
1164 struct cvmx_pcieep_cfg459_s {
1165 uint32_t dbg_info_u32:32;
1166 } s;
1167 struct cvmx_pcieep_cfg459_s cn52xx;
1168 struct cvmx_pcieep_cfg459_s cn52xxp1;
1169 struct cvmx_pcieep_cfg459_s cn56xx;
1170 struct cvmx_pcieep_cfg459_s cn56xxp1;
1171};
1172
1173union cvmx_pcieep_cfg460 {
1174 uint32_t u32;
1175 struct cvmx_pcieep_cfg460_s {
1176 uint32_t reserved_20_31:12;
1177 uint32_t tphfcc:8;
1178 uint32_t tpdfcc:12;
1179 } s;
1180 struct cvmx_pcieep_cfg460_s cn52xx;
1181 struct cvmx_pcieep_cfg460_s cn52xxp1;
1182 struct cvmx_pcieep_cfg460_s cn56xx;
1183 struct cvmx_pcieep_cfg460_s cn56xxp1;
1184};
1185
1186union cvmx_pcieep_cfg461 {
1187 uint32_t u32;
1188 struct cvmx_pcieep_cfg461_s {
1189 uint32_t reserved_20_31:12;
1190 uint32_t tchfcc:8;
1191 uint32_t tcdfcc:12;
1192 } s;
1193 struct cvmx_pcieep_cfg461_s cn52xx;
1194 struct cvmx_pcieep_cfg461_s cn52xxp1;
1195 struct cvmx_pcieep_cfg461_s cn56xx;
1196 struct cvmx_pcieep_cfg461_s cn56xxp1;
1197};
1198
1199union cvmx_pcieep_cfg462 {
1200 uint32_t u32;
1201 struct cvmx_pcieep_cfg462_s {
1202 uint32_t reserved_20_31:12;
1203 uint32_t tchfcc:8;
1204 uint32_t tcdfcc:12;
1205 } s;
1206 struct cvmx_pcieep_cfg462_s cn52xx;
1207 struct cvmx_pcieep_cfg462_s cn52xxp1;
1208 struct cvmx_pcieep_cfg462_s cn56xx;
1209 struct cvmx_pcieep_cfg462_s cn56xxp1;
1210};
1211
1212union cvmx_pcieep_cfg463 {
1213 uint32_t u32;
1214 struct cvmx_pcieep_cfg463_s {
1215 uint32_t reserved_3_31:29;
1216 uint32_t rqne:1;
1217 uint32_t trbne:1;
1218 uint32_t rtlpfccnr:1;
1219 } s;
1220 struct cvmx_pcieep_cfg463_s cn52xx;
1221 struct cvmx_pcieep_cfg463_s cn52xxp1;
1222 struct cvmx_pcieep_cfg463_s cn56xx;
1223 struct cvmx_pcieep_cfg463_s cn56xxp1;
1224};
1225
1226union cvmx_pcieep_cfg464 {
1227 uint32_t u32;
1228 struct cvmx_pcieep_cfg464_s {
1229 uint32_t wrr_vc3:8;
1230 uint32_t wrr_vc2:8;
1231 uint32_t wrr_vc1:8;
1232 uint32_t wrr_vc0:8;
1233 } s;
1234 struct cvmx_pcieep_cfg464_s cn52xx;
1235 struct cvmx_pcieep_cfg464_s cn52xxp1;
1236 struct cvmx_pcieep_cfg464_s cn56xx;
1237 struct cvmx_pcieep_cfg464_s cn56xxp1;
1238};
1239
1240union cvmx_pcieep_cfg465 {
1241 uint32_t u32;
1242 struct cvmx_pcieep_cfg465_s {
1243 uint32_t wrr_vc7:8;
1244 uint32_t wrr_vc6:8;
1245 uint32_t wrr_vc5:8;
1246 uint32_t wrr_vc4:8;
1247 } s;
1248 struct cvmx_pcieep_cfg465_s cn52xx;
1249 struct cvmx_pcieep_cfg465_s cn52xxp1;
1250 struct cvmx_pcieep_cfg465_s cn56xx;
1251 struct cvmx_pcieep_cfg465_s cn56xxp1;
1252};
1253
1254union cvmx_pcieep_cfg466 {
1255 uint32_t u32;
1256 struct cvmx_pcieep_cfg466_s {
1257 uint32_t rx_queue_order:1;
1258 uint32_t type_ordering:1;
1259 uint32_t reserved_24_29:6;
1260 uint32_t queue_mode:3;
1261 uint32_t reserved_20_20:1;
1262 uint32_t header_credits:8;
1263 uint32_t data_credits:12;
1264 } s;
1265 struct cvmx_pcieep_cfg466_s cn52xx;
1266 struct cvmx_pcieep_cfg466_s cn52xxp1;
1267 struct cvmx_pcieep_cfg466_s cn56xx;
1268 struct cvmx_pcieep_cfg466_s cn56xxp1;
1269};
1270
1271union cvmx_pcieep_cfg467 {
1272 uint32_t u32;
1273 struct cvmx_pcieep_cfg467_s {
1274 uint32_t reserved_24_31:8;
1275 uint32_t queue_mode:3;
1276 uint32_t reserved_20_20:1;
1277 uint32_t header_credits:8;
1278 uint32_t data_credits:12;
1279 } s;
1280 struct cvmx_pcieep_cfg467_s cn52xx;
1281 struct cvmx_pcieep_cfg467_s cn52xxp1;
1282 struct cvmx_pcieep_cfg467_s cn56xx;
1283 struct cvmx_pcieep_cfg467_s cn56xxp1;
1284};
1285
1286union cvmx_pcieep_cfg468 {
1287 uint32_t u32;
1288 struct cvmx_pcieep_cfg468_s {
1289 uint32_t reserved_24_31:8;
1290 uint32_t queue_mode:3;
1291 uint32_t reserved_20_20:1;
1292 uint32_t header_credits:8;
1293 uint32_t data_credits:12;
1294 } s;
1295 struct cvmx_pcieep_cfg468_s cn52xx;
1296 struct cvmx_pcieep_cfg468_s cn52xxp1;
1297 struct cvmx_pcieep_cfg468_s cn56xx;
1298 struct cvmx_pcieep_cfg468_s cn56xxp1;
1299};
1300
1301union cvmx_pcieep_cfg490 {
1302 uint32_t u32;
1303 struct cvmx_pcieep_cfg490_s {
1304 uint32_t reserved_26_31:6;
1305 uint32_t header_depth:10;
1306 uint32_t reserved_14_15:2;
1307 uint32_t data_depth:14;
1308 } s;
1309 struct cvmx_pcieep_cfg490_s cn52xx;
1310 struct cvmx_pcieep_cfg490_s cn52xxp1;
1311 struct cvmx_pcieep_cfg490_s cn56xx;
1312 struct cvmx_pcieep_cfg490_s cn56xxp1;
1313};
1314
1315union cvmx_pcieep_cfg491 {
1316 uint32_t u32;
1317 struct cvmx_pcieep_cfg491_s {
1318 uint32_t reserved_26_31:6;
1319 uint32_t header_depth:10;
1320 uint32_t reserved_14_15:2;
1321 uint32_t data_depth:14;
1322 } s;
1323 struct cvmx_pcieep_cfg491_s cn52xx;
1324 struct cvmx_pcieep_cfg491_s cn52xxp1;
1325 struct cvmx_pcieep_cfg491_s cn56xx;
1326 struct cvmx_pcieep_cfg491_s cn56xxp1;
1327};
1328
1329union cvmx_pcieep_cfg492 {
1330 uint32_t u32;
1331 struct cvmx_pcieep_cfg492_s {
1332 uint32_t reserved_26_31:6;
1333 uint32_t header_depth:10;
1334 uint32_t reserved_14_15:2;
1335 uint32_t data_depth:14;
1336 } s;
1337 struct cvmx_pcieep_cfg492_s cn52xx;
1338 struct cvmx_pcieep_cfg492_s cn52xxp1;
1339 struct cvmx_pcieep_cfg492_s cn56xx;
1340 struct cvmx_pcieep_cfg492_s cn56xxp1;
1341};
1342
1343union cvmx_pcieep_cfg516 {
1344 uint32_t u32;
1345 struct cvmx_pcieep_cfg516_s {
1346 uint32_t phy_stat:32;
1347 } s;
1348 struct cvmx_pcieep_cfg516_s cn52xx;
1349 struct cvmx_pcieep_cfg516_s cn52xxp1;
1350 struct cvmx_pcieep_cfg516_s cn56xx;
1351 struct cvmx_pcieep_cfg516_s cn56xxp1;
1352};
1353
1354union cvmx_pcieep_cfg517 {
1355 uint32_t u32;
1356 struct cvmx_pcieep_cfg517_s {
1357 uint32_t phy_ctrl:32;
1358 } s;
1359 struct cvmx_pcieep_cfg517_s cn52xx;
1360 struct cvmx_pcieep_cfg517_s cn52xxp1;
1361 struct cvmx_pcieep_cfg517_s cn56xx;
1362 struct cvmx_pcieep_cfg517_s cn56xxp1;
1363};
1364
1365#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-pciercx-defs.h b/arch/mips/include/asm/octeon/cvmx-pciercx-defs.h
new file mode 100644
index 000000000000..75574c918942
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-pciercx-defs.h
@@ -0,0 +1,1397 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_PCIERCX_DEFS_H__
29#define __CVMX_PCIERCX_DEFS_H__
30
31#define CVMX_PCIERCX_CFG000(offset) \
32 (0x0000000000000000ull + (((offset) & 1) * 0))
33#define CVMX_PCIERCX_CFG001(offset) \
34 (0x0000000000000004ull + (((offset) & 1) * 0))
35#define CVMX_PCIERCX_CFG002(offset) \
36 (0x0000000000000008ull + (((offset) & 1) * 0))
37#define CVMX_PCIERCX_CFG003(offset) \
38 (0x000000000000000Cull + (((offset) & 1) * 0))
39#define CVMX_PCIERCX_CFG004(offset) \
40 (0x0000000000000010ull + (((offset) & 1) * 0))
41#define CVMX_PCIERCX_CFG005(offset) \
42 (0x0000000000000014ull + (((offset) & 1) * 0))
43#define CVMX_PCIERCX_CFG006(offset) \
44 (0x0000000000000018ull + (((offset) & 1) * 0))
45#define CVMX_PCIERCX_CFG007(offset) \
46 (0x000000000000001Cull + (((offset) & 1) * 0))
47#define CVMX_PCIERCX_CFG008(offset) \
48 (0x0000000000000020ull + (((offset) & 1) * 0))
49#define CVMX_PCIERCX_CFG009(offset) \
50 (0x0000000000000024ull + (((offset) & 1) * 0))
51#define CVMX_PCIERCX_CFG010(offset) \
52 (0x0000000000000028ull + (((offset) & 1) * 0))
53#define CVMX_PCIERCX_CFG011(offset) \
54 (0x000000000000002Cull + (((offset) & 1) * 0))
55#define CVMX_PCIERCX_CFG012(offset) \
56 (0x0000000000000030ull + (((offset) & 1) * 0))
57#define CVMX_PCIERCX_CFG013(offset) \
58 (0x0000000000000034ull + (((offset) & 1) * 0))
59#define CVMX_PCIERCX_CFG014(offset) \
60 (0x0000000000000038ull + (((offset) & 1) * 0))
61#define CVMX_PCIERCX_CFG015(offset) \
62 (0x000000000000003Cull + (((offset) & 1) * 0))
63#define CVMX_PCIERCX_CFG016(offset) \
64 (0x0000000000000040ull + (((offset) & 1) * 0))
65#define CVMX_PCIERCX_CFG017(offset) \
66 (0x0000000000000044ull + (((offset) & 1) * 0))
67#define CVMX_PCIERCX_CFG020(offset) \
68 (0x0000000000000050ull + (((offset) & 1) * 0))
69#define CVMX_PCIERCX_CFG021(offset) \
70 (0x0000000000000054ull + (((offset) & 1) * 0))
71#define CVMX_PCIERCX_CFG022(offset) \
72 (0x0000000000000058ull + (((offset) & 1) * 0))
73#define CVMX_PCIERCX_CFG023(offset) \
74 (0x000000000000005Cull + (((offset) & 1) * 0))
75#define CVMX_PCIERCX_CFG028(offset) \
76 (0x0000000000000070ull + (((offset) & 1) * 0))
77#define CVMX_PCIERCX_CFG029(offset) \
78 (0x0000000000000074ull + (((offset) & 1) * 0))
79#define CVMX_PCIERCX_CFG030(offset) \
80 (0x0000000000000078ull + (((offset) & 1) * 0))
81#define CVMX_PCIERCX_CFG031(offset) \
82 (0x000000000000007Cull + (((offset) & 1) * 0))
83#define CVMX_PCIERCX_CFG032(offset) \
84 (0x0000000000000080ull + (((offset) & 1) * 0))
85#define CVMX_PCIERCX_CFG033(offset) \
86 (0x0000000000000084ull + (((offset) & 1) * 0))
87#define CVMX_PCIERCX_CFG034(offset) \
88 (0x0000000000000088ull + (((offset) & 1) * 0))
89#define CVMX_PCIERCX_CFG035(offset) \
90 (0x000000000000008Cull + (((offset) & 1) * 0))
91#define CVMX_PCIERCX_CFG036(offset) \
92 (0x0000000000000090ull + (((offset) & 1) * 0))
93#define CVMX_PCIERCX_CFG037(offset) \
94 (0x0000000000000094ull + (((offset) & 1) * 0))
95#define CVMX_PCIERCX_CFG038(offset) \
96 (0x0000000000000098ull + (((offset) & 1) * 0))
97#define CVMX_PCIERCX_CFG039(offset) \
98 (0x000000000000009Cull + (((offset) & 1) * 0))
99#define CVMX_PCIERCX_CFG040(offset) \
100 (0x00000000000000A0ull + (((offset) & 1) * 0))
101#define CVMX_PCIERCX_CFG041(offset) \
102 (0x00000000000000A4ull + (((offset) & 1) * 0))
103#define CVMX_PCIERCX_CFG042(offset) \
104 (0x00000000000000A8ull + (((offset) & 1) * 0))
105#define CVMX_PCIERCX_CFG064(offset) \
106 (0x0000000000000100ull + (((offset) & 1) * 0))
107#define CVMX_PCIERCX_CFG065(offset) \
108 (0x0000000000000104ull + (((offset) & 1) * 0))
109#define CVMX_PCIERCX_CFG066(offset) \
110 (0x0000000000000108ull + (((offset) & 1) * 0))
111#define CVMX_PCIERCX_CFG067(offset) \
112 (0x000000000000010Cull + (((offset) & 1) * 0))
113#define CVMX_PCIERCX_CFG068(offset) \
114 (0x0000000000000110ull + (((offset) & 1) * 0))
115#define CVMX_PCIERCX_CFG069(offset) \
116 (0x0000000000000114ull + (((offset) & 1) * 0))
117#define CVMX_PCIERCX_CFG070(offset) \
118 (0x0000000000000118ull + (((offset) & 1) * 0))
119#define CVMX_PCIERCX_CFG071(offset) \
120 (0x000000000000011Cull + (((offset) & 1) * 0))
121#define CVMX_PCIERCX_CFG072(offset) \
122 (0x0000000000000120ull + (((offset) & 1) * 0))
123#define CVMX_PCIERCX_CFG073(offset) \
124 (0x0000000000000124ull + (((offset) & 1) * 0))
125#define CVMX_PCIERCX_CFG074(offset) \
126 (0x0000000000000128ull + (((offset) & 1) * 0))
127#define CVMX_PCIERCX_CFG075(offset) \
128 (0x000000000000012Cull + (((offset) & 1) * 0))
129#define CVMX_PCIERCX_CFG076(offset) \
130 (0x0000000000000130ull + (((offset) & 1) * 0))
131#define CVMX_PCIERCX_CFG077(offset) \
132 (0x0000000000000134ull + (((offset) & 1) * 0))
133#define CVMX_PCIERCX_CFG448(offset) \
134 (0x0000000000000700ull + (((offset) & 1) * 0))
135#define CVMX_PCIERCX_CFG449(offset) \
136 (0x0000000000000704ull + (((offset) & 1) * 0))
137#define CVMX_PCIERCX_CFG450(offset) \
138 (0x0000000000000708ull + (((offset) & 1) * 0))
139#define CVMX_PCIERCX_CFG451(offset) \
140 (0x000000000000070Cull + (((offset) & 1) * 0))
141#define CVMX_PCIERCX_CFG452(offset) \
142 (0x0000000000000710ull + (((offset) & 1) * 0))
143#define CVMX_PCIERCX_CFG453(offset) \
144 (0x0000000000000714ull + (((offset) & 1) * 0))
145#define CVMX_PCIERCX_CFG454(offset) \
146 (0x0000000000000718ull + (((offset) & 1) * 0))
147#define CVMX_PCIERCX_CFG455(offset) \
148 (0x000000000000071Cull + (((offset) & 1) * 0))
149#define CVMX_PCIERCX_CFG456(offset) \
150 (0x0000000000000720ull + (((offset) & 1) * 0))
151#define CVMX_PCIERCX_CFG458(offset) \
152 (0x0000000000000728ull + (((offset) & 1) * 0))
153#define CVMX_PCIERCX_CFG459(offset) \
154 (0x000000000000072Cull + (((offset) & 1) * 0))
155#define CVMX_PCIERCX_CFG460(offset) \
156 (0x0000000000000730ull + (((offset) & 1) * 0))
157#define CVMX_PCIERCX_CFG461(offset) \
158 (0x0000000000000734ull + (((offset) & 1) * 0))
159#define CVMX_PCIERCX_CFG462(offset) \
160 (0x0000000000000738ull + (((offset) & 1) * 0))
161#define CVMX_PCIERCX_CFG463(offset) \
162 (0x000000000000073Cull + (((offset) & 1) * 0))
163#define CVMX_PCIERCX_CFG464(offset) \
164 (0x0000000000000740ull + (((offset) & 1) * 0))
165#define CVMX_PCIERCX_CFG465(offset) \
166 (0x0000000000000744ull + (((offset) & 1) * 0))
167#define CVMX_PCIERCX_CFG466(offset) \
168 (0x0000000000000748ull + (((offset) & 1) * 0))
169#define CVMX_PCIERCX_CFG467(offset) \
170 (0x000000000000074Cull + (((offset) & 1) * 0))
171#define CVMX_PCIERCX_CFG468(offset) \
172 (0x0000000000000750ull + (((offset) & 1) * 0))
173#define CVMX_PCIERCX_CFG490(offset) \
174 (0x00000000000007A8ull + (((offset) & 1) * 0))
175#define CVMX_PCIERCX_CFG491(offset) \
176 (0x00000000000007ACull + (((offset) & 1) * 0))
177#define CVMX_PCIERCX_CFG492(offset) \
178 (0x00000000000007B0ull + (((offset) & 1) * 0))
179#define CVMX_PCIERCX_CFG516(offset) \
180 (0x0000000000000810ull + (((offset) & 1) * 0))
181#define CVMX_PCIERCX_CFG517(offset) \
182 (0x0000000000000814ull + (((offset) & 1) * 0))
183
184union cvmx_pciercx_cfg000 {
185 uint32_t u32;
186 struct cvmx_pciercx_cfg000_s {
187 uint32_t devid:16;
188 uint32_t vendid:16;
189 } s;
190 struct cvmx_pciercx_cfg000_s cn52xx;
191 struct cvmx_pciercx_cfg000_s cn52xxp1;
192 struct cvmx_pciercx_cfg000_s cn56xx;
193 struct cvmx_pciercx_cfg000_s cn56xxp1;
194};
195
196union cvmx_pciercx_cfg001 {
197 uint32_t u32;
198 struct cvmx_pciercx_cfg001_s {
199 uint32_t dpe:1;
200 uint32_t sse:1;
201 uint32_t rma:1;
202 uint32_t rta:1;
203 uint32_t sta:1;
204 uint32_t devt:2;
205 uint32_t mdpe:1;
206 uint32_t fbb:1;
207 uint32_t reserved_22_22:1;
208 uint32_t m66:1;
209 uint32_t cl:1;
210 uint32_t i_stat:1;
211 uint32_t reserved_11_18:8;
212 uint32_t i_dis:1;
213 uint32_t fbbe:1;
214 uint32_t see:1;
215 uint32_t ids_wcc:1;
216 uint32_t per:1;
217 uint32_t vps:1;
218 uint32_t mwice:1;
219 uint32_t scse:1;
220 uint32_t me:1;
221 uint32_t msae:1;
222 uint32_t isae:1;
223 } s;
224 struct cvmx_pciercx_cfg001_s cn52xx;
225 struct cvmx_pciercx_cfg001_s cn52xxp1;
226 struct cvmx_pciercx_cfg001_s cn56xx;
227 struct cvmx_pciercx_cfg001_s cn56xxp1;
228};
229
230union cvmx_pciercx_cfg002 {
231 uint32_t u32;
232 struct cvmx_pciercx_cfg002_s {
233 uint32_t bcc:8;
234 uint32_t sc:8;
235 uint32_t pi:8;
236 uint32_t rid:8;
237 } s;
238 struct cvmx_pciercx_cfg002_s cn52xx;
239 struct cvmx_pciercx_cfg002_s cn52xxp1;
240 struct cvmx_pciercx_cfg002_s cn56xx;
241 struct cvmx_pciercx_cfg002_s cn56xxp1;
242};
243
244union cvmx_pciercx_cfg003 {
245 uint32_t u32;
246 struct cvmx_pciercx_cfg003_s {
247 uint32_t bist:8;
248 uint32_t mfd:1;
249 uint32_t chf:7;
250 uint32_t lt:8;
251 uint32_t cls:8;
252 } s;
253 struct cvmx_pciercx_cfg003_s cn52xx;
254 struct cvmx_pciercx_cfg003_s cn52xxp1;
255 struct cvmx_pciercx_cfg003_s cn56xx;
256 struct cvmx_pciercx_cfg003_s cn56xxp1;
257};
258
259union cvmx_pciercx_cfg004 {
260 uint32_t u32;
261 struct cvmx_pciercx_cfg004_s {
262 uint32_t reserved_0_31:32;
263 } s;
264 struct cvmx_pciercx_cfg004_s cn52xx;
265 struct cvmx_pciercx_cfg004_s cn52xxp1;
266 struct cvmx_pciercx_cfg004_s cn56xx;
267 struct cvmx_pciercx_cfg004_s cn56xxp1;
268};
269
270union cvmx_pciercx_cfg005 {
271 uint32_t u32;
272 struct cvmx_pciercx_cfg005_s {
273 uint32_t reserved_0_31:32;
274 } s;
275 struct cvmx_pciercx_cfg005_s cn52xx;
276 struct cvmx_pciercx_cfg005_s cn52xxp1;
277 struct cvmx_pciercx_cfg005_s cn56xx;
278 struct cvmx_pciercx_cfg005_s cn56xxp1;
279};
280
281union cvmx_pciercx_cfg006 {
282 uint32_t u32;
283 struct cvmx_pciercx_cfg006_s {
284 uint32_t slt:8;
285 uint32_t subbnum:8;
286 uint32_t sbnum:8;
287 uint32_t pbnum:8;
288 } s;
289 struct cvmx_pciercx_cfg006_s cn52xx;
290 struct cvmx_pciercx_cfg006_s cn52xxp1;
291 struct cvmx_pciercx_cfg006_s cn56xx;
292 struct cvmx_pciercx_cfg006_s cn56xxp1;
293};
294
295union cvmx_pciercx_cfg007 {
296 uint32_t u32;
297 struct cvmx_pciercx_cfg007_s {
298 uint32_t dpe:1;
299 uint32_t sse:1;
300 uint32_t rma:1;
301 uint32_t rta:1;
302 uint32_t sta:1;
303 uint32_t devt:2;
304 uint32_t mdpe:1;
305 uint32_t fbb:1;
306 uint32_t reserved_22_22:1;
307 uint32_t m66:1;
308 uint32_t reserved_16_20:5;
309 uint32_t lio_limi:4;
310 uint32_t reserved_9_11:3;
311 uint32_t io32b:1;
312 uint32_t lio_base:4;
313 uint32_t reserved_1_3:3;
314 uint32_t io32a:1;
315 } s;
316 struct cvmx_pciercx_cfg007_s cn52xx;
317 struct cvmx_pciercx_cfg007_s cn52xxp1;
318 struct cvmx_pciercx_cfg007_s cn56xx;
319 struct cvmx_pciercx_cfg007_s cn56xxp1;
320};
321
322union cvmx_pciercx_cfg008 {
323 uint32_t u32;
324 struct cvmx_pciercx_cfg008_s {
325 uint32_t ml_addr:12;
326 uint32_t reserved_16_19:4;
327 uint32_t mb_addr:12;
328 uint32_t reserved_0_3:4;
329 } s;
330 struct cvmx_pciercx_cfg008_s cn52xx;
331 struct cvmx_pciercx_cfg008_s cn52xxp1;
332 struct cvmx_pciercx_cfg008_s cn56xx;
333 struct cvmx_pciercx_cfg008_s cn56xxp1;
334};
335
336union cvmx_pciercx_cfg009 {
337 uint32_t u32;
338 struct cvmx_pciercx_cfg009_s {
339 uint32_t lmem_limit:12;
340 uint32_t reserved_17_19:3;
341 uint32_t mem64b:1;
342 uint32_t lmem_base:12;
343 uint32_t reserved_1_3:3;
344 uint32_t mem64a:1;
345 } s;
346 struct cvmx_pciercx_cfg009_s cn52xx;
347 struct cvmx_pciercx_cfg009_s cn52xxp1;
348 struct cvmx_pciercx_cfg009_s cn56xx;
349 struct cvmx_pciercx_cfg009_s cn56xxp1;
350};
351
352union cvmx_pciercx_cfg010 {
353 uint32_t u32;
354 struct cvmx_pciercx_cfg010_s {
355 uint32_t umem_base:32;
356 } s;
357 struct cvmx_pciercx_cfg010_s cn52xx;
358 struct cvmx_pciercx_cfg010_s cn52xxp1;
359 struct cvmx_pciercx_cfg010_s cn56xx;
360 struct cvmx_pciercx_cfg010_s cn56xxp1;
361};
362
363union cvmx_pciercx_cfg011 {
364 uint32_t u32;
365 struct cvmx_pciercx_cfg011_s {
366 uint32_t umem_limit:32;
367 } s;
368 struct cvmx_pciercx_cfg011_s cn52xx;
369 struct cvmx_pciercx_cfg011_s cn52xxp1;
370 struct cvmx_pciercx_cfg011_s cn56xx;
371 struct cvmx_pciercx_cfg011_s cn56xxp1;
372};
373
374union cvmx_pciercx_cfg012 {
375 uint32_t u32;
376 struct cvmx_pciercx_cfg012_s {
377 uint32_t uio_limit:16;
378 uint32_t uio_base:16;
379 } s;
380 struct cvmx_pciercx_cfg012_s cn52xx;
381 struct cvmx_pciercx_cfg012_s cn52xxp1;
382 struct cvmx_pciercx_cfg012_s cn56xx;
383 struct cvmx_pciercx_cfg012_s cn56xxp1;
384};
385
386union cvmx_pciercx_cfg013 {
387 uint32_t u32;
388 struct cvmx_pciercx_cfg013_s {
389 uint32_t reserved_8_31:24;
390 uint32_t cp:8;
391 } s;
392 struct cvmx_pciercx_cfg013_s cn52xx;
393 struct cvmx_pciercx_cfg013_s cn52xxp1;
394 struct cvmx_pciercx_cfg013_s cn56xx;
395 struct cvmx_pciercx_cfg013_s cn56xxp1;
396};
397
398union cvmx_pciercx_cfg014 {
399 uint32_t u32;
400 struct cvmx_pciercx_cfg014_s {
401 uint32_t reserved_0_31:32;
402 } s;
403 struct cvmx_pciercx_cfg014_s cn52xx;
404 struct cvmx_pciercx_cfg014_s cn52xxp1;
405 struct cvmx_pciercx_cfg014_s cn56xx;
406 struct cvmx_pciercx_cfg014_s cn56xxp1;
407};
408
409union cvmx_pciercx_cfg015 {
410 uint32_t u32;
411 struct cvmx_pciercx_cfg015_s {
412 uint32_t reserved_28_31:4;
413 uint32_t dtsees:1;
414 uint32_t dts:1;
415 uint32_t sdt:1;
416 uint32_t pdt:1;
417 uint32_t fbbe:1;
418 uint32_t sbrst:1;
419 uint32_t mam:1;
420 uint32_t vga16d:1;
421 uint32_t vgae:1;
422 uint32_t isae:1;
423 uint32_t see:1;
424 uint32_t pere:1;
425 uint32_t inta:8;
426 uint32_t il:8;
427 } s;
428 struct cvmx_pciercx_cfg015_s cn52xx;
429 struct cvmx_pciercx_cfg015_s cn52xxp1;
430 struct cvmx_pciercx_cfg015_s cn56xx;
431 struct cvmx_pciercx_cfg015_s cn56xxp1;
432};
433
434union cvmx_pciercx_cfg016 {
435 uint32_t u32;
436 struct cvmx_pciercx_cfg016_s {
437 uint32_t pmes:5;
438 uint32_t d2s:1;
439 uint32_t d1s:1;
440 uint32_t auxc:3;
441 uint32_t dsi:1;
442 uint32_t reserved_20_20:1;
443 uint32_t pme_clock:1;
444 uint32_t pmsv:3;
445 uint32_t ncp:8;
446 uint32_t pmcid:8;
447 } s;
448 struct cvmx_pciercx_cfg016_s cn52xx;
449 struct cvmx_pciercx_cfg016_s cn52xxp1;
450 struct cvmx_pciercx_cfg016_s cn56xx;
451 struct cvmx_pciercx_cfg016_s cn56xxp1;
452};
453
454union cvmx_pciercx_cfg017 {
455 uint32_t u32;
456 struct cvmx_pciercx_cfg017_s {
457 uint32_t pmdia:8;
458 uint32_t bpccee:1;
459 uint32_t bd3h:1;
460 uint32_t reserved_16_21:6;
461 uint32_t pmess:1;
462 uint32_t pmedsia:2;
463 uint32_t pmds:4;
464 uint32_t pmeens:1;
465 uint32_t reserved_4_7:4;
466 uint32_t nsr:1;
467 uint32_t reserved_2_2:1;
468 uint32_t ps:2;
469 } s;
470 struct cvmx_pciercx_cfg017_s cn52xx;
471 struct cvmx_pciercx_cfg017_s cn52xxp1;
472 struct cvmx_pciercx_cfg017_s cn56xx;
473 struct cvmx_pciercx_cfg017_s cn56xxp1;
474};
475
476union cvmx_pciercx_cfg020 {
477 uint32_t u32;
478 struct cvmx_pciercx_cfg020_s {
479 uint32_t reserved_24_31:8;
480 uint32_t m64:1;
481 uint32_t mme:3;
482 uint32_t mmc:3;
483 uint32_t msien:1;
484 uint32_t ncp:8;
485 uint32_t msicid:8;
486 } s;
487 struct cvmx_pciercx_cfg020_s cn52xx;
488 struct cvmx_pciercx_cfg020_s cn52xxp1;
489 struct cvmx_pciercx_cfg020_s cn56xx;
490 struct cvmx_pciercx_cfg020_s cn56xxp1;
491};
492
493union cvmx_pciercx_cfg021 {
494 uint32_t u32;
495 struct cvmx_pciercx_cfg021_s {
496 uint32_t lmsi:30;
497 uint32_t reserved_0_1:2;
498 } s;
499 struct cvmx_pciercx_cfg021_s cn52xx;
500 struct cvmx_pciercx_cfg021_s cn52xxp1;
501 struct cvmx_pciercx_cfg021_s cn56xx;
502 struct cvmx_pciercx_cfg021_s cn56xxp1;
503};
504
505union cvmx_pciercx_cfg022 {
506 uint32_t u32;
507 struct cvmx_pciercx_cfg022_s {
508 uint32_t umsi:32;
509 } s;
510 struct cvmx_pciercx_cfg022_s cn52xx;
511 struct cvmx_pciercx_cfg022_s cn52xxp1;
512 struct cvmx_pciercx_cfg022_s cn56xx;
513 struct cvmx_pciercx_cfg022_s cn56xxp1;
514};
515
516union cvmx_pciercx_cfg023 {
517 uint32_t u32;
518 struct cvmx_pciercx_cfg023_s {
519 uint32_t reserved_16_31:16;
520 uint32_t msimd:16;
521 } s;
522 struct cvmx_pciercx_cfg023_s cn52xx;
523 struct cvmx_pciercx_cfg023_s cn52xxp1;
524 struct cvmx_pciercx_cfg023_s cn56xx;
525 struct cvmx_pciercx_cfg023_s cn56xxp1;
526};
527
528union cvmx_pciercx_cfg028 {
529 uint32_t u32;
530 struct cvmx_pciercx_cfg028_s {
531 uint32_t reserved_30_31:2;
532 uint32_t imn:5;
533 uint32_t si:1;
534 uint32_t dpt:4;
535 uint32_t pciecv:4;
536 uint32_t ncp:8;
537 uint32_t pcieid:8;
538 } s;
539 struct cvmx_pciercx_cfg028_s cn52xx;
540 struct cvmx_pciercx_cfg028_s cn52xxp1;
541 struct cvmx_pciercx_cfg028_s cn56xx;
542 struct cvmx_pciercx_cfg028_s cn56xxp1;
543};
544
545union cvmx_pciercx_cfg029 {
546 uint32_t u32;
547 struct cvmx_pciercx_cfg029_s {
548 uint32_t reserved_28_31:4;
549 uint32_t cspls:2;
550 uint32_t csplv:8;
551 uint32_t reserved_16_17:2;
552 uint32_t rber:1;
553 uint32_t reserved_12_14:3;
554 uint32_t el1al:3;
555 uint32_t el0al:3;
556 uint32_t etfs:1;
557 uint32_t pfs:2;
558 uint32_t mpss:3;
559 } s;
560 struct cvmx_pciercx_cfg029_s cn52xx;
561 struct cvmx_pciercx_cfg029_s cn52xxp1;
562 struct cvmx_pciercx_cfg029_s cn56xx;
563 struct cvmx_pciercx_cfg029_s cn56xxp1;
564};
565
566union cvmx_pciercx_cfg030 {
567 uint32_t u32;
568 struct cvmx_pciercx_cfg030_s {
569 uint32_t reserved_22_31:10;
570 uint32_t tp:1;
571 uint32_t ap_d:1;
572 uint32_t ur_d:1;
573 uint32_t fe_d:1;
574 uint32_t nfe_d:1;
575 uint32_t ce_d:1;
576 uint32_t reserved_15_15:1;
577 uint32_t mrrs:3;
578 uint32_t ns_en:1;
579 uint32_t ap_en:1;
580 uint32_t pf_en:1;
581 uint32_t etf_en:1;
582 uint32_t mps:3;
583 uint32_t ro_en:1;
584 uint32_t ur_en:1;
585 uint32_t fe_en:1;
586 uint32_t nfe_en:1;
587 uint32_t ce_en:1;
588 } s;
589 struct cvmx_pciercx_cfg030_s cn52xx;
590 struct cvmx_pciercx_cfg030_s cn52xxp1;
591 struct cvmx_pciercx_cfg030_s cn56xx;
592 struct cvmx_pciercx_cfg030_s cn56xxp1;
593};
594
595union cvmx_pciercx_cfg031 {
596 uint32_t u32;
597 struct cvmx_pciercx_cfg031_s {
598 uint32_t pnum:8;
599 uint32_t reserved_22_23:2;
600 uint32_t lbnc:1;
601 uint32_t dllarc:1;
602 uint32_t sderc:1;
603 uint32_t cpm:1;
604 uint32_t l1el:3;
605 uint32_t l0el:3;
606 uint32_t aslpms:2;
607 uint32_t mlw:6;
608 uint32_t mls:4;
609 } s;
610 struct cvmx_pciercx_cfg031_s cn52xx;
611 struct cvmx_pciercx_cfg031_s cn52xxp1;
612 struct cvmx_pciercx_cfg031_s cn56xx;
613 struct cvmx_pciercx_cfg031_s cn56xxp1;
614};
615
616union cvmx_pciercx_cfg032 {
617 uint32_t u32;
618 struct cvmx_pciercx_cfg032_s {
619 uint32_t lab:1;
620 uint32_t lbm:1;
621 uint32_t dlla:1;
622 uint32_t scc:1;
623 uint32_t lt:1;
624 uint32_t reserved_26_26:1;
625 uint32_t nlw:6;
626 uint32_t ls:4;
627 uint32_t reserved_12_15:4;
628 uint32_t lab_int_enb:1;
629 uint32_t lbm_int_enb:1;
630 uint32_t hawd:1;
631 uint32_t ecpm:1;
632 uint32_t es:1;
633 uint32_t ccc:1;
634 uint32_t rl:1;
635 uint32_t ld:1;
636 uint32_t rcb:1;
637 uint32_t reserved_2_2:1;
638 uint32_t aslpc:2;
639 } s;
640 struct cvmx_pciercx_cfg032_s cn52xx;
641 struct cvmx_pciercx_cfg032_s cn52xxp1;
642 struct cvmx_pciercx_cfg032_s cn56xx;
643 struct cvmx_pciercx_cfg032_s cn56xxp1;
644};
645
646union cvmx_pciercx_cfg033 {
647 uint32_t u32;
648 struct cvmx_pciercx_cfg033_s {
649 uint32_t ps_num:13;
650 uint32_t nccs:1;
651 uint32_t emip:1;
652 uint32_t sp_ls:2;
653 uint32_t sp_lv:8;
654 uint32_t hp_c:1;
655 uint32_t hp_s:1;
656 uint32_t pip:1;
657 uint32_t aip:1;
658 uint32_t mrlsp:1;
659 uint32_t pcp:1;
660 uint32_t abp:1;
661 } s;
662 struct cvmx_pciercx_cfg033_s cn52xx;
663 struct cvmx_pciercx_cfg033_s cn52xxp1;
664 struct cvmx_pciercx_cfg033_s cn56xx;
665 struct cvmx_pciercx_cfg033_s cn56xxp1;
666};
667
668union cvmx_pciercx_cfg034 {
669 uint32_t u32;
670 struct cvmx_pciercx_cfg034_s {
671 uint32_t reserved_25_31:7;
672 uint32_t dlls_c:1;
673 uint32_t emis:1;
674 uint32_t pds:1;
675 uint32_t mrlss:1;
676 uint32_t ccint_d:1;
677 uint32_t pd_c:1;
678 uint32_t mrls_c:1;
679 uint32_t pf_d:1;
680 uint32_t abp_d:1;
681 uint32_t reserved_13_15:3;
682 uint32_t dlls_en:1;
683 uint32_t emic:1;
684 uint32_t pcc:1;
685 uint32_t pic:2;
686 uint32_t aic:2;
687 uint32_t hpint_en:1;
688 uint32_t ccint_en:1;
689 uint32_t pd_en:1;
690 uint32_t mrls_en:1;
691 uint32_t pf_en:1;
692 uint32_t abp_en:1;
693 } s;
694 struct cvmx_pciercx_cfg034_s cn52xx;
695 struct cvmx_pciercx_cfg034_s cn52xxp1;
696 struct cvmx_pciercx_cfg034_s cn56xx;
697 struct cvmx_pciercx_cfg034_s cn56xxp1;
698};
699
700union cvmx_pciercx_cfg035 {
701 uint32_t u32;
702 struct cvmx_pciercx_cfg035_s {
703 uint32_t reserved_17_31:15;
704 uint32_t crssv:1;
705 uint32_t reserved_5_15:11;
706 uint32_t crssve:1;
707 uint32_t pmeie:1;
708 uint32_t sefee:1;
709 uint32_t senfee:1;
710 uint32_t secee:1;
711 } s;
712 struct cvmx_pciercx_cfg035_s cn52xx;
713 struct cvmx_pciercx_cfg035_s cn52xxp1;
714 struct cvmx_pciercx_cfg035_s cn56xx;
715 struct cvmx_pciercx_cfg035_s cn56xxp1;
716};
717
718union cvmx_pciercx_cfg036 {
719 uint32_t u32;
720 struct cvmx_pciercx_cfg036_s {
721 uint32_t reserved_18_31:14;
722 uint32_t pme_pend:1;
723 uint32_t pme_stat:1;
724 uint32_t pme_rid:16;
725 } s;
726 struct cvmx_pciercx_cfg036_s cn52xx;
727 struct cvmx_pciercx_cfg036_s cn52xxp1;
728 struct cvmx_pciercx_cfg036_s cn56xx;
729 struct cvmx_pciercx_cfg036_s cn56xxp1;
730};
731
732union cvmx_pciercx_cfg037 {
733 uint32_t u32;
734 struct cvmx_pciercx_cfg037_s {
735 uint32_t reserved_5_31:27;
736 uint32_t ctds:1;
737 uint32_t ctrs:4;
738 } s;
739 struct cvmx_pciercx_cfg037_s cn52xx;
740 struct cvmx_pciercx_cfg037_s cn52xxp1;
741 struct cvmx_pciercx_cfg037_s cn56xx;
742 struct cvmx_pciercx_cfg037_s cn56xxp1;
743};
744
745union cvmx_pciercx_cfg038 {
746 uint32_t u32;
747 struct cvmx_pciercx_cfg038_s {
748 uint32_t reserved_5_31:27;
749 uint32_t ctd:1;
750 uint32_t ctv:4;
751 } s;
752 struct cvmx_pciercx_cfg038_s cn52xx;
753 struct cvmx_pciercx_cfg038_s cn52xxp1;
754 struct cvmx_pciercx_cfg038_s cn56xx;
755 struct cvmx_pciercx_cfg038_s cn56xxp1;
756};
757
758union cvmx_pciercx_cfg039 {
759 uint32_t u32;
760 struct cvmx_pciercx_cfg039_s {
761 uint32_t reserved_0_31:32;
762 } s;
763 struct cvmx_pciercx_cfg039_s cn52xx;
764 struct cvmx_pciercx_cfg039_s cn52xxp1;
765 struct cvmx_pciercx_cfg039_s cn56xx;
766 struct cvmx_pciercx_cfg039_s cn56xxp1;
767};
768
769union cvmx_pciercx_cfg040 {
770 uint32_t u32;
771 struct cvmx_pciercx_cfg040_s {
772 uint32_t reserved_0_31:32;
773 } s;
774 struct cvmx_pciercx_cfg040_s cn52xx;
775 struct cvmx_pciercx_cfg040_s cn52xxp1;
776 struct cvmx_pciercx_cfg040_s cn56xx;
777 struct cvmx_pciercx_cfg040_s cn56xxp1;
778};
779
780union cvmx_pciercx_cfg041 {
781 uint32_t u32;
782 struct cvmx_pciercx_cfg041_s {
783 uint32_t reserved_0_31:32;
784 } s;
785 struct cvmx_pciercx_cfg041_s cn52xx;
786 struct cvmx_pciercx_cfg041_s cn52xxp1;
787 struct cvmx_pciercx_cfg041_s cn56xx;
788 struct cvmx_pciercx_cfg041_s cn56xxp1;
789};
790
791union cvmx_pciercx_cfg042 {
792 uint32_t u32;
793 struct cvmx_pciercx_cfg042_s {
794 uint32_t reserved_0_31:32;
795 } s;
796 struct cvmx_pciercx_cfg042_s cn52xx;
797 struct cvmx_pciercx_cfg042_s cn52xxp1;
798 struct cvmx_pciercx_cfg042_s cn56xx;
799 struct cvmx_pciercx_cfg042_s cn56xxp1;
800};
801
802union cvmx_pciercx_cfg064 {
803 uint32_t u32;
804 struct cvmx_pciercx_cfg064_s {
805 uint32_t nco:12;
806 uint32_t cv:4;
807 uint32_t pcieec:16;
808 } s;
809 struct cvmx_pciercx_cfg064_s cn52xx;
810 struct cvmx_pciercx_cfg064_s cn52xxp1;
811 struct cvmx_pciercx_cfg064_s cn56xx;
812 struct cvmx_pciercx_cfg064_s cn56xxp1;
813};
814
815union cvmx_pciercx_cfg065 {
816 uint32_t u32;
817 struct cvmx_pciercx_cfg065_s {
818 uint32_t reserved_21_31:11;
819 uint32_t ures:1;
820 uint32_t ecrces:1;
821 uint32_t mtlps:1;
822 uint32_t ros:1;
823 uint32_t ucs:1;
824 uint32_t cas:1;
825 uint32_t cts:1;
826 uint32_t fcpes:1;
827 uint32_t ptlps:1;
828 uint32_t reserved_6_11:6;
829 uint32_t sdes:1;
830 uint32_t dlpes:1;
831 uint32_t reserved_0_3:4;
832 } s;
833 struct cvmx_pciercx_cfg065_s cn52xx;
834 struct cvmx_pciercx_cfg065_s cn52xxp1;
835 struct cvmx_pciercx_cfg065_s cn56xx;
836 struct cvmx_pciercx_cfg065_s cn56xxp1;
837};
838
839union cvmx_pciercx_cfg066 {
840 uint32_t u32;
841 struct cvmx_pciercx_cfg066_s {
842 uint32_t reserved_21_31:11;
843 uint32_t urem:1;
844 uint32_t ecrcem:1;
845 uint32_t mtlpm:1;
846 uint32_t rom:1;
847 uint32_t ucm:1;
848 uint32_t cam:1;
849 uint32_t ctm:1;
850 uint32_t fcpem:1;
851 uint32_t ptlpm:1;
852 uint32_t reserved_6_11:6;
853 uint32_t sdem:1;
854 uint32_t dlpem:1;
855 uint32_t reserved_0_3:4;
856 } s;
857 struct cvmx_pciercx_cfg066_s cn52xx;
858 struct cvmx_pciercx_cfg066_s cn52xxp1;
859 struct cvmx_pciercx_cfg066_s cn56xx;
860 struct cvmx_pciercx_cfg066_s cn56xxp1;
861};
862
863union cvmx_pciercx_cfg067 {
864 uint32_t u32;
865 struct cvmx_pciercx_cfg067_s {
866 uint32_t reserved_21_31:11;
867 uint32_t ures:1;
868 uint32_t ecrces:1;
869 uint32_t mtlps:1;
870 uint32_t ros:1;
871 uint32_t ucs:1;
872 uint32_t cas:1;
873 uint32_t cts:1;
874 uint32_t fcpes:1;
875 uint32_t ptlps:1;
876 uint32_t reserved_6_11:6;
877 uint32_t sdes:1;
878 uint32_t dlpes:1;
879 uint32_t reserved_0_3:4;
880 } s;
881 struct cvmx_pciercx_cfg067_s cn52xx;
882 struct cvmx_pciercx_cfg067_s cn52xxp1;
883 struct cvmx_pciercx_cfg067_s cn56xx;
884 struct cvmx_pciercx_cfg067_s cn56xxp1;
885};
886
887union cvmx_pciercx_cfg068 {
888 uint32_t u32;
889 struct cvmx_pciercx_cfg068_s {
890 uint32_t reserved_14_31:18;
891 uint32_t anfes:1;
892 uint32_t rtts:1;
893 uint32_t reserved_9_11:3;
894 uint32_t rnrs:1;
895 uint32_t bdllps:1;
896 uint32_t btlps:1;
897 uint32_t reserved_1_5:5;
898 uint32_t res:1;
899 } s;
900 struct cvmx_pciercx_cfg068_s cn52xx;
901 struct cvmx_pciercx_cfg068_s cn52xxp1;
902 struct cvmx_pciercx_cfg068_s cn56xx;
903 struct cvmx_pciercx_cfg068_s cn56xxp1;
904};
905
906union cvmx_pciercx_cfg069 {
907 uint32_t u32;
908 struct cvmx_pciercx_cfg069_s {
909 uint32_t reserved_14_31:18;
910 uint32_t anfem:1;
911 uint32_t rttm:1;
912 uint32_t reserved_9_11:3;
913 uint32_t rnrm:1;
914 uint32_t bdllpm:1;
915 uint32_t btlpm:1;
916 uint32_t reserved_1_5:5;
917 uint32_t rem:1;
918 } s;
919 struct cvmx_pciercx_cfg069_s cn52xx;
920 struct cvmx_pciercx_cfg069_s cn52xxp1;
921 struct cvmx_pciercx_cfg069_s cn56xx;
922 struct cvmx_pciercx_cfg069_s cn56xxp1;
923};
924
925union cvmx_pciercx_cfg070 {
926 uint32_t u32;
927 struct cvmx_pciercx_cfg070_s {
928 uint32_t reserved_9_31:23;
929 uint32_t ce:1;
930 uint32_t cc:1;
931 uint32_t ge:1;
932 uint32_t gc:1;
933 uint32_t fep:5;
934 } s;
935 struct cvmx_pciercx_cfg070_s cn52xx;
936 struct cvmx_pciercx_cfg070_s cn52xxp1;
937 struct cvmx_pciercx_cfg070_s cn56xx;
938 struct cvmx_pciercx_cfg070_s cn56xxp1;
939};
940
941union cvmx_pciercx_cfg071 {
942 uint32_t u32;
943 struct cvmx_pciercx_cfg071_s {
944 uint32_t dword1:32;
945 } s;
946 struct cvmx_pciercx_cfg071_s cn52xx;
947 struct cvmx_pciercx_cfg071_s cn52xxp1;
948 struct cvmx_pciercx_cfg071_s cn56xx;
949 struct cvmx_pciercx_cfg071_s cn56xxp1;
950};
951
952union cvmx_pciercx_cfg072 {
953 uint32_t u32;
954 struct cvmx_pciercx_cfg072_s {
955 uint32_t dword2:32;
956 } s;
957 struct cvmx_pciercx_cfg072_s cn52xx;
958 struct cvmx_pciercx_cfg072_s cn52xxp1;
959 struct cvmx_pciercx_cfg072_s cn56xx;
960 struct cvmx_pciercx_cfg072_s cn56xxp1;
961};
962
963union cvmx_pciercx_cfg073 {
964 uint32_t u32;
965 struct cvmx_pciercx_cfg073_s {
966 uint32_t dword3:32;
967 } s;
968 struct cvmx_pciercx_cfg073_s cn52xx;
969 struct cvmx_pciercx_cfg073_s cn52xxp1;
970 struct cvmx_pciercx_cfg073_s cn56xx;
971 struct cvmx_pciercx_cfg073_s cn56xxp1;
972};
973
974union cvmx_pciercx_cfg074 {
975 uint32_t u32;
976 struct cvmx_pciercx_cfg074_s {
977 uint32_t dword4:32;
978 } s;
979 struct cvmx_pciercx_cfg074_s cn52xx;
980 struct cvmx_pciercx_cfg074_s cn52xxp1;
981 struct cvmx_pciercx_cfg074_s cn56xx;
982 struct cvmx_pciercx_cfg074_s cn56xxp1;
983};
984
985union cvmx_pciercx_cfg075 {
986 uint32_t u32;
987 struct cvmx_pciercx_cfg075_s {
988 uint32_t reserved_3_31:29;
989 uint32_t fere:1;
990 uint32_t nfere:1;
991 uint32_t cere:1;
992 } s;
993 struct cvmx_pciercx_cfg075_s cn52xx;
994 struct cvmx_pciercx_cfg075_s cn52xxp1;
995 struct cvmx_pciercx_cfg075_s cn56xx;
996 struct cvmx_pciercx_cfg075_s cn56xxp1;
997};
998
999union cvmx_pciercx_cfg076 {
1000 uint32_t u32;
1001 struct cvmx_pciercx_cfg076_s {
1002 uint32_t aeimn:5;
1003 uint32_t reserved_7_26:20;
1004 uint32_t femr:1;
1005 uint32_t nfemr:1;
1006 uint32_t fuf:1;
1007 uint32_t multi_efnfr:1;
1008 uint32_t efnfr:1;
1009 uint32_t multi_ecr:1;
1010 uint32_t ecr:1;
1011 } s;
1012 struct cvmx_pciercx_cfg076_s cn52xx;
1013 struct cvmx_pciercx_cfg076_s cn52xxp1;
1014 struct cvmx_pciercx_cfg076_s cn56xx;
1015 struct cvmx_pciercx_cfg076_s cn56xxp1;
1016};
1017
1018union cvmx_pciercx_cfg077 {
1019 uint32_t u32;
1020 struct cvmx_pciercx_cfg077_s {
1021 uint32_t efnfsi:16;
1022 uint32_t ecsi:16;
1023 } s;
1024 struct cvmx_pciercx_cfg077_s cn52xx;
1025 struct cvmx_pciercx_cfg077_s cn52xxp1;
1026 struct cvmx_pciercx_cfg077_s cn56xx;
1027 struct cvmx_pciercx_cfg077_s cn56xxp1;
1028};
1029
1030union cvmx_pciercx_cfg448 {
1031 uint32_t u32;
1032 struct cvmx_pciercx_cfg448_s {
1033 uint32_t rtl:16;
1034 uint32_t rtltl:16;
1035 } s;
1036 struct cvmx_pciercx_cfg448_s cn52xx;
1037 struct cvmx_pciercx_cfg448_s cn52xxp1;
1038 struct cvmx_pciercx_cfg448_s cn56xx;
1039 struct cvmx_pciercx_cfg448_s cn56xxp1;
1040};
1041
1042union cvmx_pciercx_cfg449 {
1043 uint32_t u32;
1044 struct cvmx_pciercx_cfg449_s {
1045 uint32_t omr:32;
1046 } s;
1047 struct cvmx_pciercx_cfg449_s cn52xx;
1048 struct cvmx_pciercx_cfg449_s cn52xxp1;
1049 struct cvmx_pciercx_cfg449_s cn56xx;
1050 struct cvmx_pciercx_cfg449_s cn56xxp1;
1051};
1052
1053union cvmx_pciercx_cfg450 {
1054 uint32_t u32;
1055 struct cvmx_pciercx_cfg450_s {
1056 uint32_t lpec:8;
1057 uint32_t reserved_22_23:2;
1058 uint32_t link_state:6;
1059 uint32_t force_link:1;
1060 uint32_t reserved_8_14:7;
1061 uint32_t link_num:8;
1062 } s;
1063 struct cvmx_pciercx_cfg450_s cn52xx;
1064 struct cvmx_pciercx_cfg450_s cn52xxp1;
1065 struct cvmx_pciercx_cfg450_s cn56xx;
1066 struct cvmx_pciercx_cfg450_s cn56xxp1;
1067};
1068
1069union cvmx_pciercx_cfg451 {
1070 uint32_t u32;
1071 struct cvmx_pciercx_cfg451_s {
1072 uint32_t reserved_30_31:2;
1073 uint32_t l1el:3;
1074 uint32_t l0el:3;
1075 uint32_t n_fts_cc:8;
1076 uint32_t n_fts:8;
1077 uint32_t ack_freq:8;
1078 } s;
1079 struct cvmx_pciercx_cfg451_s cn52xx;
1080 struct cvmx_pciercx_cfg451_s cn52xxp1;
1081 struct cvmx_pciercx_cfg451_s cn56xx;
1082 struct cvmx_pciercx_cfg451_s cn56xxp1;
1083};
1084
1085union cvmx_pciercx_cfg452 {
1086 uint32_t u32;
1087 struct cvmx_pciercx_cfg452_s {
1088 uint32_t reserved_26_31:6;
1089 uint32_t eccrc:1;
1090 uint32_t reserved_22_24:3;
1091 uint32_t lme:6;
1092 uint32_t reserved_8_15:8;
1093 uint32_t flm:1;
1094 uint32_t reserved_6_6:1;
1095 uint32_t dllle:1;
1096 uint32_t reserved_4_4:1;
1097 uint32_t ra:1;
1098 uint32_t le:1;
1099 uint32_t sd:1;
1100 uint32_t omr:1;
1101 } s;
1102 struct cvmx_pciercx_cfg452_s cn52xx;
1103 struct cvmx_pciercx_cfg452_s cn52xxp1;
1104 struct cvmx_pciercx_cfg452_s cn56xx;
1105 struct cvmx_pciercx_cfg452_s cn56xxp1;
1106};
1107
1108union cvmx_pciercx_cfg453 {
1109 uint32_t u32;
1110 struct cvmx_pciercx_cfg453_s {
1111 uint32_t dlld:1;
1112 uint32_t reserved_26_30:5;
1113 uint32_t ack_nak:1;
1114 uint32_t fcd:1;
1115 uint32_t ilst:24;
1116 } s;
1117 struct cvmx_pciercx_cfg453_s cn52xx;
1118 struct cvmx_pciercx_cfg453_s cn52xxp1;
1119 struct cvmx_pciercx_cfg453_s cn56xx;
1120 struct cvmx_pciercx_cfg453_s cn56xxp1;
1121};
1122
1123union cvmx_pciercx_cfg454 {
1124 uint32_t u32;
1125 struct cvmx_pciercx_cfg454_s {
1126 uint32_t reserved_29_31:3;
1127 uint32_t tmfcwt:5;
1128 uint32_t tmanlt:5;
1129 uint32_t tmrt:5;
1130 uint32_t reserved_11_13:3;
1131 uint32_t nskps:3;
1132 uint32_t reserved_4_7:4;
1133 uint32_t ntss:4;
1134 } s;
1135 struct cvmx_pciercx_cfg454_s cn52xx;
1136 struct cvmx_pciercx_cfg454_s cn52xxp1;
1137 struct cvmx_pciercx_cfg454_s cn56xx;
1138 struct cvmx_pciercx_cfg454_s cn56xxp1;
1139};
1140
1141union cvmx_pciercx_cfg455 {
1142 uint32_t u32;
1143 struct cvmx_pciercx_cfg455_s {
1144 uint32_t m_cfg0_filt:1;
1145 uint32_t m_io_filt:1;
1146 uint32_t msg_ctrl:1;
1147 uint32_t m_cpl_ecrc_filt:1;
1148 uint32_t m_ecrc_filt:1;
1149 uint32_t m_cpl_len_err:1;
1150 uint32_t m_cpl_attr_err:1;
1151 uint32_t m_cpl_tc_err:1;
1152 uint32_t m_cpl_fun_err:1;
1153 uint32_t m_cpl_rid_err:1;
1154 uint32_t m_cpl_tag_err:1;
1155 uint32_t m_lk_filt:1;
1156 uint32_t m_cfg1_filt:1;
1157 uint32_t m_bar_match:1;
1158 uint32_t m_pois_filt:1;
1159 uint32_t m_fun:1;
1160 uint32_t dfcwt:1;
1161 uint32_t reserved_11_14:4;
1162 uint32_t skpiv:11;
1163 } s;
1164 struct cvmx_pciercx_cfg455_s cn52xx;
1165 struct cvmx_pciercx_cfg455_s cn52xxp1;
1166 struct cvmx_pciercx_cfg455_s cn56xx;
1167 struct cvmx_pciercx_cfg455_s cn56xxp1;
1168};
1169
1170union cvmx_pciercx_cfg456 {
1171 uint32_t u32;
1172 struct cvmx_pciercx_cfg456_s {
1173 uint32_t reserved_2_31:30;
1174 uint32_t m_vend1_drp:1;
1175 uint32_t m_vend0_drp:1;
1176 } s;
1177 struct cvmx_pciercx_cfg456_s cn52xx;
1178 struct cvmx_pciercx_cfg456_s cn52xxp1;
1179 struct cvmx_pciercx_cfg456_s cn56xx;
1180 struct cvmx_pciercx_cfg456_s cn56xxp1;
1181};
1182
1183union cvmx_pciercx_cfg458 {
1184 uint32_t u32;
1185 struct cvmx_pciercx_cfg458_s {
1186 uint32_t dbg_info_l32:32;
1187 } s;
1188 struct cvmx_pciercx_cfg458_s cn52xx;
1189 struct cvmx_pciercx_cfg458_s cn52xxp1;
1190 struct cvmx_pciercx_cfg458_s cn56xx;
1191 struct cvmx_pciercx_cfg458_s cn56xxp1;
1192};
1193
1194union cvmx_pciercx_cfg459 {
1195 uint32_t u32;
1196 struct cvmx_pciercx_cfg459_s {
1197 uint32_t dbg_info_u32:32;
1198 } s;
1199 struct cvmx_pciercx_cfg459_s cn52xx;
1200 struct cvmx_pciercx_cfg459_s cn52xxp1;
1201 struct cvmx_pciercx_cfg459_s cn56xx;
1202 struct cvmx_pciercx_cfg459_s cn56xxp1;
1203};
1204
1205union cvmx_pciercx_cfg460 {
1206 uint32_t u32;
1207 struct cvmx_pciercx_cfg460_s {
1208 uint32_t reserved_20_31:12;
1209 uint32_t tphfcc:8;
1210 uint32_t tpdfcc:12;
1211 } s;
1212 struct cvmx_pciercx_cfg460_s cn52xx;
1213 struct cvmx_pciercx_cfg460_s cn52xxp1;
1214 struct cvmx_pciercx_cfg460_s cn56xx;
1215 struct cvmx_pciercx_cfg460_s cn56xxp1;
1216};
1217
1218union cvmx_pciercx_cfg461 {
1219 uint32_t u32;
1220 struct cvmx_pciercx_cfg461_s {
1221 uint32_t reserved_20_31:12;
1222 uint32_t tchfcc:8;
1223 uint32_t tcdfcc:12;
1224 } s;
1225 struct cvmx_pciercx_cfg461_s cn52xx;
1226 struct cvmx_pciercx_cfg461_s cn52xxp1;
1227 struct cvmx_pciercx_cfg461_s cn56xx;
1228 struct cvmx_pciercx_cfg461_s cn56xxp1;
1229};
1230
1231union cvmx_pciercx_cfg462 {
1232 uint32_t u32;
1233 struct cvmx_pciercx_cfg462_s {
1234 uint32_t reserved_20_31:12;
1235 uint32_t tchfcc:8;
1236 uint32_t tcdfcc:12;
1237 } s;
1238 struct cvmx_pciercx_cfg462_s cn52xx;
1239 struct cvmx_pciercx_cfg462_s cn52xxp1;
1240 struct cvmx_pciercx_cfg462_s cn56xx;
1241 struct cvmx_pciercx_cfg462_s cn56xxp1;
1242};
1243
1244union cvmx_pciercx_cfg463 {
1245 uint32_t u32;
1246 struct cvmx_pciercx_cfg463_s {
1247 uint32_t reserved_3_31:29;
1248 uint32_t rqne:1;
1249 uint32_t trbne:1;
1250 uint32_t rtlpfccnr:1;
1251 } s;
1252 struct cvmx_pciercx_cfg463_s cn52xx;
1253 struct cvmx_pciercx_cfg463_s cn52xxp1;
1254 struct cvmx_pciercx_cfg463_s cn56xx;
1255 struct cvmx_pciercx_cfg463_s cn56xxp1;
1256};
1257
1258union cvmx_pciercx_cfg464 {
1259 uint32_t u32;
1260 struct cvmx_pciercx_cfg464_s {
1261 uint32_t wrr_vc3:8;
1262 uint32_t wrr_vc2:8;
1263 uint32_t wrr_vc1:8;
1264 uint32_t wrr_vc0:8;
1265 } s;
1266 struct cvmx_pciercx_cfg464_s cn52xx;
1267 struct cvmx_pciercx_cfg464_s cn52xxp1;
1268 struct cvmx_pciercx_cfg464_s cn56xx;
1269 struct cvmx_pciercx_cfg464_s cn56xxp1;
1270};
1271
1272union cvmx_pciercx_cfg465 {
1273 uint32_t u32;
1274 struct cvmx_pciercx_cfg465_s {
1275 uint32_t wrr_vc7:8;
1276 uint32_t wrr_vc6:8;
1277 uint32_t wrr_vc5:8;
1278 uint32_t wrr_vc4:8;
1279 } s;
1280 struct cvmx_pciercx_cfg465_s cn52xx;
1281 struct cvmx_pciercx_cfg465_s cn52xxp1;
1282 struct cvmx_pciercx_cfg465_s cn56xx;
1283 struct cvmx_pciercx_cfg465_s cn56xxp1;
1284};
1285
1286union cvmx_pciercx_cfg466 {
1287 uint32_t u32;
1288 struct cvmx_pciercx_cfg466_s {
1289 uint32_t rx_queue_order:1;
1290 uint32_t type_ordering:1;
1291 uint32_t reserved_24_29:6;
1292 uint32_t queue_mode:3;
1293 uint32_t reserved_20_20:1;
1294 uint32_t header_credits:8;
1295 uint32_t data_credits:12;
1296 } s;
1297 struct cvmx_pciercx_cfg466_s cn52xx;
1298 struct cvmx_pciercx_cfg466_s cn52xxp1;
1299 struct cvmx_pciercx_cfg466_s cn56xx;
1300 struct cvmx_pciercx_cfg466_s cn56xxp1;
1301};
1302
1303union cvmx_pciercx_cfg467 {
1304 uint32_t u32;
1305 struct cvmx_pciercx_cfg467_s {
1306 uint32_t reserved_24_31:8;
1307 uint32_t queue_mode:3;
1308 uint32_t reserved_20_20:1;
1309 uint32_t header_credits:8;
1310 uint32_t data_credits:12;
1311 } s;
1312 struct cvmx_pciercx_cfg467_s cn52xx;
1313 struct cvmx_pciercx_cfg467_s cn52xxp1;
1314 struct cvmx_pciercx_cfg467_s cn56xx;
1315 struct cvmx_pciercx_cfg467_s cn56xxp1;
1316};
1317
1318union cvmx_pciercx_cfg468 {
1319 uint32_t u32;
1320 struct cvmx_pciercx_cfg468_s {
1321 uint32_t reserved_24_31:8;
1322 uint32_t queue_mode:3;
1323 uint32_t reserved_20_20:1;
1324 uint32_t header_credits:8;
1325 uint32_t data_credits:12;
1326 } s;
1327 struct cvmx_pciercx_cfg468_s cn52xx;
1328 struct cvmx_pciercx_cfg468_s cn52xxp1;
1329 struct cvmx_pciercx_cfg468_s cn56xx;
1330 struct cvmx_pciercx_cfg468_s cn56xxp1;
1331};
1332
1333union cvmx_pciercx_cfg490 {
1334 uint32_t u32;
1335 struct cvmx_pciercx_cfg490_s {
1336 uint32_t reserved_26_31:6;
1337 uint32_t header_depth:10;
1338 uint32_t reserved_14_15:2;
1339 uint32_t data_depth:14;
1340 } s;
1341 struct cvmx_pciercx_cfg490_s cn52xx;
1342 struct cvmx_pciercx_cfg490_s cn52xxp1;
1343 struct cvmx_pciercx_cfg490_s cn56xx;
1344 struct cvmx_pciercx_cfg490_s cn56xxp1;
1345};
1346
1347union cvmx_pciercx_cfg491 {
1348 uint32_t u32;
1349 struct cvmx_pciercx_cfg491_s {
1350 uint32_t reserved_26_31:6;
1351 uint32_t header_depth:10;
1352 uint32_t reserved_14_15:2;
1353 uint32_t data_depth:14;
1354 } s;
1355 struct cvmx_pciercx_cfg491_s cn52xx;
1356 struct cvmx_pciercx_cfg491_s cn52xxp1;
1357 struct cvmx_pciercx_cfg491_s cn56xx;
1358 struct cvmx_pciercx_cfg491_s cn56xxp1;
1359};
1360
1361union cvmx_pciercx_cfg492 {
1362 uint32_t u32;
1363 struct cvmx_pciercx_cfg492_s {
1364 uint32_t reserved_26_31:6;
1365 uint32_t header_depth:10;
1366 uint32_t reserved_14_15:2;
1367 uint32_t data_depth:14;
1368 } s;
1369 struct cvmx_pciercx_cfg492_s cn52xx;
1370 struct cvmx_pciercx_cfg492_s cn52xxp1;
1371 struct cvmx_pciercx_cfg492_s cn56xx;
1372 struct cvmx_pciercx_cfg492_s cn56xxp1;
1373};
1374
1375union cvmx_pciercx_cfg516 {
1376 uint32_t u32;
1377 struct cvmx_pciercx_cfg516_s {
1378 uint32_t phy_stat:32;
1379 } s;
1380 struct cvmx_pciercx_cfg516_s cn52xx;
1381 struct cvmx_pciercx_cfg516_s cn52xxp1;
1382 struct cvmx_pciercx_cfg516_s cn56xx;
1383 struct cvmx_pciercx_cfg516_s cn56xxp1;
1384};
1385
1386union cvmx_pciercx_cfg517 {
1387 uint32_t u32;
1388 struct cvmx_pciercx_cfg517_s {
1389 uint32_t phy_ctrl:32;
1390 } s;
1391 struct cvmx_pciercx_cfg517_s cn52xx;
1392 struct cvmx_pciercx_cfg517_s cn52xxp1;
1393 struct cvmx_pciercx_cfg517_s cn56xx;
1394 struct cvmx_pciercx_cfg517_s cn56xxp1;
1395};
1396
1397#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-pescx-defs.h b/arch/mips/include/asm/octeon/cvmx-pescx-defs.h
new file mode 100644
index 000000000000..f40cfaf84454
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-pescx-defs.h
@@ -0,0 +1,410 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_PESCX_DEFS_H__
29#define __CVMX_PESCX_DEFS_H__
30
31#define CVMX_PESCX_BIST_STATUS(block_id) \
32 CVMX_ADD_IO_SEG(0x00011800C8000018ull + (((block_id) & 1) * 0x8000000ull))
33#define CVMX_PESCX_BIST_STATUS2(block_id) \
34 CVMX_ADD_IO_SEG(0x00011800C8000418ull + (((block_id) & 1) * 0x8000000ull))
35#define CVMX_PESCX_CFG_RD(block_id) \
36 CVMX_ADD_IO_SEG(0x00011800C8000030ull + (((block_id) & 1) * 0x8000000ull))
37#define CVMX_PESCX_CFG_WR(block_id) \
38 CVMX_ADD_IO_SEG(0x00011800C8000028ull + (((block_id) & 1) * 0x8000000ull))
39#define CVMX_PESCX_CPL_LUT_VALID(block_id) \
40 CVMX_ADD_IO_SEG(0x00011800C8000098ull + (((block_id) & 1) * 0x8000000ull))
41#define CVMX_PESCX_CTL_STATUS(block_id) \
42 CVMX_ADD_IO_SEG(0x00011800C8000000ull + (((block_id) & 1) * 0x8000000ull))
43#define CVMX_PESCX_CTL_STATUS2(block_id) \
44 CVMX_ADD_IO_SEG(0x00011800C8000400ull + (((block_id) & 1) * 0x8000000ull))
45#define CVMX_PESCX_DBG_INFO(block_id) \
46 CVMX_ADD_IO_SEG(0x00011800C8000008ull + (((block_id) & 1) * 0x8000000ull))
47#define CVMX_PESCX_DBG_INFO_EN(block_id) \
48 CVMX_ADD_IO_SEG(0x00011800C80000A0ull + (((block_id) & 1) * 0x8000000ull))
49#define CVMX_PESCX_DIAG_STATUS(block_id) \
50 CVMX_ADD_IO_SEG(0x00011800C8000020ull + (((block_id) & 1) * 0x8000000ull))
51#define CVMX_PESCX_P2N_BAR0_START(block_id) \
52 CVMX_ADD_IO_SEG(0x00011800C8000080ull + (((block_id) & 1) * 0x8000000ull))
53#define CVMX_PESCX_P2N_BAR1_START(block_id) \
54 CVMX_ADD_IO_SEG(0x00011800C8000088ull + (((block_id) & 1) * 0x8000000ull))
55#define CVMX_PESCX_P2N_BAR2_START(block_id) \
56 CVMX_ADD_IO_SEG(0x00011800C8000090ull + (((block_id) & 1) * 0x8000000ull))
57#define CVMX_PESCX_P2P_BARX_END(offset, block_id) \
58 CVMX_ADD_IO_SEG(0x00011800C8000048ull + (((offset) & 3) * 16) + (((block_id) & 1) * 0x8000000ull))
59#define CVMX_PESCX_P2P_BARX_START(offset, block_id) \
60 CVMX_ADD_IO_SEG(0x00011800C8000040ull + (((offset) & 3) * 16) + (((block_id) & 1) * 0x8000000ull))
61#define CVMX_PESCX_TLP_CREDITS(block_id) \
62 CVMX_ADD_IO_SEG(0x00011800C8000038ull + (((block_id) & 1) * 0x8000000ull))
63
64union cvmx_pescx_bist_status {
65 uint64_t u64;
66 struct cvmx_pescx_bist_status_s {
67 uint64_t reserved_13_63:51;
68 uint64_t rqdata5:1;
69 uint64_t ctlp_or:1;
70 uint64_t ntlp_or:1;
71 uint64_t ptlp_or:1;
72 uint64_t retry:1;
73 uint64_t rqdata0:1;
74 uint64_t rqdata1:1;
75 uint64_t rqdata2:1;
76 uint64_t rqdata3:1;
77 uint64_t rqdata4:1;
78 uint64_t rqhdr1:1;
79 uint64_t rqhdr0:1;
80 uint64_t sot:1;
81 } s;
82 struct cvmx_pescx_bist_status_s cn52xx;
83 struct cvmx_pescx_bist_status_cn52xxp1 {
84 uint64_t reserved_12_63:52;
85 uint64_t ctlp_or:1;
86 uint64_t ntlp_or:1;
87 uint64_t ptlp_or:1;
88 uint64_t retry:1;
89 uint64_t rqdata0:1;
90 uint64_t rqdata1:1;
91 uint64_t rqdata2:1;
92 uint64_t rqdata3:1;
93 uint64_t rqdata4:1;
94 uint64_t rqhdr1:1;
95 uint64_t rqhdr0:1;
96 uint64_t sot:1;
97 } cn52xxp1;
98 struct cvmx_pescx_bist_status_s cn56xx;
99 struct cvmx_pescx_bist_status_cn52xxp1 cn56xxp1;
100};
101
102union cvmx_pescx_bist_status2 {
103 uint64_t u64;
104 struct cvmx_pescx_bist_status2_s {
105 uint64_t reserved_14_63:50;
106 uint64_t cto_p2e:1;
107 uint64_t e2p_cpl:1;
108 uint64_t e2p_n:1;
109 uint64_t e2p_p:1;
110 uint64_t e2p_rsl:1;
111 uint64_t dbg_p2e:1;
112 uint64_t peai_p2e:1;
113 uint64_t rsl_p2e:1;
114 uint64_t pef_tpf1:1;
115 uint64_t pef_tpf0:1;
116 uint64_t pef_tnf:1;
117 uint64_t pef_tcf1:1;
118 uint64_t pef_tc0:1;
119 uint64_t ppf:1;
120 } s;
121 struct cvmx_pescx_bist_status2_s cn52xx;
122 struct cvmx_pescx_bist_status2_s cn52xxp1;
123 struct cvmx_pescx_bist_status2_s cn56xx;
124 struct cvmx_pescx_bist_status2_s cn56xxp1;
125};
126
127union cvmx_pescx_cfg_rd {
128 uint64_t u64;
129 struct cvmx_pescx_cfg_rd_s {
130 uint64_t data:32;
131 uint64_t addr:32;
132 } s;
133 struct cvmx_pescx_cfg_rd_s cn52xx;
134 struct cvmx_pescx_cfg_rd_s cn52xxp1;
135 struct cvmx_pescx_cfg_rd_s cn56xx;
136 struct cvmx_pescx_cfg_rd_s cn56xxp1;
137};
138
139union cvmx_pescx_cfg_wr {
140 uint64_t u64;
141 struct cvmx_pescx_cfg_wr_s {
142 uint64_t data:32;
143 uint64_t addr:32;
144 } s;
145 struct cvmx_pescx_cfg_wr_s cn52xx;
146 struct cvmx_pescx_cfg_wr_s cn52xxp1;
147 struct cvmx_pescx_cfg_wr_s cn56xx;
148 struct cvmx_pescx_cfg_wr_s cn56xxp1;
149};
150
151union cvmx_pescx_cpl_lut_valid {
152 uint64_t u64;
153 struct cvmx_pescx_cpl_lut_valid_s {
154 uint64_t reserved_32_63:32;
155 uint64_t tag:32;
156 } s;
157 struct cvmx_pescx_cpl_lut_valid_s cn52xx;
158 struct cvmx_pescx_cpl_lut_valid_s cn52xxp1;
159 struct cvmx_pescx_cpl_lut_valid_s cn56xx;
160 struct cvmx_pescx_cpl_lut_valid_s cn56xxp1;
161};
162
163union cvmx_pescx_ctl_status {
164 uint64_t u64;
165 struct cvmx_pescx_ctl_status_s {
166 uint64_t reserved_28_63:36;
167 uint64_t dnum:5;
168 uint64_t pbus:8;
169 uint64_t qlm_cfg:2;
170 uint64_t lane_swp:1;
171 uint64_t pm_xtoff:1;
172 uint64_t pm_xpme:1;
173 uint64_t ob_p_cmd:1;
174 uint64_t reserved_7_8:2;
175 uint64_t nf_ecrc:1;
176 uint64_t dly_one:1;
177 uint64_t lnk_enb:1;
178 uint64_t ro_ctlp:1;
179 uint64_t reserved_2_2:1;
180 uint64_t inv_ecrc:1;
181 uint64_t inv_lcrc:1;
182 } s;
183 struct cvmx_pescx_ctl_status_s cn52xx;
184 struct cvmx_pescx_ctl_status_s cn52xxp1;
185 struct cvmx_pescx_ctl_status_cn56xx {
186 uint64_t reserved_28_63:36;
187 uint64_t dnum:5;
188 uint64_t pbus:8;
189 uint64_t qlm_cfg:2;
190 uint64_t reserved_12_12:1;
191 uint64_t pm_xtoff:1;
192 uint64_t pm_xpme:1;
193 uint64_t ob_p_cmd:1;
194 uint64_t reserved_7_8:2;
195 uint64_t nf_ecrc:1;
196 uint64_t dly_one:1;
197 uint64_t lnk_enb:1;
198 uint64_t ro_ctlp:1;
199 uint64_t reserved_2_2:1;
200 uint64_t inv_ecrc:1;
201 uint64_t inv_lcrc:1;
202 } cn56xx;
203 struct cvmx_pescx_ctl_status_cn56xx cn56xxp1;
204};
205
206union cvmx_pescx_ctl_status2 {
207 uint64_t u64;
208 struct cvmx_pescx_ctl_status2_s {
209 uint64_t reserved_2_63:62;
210 uint64_t pclk_run:1;
211 uint64_t pcierst:1;
212 } s;
213 struct cvmx_pescx_ctl_status2_s cn52xx;
214 struct cvmx_pescx_ctl_status2_cn52xxp1 {
215 uint64_t reserved_1_63:63;
216 uint64_t pcierst:1;
217 } cn52xxp1;
218 struct cvmx_pescx_ctl_status2_s cn56xx;
219 struct cvmx_pescx_ctl_status2_cn52xxp1 cn56xxp1;
220};
221
222union cvmx_pescx_dbg_info {
223 uint64_t u64;
224 struct cvmx_pescx_dbg_info_s {
225 uint64_t reserved_31_63:33;
226 uint64_t ecrc_e:1;
227 uint64_t rawwpp:1;
228 uint64_t racpp:1;
229 uint64_t ramtlp:1;
230 uint64_t rarwdns:1;
231 uint64_t caar:1;
232 uint64_t racca:1;
233 uint64_t racur:1;
234 uint64_t rauc:1;
235 uint64_t rqo:1;
236 uint64_t fcuv:1;
237 uint64_t rpe:1;
238 uint64_t fcpvwt:1;
239 uint64_t dpeoosd:1;
240 uint64_t rtwdle:1;
241 uint64_t rdwdle:1;
242 uint64_t mre:1;
243 uint64_t rte:1;
244 uint64_t acto:1;
245 uint64_t rvdm:1;
246 uint64_t rumep:1;
247 uint64_t rptamrc:1;
248 uint64_t rpmerc:1;
249 uint64_t rfemrc:1;
250 uint64_t rnfemrc:1;
251 uint64_t rcemrc:1;
252 uint64_t rpoison:1;
253 uint64_t recrce:1;
254 uint64_t rtlplle:1;
255 uint64_t rtlpmal:1;
256 uint64_t spoison:1;
257 } s;
258 struct cvmx_pescx_dbg_info_s cn52xx;
259 struct cvmx_pescx_dbg_info_s cn52xxp1;
260 struct cvmx_pescx_dbg_info_s cn56xx;
261 struct cvmx_pescx_dbg_info_s cn56xxp1;
262};
263
264union cvmx_pescx_dbg_info_en {
265 uint64_t u64;
266 struct cvmx_pescx_dbg_info_en_s {
267 uint64_t reserved_31_63:33;
268 uint64_t ecrc_e:1;
269 uint64_t rawwpp:1;
270 uint64_t racpp:1;
271 uint64_t ramtlp:1;
272 uint64_t rarwdns:1;
273 uint64_t caar:1;
274 uint64_t racca:1;
275 uint64_t racur:1;
276 uint64_t rauc:1;
277 uint64_t rqo:1;
278 uint64_t fcuv:1;
279 uint64_t rpe:1;
280 uint64_t fcpvwt:1;
281 uint64_t dpeoosd:1;
282 uint64_t rtwdle:1;
283 uint64_t rdwdle:1;
284 uint64_t mre:1;
285 uint64_t rte:1;
286 uint64_t acto:1;
287 uint64_t rvdm:1;
288 uint64_t rumep:1;
289 uint64_t rptamrc:1;
290 uint64_t rpmerc:1;
291 uint64_t rfemrc:1;
292 uint64_t rnfemrc:1;
293 uint64_t rcemrc:1;
294 uint64_t rpoison:1;
295 uint64_t recrce:1;
296 uint64_t rtlplle:1;
297 uint64_t rtlpmal:1;
298 uint64_t spoison:1;
299 } s;
300 struct cvmx_pescx_dbg_info_en_s cn52xx;
301 struct cvmx_pescx_dbg_info_en_s cn52xxp1;
302 struct cvmx_pescx_dbg_info_en_s cn56xx;
303 struct cvmx_pescx_dbg_info_en_s cn56xxp1;
304};
305
306union cvmx_pescx_diag_status {
307 uint64_t u64;
308 struct cvmx_pescx_diag_status_s {
309 uint64_t reserved_4_63:60;
310 uint64_t pm_dst:1;
311 uint64_t pm_stat:1;
312 uint64_t pm_en:1;
313 uint64_t aux_en:1;
314 } s;
315 struct cvmx_pescx_diag_status_s cn52xx;
316 struct cvmx_pescx_diag_status_s cn52xxp1;
317 struct cvmx_pescx_diag_status_s cn56xx;
318 struct cvmx_pescx_diag_status_s cn56xxp1;
319};
320
321union cvmx_pescx_p2n_bar0_start {
322 uint64_t u64;
323 struct cvmx_pescx_p2n_bar0_start_s {
324 uint64_t addr:50;
325 uint64_t reserved_0_13:14;
326 } s;
327 struct cvmx_pescx_p2n_bar0_start_s cn52xx;
328 struct cvmx_pescx_p2n_bar0_start_s cn52xxp1;
329 struct cvmx_pescx_p2n_bar0_start_s cn56xx;
330 struct cvmx_pescx_p2n_bar0_start_s cn56xxp1;
331};
332
333union cvmx_pescx_p2n_bar1_start {
334 uint64_t u64;
335 struct cvmx_pescx_p2n_bar1_start_s {
336 uint64_t addr:38;
337 uint64_t reserved_0_25:26;
338 } s;
339 struct cvmx_pescx_p2n_bar1_start_s cn52xx;
340 struct cvmx_pescx_p2n_bar1_start_s cn52xxp1;
341 struct cvmx_pescx_p2n_bar1_start_s cn56xx;
342 struct cvmx_pescx_p2n_bar1_start_s cn56xxp1;
343};
344
345union cvmx_pescx_p2n_bar2_start {
346 uint64_t u64;
347 struct cvmx_pescx_p2n_bar2_start_s {
348 uint64_t addr:25;
349 uint64_t reserved_0_38:39;
350 } s;
351 struct cvmx_pescx_p2n_bar2_start_s cn52xx;
352 struct cvmx_pescx_p2n_bar2_start_s cn52xxp1;
353 struct cvmx_pescx_p2n_bar2_start_s cn56xx;
354 struct cvmx_pescx_p2n_bar2_start_s cn56xxp1;
355};
356
357union cvmx_pescx_p2p_barx_end {
358 uint64_t u64;
359 struct cvmx_pescx_p2p_barx_end_s {
360 uint64_t addr:52;
361 uint64_t reserved_0_11:12;
362 } s;
363 struct cvmx_pescx_p2p_barx_end_s cn52xx;
364 struct cvmx_pescx_p2p_barx_end_s cn52xxp1;
365 struct cvmx_pescx_p2p_barx_end_s cn56xx;
366 struct cvmx_pescx_p2p_barx_end_s cn56xxp1;
367};
368
369union cvmx_pescx_p2p_barx_start {
370 uint64_t u64;
371 struct cvmx_pescx_p2p_barx_start_s {
372 uint64_t addr:52;
373 uint64_t reserved_0_11:12;
374 } s;
375 struct cvmx_pescx_p2p_barx_start_s cn52xx;
376 struct cvmx_pescx_p2p_barx_start_s cn52xxp1;
377 struct cvmx_pescx_p2p_barx_start_s cn56xx;
378 struct cvmx_pescx_p2p_barx_start_s cn56xxp1;
379};
380
381union cvmx_pescx_tlp_credits {
382 uint64_t u64;
383 struct cvmx_pescx_tlp_credits_s {
384 uint64_t reserved_0_63:64;
385 } s;
386 struct cvmx_pescx_tlp_credits_cn52xx {
387 uint64_t reserved_56_63:8;
388 uint64_t peai_ppf:8;
389 uint64_t pesc_cpl:8;
390 uint64_t pesc_np:8;
391 uint64_t pesc_p:8;
392 uint64_t npei_cpl:8;
393 uint64_t npei_np:8;
394 uint64_t npei_p:8;
395 } cn52xx;
396 struct cvmx_pescx_tlp_credits_cn52xxp1 {
397 uint64_t reserved_38_63:26;
398 uint64_t peai_ppf:8;
399 uint64_t pesc_cpl:5;
400 uint64_t pesc_np:5;
401 uint64_t pesc_p:5;
402 uint64_t npei_cpl:5;
403 uint64_t npei_np:5;
404 uint64_t npei_p:5;
405 } cn52xxp1;
406 struct cvmx_pescx_tlp_credits_cn52xx cn56xx;
407 struct cvmx_pescx_tlp_credits_cn52xxp1 cn56xxp1;
408};
409
410#endif
diff --git a/arch/mips/include/asm/octeon/cvmx-pexp-defs.h b/arch/mips/include/asm/octeon/cvmx-pexp-defs.h
new file mode 100644
index 000000000000..5ea5dc571b54
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-pexp-defs.h
@@ -0,0 +1,229 @@
1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (c) 2003-2008 Cavium Networks
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28/**
29 * cvmx-pexp-defs.h
30 *
31 * Configuration and status register (CSR) definitions for
32 * OCTEON PEXP.
33 *
34 */
35#ifndef __CVMX_PEXP_DEFS_H__
36#define __CVMX_PEXP_DEFS_H__
37
38#define CVMX_PEXP_NPEI_BAR1_INDEXX(offset) \
39 CVMX_ADD_IO_SEG(0x00011F0000008000ull + (((offset) & 31) * 16))
40#define CVMX_PEXP_NPEI_BIST_STATUS \
41 CVMX_ADD_IO_SEG(0x00011F0000008580ull)
42#define CVMX_PEXP_NPEI_BIST_STATUS2 \
43 CVMX_ADD_IO_SEG(0x00011F0000008680ull)
44#define CVMX_PEXP_NPEI_CTL_PORT0 \
45 CVMX_ADD_IO_SEG(0x00011F0000008250ull)
46#define CVMX_PEXP_NPEI_CTL_PORT1 \
47 CVMX_ADD_IO_SEG(0x00011F0000008260ull)
48#define CVMX_PEXP_NPEI_CTL_STATUS \
49 CVMX_ADD_IO_SEG(0x00011F0000008570ull)
50#define CVMX_PEXP_NPEI_CTL_STATUS2 \
51 CVMX_ADD_IO_SEG(0x00011F000000BC00ull)
52#define CVMX_PEXP_NPEI_DATA_OUT_CNT \
53 CVMX_ADD_IO_SEG(0x00011F00000085F0ull)
54#define CVMX_PEXP_NPEI_DBG_DATA \
55 CVMX_ADD_IO_SEG(0x00011F0000008510ull)
56#define CVMX_PEXP_NPEI_DBG_SELECT \
57 CVMX_ADD_IO_SEG(0x00011F0000008500ull)
58#define CVMX_PEXP_NPEI_DMA0_INT_LEVEL \
59 CVMX_ADD_IO_SEG(0x00011F00000085C0ull)
60#define CVMX_PEXP_NPEI_DMA1_INT_LEVEL \
61 CVMX_ADD_IO_SEG(0x00011F00000085D0ull)
62#define CVMX_PEXP_NPEI_DMAX_COUNTS(offset) \
63 CVMX_ADD_IO_SEG(0x00011F0000008450ull + (((offset) & 7) * 16))
64#define CVMX_PEXP_NPEI_DMAX_DBELL(offset) \
65 CVMX_ADD_IO_SEG(0x00011F00000083B0ull + (((offset) & 7) * 16))
66#define CVMX_PEXP_NPEI_DMAX_IBUFF_SADDR(offset) \
67 CVMX_ADD_IO_SEG(0x00011F0000008400ull + (((offset) & 7) * 16))
68#define CVMX_PEXP_NPEI_DMAX_NADDR(offset) \
69 CVMX_ADD_IO_SEG(0x00011F00000084A0ull + (((offset) & 7) * 16))
70#define CVMX_PEXP_NPEI_DMA_CNTS \
71 CVMX_ADD_IO_SEG(0x00011F00000085E0ull)
72#define CVMX_PEXP_NPEI_DMA_CONTROL \
73 CVMX_ADD_IO_SEG(0x00011F00000083A0ull)
74#define CVMX_PEXP_NPEI_INT_A_ENB \
75 CVMX_ADD_IO_SEG(0x00011F0000008560ull)
76#define CVMX_PEXP_NPEI_INT_A_ENB2 \
77 CVMX_ADD_IO_SEG(0x00011F000000BCE0ull)
78#define CVMX_PEXP_NPEI_INT_A_SUM \
79 CVMX_ADD_IO_SEG(0x00011F0000008550ull)
80#define CVMX_PEXP_NPEI_INT_ENB \
81 CVMX_ADD_IO_SEG(0x00011F0000008540ull)
82#define CVMX_PEXP_NPEI_INT_ENB2 \
83 CVMX_ADD_IO_SEG(0x00011F000000BCD0ull)
84#define CVMX_PEXP_NPEI_INT_INFO \
85 CVMX_ADD_IO_SEG(0x00011F0000008590ull)
86#define CVMX_PEXP_NPEI_INT_SUM \
87 CVMX_ADD_IO_SEG(0x00011F0000008530ull)
88#define CVMX_PEXP_NPEI_INT_SUM2 \
89 CVMX_ADD_IO_SEG(0x00011F000000BCC0ull)
90#define CVMX_PEXP_NPEI_LAST_WIN_RDATA0 \
91 CVMX_ADD_IO_SEG(0x00011F0000008600ull)
92#define CVMX_PEXP_NPEI_LAST_WIN_RDATA1 \
93 CVMX_ADD_IO_SEG(0x00011F0000008610ull)
94#define CVMX_PEXP_NPEI_MEM_ACCESS_CTL \
95 CVMX_ADD_IO_SEG(0x00011F00000084F0ull)
96#define CVMX_PEXP_NPEI_MEM_ACCESS_SUBIDX(offset) \
97 CVMX_ADD_IO_SEG(0x00011F0000008280ull + (((offset) & 31) * 16) - 16 * 12)
98#define CVMX_PEXP_NPEI_MSI_ENB0 \
99 CVMX_ADD_IO_SEG(0x00011F000000BC50ull)
100#define CVMX_PEXP_NPEI_MSI_ENB1 \
101 CVMX_ADD_IO_SEG(0x00011F000000BC60ull)
102#define CVMX_PEXP_NPEI_MSI_ENB2 \
103 CVMX_ADD_IO_SEG(0x00011F000000BC70ull)
104#define CVMX_PEXP_NPEI_MSI_ENB3 \
105 CVMX_ADD_IO_SEG(0x00011F000000BC80ull)
106#define CVMX_PEXP_NPEI_MSI_RCV0 \
107 CVMX_ADD_IO_SEG(0x00011F000000BC10ull)
108#define CVMX_PEXP_NPEI_MSI_RCV1 \
109 CVMX_ADD_IO_SEG(0x00011F000000BC20ull)
110#define CVMX_PEXP_NPEI_MSI_RCV2 \
111 CVMX_ADD_IO_SEG(0x00011F000000BC30ull)
112#define CVMX_PEXP_NPEI_MSI_RCV3 \
113 CVMX_ADD_IO_SEG(0x00011F000000BC40ull)
114#define CVMX_PEXP_NPEI_MSI_RD_MAP \
115 CVMX_ADD_IO_SEG(0x00011F000000BCA0ull)
116#define CVMX_PEXP_NPEI_MSI_W1C_ENB0 \
117 CVMX_ADD_IO_SEG(0x00011F000000BCF0ull)
118#define CVMX_PEXP_NPEI_MSI_W1C_ENB1 \
119 CVMX_ADD_IO_SEG(0x00011F000000BD00ull)
120#define CVMX_PEXP_NPEI_MSI_W1C_ENB2 \
121 CVMX_ADD_IO_SEG(0x00011F000000BD10ull)
122#define CVMX_PEXP_NPEI_MSI_W1C_ENB3 \
123 CVMX_ADD_IO_SEG(0x00011F000000BD20ull)
124#define CVMX_PEXP_NPEI_MSI_W1S_ENB0 \
125 CVMX_ADD_IO_SEG(0x00011F000000BD30ull)
126#define CVMX_PEXP_NPEI_MSI_W1S_ENB1 \
127 CVMX_ADD_IO_SEG(0x00011F000000BD40ull)
128#define CVMX_PEXP_NPEI_MSI_W1S_ENB2 \
129 CVMX_ADD_IO_SEG(0x00011F000000BD50ull)
130#define CVMX_PEXP_NPEI_MSI_W1S_ENB3 \
131 CVMX_ADD_IO_SEG(0x00011F000000BD60ull)
132#define CVMX_PEXP_NPEI_MSI_WR_MAP \
133 CVMX_ADD_IO_SEG(0x00011F000000BC90ull)
134#define CVMX_PEXP_NPEI_PCIE_CREDIT_CNT \
135 CVMX_ADD_IO_SEG(0x00011F000000BD70ull)
136#define CVMX_PEXP_NPEI_PCIE_MSI_RCV \
137 CVMX_ADD_IO_SEG(0x00011F000000BCB0ull)
138#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B1 \
139 CVMX_ADD_IO_SEG(0x00011F0000008650ull)
140#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B2 \
141 CVMX_ADD_IO_SEG(0x00011F0000008660ull)
142#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B3 \
143 CVMX_ADD_IO_SEG(0x00011F0000008670ull)
144#define CVMX_PEXP_NPEI_PKTX_CNTS(offset) \
145 CVMX_ADD_IO_SEG(0x00011F000000A400ull + (((offset) & 31) * 16))
146#define CVMX_PEXP_NPEI_PKTX_INSTR_BADDR(offset) \
147 CVMX_ADD_IO_SEG(0x00011F000000A800ull + (((offset) & 31) * 16))
148#define CVMX_PEXP_NPEI_PKTX_INSTR_BAOFF_DBELL(offset) \
149 CVMX_ADD_IO_SEG(0x00011F000000AC00ull + (((offset) & 31) * 16))
150#define CVMX_PEXP_NPEI_PKTX_INSTR_FIFO_RSIZE(offset) \
151 CVMX_ADD_IO_SEG(0x00011F000000B000ull + (((offset) & 31) * 16))
152#define CVMX_PEXP_NPEI_PKTX_INSTR_HEADER(offset) \
153 CVMX_ADD_IO_SEG(0x00011F000000B400ull + (((offset) & 31) * 16))
154#define CVMX_PEXP_NPEI_PKTX_IN_BP(offset) \
155 CVMX_ADD_IO_SEG(0x00011F000000B800ull + (((offset) & 31) * 16))
156#define CVMX_PEXP_NPEI_PKTX_SLIST_BADDR(offset) \
157 CVMX_ADD_IO_SEG(0x00011F0000009400ull + (((offset) & 31) * 16))
158#define CVMX_PEXP_NPEI_PKTX_SLIST_BAOFF_DBELL(offset) \
159 CVMX_ADD_IO_SEG(0x00011F0000009800ull + (((offset) & 31) * 16))
160#define CVMX_PEXP_NPEI_PKTX_SLIST_FIFO_RSIZE(offset) \
161 CVMX_ADD_IO_SEG(0x00011F0000009C00ull + (((offset) & 31) * 16))
162#define CVMX_PEXP_NPEI_PKT_CNT_INT \
163 CVMX_ADD_IO_SEG(0x00011F0000009110ull)
164#define CVMX_PEXP_NPEI_PKT_CNT_INT_ENB \
165 CVMX_ADD_IO_SEG(0x00011F0000009130ull)
166#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ES \
167 CVMX_ADD_IO_SEG(0x00011F00000090B0ull)
168#define CVMX_PEXP_NPEI_PKT_DATA_OUT_NS \
169 CVMX_ADD_IO_SEG(0x00011F00000090A0ull)
170#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ROR \
171 CVMX_ADD_IO_SEG(0x00011F0000009090ull)
172#define CVMX_PEXP_NPEI_PKT_DPADDR \
173 CVMX_ADD_IO_SEG(0x00011F0000009080ull)
174#define CVMX_PEXP_NPEI_PKT_INPUT_CONTROL \
175 CVMX_ADD_IO_SEG(0x00011F0000009150ull)
176#define CVMX_PEXP_NPEI_PKT_INSTR_ENB \
177 CVMX_ADD_IO_SEG(0x00011F0000009000ull)
178#define CVMX_PEXP_NPEI_PKT_INSTR_RD_SIZE \
179 CVMX_ADD_IO_SEG(0x00011F0000009190ull)
180#define CVMX_PEXP_NPEI_PKT_INSTR_SIZE \
181 CVMX_ADD_IO_SEG(0x00011F0000009020ull)
182#define CVMX_PEXP_NPEI_PKT_INT_LEVELS \
183 CVMX_ADD_IO_SEG(0x00011F0000009100ull)
184#define CVMX_PEXP_NPEI_PKT_IN_BP \
185 CVMX_ADD_IO_SEG(0x00011F00000086B0ull)
186#define CVMX_PEXP_NPEI_PKT_IN_DONEX_CNTS(offset) \
187 CVMX_ADD_IO_SEG(0x00011F000000A000ull + (((offset) & 31) * 16))
188#define CVMX_PEXP_NPEI_PKT_IN_INSTR_COUNTS \
189 CVMX_ADD_IO_SEG(0x00011F00000086A0ull)
190#define CVMX_PEXP_NPEI_PKT_IN_PCIE_PORT \
191 CVMX_ADD_IO_SEG(0x00011F00000091A0ull)
192#define CVMX_PEXP_NPEI_PKT_IPTR \
193 CVMX_ADD_IO_SEG(0x00011F0000009070ull)
194#define CVMX_PEXP_NPEI_PKT_OUTPUT_WMARK \
195 CVMX_ADD_IO_SEG(0x00011F0000009160ull)
196#define CVMX_PEXP_NPEI_PKT_OUT_BMODE \
197 CVMX_ADD_IO_SEG(0x00011F00000090D0ull)
198#define CVMX_PEXP_NPEI_PKT_OUT_ENB \
199 CVMX_ADD_IO_SEG(0x00011F0000009010ull)
200#define CVMX_PEXP_NPEI_PKT_PCIE_PORT \
201 CVMX_ADD_IO_SEG(0x00011F00000090E0ull)
202#define CVMX_PEXP_NPEI_PKT_PORT_IN_RST \
203 CVMX_ADD_IO_SEG(0x00011F0000008690ull)
204#define CVMX_PEXP_NPEI_PKT_SLIST_ES \
205 CVMX_ADD_IO_SEG(0x00011F0000009050ull)
206#define CVMX_PEXP_NPEI_PKT_SLIST_ID_SIZE \
207 CVMX_ADD_IO_SEG(0x00011F0000009180ull)
208#define CVMX_PEXP_NPEI_PKT_SLIST_NS \
209 CVMX_ADD_IO_SEG(0x00011F0000009040ull)
210#define CVMX_PEXP_NPEI_PKT_SLIST_ROR \
211 CVMX_ADD_IO_SEG(0x00011F0000009030ull)
212#define CVMX_PEXP_NPEI_PKT_TIME_INT \
213 CVMX_ADD_IO_SEG(0x00011F0000009120ull)
214#define CVMX_PEXP_NPEI_PKT_TIME_INT_ENB \
215 CVMX_ADD_IO_SEG(0x00011F0000009140ull)
216#define CVMX_PEXP_NPEI_RSL_INT_BLOCKS \
217 CVMX_ADD_IO_SEG(0x00011F0000008520ull)
218#define CVMX_PEXP_NPEI_SCRATCH_1 \
219 CVMX_ADD_IO_SEG(0x00011F0000008270ull)
220#define CVMX_PEXP_NPEI_STATE1 \
221 CVMX_ADD_IO_SEG(0x00011F0000008620ull)
222#define CVMX_PEXP_NPEI_STATE2 \
223 CVMX_ADD_IO_SEG(0x00011F0000008630ull)
224#define CVMX_PEXP_NPEI_STATE3 \
225 CVMX_ADD_IO_SEG(0x00011F0000008640ull)
226#define CVMX_PEXP_NPEI_WINDOW_CTL \
227 CVMX_ADD_IO_SEG(0x00011F0000008380ull)
228
229#endif
diff --git a/arch/mips/include/asm/octeon/cvmx.h b/arch/mips/include/asm/octeon/cvmx.h
index 03fddfa3e928..e31e3fe14f8a 100644
--- a/arch/mips/include/asm/octeon/cvmx.h
+++ b/arch/mips/include/asm/octeon/cvmx.h
@@ -376,6 +376,18 @@ static inline uint64_t cvmx_get_cycle(void)
376} 376}
377 377
378/** 378/**
379 * Wait for the specified number of cycle
380 *
381 */
382static inline void cvmx_wait(uint64_t cycles)
383{
384 uint64_t done = cvmx_get_cycle() + cycles;
385
386 while (cvmx_get_cycle() < done)
387 ; /* Spin */
388}
389
390/**
379 * Reads a chip global cycle counter. This counts CPU cycles since 391 * Reads a chip global cycle counter. This counts CPU cycles since
380 * chip reset. The counter is 64 bit. 392 * chip reset. The counter is 64 bit.
381 * This register does not exist on CN38XX pass 1 silicion 393 * This register does not exist on CN38XX pass 1 silicion
diff --git a/arch/mips/include/asm/octeon/octeon-feature.h b/arch/mips/include/asm/octeon/octeon-feature.h
index 04fac684069c..ef24a7b4ea57 100644
--- a/arch/mips/include/asm/octeon/octeon-feature.h
+++ b/arch/mips/include/asm/octeon/octeon-feature.h
@@ -57,6 +57,13 @@ enum octeon_feature {
57 OCTEON_FEATURE_RAID, 57 OCTEON_FEATURE_RAID,
58 /* Octeon has a builtin USB */ 58 /* Octeon has a builtin USB */
59 OCTEON_FEATURE_USB, 59 OCTEON_FEATURE_USB,
60 /* Octeon IPD can run without using work queue entries */
61 OCTEON_FEATURE_NO_WPTR,
62 /* Octeon has DFA state machines */
63 OCTEON_FEATURE_DFA,
64 /* Octeon MDIO block supports clause 45 transactions for 10
65 * Gig support */
66 OCTEON_FEATURE_MDIO_CLAUSE_45,
60}; 67};
61 68
62static inline int cvmx_fuse_read(int fuse); 69static inline int cvmx_fuse_read(int fuse);
@@ -112,6 +119,26 @@ static inline int octeon_has_feature(enum octeon_feature feature)
112 case OCTEON_FEATURE_USB: 119 case OCTEON_FEATURE_USB:
113 return !(OCTEON_IS_MODEL(OCTEON_CN38XX) 120 return !(OCTEON_IS_MODEL(OCTEON_CN38XX)
114 || OCTEON_IS_MODEL(OCTEON_CN58XX)); 121 || OCTEON_IS_MODEL(OCTEON_CN58XX));
122 case OCTEON_FEATURE_NO_WPTR:
123 return (OCTEON_IS_MODEL(OCTEON_CN56XX)
124 || OCTEON_IS_MODEL(OCTEON_CN52XX))
125 && !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X)
126 && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X);
127 case OCTEON_FEATURE_DFA:
128 if (!OCTEON_IS_MODEL(OCTEON_CN38XX)
129 && !OCTEON_IS_MODEL(OCTEON_CN31XX)
130 && !OCTEON_IS_MODEL(OCTEON_CN58XX))
131 return 0;
132 else if (OCTEON_IS_MODEL(OCTEON_CN3020))
133 return 0;
134 else if (OCTEON_IS_MODEL(OCTEON_CN38XX_PASS1))
135 return 1;
136 else
137 return !cvmx_fuse_read(120);
138 case OCTEON_FEATURE_MDIO_CLAUSE_45:
139 return !(OCTEON_IS_MODEL(OCTEON_CN3XXX)
140 || OCTEON_IS_MODEL(OCTEON_CN58XX)
141 || OCTEON_IS_MODEL(OCTEON_CN50XX));
115 } 142 }
116 return 0; 143 return 0;
117} 144}
diff --git a/arch/mips/include/asm/octeon/octeon.h b/arch/mips/include/asm/octeon/octeon.h
index edc676084cda..cac9b1a206fc 100644
--- a/arch/mips/include/asm/octeon/octeon.h
+++ b/arch/mips/include/asm/octeon/octeon.h
@@ -245,4 +245,6 @@ static inline uint32_t octeon_npi_read32(uint64_t address)
245 return cvmx_read64_uint32(address ^ 4); 245 return cvmx_read64_uint32(address ^ 4);
246} 246}
247 247
248extern struct cvmx_bootinfo *octeon_bootinfo;
249
248#endif /* __ASM_OCTEON_OCTEON_H */ 250#endif /* __ASM_OCTEON_OCTEON_H */
diff --git a/arch/mips/include/asm/octeon/pci-octeon.h b/arch/mips/include/asm/octeon/pci-octeon.h
new file mode 100644
index 000000000000..6ac5d3e3398e
--- /dev/null
+++ b/arch/mips/include/asm/octeon/pci-octeon.h
@@ -0,0 +1,45 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2005-2009 Cavium Networks
7 */
8
9#ifndef __PCI_OCTEON_H__
10#define __PCI_OCTEON_H__
11
12#include <linux/pci.h>
13
14/* Some PCI cards require delays when accessing config space. */
15#define PCI_CONFIG_SPACE_DELAY 10000
16
17/*
18 * pcibios_map_irq() is defined inside pci-octeon.c. All it does is
19 * call the Octeon specific version pointed to by this variable. This
20 * function needs to change for PCI or PCIe based hosts.
21 */
22extern int (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
23 u8 slot, u8 pin);
24
25/*
26 * The following defines are used when octeon_dma_bar_type =
27 * OCTEON_DMA_BAR_TYPE_BIG
28 */
29#define OCTEON_PCI_BAR1_HOLE_BITS 5
30#define OCTEON_PCI_BAR1_HOLE_SIZE (1ul<<(OCTEON_PCI_BAR1_HOLE_BITS+3))
31
32enum octeon_dma_bar_type {
33 OCTEON_DMA_BAR_TYPE_INVALID,
34 OCTEON_DMA_BAR_TYPE_SMALL,
35 OCTEON_DMA_BAR_TYPE_BIG,
36 OCTEON_DMA_BAR_TYPE_PCIE
37};
38
39/*
40 * This tells the DMA mapping system in dma-octeon.c how to map PCI
41 * DMA addresses.
42 */
43extern enum octeon_dma_bar_type octeon_dma_bar_type;
44
45#endif
diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
index 72c80d2034c2..4320239cf4ef 100644
--- a/arch/mips/include/asm/page.h
+++ b/arch/mips/include/asm/page.h
@@ -32,6 +32,13 @@
32#define PAGE_SIZE (1UL << PAGE_SHIFT) 32#define PAGE_SIZE (1UL << PAGE_SHIFT)
33#define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) 33#define PAGE_MASK (~((1 << PAGE_SHIFT) - 1))
34 34
35#ifdef CONFIG_HUGETLB_PAGE
36#define HPAGE_SHIFT (PAGE_SHIFT + PAGE_SHIFT - 3)
37#define HPAGE_SIZE ((1UL) << HPAGE_SHIFT)
38#define HPAGE_MASK (~(HPAGE_SIZE - 1))
39#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
40#endif /* CONFIG_HUGETLB_PAGE */
41
35#ifndef __ASSEMBLY__ 42#ifndef __ASSEMBLY__
36 43
37#include <linux/pfn.h> 44#include <linux/pfn.h>
@@ -160,7 +167,14 @@ typedef struct { unsigned long pgprot; } pgprot_t;
160 167
161#ifdef CONFIG_FLATMEM 168#ifdef CONFIG_FLATMEM
162 169
163#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < max_mapnr) 170#define pfn_valid(pfn) \
171({ \
172 unsigned long __pfn = (pfn); \
173 /* avoid <linux/bootmem.h> include hell */ \
174 extern unsigned long min_low_pfn; \
175 \
176 __pfn >= min_low_pfn && __pfn < max_mapnr; \
177})
164 178
165#elif defined(CONFIG_SPARSEMEM) 179#elif defined(CONFIG_SPARSEMEM)
166 180
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h
index 053e4634acee..a68d111e55e9 100644
--- a/arch/mips/include/asm/pci.h
+++ b/arch/mips/include/asm/pci.h
@@ -142,19 +142,6 @@ extern void pcibios_resource_to_bus(struct pci_dev *dev,
142extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, 142extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
143 struct pci_bus_region *region); 143 struct pci_bus_region *region);
144 144
145static inline struct resource *
146pcibios_select_root(struct pci_dev *pdev, struct resource *res)
147{
148 struct resource *root = NULL;
149
150 if (res->flags & IORESOURCE_IO)
151 root = &ioport_resource;
152 if (res->flags & IORESOURCE_MEM)
153 root = &iomem_resource;
154
155 return root;
156}
157
158#define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index 145#define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index
159 146
160static inline int pci_proc_domain(struct pci_bus *bus) 147static inline int pci_proc_domain(struct pci_bus *bus)
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index 1275831dda29..3738f4b48cbd 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -98,23 +98,12 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
98 __free_pages(pte, PTE_ORDER); 98 __free_pages(pte, PTE_ORDER);
99} 99}
100 100
101#define __pte_free_tlb(tlb,pte) \ 101#define __pte_free_tlb(tlb,pte,address) \
102do { \ 102do { \
103 pgtable_page_dtor(pte); \ 103 pgtable_page_dtor(pte); \
104 tlb_remove_page((tlb), pte); \ 104 tlb_remove_page((tlb), pte); \
105} while (0) 105} while (0)
106 106
107#ifdef CONFIG_32BIT
108
109/*
110 * allocating and freeing a pmd is trivial: the 1-entry pmd is
111 * inside the pgd, so has no extra memory associated with it.
112 */
113#define pmd_free(mm, x) do { } while (0)
114#define __pmd_free_tlb(tlb, x) do { } while (0)
115
116#endif
117
118#ifdef CONFIG_64BIT 107#ifdef CONFIG_64BIT
119 108
120static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) 109static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
@@ -132,7 +121,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
132 free_pages((unsigned long)pmd, PMD_ORDER); 121 free_pages((unsigned long)pmd, PMD_ORDER);
133} 122}
134 123
135#define __pmd_free_tlb(tlb, x) pmd_free((tlb)->mm, x) 124#define __pmd_free_tlb(tlb, x, addr) pmd_free((tlb)->mm, x)
136 125
137#endif 126#endif
138 127
diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index 51b34a48c84a..1073e6df8621 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -72,6 +72,7 @@
72#else 72#else
73 73
74#define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */ 74#define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */
75#define _PAGE_HUGE (1<<5) /* huge tlb page */
75#define _PAGE_GLOBAL (1<<6) 76#define _PAGE_GLOBAL (1<<6)
76#define _PAGE_VALID (1<<7) 77#define _PAGE_VALID (1<<7)
77#define _PAGE_SILENT_READ (1<<7) /* synonym */ 78#define _PAGE_SILENT_READ (1<<7) /* synonym */
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index 6a0edf72ffbc..1a9f9b257551 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -292,6 +292,16 @@ static inline pte_t pte_mkyoung(pte_t pte)
292 pte_val(pte) |= _PAGE_SILENT_READ; 292 pte_val(pte) |= _PAGE_SILENT_READ;
293 return pte; 293 return pte;
294} 294}
295
296#ifdef _PAGE_HUGE
297static inline int pte_huge(pte_t pte) { return pte_val(pte) & _PAGE_HUGE; }
298
299static inline pte_t pte_mkhuge(pte_t pte)
300{
301 pte_val(pte) |= _PAGE_HUGE;
302 return pte;
303}
304#endif /* _PAGE_HUGE */
295#endif 305#endif
296static inline int pte_special(pte_t pte) { return 0; } 306static inline int pte_special(pte_t pte) { return 0; }
297static inline pte_t pte_mkspecial(pte_t pte) { return pte; } 307static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
diff --git a/arch/mips/include/asm/pmc-sierra/msp71xx/war.h b/arch/mips/include/asm/pmc-sierra/msp71xx/war.h
index 0bf48fc1892b..9e2ee429c529 100644
--- a/arch/mips/include/asm/pmc-sierra/msp71xx/war.h
+++ b/arch/mips/include/asm/pmc-sierra/msp71xx/war.h
@@ -23,6 +23,8 @@
23#if defined(CONFIG_PMC_MSP7120_EVAL) || defined(CONFIG_PMC_MSP7120_GW) || \ 23#if defined(CONFIG_PMC_MSP7120_EVAL) || defined(CONFIG_PMC_MSP7120_GW) || \
24 defined(CONFIG_PMC_MSP7120_FPGA) 24 defined(CONFIG_PMC_MSP7120_FPGA)
25#define MIPS34K_MISSED_ITLB_WAR 1 25#define MIPS34K_MISSED_ITLB_WAR 1
26#else
27#define MIPS34K_MISSED_ITLB_WAR 0
26#endif 28#endif
27 29
28#endif /* __ASM_MIPS_PMC_SIERRA_WAR_H */ 30#endif /* __ASM_MIPS_PMC_SIERRA_WAR_H */
diff --git a/arch/mips/include/asm/processor.h b/arch/mips/include/asm/processor.h
index 0f926aa0cb47..087a8884ef06 100644
--- a/arch/mips/include/asm/processor.h
+++ b/arch/mips/include/asm/processor.h
@@ -311,8 +311,9 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long
311 311
312unsigned long get_wchan(struct task_struct *p); 312unsigned long get_wchan(struct task_struct *p);
313 313
314#define __KSTK_TOS(tsk) ((unsigned long)task_stack_page(tsk) + THREAD_SIZE - 32) 314#define __KSTK_TOS(tsk) ((unsigned long)task_stack_page(tsk) + \
315#define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk) - 1) 315 THREAD_SIZE - 32 - sizeof(struct pt_regs))
316#define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk))
316#define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc) 317#define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc)
317#define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29]) 318#define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29])
318#define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) 319#define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status)
diff --git a/arch/mips/include/asm/r4kcache.h b/arch/mips/include/asm/r4kcache.h
index 4c140db36786..387bf59f1e37 100644
--- a/arch/mips/include/asm/r4kcache.h
+++ b/arch/mips/include/asm/r4kcache.h
@@ -399,6 +399,7 @@ __BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16)
399__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32) 399__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32)
400__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32) 400__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32)
401__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32) 401__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32)
402__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 64)
402__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64) 403__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64)
403__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64) 404__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64)
404__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128) 405__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128)
diff --git a/arch/mips/include/asm/reg.h b/arch/mips/include/asm/reg.h
index 634b55d7e7f6..910e71a12466 100644
--- a/arch/mips/include/asm/reg.h
+++ b/arch/mips/include/asm/reg.h
@@ -69,7 +69,7 @@
69 69
70#endif 70#endif
71 71
72#ifdef CONFIG_64BIT 72#if defined(CONFIG_64BIT) && !defined(WANT_COMPAT_REG_H)
73 73
74#define EF_R0 0 74#define EF_R0 0
75#define EF_R1 1 75#define EF_R1 1
diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h
index 64ffc0290b84..fd545547b8aa 100644
--- a/arch/mips/include/asm/smp-ops.h
+++ b/arch/mips/include/asm/smp-ops.h
@@ -26,6 +26,10 @@ struct plat_smp_ops {
26 void (*boot_secondary)(int cpu, struct task_struct *idle); 26 void (*boot_secondary)(int cpu, struct task_struct *idle);
27 void (*smp_setup)(void); 27 void (*smp_setup)(void);
28 void (*prepare_cpus)(unsigned int max_cpus); 28 void (*prepare_cpus)(unsigned int max_cpus);
29#ifdef CONFIG_HOTPLUG_CPU
30 int (*cpu_disable)(void);
31 void (*cpu_die)(unsigned int cpu);
32#endif
29}; 33};
30 34
31extern void register_smp_ops(struct plat_smp_ops *ops); 35extern void register_smp_ops(struct plat_smp_ops *ops);
diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h
index 40e5ef1d4d26..aaa2d4ab26dc 100644
--- a/arch/mips/include/asm/smp.h
+++ b/arch/mips/include/asm/smp.h
@@ -13,6 +13,7 @@
13 13
14#include <linux/bitops.h> 14#include <linux/bitops.h>
15#include <linux/linkage.h> 15#include <linux/linkage.h>
16#include <linux/smp.h>
16#include <linux/threads.h> 17#include <linux/threads.h>
17#include <linux/cpumask.h> 18#include <linux/cpumask.h>
18 19
@@ -40,6 +41,7 @@ extern int __cpu_logical_map[NR_CPUS];
40/* Octeon - Tell another core to flush its icache */ 41/* Octeon - Tell another core to flush its icache */
41#define SMP_ICACHE_FLUSH 0x4 42#define SMP_ICACHE_FLUSH 0x4
42 43
44extern volatile cpumask_t cpu_callin_map;
43 45
44extern void asmlinkage smp_bootstrap(void); 46extern void asmlinkage smp_bootstrap(void);
45 47
@@ -55,6 +57,24 @@ static inline void smp_send_reschedule(int cpu)
55 mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF); 57 mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF);
56} 58}
57 59
60#ifdef CONFIG_HOTPLUG_CPU
61static inline int __cpu_disable(void)
62{
63 extern struct plat_smp_ops *mp_ops; /* private */
64
65 return mp_ops->cpu_disable();
66}
67
68static inline void __cpu_die(unsigned int cpu)
69{
70 extern struct plat_smp_ops *mp_ops; /* private */
71
72 mp_ops->cpu_die(cpu);
73}
74
75extern void play_dead(void);
76#endif
77
58extern asmlinkage void smp_call_function_interrupt(void); 78extern asmlinkage void smp_call_function_interrupt(void);
59 79
60extern void arch_send_call_function_single_ipi(int cpu); 80extern void arch_send_call_function_single_ipi(int cpu);
diff --git a/arch/mips/include/asm/sn/addrs.h b/arch/mips/include/asm/sn/addrs.h
index 3a56d90abfa6..2367b56dcdef 100644
--- a/arch/mips/include/asm/sn/addrs.h
+++ b/arch/mips/include/asm/sn/addrs.h
@@ -11,6 +11,7 @@
11 11
12 12
13#ifndef __ASSEMBLY__ 13#ifndef __ASSEMBLY__
14#include <linux/smp.h>
14#include <linux/types.h> 15#include <linux/types.h>
15#endif /* !__ASSEMBLY__ */ 16#endif /* !__ASSEMBLY__ */
16 17
diff --git a/arch/mips/include/asm/suspend.h b/arch/mips/include/asm/suspend.h
new file mode 100644
index 000000000000..294cdb66c5fc
--- /dev/null
+++ b/arch/mips/include/asm/suspend.h
@@ -0,0 +1,9 @@
1#ifndef __ASM_SUSPEND_H
2#define __ASM_SUSPEND_H
3
4static inline int arch_prepare_suspend(void) { return 0; }
5
6/* References to section boundaries */
7extern const void __nosave_begin, __nosave_end;
8
9#endif /* __ASM_SUSPEND_H */
diff --git a/arch/mips/include/asm/swab.h b/arch/mips/include/asm/swab.h
index 99993c0d6c12..97c2f81b4b43 100644
--- a/arch/mips/include/asm/swab.h
+++ b/arch/mips/include/asm/swab.h
@@ -38,7 +38,11 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
38} 38}
39#define __arch_swab32 __arch_swab32 39#define __arch_swab32 __arch_swab32
40 40
41#ifdef CONFIG_CPU_MIPS64_R2 41/*
42 * Having already checked for CONFIG_CPU_MIPSR2, enable the
43 * optimized version for 64-bit kernel on r2 CPUs.
44 */
45#ifdef CONFIG_64BIT
42static inline __attribute_const__ __u64 __arch_swab64(__u64 x) 46static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
43{ 47{
44 __asm__( 48 __asm__(
@@ -50,6 +54,6 @@ static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
50 return x; 54 return x;
51} 55}
52#define __arch_swab64 __arch_swab64 56#define __arch_swab64 __arch_swab64
53#endif /* CONFIG_CPU_MIPS64_R2 */ 57#endif /* CONFIG_64BIT */
54#endif /* CONFIG_CPU_MIPSR2 */ 58#endif /* CONFIG_CPU_MIPSR2 */
55#endif /* _ASM_SWAB_H */ 59#endif /* _ASM_SWAB_H */
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h
index 143a48136a4b..f9df720d2e40 100644
--- a/arch/mips/include/asm/thread_info.h
+++ b/arch/mips/include/asm/thread_info.h
@@ -39,8 +39,6 @@ struct thread_info {
39 39
40/* 40/*
41 * macros/functions for gaining access to the thread information structure 41 * macros/functions for gaining access to the thread information structure
42 *
43 * preempt_count needs to be 1 initially, until the scheduler is functional.
44 */ 42 */
45#define INIT_THREAD_INFO(tsk) \ 43#define INIT_THREAD_INFO(tsk) \
46{ \ 44{ \
@@ -48,7 +46,7 @@ struct thread_info {
48 .exec_domain = &default_exec_domain, \ 46 .exec_domain = &default_exec_domain, \
49 .flags = _TIF_FIXADE, \ 47 .flags = _TIF_FIXADE, \
50 .cpu = 0, \ 48 .cpu = 0, \
51 .preempt_count = 1, \ 49 .preempt_count = INIT_PREEMPT_COUNT, \
52 .addr_limit = KERNEL_DS, \ 50 .addr_limit = KERNEL_DS, \
53 .restart_block = { \ 51 .restart_block = { \
54 .fn = do_no_restart_syscall, \ 52 .fn = do_no_restart_syscall, \
diff --git a/arch/mips/include/asm/txx9/dmac.h b/arch/mips/include/asm/txx9/dmac.h
new file mode 100644
index 000000000000..5e9151fccbb4
--- /dev/null
+++ b/arch/mips/include/asm/txx9/dmac.h
@@ -0,0 +1,51 @@
1/*
2 * TXx9 SoC DMA Controller
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#ifndef __ASM_TXX9_DMAC_H
10#define __ASM_TXX9_DMAC_H
11
12#include <linux/dmaengine.h>
13
14#define TXX9_DMA_MAX_NR_CHANNELS 4
15
16/**
17 * struct txx9dmac_platform_data - Controller configuration parameters
18 * @memcpy_chan: Channel used for DMA_MEMCPY
19 * @have_64bit_regs: DMAC have 64 bit registers
20 */
21struct txx9dmac_platform_data {
22 int memcpy_chan;
23 bool have_64bit_regs;
24};
25
26/**
27 * struct txx9dmac_chan_platform_data - Channel configuration parameters
28 * @dmac_dev: A platform device for DMAC
29 */
30struct txx9dmac_chan_platform_data {
31 struct platform_device *dmac_dev;
32};
33
34/**
35 * struct txx9dmac_slave - Controller-specific information about a slave
36 * @tx_reg: physical address of data register used for
37 * memory-to-peripheral transfers
38 * @rx_reg: physical address of data register used for
39 * peripheral-to-memory transfers
40 * @reg_width: peripheral register width
41 */
42struct txx9dmac_slave {
43 u64 tx_reg;
44 u64 rx_reg;
45 unsigned int reg_width;
46};
47
48void txx9_dmac_init(int id, unsigned long baseaddr, int irq,
49 const struct txx9dmac_platform_data *pdata);
50
51#endif /* __ASM_TXX9_DMAC_H */
diff --git a/arch/mips/include/asm/txx9/generic.h b/arch/mips/include/asm/txx9/generic.h
index 9cde0090cbf6..827dc22be2ea 100644
--- a/arch/mips/include/asm/txx9/generic.h
+++ b/arch/mips/include/asm/txx9/generic.h
@@ -91,4 +91,10 @@ void txx9_7segled_init(unsigned int num,
91 void (*putc)(unsigned int pos, unsigned char val)); 91 void (*putc)(unsigned int pos, unsigned char val));
92int txx9_7segled_putc(unsigned int pos, char c); 92int txx9_7segled_putc(unsigned int pos, char c);
93 93
94void __init txx9_aclc_init(unsigned long baseaddr, int irq,
95 unsigned int dmac_id,
96 unsigned int dma_chan_out,
97 unsigned int dma_chan_in);
98void __init txx9_sramc_init(struct resource *r);
99
94#endif /* __ASM_TXX9_GENERIC_H */ 100#endif /* __ASM_TXX9_GENERIC_H */
diff --git a/arch/mips/include/asm/txx9/tx4927.h b/arch/mips/include/asm/txx9/tx4927.h
index 7d813f1cb98d..18c98c52afdb 100644
--- a/arch/mips/include/asm/txx9/tx4927.h
+++ b/arch/mips/include/asm/txx9/tx4927.h
@@ -41,6 +41,7 @@
41 41
42#define TX4927_SDRAMC_REG (TX4927_REG_BASE + 0x8000) 42#define TX4927_SDRAMC_REG (TX4927_REG_BASE + 0x8000)
43#define TX4927_EBUSC_REG (TX4927_REG_BASE + 0x9000) 43#define TX4927_EBUSC_REG (TX4927_REG_BASE + 0x9000)
44#define TX4927_DMA_REG (TX4927_REG_BASE + 0xb000)
44#define TX4927_PCIC_REG (TX4927_REG_BASE + 0xd000) 45#define TX4927_PCIC_REG (TX4927_REG_BASE + 0xd000)
45#define TX4927_CCFG_REG (TX4927_REG_BASE + 0xe000) 46#define TX4927_CCFG_REG (TX4927_REG_BASE + 0xe000)
46#define TX4927_IRC_REG (TX4927_REG_BASE + 0xf600) 47#define TX4927_IRC_REG (TX4927_REG_BASE + 0xf600)
@@ -49,6 +50,7 @@
49#define TX4927_NR_SIO 2 50#define TX4927_NR_SIO 2
50#define TX4927_SIO_REG(ch) (TX4927_REG_BASE + 0xf300 + (ch) * 0x100) 51#define TX4927_SIO_REG(ch) (TX4927_REG_BASE + 0xf300 + (ch) * 0x100)
51#define TX4927_PIO_REG (TX4927_REG_BASE + 0xf500) 52#define TX4927_PIO_REG (TX4927_REG_BASE + 0xf500)
53#define TX4927_ACLC_REG (TX4927_REG_BASE + 0xf700)
52 54
53#define TX4927_IR_ECCERR 0 55#define TX4927_IR_ECCERR 0
54#define TX4927_IR_WTOERR 1 56#define TX4927_IR_WTOERR 1
@@ -265,5 +267,7 @@ int tx4927_pciclk66_setup(void);
265void tx4927_setup_pcierr_irq(void); 267void tx4927_setup_pcierr_irq(void);
266void tx4927_irq_init(void); 268void tx4927_irq_init(void);
267void tx4927_mtd_init(int ch); 269void tx4927_mtd_init(int ch);
270void tx4927_dmac_init(int memcpy_chan);
271void tx4927_aclc_init(unsigned int dma_chan_out, unsigned int dma_chan_in);
268 272
269#endif /* __ASM_TXX9_TX4927_H */ 273#endif /* __ASM_TXX9_TX4927_H */
diff --git a/arch/mips/include/asm/txx9/tx4938.h b/arch/mips/include/asm/txx9/tx4938.h
index cd8bc2021755..8a178f186f7d 100644
--- a/arch/mips/include/asm/txx9/tx4938.h
+++ b/arch/mips/include/asm/txx9/tx4938.h
@@ -305,5 +305,8 @@ struct tx4938ide_platform_info {
305}; 305};
306 306
307void tx4938_ata_init(unsigned int irq, unsigned int shift, int tune); 307void tx4938_ata_init(unsigned int irq, unsigned int shift, int tune);
308void tx4938_dmac_init(int memcpy_chan0, int memcpy_chan1);
309void tx4938_aclc_init(void);
310void tx4938_sramc_init(void);
308 311
309#endif 312#endif
diff --git a/arch/mips/include/asm/txx9/tx4939.h b/arch/mips/include/asm/txx9/tx4939.h
index f02c50b3abfb..d4f342cd5939 100644
--- a/arch/mips/include/asm/txx9/tx4939.h
+++ b/arch/mips/include/asm/txx9/tx4939.h
@@ -45,6 +45,8 @@
45#define TX4939_RTC_REG (TX4939_REG_BASE + 0xfb00) 45#define TX4939_RTC_REG (TX4939_REG_BASE + 0xfb00)
46#define TX4939_CIR_REG (TX4939_REG_BASE + 0xfc00) 46#define TX4939_CIR_REG (TX4939_REG_BASE + 0xfc00)
47 47
48#define TX4939_RNG_REG (TX4939_CRYPTO_REG + 0xb0)
49
48struct tx4939_le_reg { 50struct tx4939_le_reg {
49 __u32 r; 51 __u32 r;
50 __u32 unused; 52 __u32 unused;
@@ -544,5 +546,9 @@ void tx4939_ata_init(void);
544void tx4939_rtc_init(void); 546void tx4939_rtc_init(void);
545void tx4939_ndfmc_init(unsigned int hold, unsigned int spw, 547void tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
546 unsigned char ch_mask, unsigned char wide_mask); 548 unsigned char ch_mask, unsigned char wide_mask);
549void tx4939_dmac_init(int memcpy_chan0, int memcpy_chan1);
550void tx4939_aclc_init(void);
551void tx4939_sramc_init(void);
552void tx4939_rng_init(void);
547 553
548#endif /* __ASM_TXX9_TX4939_H */ 554#endif /* __ASM_TXX9_TX4939_H */
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h
index 40005010827c..e753a777949b 100644
--- a/arch/mips/include/asm/unistd.h
+++ b/arch/mips/include/asm/unistd.h
@@ -352,16 +352,19 @@
352#define __NR_inotify_init1 (__NR_Linux + 329) 352#define __NR_inotify_init1 (__NR_Linux + 329)
353#define __NR_preadv (__NR_Linux + 330) 353#define __NR_preadv (__NR_Linux + 330)
354#define __NR_pwritev (__NR_Linux + 331) 354#define __NR_pwritev (__NR_Linux + 331)
355#define __NR_rt_tgsigqueueinfo (__NR_Linux + 332)
356#define __NR_perf_counter_open (__NR_Linux + 333)
357#define __NR_accept4 (__NR_Linux + 334)
355 358
356/* 359/*
357 * Offset of the last Linux o32 flavoured syscall 360 * Offset of the last Linux o32 flavoured syscall
358 */ 361 */
359#define __NR_Linux_syscalls 331 362#define __NR_Linux_syscalls 334
360 363
361#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ 364#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
362 365
363#define __NR_O32_Linux 4000 366#define __NR_O32_Linux 4000
364#define __NR_O32_Linux_syscalls 331 367#define __NR_O32_Linux_syscalls 334
365 368
366#if _MIPS_SIM == _MIPS_SIM_ABI64 369#if _MIPS_SIM == _MIPS_SIM_ABI64
367 370
@@ -660,16 +663,19 @@
660#define __NR_inotify_init1 (__NR_Linux + 288) 663#define __NR_inotify_init1 (__NR_Linux + 288)
661#define __NR_preadv (__NR_Linux + 289) 664#define __NR_preadv (__NR_Linux + 289)
662#define __NR_pwritev (__NR_Linux + 290) 665#define __NR_pwritev (__NR_Linux + 290)
666#define __NR_rt_tgsigqueueinfo (__NR_Linux + 291)
667#define __NR_perf_counter_open (__NR_Linux + 292)
668#define __NR_accept4 (__NR_Linux + 293)
663 669
664/* 670/*
665 * Offset of the last Linux 64-bit flavoured syscall 671 * Offset of the last Linux 64-bit flavoured syscall
666 */ 672 */
667#define __NR_Linux_syscalls 290 673#define __NR_Linux_syscalls 293
668 674
669#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ 675#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
670 676
671#define __NR_64_Linux 5000 677#define __NR_64_Linux 5000
672#define __NR_64_Linux_syscalls 290 678#define __NR_64_Linux_syscalls 293
673 679
674#if _MIPS_SIM == _MIPS_SIM_NABI32 680#if _MIPS_SIM == _MIPS_SIM_NABI32
675 681
@@ -972,16 +978,19 @@
972#define __NR_inotify_init1 (__NR_Linux + 292) 978#define __NR_inotify_init1 (__NR_Linux + 292)
973#define __NR_preadv (__NR_Linux + 293) 979#define __NR_preadv (__NR_Linux + 293)
974#define __NR_pwritev (__NR_Linux + 294) 980#define __NR_pwritev (__NR_Linux + 294)
981#define __NR_rt_tgsigqueueinfo (__NR_Linux + 295)
982#define __NR_perf_counter_open (__NR_Linux + 296)
983#define __NR_accept4 (__NR_Linux + 297)
975 984
976/* 985/*
977 * Offset of the last N32 flavoured syscall 986 * Offset of the last N32 flavoured syscall
978 */ 987 */
979#define __NR_Linux_syscalls 294 988#define __NR_Linux_syscalls 297
980 989
981#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ 990#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
982 991
983#define __NR_N32_Linux 6000 992#define __NR_N32_Linux 6000
984#define __NR_N32_Linux_syscalls 294 993#define __NR_N32_Linux_syscalls 297
985 994
986#ifdef __KERNEL__ 995#ifdef __KERNEL__
987 996
diff --git a/arch/mips/include/asm/vr41xx/capcella.h b/arch/mips/include/asm/vr41xx/capcella.h
index e0ee05a3dfcc..fcc6569414fa 100644
--- a/arch/mips/include/asm/vr41xx/capcella.h
+++ b/arch/mips/include/asm/vr41xx/capcella.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * capcella.h, Include file for ZAO Networks Capcella. 2 * capcella.h, Include file for ZAO Networks Capcella.
3 * 3 *
4 * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/vr41xx/giu.h b/arch/mips/include/asm/vr41xx/giu.h
index 0bcdd3a5c256..6a90bc1d916b 100644
--- a/arch/mips/include/asm/vr41xx/giu.h
+++ b/arch/mips/include/asm/vr41xx/giu.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Include file for NEC VR4100 series General-purpose I/O Unit. 2 * Include file for NEC VR4100 series General-purpose I/O Unit.
3 * 3 *
4 * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2005-2009 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -41,7 +41,8 @@ typedef enum {
41 IRQ_SIGNAL_HOLD, 41 IRQ_SIGNAL_HOLD,
42} irq_signal_t; 42} irq_signal_t;
43 43
44extern void vr41xx_set_irq_trigger(unsigned int pin, irq_trigger_t trigger, irq_signal_t signal); 44extern void vr41xx_set_irq_trigger(unsigned int pin, irq_trigger_t trigger,
45 irq_signal_t signal);
45 46
46typedef enum { 47typedef enum {
47 IRQ_LEVEL_LOW, 48 IRQ_LEVEL_LOW,
@@ -51,23 +52,6 @@ typedef enum {
51extern void vr41xx_set_irq_level(unsigned int pin, irq_level_t level); 52extern void vr41xx_set_irq_level(unsigned int pin, irq_level_t level);
52 53
53typedef enum { 54typedef enum {
54 GPIO_DATA_LOW,
55 GPIO_DATA_HIGH,
56 GPIO_DATA_INVAL,
57} gpio_data_t;
58
59extern gpio_data_t vr41xx_gpio_get_pin(unsigned int pin);
60extern int vr41xx_gpio_set_pin(unsigned int pin, gpio_data_t data);
61
62typedef enum {
63 GPIO_INPUT,
64 GPIO_OUTPUT,
65 GPIO_OUTPUT_DISABLE,
66} gpio_direction_t;
67
68extern int vr41xx_gpio_set_direction(unsigned int pin, gpio_direction_t dir);
69
70typedef enum {
71 GPIO_PULL_DOWN, 55 GPIO_PULL_DOWN,
72 GPIO_PULL_UP, 56 GPIO_PULL_UP,
73 GPIO_PULL_DISABLE, 57 GPIO_PULL_DISABLE,
diff --git a/arch/mips/include/asm/vr41xx/irq.h b/arch/mips/include/asm/vr41xx/irq.h
index d315dfbc08f2..b07f7321751d 100644
--- a/arch/mips/include/asm/vr41xx/irq.h
+++ b/arch/mips/include/asm/vr41xx/irq.h
@@ -7,7 +7,7 @@
7 * Copyright (C) 2001, 2002 Paul Mundt 7 * Copyright (C) 2001, 2002 Paul Mundt
8 * Copyright (C) 2002 MontaVista Software, Inc. 8 * Copyright (C) 2002 MontaVista Software, Inc.
9 * Copyright (C) 2002 TimeSys Corp. 9 * Copyright (C) 2002 TimeSys Corp.
10 * Copyright (C) 2003-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 10 * Copyright (C) 2003-2006 Yoichi Yuasa <yuasa@linux-mips.org>
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify it 12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the 13 * under the terms of the GNU General Public License as published by the
diff --git a/arch/mips/include/asm/vr41xx/mpc30x.h b/arch/mips/include/asm/vr41xx/mpc30x.h
index 1d67df843dc3..130d09d8c8cb 100644
--- a/arch/mips/include/asm/vr41xx/mpc30x.h
+++ b/arch/mips/include/asm/vr41xx/mpc30x.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * mpc30x.h, Include file for Victor MP-C303/304. 2 * mpc30x.h, Include file for Victor MP-C303/304.
3 * 3 *
4 * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/vr41xx/pci.h b/arch/mips/include/asm/vr41xx/pci.h
index 6fc01ce19777..c231a3d6cfd8 100644
--- a/arch/mips/include/asm/vr41xx/pci.h
+++ b/arch/mips/include/asm/vr41xx/pci.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Include file for NEC VR4100 series PCI Control Unit. 2 * Include file for NEC VR4100 series PCI Control Unit.
3 * 3 *
4 * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/vr41xx/siu.h b/arch/mips/include/asm/vr41xx/siu.h
index da9f6e373409..ca806bc4ddc8 100644
--- a/arch/mips/include/asm/vr41xx/siu.h
+++ b/arch/mips/include/asm/vr41xx/siu.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Include file for NEC VR4100 series Serial Interface Unit. 2 * Include file for NEC VR4100 series Serial Interface Unit.
3 * 3 *
4 * Copyright (C) 2005-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2005-2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/vr41xx/tb0219.h b/arch/mips/include/asm/vr41xx/tb0219.h
index dc981b4be0a4..c78e8243b447 100644
--- a/arch/mips/include/asm/vr41xx/tb0219.h
+++ b/arch/mips/include/asm/vr41xx/tb0219.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * tb0219.h, Include file for TANBAC TB0219. 2 * tb0219.h, Include file for TANBAC TB0219.
3 * 3 *
4 * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * Modified for TANBAC TB0219: 6 * Modified for TANBAC TB0219:
7 * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> 7 * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp>
diff --git a/arch/mips/include/asm/vr41xx/tb0226.h b/arch/mips/include/asm/vr41xx/tb0226.h
index de527dcfa5f3..36f5f798e416 100644
--- a/arch/mips/include/asm/vr41xx/tb0226.h
+++ b/arch/mips/include/asm/vr41xx/tb0226.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * tb0226.h, Include file for TANBAC TB0226. 2 * tb0226.h, Include file for TANBAC TB0226.
3 * 3 *
4 * Copyright (C) 2002-2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/include/asm/vr41xx/vr41xx.h b/arch/mips/include/asm/vr41xx/vr41xx.h
index 22be64971cc6..7b96a43b72ba 100644
--- a/arch/mips/include/asm/vr41xx/vr41xx.h
+++ b/arch/mips/include/asm/vr41xx/vr41xx.h
@@ -7,7 +7,7 @@
7 * Copyright (C) 2001, 2002 Paul Mundt 7 * Copyright (C) 2001, 2002 Paul Mundt
8 * Copyright (C) 2002 MontaVista Software, Inc. 8 * Copyright (C) 2002 MontaVista Software, Inc.
9 * Copyright (C) 2002 TimeSys Corp. 9 * Copyright (C) 2002 TimeSys Corp.
10 * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 10 * Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org>
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify it 12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the 13 * under the terms of the GNU General Public License as published by the
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c
index d9b6a5b5399d..7fd170d007e7 100644
--- a/arch/mips/jazz/irq.c
+++ b/arch/mips/jazz/irq.c
@@ -10,6 +10,7 @@
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/interrupt.h> 11#include <linux/interrupt.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/smp.h>
13#include <linux/spinlock.h> 14#include <linux/spinlock.h>
14 15
15#include <asm/irq_cpu.h> 16#include <asm/irq_cpu.h>
diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
index f0fd636723be..0d64d0f46418 100644
--- a/arch/mips/jazz/jazzdma.c
+++ b/arch/mips/jazz/jazzdma.c
@@ -190,7 +190,7 @@ int vdma_free(unsigned long laddr)
190 return -1; 190 return -1;
191 } 191 }
192 192
193 while (pgtbl[i].owner == laddr && i < VDMA_PGTBL_ENTRIES) { 193 while (i < VDMA_PGTBL_ENTRIES && pgtbl[i].owner == laddr) {
194 pgtbl[i].owner = VDMA_PAGE_EMPTY; 194 pgtbl[i].owner = VDMA_PAGE_EMPTY;
195 i++; 195 i++;
196 } 196 }
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c
index c901c22d7ad0..8d006ec65677 100644
--- a/arch/mips/kernel/asm-offsets.c
+++ b/arch/mips/kernel/asm-offsets.c
@@ -14,6 +14,7 @@
14#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/interrupt.h> 15#include <linux/interrupt.h>
16#include <linux/kbuild.h> 16#include <linux/kbuild.h>
17#include <linux/suspend.h>
17#include <asm/ptrace.h> 18#include <asm/ptrace.h>
18#include <asm/processor.h> 19#include <asm/processor.h>
19 20
@@ -326,3 +327,15 @@ void output_octeon_cop2_state_defines(void)
326 BLANK(); 327 BLANK();
327} 328}
328#endif 329#endif
330
331#ifdef CONFIG_HIBERNATION
332void output_pbe_defines(void)
333{
334 COMMENT(" Linux struct pbe offsets. ");
335 OFFSET(PBE_ADDRESS, pbe, address);
336 OFFSET(PBE_ORIG_ADDRESS, pbe, orig_address);
337 OFFSET(PBE_NEXT, pbe, next);
338 DEFINE(PBE_SIZE, sizeof(struct pbe));
339 BLANK();
340}
341#endif
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c
index e1333d7319e2..ff448233dab5 100644
--- a/arch/mips/kernel/binfmt_elfo32.c
+++ b/arch/mips/kernel/binfmt_elfo32.c
@@ -53,6 +53,23 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
53#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) 53#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
54 54
55#include <asm/processor.h> 55#include <asm/processor.h>
56
57/*
58 * When this file is selected, we are definitely running a 64bit kernel.
59 * So using the right regs define in asm/reg.h
60 */
61#define WANT_COMPAT_REG_H
62
63/* These MUST be defined before elf.h gets included */
64extern void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs);
65#define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs);
66#define ELF_CORE_COPY_TASK_REGS(_tsk, _dest) \
67({ \
68 int __res = 1; \
69 elf32_core_copy_regs(*(_dest), task_pt_regs(_tsk)); \
70 __res; \
71})
72
56#include <linux/module.h> 73#include <linux/module.h>
57#include <linux/elfcore.h> 74#include <linux/elfcore.h>
58#include <linux/compat.h> 75#include <linux/compat.h>
@@ -110,9 +127,6 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
110 value->tv_usec = rem / NSEC_PER_USEC; 127 value->tv_usec = rem / NSEC_PER_USEC;
111} 128}
112 129
113#undef ELF_CORE_COPY_REGS
114#define ELF_CORE_COPY_REGS(_dest, _regs) elf32_core_copy_regs(_dest, _regs);
115
116void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs) 130void elf32_core_copy_regs(elf_gregset_t grp, struct pt_regs *regs)
117{ 131{
118 int i; 132 int i;
diff --git a/arch/mips/kernel/cevt-bcm1480.c b/arch/mips/kernel/cevt-bcm1480.c
index a5182a207696..e02f79b1eb51 100644
--- a/arch/mips/kernel/cevt-bcm1480.c
+++ b/arch/mips/kernel/cevt-bcm1480.c
@@ -18,6 +18,7 @@
18#include <linux/clockchips.h> 18#include <linux/clockchips.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/percpu.h> 20#include <linux/percpu.h>
21#include <linux/smp.h>
21 22
22#include <asm/addrspace.h> 23#include <asm/addrspace.h>
23#include <asm/io.h> 24#include <asm/io.h>
diff --git a/arch/mips/kernel/cevt-ds1287.c b/arch/mips/kernel/cevt-ds1287.c
index 1ada45ea0700..6996da4d74a2 100644
--- a/arch/mips/kernel/cevt-ds1287.c
+++ b/arch/mips/kernel/cevt-ds1287.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * DS1287 clockevent driver 2 * DS1287 clockevent driver
3 * 3 *
4 * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/kernel/cevt-gt641xx.c b/arch/mips/kernel/cevt-gt641xx.c
index e9b787feedcb..92351e00ae0e 100644
--- a/arch/mips/kernel/cevt-gt641xx.c
+++ b/arch/mips/kernel/cevt-gt641xx.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GT641xx clockevent routines. 2 * GT641xx clockevent routines.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
index 0015e442572b..2652362ce047 100644
--- a/arch/mips/kernel/cevt-r4k.c
+++ b/arch/mips/kernel/cevt-r4k.c
@@ -9,6 +9,7 @@
9#include <linux/clockchips.h> 9#include <linux/clockchips.h>
10#include <linux/interrupt.h> 10#include <linux/interrupt.h>
11#include <linux/percpu.h> 11#include <linux/percpu.h>
12#include <linux/smp.h>
12 13
13#include <asm/smtc_ipi.h> 14#include <asm/smtc_ipi.h>
14#include <asm/time.h> 15#include <asm/time.h>
diff --git a/arch/mips/kernel/cevt-sb1250.c b/arch/mips/kernel/cevt-sb1250.c
index 340f53e5c6b1..ac5903d1b20e 100644
--- a/arch/mips/kernel/cevt-sb1250.c
+++ b/arch/mips/kernel/cevt-sb1250.c
@@ -18,6 +18,7 @@
18#include <linux/clockchips.h> 18#include <linux/clockchips.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/percpu.h> 20#include <linux/percpu.h>
21#include <linux/smp.h>
21 22
22#include <asm/addrspace.h> 23#include <asm/addrspace.h>
23#include <asm/io.h> 24#include <asm/io.h>
diff --git a/arch/mips/kernel/cevt-smtc.c b/arch/mips/kernel/cevt-smtc.c
index df6f5bc60572..98bd7de75778 100644
--- a/arch/mips/kernel/cevt-smtc.c
+++ b/arch/mips/kernel/cevt-smtc.c
@@ -10,6 +10,7 @@
10#include <linux/clockchips.h> 10#include <linux/clockchips.h>
11#include <linux/interrupt.h> 11#include <linux/interrupt.h>
12#include <linux/percpu.h> 12#include <linux/percpu.h>
13#include <linux/smp.h>
13 14
14#include <asm/smtc_ipi.h> 15#include <asm/smtc_ipi.h>
15#include <asm/time.h> 16#include <asm/time.h>
diff --git a/arch/mips/kernel/cevt-txx9.c b/arch/mips/kernel/cevt-txx9.c
index 2e911e3da8d3..0037f21baf0d 100644
--- a/arch/mips/kernel/cevt-txx9.c
+++ b/arch/mips/kernel/cevt-txx9.c
@@ -20,22 +20,29 @@
20#define TIMER_CCD 0 /* 1/2 */ 20#define TIMER_CCD 0 /* 1/2 */
21#define TIMER_CLK(imclk) ((imclk) / (2 << TIMER_CCD)) 21#define TIMER_CLK(imclk) ((imclk) / (2 << TIMER_CCD))
22 22
23static struct txx9_tmr_reg __iomem *txx9_cs_tmrptr; 23struct txx9_clocksource {
24 struct clocksource cs;
25 struct txx9_tmr_reg __iomem *tmrptr;
26};
24 27
25static cycle_t txx9_cs_read(struct clocksource *cs) 28static cycle_t txx9_cs_read(struct clocksource *cs)
26{ 29{
27 return __raw_readl(&txx9_cs_tmrptr->trr); 30 struct txx9_clocksource *txx9_cs =
31 container_of(cs, struct txx9_clocksource, cs);
32 return __raw_readl(&txx9_cs->tmrptr->trr);
28} 33}
29 34
30/* Use 1 bit smaller width to use full bits in that width */ 35/* Use 1 bit smaller width to use full bits in that width */
31#define TXX9_CLOCKSOURCE_BITS (TXX9_TIMER_BITS - 1) 36#define TXX9_CLOCKSOURCE_BITS (TXX9_TIMER_BITS - 1)
32 37
33static struct clocksource txx9_clocksource = { 38static struct txx9_clocksource txx9_clocksource = {
34 .name = "TXx9", 39 .cs = {
35 .rating = 200, 40 .name = "TXx9",
36 .read = txx9_cs_read, 41 .rating = 200,
37 .mask = CLOCKSOURCE_MASK(TXX9_CLOCKSOURCE_BITS), 42 .read = txx9_cs_read,
38 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 43 .mask = CLOCKSOURCE_MASK(TXX9_CLOCKSOURCE_BITS),
44 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
45 },
39}; 46};
40 47
41void __init txx9_clocksource_init(unsigned long baseaddr, 48void __init txx9_clocksource_init(unsigned long baseaddr,
@@ -43,8 +50,8 @@ void __init txx9_clocksource_init(unsigned long baseaddr,
43{ 50{
44 struct txx9_tmr_reg __iomem *tmrptr; 51 struct txx9_tmr_reg __iomem *tmrptr;
45 52
46 clocksource_set_clock(&txx9_clocksource, TIMER_CLK(imbusclk)); 53 clocksource_set_clock(&txx9_clocksource.cs, TIMER_CLK(imbusclk));
47 clocksource_register(&txx9_clocksource); 54 clocksource_register(&txx9_clocksource.cs);
48 55
49 tmrptr = ioremap(baseaddr, sizeof(struct txx9_tmr_reg)); 56 tmrptr = ioremap(baseaddr, sizeof(struct txx9_tmr_reg));
50 __raw_writel(TCR_BASE, &tmrptr->tcr); 57 __raw_writel(TCR_BASE, &tmrptr->tcr);
@@ -53,10 +60,13 @@ void __init txx9_clocksource_init(unsigned long baseaddr,
53 __raw_writel(TXx9_TMITMR_TZCE, &tmrptr->itmr); 60 __raw_writel(TXx9_TMITMR_TZCE, &tmrptr->itmr);
54 __raw_writel(1 << TXX9_CLOCKSOURCE_BITS, &tmrptr->cpra); 61 __raw_writel(1 << TXX9_CLOCKSOURCE_BITS, &tmrptr->cpra);
55 __raw_writel(TCR_BASE | TXx9_TMTCR_TCE, &tmrptr->tcr); 62 __raw_writel(TCR_BASE | TXx9_TMTCR_TCE, &tmrptr->tcr);
56 txx9_cs_tmrptr = tmrptr; 63 txx9_clocksource.tmrptr = tmrptr;
57} 64}
58 65
59static struct txx9_tmr_reg __iomem *txx9_tmrptr; 66struct txx9_clock_event_device {
67 struct clock_event_device cd;
68 struct txx9_tmr_reg __iomem *tmrptr;
69};
60 70
61static void txx9tmr_stop_and_clear(struct txx9_tmr_reg __iomem *tmrptr) 71static void txx9tmr_stop_and_clear(struct txx9_tmr_reg __iomem *tmrptr)
62{ 72{
@@ -69,7 +79,9 @@ static void txx9tmr_stop_and_clear(struct txx9_tmr_reg __iomem *tmrptr)
69static void txx9tmr_set_mode(enum clock_event_mode mode, 79static void txx9tmr_set_mode(enum clock_event_mode mode,
70 struct clock_event_device *evt) 80 struct clock_event_device *evt)
71{ 81{
72 struct txx9_tmr_reg __iomem *tmrptr = txx9_tmrptr; 82 struct txx9_clock_event_device *txx9_cd =
83 container_of(evt, struct txx9_clock_event_device, cd);
84 struct txx9_tmr_reg __iomem *tmrptr = txx9_cd->tmrptr;
73 85
74 txx9tmr_stop_and_clear(tmrptr); 86 txx9tmr_stop_and_clear(tmrptr);
75 switch (mode) { 87 switch (mode) {
@@ -99,7 +111,9 @@ static void txx9tmr_set_mode(enum clock_event_mode mode,
99static int txx9tmr_set_next_event(unsigned long delta, 111static int txx9tmr_set_next_event(unsigned long delta,
100 struct clock_event_device *evt) 112 struct clock_event_device *evt)
101{ 113{
102 struct txx9_tmr_reg __iomem *tmrptr = txx9_tmrptr; 114 struct txx9_clock_event_device *txx9_cd =
115 container_of(evt, struct txx9_clock_event_device, cd);
116 struct txx9_tmr_reg __iomem *tmrptr = txx9_cd->tmrptr;
103 117
104 txx9tmr_stop_and_clear(tmrptr); 118 txx9tmr_stop_and_clear(tmrptr);
105 /* start timer */ 119 /* start timer */
@@ -108,18 +122,22 @@ static int txx9tmr_set_next_event(unsigned long delta,
108 return 0; 122 return 0;
109} 123}
110 124
111static struct clock_event_device txx9tmr_clock_event_device = { 125static struct txx9_clock_event_device txx9_clock_event_device = {
112 .name = "TXx9", 126 .cd = {
113 .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, 127 .name = "TXx9",
114 .rating = 200, 128 .features = CLOCK_EVT_FEAT_PERIODIC |
115 .set_mode = txx9tmr_set_mode, 129 CLOCK_EVT_FEAT_ONESHOT,
116 .set_next_event = txx9tmr_set_next_event, 130 .rating = 200,
131 .set_mode = txx9tmr_set_mode,
132 .set_next_event = txx9tmr_set_next_event,
133 },
117}; 134};
118 135
119static irqreturn_t txx9tmr_interrupt(int irq, void *dev_id) 136static irqreturn_t txx9tmr_interrupt(int irq, void *dev_id)
120{ 137{
121 struct clock_event_device *cd = &txx9tmr_clock_event_device; 138 struct txx9_clock_event_device *txx9_cd = dev_id;
122 struct txx9_tmr_reg __iomem *tmrptr = txx9_tmrptr; 139 struct clock_event_device *cd = &txx9_cd->cd;
140 struct txx9_tmr_reg __iomem *tmrptr = txx9_cd->tmrptr;
123 141
124 __raw_writel(0, &tmrptr->tisr); /* ack interrupt */ 142 __raw_writel(0, &tmrptr->tisr); /* ack interrupt */
125 cd->event_handler(cd); 143 cd->event_handler(cd);
@@ -130,19 +148,20 @@ static struct irqaction txx9tmr_irq = {
130 .handler = txx9tmr_interrupt, 148 .handler = txx9tmr_interrupt,
131 .flags = IRQF_DISABLED | IRQF_PERCPU, 149 .flags = IRQF_DISABLED | IRQF_PERCPU,
132 .name = "txx9tmr", 150 .name = "txx9tmr",
151 .dev_id = &txx9_clock_event_device,
133}; 152};
134 153
135void __init txx9_clockevent_init(unsigned long baseaddr, int irq, 154void __init txx9_clockevent_init(unsigned long baseaddr, int irq,
136 unsigned int imbusclk) 155 unsigned int imbusclk)
137{ 156{
138 struct clock_event_device *cd = &txx9tmr_clock_event_device; 157 struct clock_event_device *cd = &txx9_clock_event_device.cd;
139 struct txx9_tmr_reg __iomem *tmrptr; 158 struct txx9_tmr_reg __iomem *tmrptr;
140 159
141 tmrptr = ioremap(baseaddr, sizeof(struct txx9_tmr_reg)); 160 tmrptr = ioremap(baseaddr, sizeof(struct txx9_tmr_reg));
142 txx9tmr_stop_and_clear(tmrptr); 161 txx9tmr_stop_and_clear(tmrptr);
143 __raw_writel(TIMER_CCD, &tmrptr->ccdr); 162 __raw_writel(TIMER_CCD, &tmrptr->ccdr);
144 __raw_writel(0, &tmrptr->itmr); 163 __raw_writel(0, &tmrptr->itmr);
145 txx9_tmrptr = tmrptr; 164 txx9_clock_event_device.tmrptr = tmrptr;
146 165
147 clockevent_set_clock(cd, TIMER_CLK(imbusclk)); 166 clockevent_set_clock(cd, TIMER_CLK(imbusclk));
148 cd->max_delta_ns = 167 cd->max_delta_ns =
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index b13b8eb30596..1abe9905c9c1 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -14,6 +14,7 @@
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/ptrace.h> 16#include <linux/ptrace.h>
17#include <linux/smp.h>
17#include <linux/stddef.h> 18#include <linux/stddef.h>
18 19
19#include <asm/bugs.h> 20#include <asm/bugs.h>
diff --git a/arch/mips/kernel/csrc-ioasic.c b/arch/mips/kernel/csrc-ioasic.c
index b551f48d3a07..23da108506b0 100644
--- a/arch/mips/kernel/csrc-ioasic.c
+++ b/arch/mips/kernel/csrc-ioasic.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * DEC I/O ASIC's counter clocksource 2 * DEC I/O ASIC's counter clocksource
3 * 3 *
4 * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S
index 492a0a8d70fb..531ce7b16124 100644
--- a/arch/mips/kernel/head.S
+++ b/arch/mips/kernel/head.S
@@ -188,7 +188,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
188 188
189 MTC0 zero, CP0_CONTEXT # clear context register 189 MTC0 zero, CP0_CONTEXT # clear context register
190 PTR_LA $28, init_thread_union 190 PTR_LA $28, init_thread_union
191 PTR_LI sp, _THREAD_SIZE - 32 191 /* Set the SP after an empty pt_regs. */
192 PTR_LI sp, _THREAD_SIZE - 32 - PT_SIZE
192 PTR_ADDU sp, $28 193 PTR_ADDU sp, $28
193 set_saved_sp sp, t0, t1 194 set_saved_sp sp, t0, t1
194 PTR_SUBU sp, 4 * SZREG # init stack pointer 195 PTR_SUBU sp, 4 * SZREG # init stack pointer
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c
index ed20e7fe65e3..f7d8d5d0ddbf 100644
--- a/arch/mips/kernel/i8253.c
+++ b/arch/mips/kernel/i8253.c
@@ -7,6 +7,7 @@
7#include <linux/interrupt.h> 7#include <linux/interrupt.h>
8#include <linux/jiffies.h> 8#include <linux/jiffies.h>
9#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/smp.h>
10#include <linux/spinlock.h> 11#include <linux/spinlock.h>
11 12
12#include <asm/delay.h> 13#include <asm/delay.h>
diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c
index 3f43c2e3aa5a..d2072cd38592 100644
--- a/arch/mips/kernel/irq-gic.c
+++ b/arch/mips/kernel/irq-gic.c
@@ -2,6 +2,7 @@
2 2
3#include <linux/bitmap.h> 3#include <linux/bitmap.h>
4#include <linux/init.h> 4#include <linux/init.h>
5#include <linux/smp.h>
5 6
6#include <asm/io.h> 7#include <asm/io.h>
7#include <asm/gic.h> 8#include <asm/gic.h>
@@ -106,9 +107,7 @@ static unsigned int gic_irq_startup(unsigned int irq)
106{ 107{
107 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); 108 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
108 irq -= _irqbase; 109 irq -= _irqbase;
109 /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ 110 GIC_SET_INTR_MASK(irq, 1);
110 GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))),
111 1 << (irq % 32));
112 return 0; 111 return 0;
113} 112}
114 113
@@ -119,8 +118,7 @@ static void gic_irq_ack(unsigned int irq)
119#endif 118#endif
120 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); 119 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
121 irq -= _irqbase; 120 irq -= _irqbase;
122 GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))), 121 GIC_CLR_INTR_MASK(irq, 1);
123 1 << (irq % 32));
124 122
125 if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { 123 if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) {
126 if (!gic_wedgeb2bok) 124 if (!gic_wedgeb2bok)
@@ -137,18 +135,14 @@ static void gic_mask_irq(unsigned int irq)
137{ 135{
138 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); 136 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
139 irq -= _irqbase; 137 irq -= _irqbase;
140 /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ 138 GIC_CLR_INTR_MASK(irq, 1);
141 GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_RMASK_31_0_OFS + (irq / 32))),
142 1 << (irq % 32));
143} 139}
144 140
145static void gic_unmask_irq(unsigned int irq) 141static void gic_unmask_irq(unsigned int irq)
146{ 142{
147 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); 143 pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
148 irq -= _irqbase; 144 irq -= _irqbase;
149 /* FIXME: this is wrong for !GICISWORDLITTLEENDIAN */ 145 GIC_SET_INTR_MASK(irq, 1);
150 GICWRITE(GIC_REG_ADDR(SHARED, (GIC_SH_SMASK_31_0_OFS + (irq / 32))),
151 1 << (irq % 32));
152} 146}
153 147
154#ifdef CONFIG_SMP 148#ifdef CONFIG_SMP
@@ -253,6 +247,10 @@ static void __init gic_basic_init(void)
253 if (cpu == X) 247 if (cpu == X)
254 continue; 248 continue;
255 249
250 if (cpu == 0 && i != 0 && _intrmap[i].intrnum == 0 &&
251 _intrmap[i].ipiflag == 0)
252 continue;
253
256 setup_intr(_intrmap[i].intrnum, 254 setup_intr(_intrmap[i].intrnum,
257 _intrmap[i].cpunum, 255 _intrmap[i].cpunum,
258 _intrmap[i].pin, 256 _intrmap[i].pin,
diff --git a/arch/mips/kernel/irq-gt641xx.c b/arch/mips/kernel/irq-gt641xx.c
index 1b81b131f43c..ebcc5f7ad9c2 100644
--- a/arch/mips/kernel/irq-gt641xx.c
+++ b/arch/mips/kernel/irq-gt641xx.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GT641xx IRQ routines. 2 * GT641xx IRQ routines.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/kernel/irq_txx9.c b/arch/mips/kernel/irq_txx9.c
index a4d1462c27f7..9b78029bea70 100644
--- a/arch/mips/kernel/irq_txx9.c
+++ b/arch/mips/kernel/irq_txx9.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/kernel/irq_txx9.c
3 *
4 * Based on linux/arch/mips/jmr3927/rbhma3100/irq.c, 2 * Based on linux/arch/mips/jmr3927/rbhma3100/irq.c,
5 * linux/arch/mips/tx4927/common/tx4927_irq.c, 3 * linux/arch/mips/tx4927/common/tx4927_irq.c,
6 * linux/arch/mips/tx4938/common/irq.c 4 * linux/arch/mips/tx4938/common/irq.c
diff --git a/arch/mips/kernel/kgdb.c b/arch/mips/kernel/kgdb.c
index 6e152c80cd4a..50c9bb880667 100644
--- a/arch/mips/kernel/kgdb.c
+++ b/arch/mips/kernel/kgdb.c
@@ -26,6 +26,7 @@
26#include <linux/kgdb.h> 26#include <linux/kgdb.h>
27#include <linux/kdebug.h> 27#include <linux/kdebug.h>
28#include <linux/sched.h> 28#include <linux/sched.h>
29#include <linux/smp.h>
29#include <asm/inst.h> 30#include <asm/inst.h>
30#include <asm/fpu.h> 31#include <asm/fpu.h>
31#include <asm/cacheflush.h> 32#include <asm/cacheflush.h>
diff --git a/arch/mips/kernel/module.c b/arch/mips/kernel/module.c
index 3e9100dcc12d..6f51dda87fce 100644
--- a/arch/mips/kernel/module.c
+++ b/arch/mips/kernel/module.c
@@ -98,7 +98,8 @@ static int apply_r_mips_32_rela(struct module *me, u32 *location, Elf_Addr v)
98static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v) 98static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
99{ 99{
100 if (v % 4) { 100 if (v % 4) {
101 printk(KERN_ERR "module %s: dangerous relocation\n", me->name); 101 pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
102 me->name);
102 return -ENOEXEC; 103 return -ENOEXEC;
103 } 104 }
104 105
@@ -118,7 +119,8 @@ static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
118static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v) 119static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
119{ 120{
120 if (v % 4) { 121 if (v % 4) {
121 printk(KERN_ERR "module %s: dangerous relocation\n", me->name); 122 pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
123 me->name);
122 return -ENOEXEC; 124 return -ENOEXEC;
123 } 125 }
124 126
@@ -222,7 +224,7 @@ static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v)
222 return 0; 224 return 0;
223 225
224out_danger: 226out_danger:
225 printk(KERN_ERR "module %s: dangerous " "relocation\n", me->name); 227 pr_err("module %s: dangerous R_MIPS_LO16 REL relocation\n", me->name);
226 228
227 return -ENOEXEC; 229 return -ENOEXEC;
228} 230}
@@ -301,7 +303,7 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab,
301 /* This is the symbol it is referring to */ 303 /* This is the symbol it is referring to */
302 sym = (Elf_Sym *)sechdrs[symindex].sh_addr 304 sym = (Elf_Sym *)sechdrs[symindex].sh_addr
303 + ELF_MIPS_R_SYM(rel[i]); 305 + ELF_MIPS_R_SYM(rel[i]);
304 if (!sym->st_value) { 306 if (IS_ERR_VALUE(sym->st_value)) {
305 /* Ignore unresolved weak symbol */ 307 /* Ignore unresolved weak symbol */
306 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) 308 if (ELF_ST_BIND(sym->st_info) == STB_WEAK)
307 continue; 309 continue;
@@ -341,7 +343,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
341 /* This is the symbol it is referring to */ 343 /* This is the symbol it is referring to */
342 sym = (Elf_Sym *)sechdrs[symindex].sh_addr 344 sym = (Elf_Sym *)sechdrs[symindex].sh_addr
343 + ELF_MIPS_R_SYM(rel[i]); 345 + ELF_MIPS_R_SYM(rel[i]);
344 if (!sym->st_value) { 346 if (IS_ERR_VALUE(sym->st_value)) {
345 /* Ignore unresolved weak symbol */ 347 /* Ignore unresolved weak symbol */
346 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) 348 if (ELF_ST_BIND(sym->st_info) == STB_WEAK)
347 continue; 349 continue;
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
index e0a4ac18fa07..26109c4d5170 100644
--- a/arch/mips/kernel/proc.c
+++ b/arch/mips/kernel/proc.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/kernel/proc.c
3 *
4 * Copyright (C) 1995, 1996, 2001 Ralf Baechle 2 * Copyright (C) 1995, 1996, 2001 Ralf Baechle
5 * Copyright (C) 2001, 2004 MIPS Technologies, Inc. 3 * Copyright (C) 2001, 2004 MIPS Technologies, Inc.
6 * Copyright (C) 2004 Maciej W. Rozycki 4 * Copyright (C) 2004 Maciej W. Rozycki
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index 1eaaa450e20c..f3d73e1831c1 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -50,10 +50,15 @@
50 */ 50 */
51void __noreturn cpu_idle(void) 51void __noreturn cpu_idle(void)
52{ 52{
53 int cpu;
54
55 /* CPU is going idle. */
56 cpu = smp_processor_id();
57
53 /* endless idle loop with no priority at all */ 58 /* endless idle loop with no priority at all */
54 while (1) { 59 while (1) {
55 tick_nohz_stop_sched_tick(1); 60 tick_nohz_stop_sched_tick(1);
56 while (!need_resched()) { 61 while (!need_resched() && cpu_online(cpu)) {
57#ifdef CONFIG_MIPS_MT_SMTC 62#ifdef CONFIG_MIPS_MT_SMTC
58 extern void smtc_idle_loop_hook(void); 63 extern void smtc_idle_loop_hook(void);
59 64
@@ -62,6 +67,12 @@ void __noreturn cpu_idle(void)
62 if (cpu_wait) 67 if (cpu_wait)
63 (*cpu_wait)(); 68 (*cpu_wait)();
64 } 69 }
70#ifdef CONFIG_HOTPLUG_CPU
71 if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map) &&
72 (system_state == SYSTEM_RUNNING ||
73 system_state == SYSTEM_BOOTING))
74 play_dead();
75#endif
65 tick_nohz_restart_sched_tick(); 76 tick_nohz_restart_sched_tick();
66 preempt_enable_no_resched(); 77 preempt_enable_no_resched();
67 schedule(); 78 schedule();
@@ -104,7 +115,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
104{ 115{
105 struct thread_info *ti = task_thread_info(p); 116 struct thread_info *ti = task_thread_info(p);
106 struct pt_regs *childregs; 117 struct pt_regs *childregs;
107 long childksp; 118 unsigned long childksp;
108 p->set_child_tid = p->clear_child_tid = NULL; 119 p->set_child_tid = p->clear_child_tid = NULL;
109 120
110 childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32; 121 childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32;
@@ -121,6 +132,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
121 132
122 /* set up new TSS. */ 133 /* set up new TSS. */
123 childregs = (struct pt_regs *) childksp - 1; 134 childregs = (struct pt_regs *) childksp - 1;
135 /* Put the stack after the struct pt_regs. */
136 childksp = (unsigned long) childregs;
124 *childregs = *regs; 137 *childregs = *regs;
125 childregs->regs[7] = 0; /* Clear error flag */ 138 childregs->regs[7] = 0; /* Clear error flag */
126 139
diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c
index c4f9ac17474a..32644b4a0714 100644
--- a/arch/mips/kernel/ptrace32.c
+++ b/arch/mips/kernel/ptrace32.c
@@ -22,7 +22,6 @@
22#include <linux/errno.h> 22#include <linux/errno.h>
23#include <linux/ptrace.h> 23#include <linux/ptrace.h>
24#include <linux/smp.h> 24#include <linux/smp.h>
25#include <linux/smp_lock.h>
26#include <linux/user.h> 25#include <linux/user.h>
27#include <linux/security.h> 26#include <linux/security.h>
28 27
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index 0b31b9bda048..b57082123536 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -652,6 +652,9 @@ einval: li v0, -ENOSYS
652 sys sys_inotify_init1 1 652 sys sys_inotify_init1 1
653 sys sys_preadv 6 /* 4330 */ 653 sys sys_preadv 6 /* 4330 */
654 sys sys_pwritev 6 654 sys sys_pwritev 6
655 sys sys_rt_tgsigqueueinfo 4
656 sys sys_perf_counter_open 5
657 sys sys_accept4 4
655 .endm 658 .endm
656 659
657 /* We pre-compute the number of _instruction_ bytes needed to 660 /* We pre-compute the number of _instruction_ bytes needed to
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index c647fd6e722f..3d866f24e064 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -489,4 +489,7 @@ sys_call_table:
489 PTR sys_inotify_init1 489 PTR sys_inotify_init1
490 PTR sys_preadv 490 PTR sys_preadv
491 PTR sys_pwritev /* 5390 */ 491 PTR sys_pwritev /* 5390 */
492 PTR sys_rt_tgsigqueueinfo
493 PTR sys_perf_counter_open
494 PTR sys_accept4
492 .size sys_call_table,.-sys_call_table 495 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 93cc672f4522..e855b118a079 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -415,4 +415,7 @@ EXPORT(sysn32_call_table)
415 PTR sys_inotify_init1 415 PTR sys_inotify_init1
416 PTR sys_preadv 416 PTR sys_preadv
417 PTR sys_pwritev 417 PTR sys_pwritev
418 PTR compat_sys_rt_tgsigqueueinfo /* 5295 */
419 PTR sys_perf_counter_open
420 PTR sys_accept4
418 .size sysn32_call_table,.-sysn32_call_table 421 .size sysn32_call_table,.-sysn32_call_table
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index a5598b2339dd..0c49f1a660be 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -535,4 +535,7 @@ sys_call_table:
535 PTR sys_inotify_init1 535 PTR sys_inotify_init1
536 PTR compat_sys_preadv /* 4330 */ 536 PTR compat_sys_preadv /* 4330 */
537 PTR compat_sys_pwritev 537 PTR compat_sys_pwritev
538 PTR compat_sys_rt_tgsigqueueinfo
539 PTR sys_perf_counter_open
540 PTR sys_accept4
538 .size sys_call_table,.-sys_call_table 541 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c
index f27beca4b26d..ad0ff5dc4d59 100644
--- a/arch/mips/kernel/smp-cmp.c
+++ b/arch/mips/kernel/smp-cmp.c
@@ -20,6 +20,7 @@
20 20
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/sched.h> 22#include <linux/sched.h>
23#include <linux/smp.h>
23#include <linux/cpumask.h> 24#include <linux/cpumask.h>
24#include <linux/interrupt.h> 25#include <linux/interrupt.h>
25#include <linux/compiler.h> 26#include <linux/compiler.h>
@@ -36,80 +37,24 @@
36#include <asm/mipsregs.h> 37#include <asm/mipsregs.h>
37#include <asm/mipsmtregs.h> 38#include <asm/mipsmtregs.h>
38#include <asm/mips_mt.h> 39#include <asm/mips_mt.h>
39 40#include <asm/amon.h>
40/* 41#include <asm/gic.h>
41 * Crude manipulation of the CPU masks to control which
42 * which CPU's are brought online during initialisation
43 *
44 * Beware... this needs to be called after CPU discovery
45 * but before CPU bringup
46 */
47static int __init allowcpus(char *str)
48{
49 cpumask_t cpu_allow_map;
50 char buf[256];
51 int len;
52
53 cpus_clear(cpu_allow_map);
54 if (cpulist_parse(str, &cpu_allow_map) == 0) {
55 cpu_set(0, cpu_allow_map);
56 cpus_and(cpu_possible_map, cpu_possible_map, cpu_allow_map);
57 len = cpulist_scnprintf(buf, sizeof(buf)-1, &cpu_possible_map);
58 buf[len] = '\0';
59 pr_debug("Allowable CPUs: %s\n", buf);
60 return 1;
61 } else
62 return 0;
63}
64__setup("allowcpus=", allowcpus);
65 42
66static void ipi_call_function(unsigned int cpu) 43static void ipi_call_function(unsigned int cpu)
67{ 44{
68 unsigned int action = 0;
69
70 pr_debug("CPU%d: %s cpu %d status %08x\n", 45 pr_debug("CPU%d: %s cpu %d status %08x\n",
71 smp_processor_id(), __func__, cpu, read_c0_status()); 46 smp_processor_id(), __func__, cpu, read_c0_status());
72 47
73 switch (cpu) { 48 gic_send_ipi(plat_ipi_call_int_xlate(cpu));
74 case 0:
75 action = GIC_IPI_EXT_INTR_CALLFNC_VPE0;
76 break;
77 case 1:
78 action = GIC_IPI_EXT_INTR_CALLFNC_VPE1;
79 break;
80 case 2:
81 action = GIC_IPI_EXT_INTR_CALLFNC_VPE2;
82 break;
83 case 3:
84 action = GIC_IPI_EXT_INTR_CALLFNC_VPE3;
85 break;
86 }
87 gic_send_ipi(action);
88} 49}
89 50
90 51
91static void ipi_resched(unsigned int cpu) 52static void ipi_resched(unsigned int cpu)
92{ 53{
93 unsigned int action = 0;
94
95 pr_debug("CPU%d: %s cpu %d status %08x\n", 54 pr_debug("CPU%d: %s cpu %d status %08x\n",
96 smp_processor_id(), __func__, cpu, read_c0_status()); 55 smp_processor_id(), __func__, cpu, read_c0_status());
97 56
98 switch (cpu) { 57 gic_send_ipi(plat_ipi_resched_int_xlate(cpu));
99 case 0:
100 action = GIC_IPI_EXT_INTR_RESCHED_VPE0;
101 break;
102 case 1:
103 action = GIC_IPI_EXT_INTR_RESCHED_VPE1;
104 break;
105 case 2:
106 action = GIC_IPI_EXT_INTR_RESCHED_VPE2;
107 break;
108 case 3:
109 action = GIC_IPI_EXT_INTR_RESCHED_VPE3;
110 break;
111 }
112 gic_send_ipi(action);
113} 58}
114 59
115/* 60/*
@@ -205,7 +150,7 @@ static void cmp_boot_secondary(int cpu, struct task_struct *idle)
205 (unsigned long)(gp + sizeof(struct thread_info))); 150 (unsigned long)(gp + sizeof(struct thread_info)));
206#endif 151#endif
207 152
208 amon_cpu_start(cpu, pc, sp, gp, a0); 153 amon_cpu_start(cpu, pc, sp, (unsigned long)gp, a0);
209} 154}
210 155
211/* 156/*
diff --git a/arch/mips/kernel/smp-up.c b/arch/mips/kernel/smp-up.c
index 878e3733bbb2..2508d55d68fd 100644
--- a/arch/mips/kernel/smp-up.c
+++ b/arch/mips/kernel/smp-up.c
@@ -55,6 +55,18 @@ static void __init up_prepare_cpus(unsigned int max_cpus)
55{ 55{
56} 56}
57 57
58#ifdef CONFIG_HOTPLUG_CPU
59static int up_cpu_disable(void)
60{
61 return -ENOSYS;
62}
63
64static void up_cpu_die(unsigned int cpu)
65{
66 BUG();
67}
68#endif
69
58struct plat_smp_ops up_smp_ops = { 70struct plat_smp_ops up_smp_ops = {
59 .send_ipi_single = up_send_ipi_single, 71 .send_ipi_single = up_send_ipi_single,
60 .send_ipi_mask = up_send_ipi_mask, 72 .send_ipi_mask = up_send_ipi_mask,
@@ -64,4 +76,8 @@ struct plat_smp_ops up_smp_ops = {
64 .boot_secondary = up_boot_secondary, 76 .boot_secondary = up_boot_secondary,
65 .smp_setup = up_smp_setup, 77 .smp_setup = up_smp_setup,
66 .prepare_cpus = up_prepare_cpus, 78 .prepare_cpus = up_prepare_cpus,
79#ifdef CONFIG_HOTPLUG_CPU
80 .cpu_disable = up_cpu_disable,
81 .cpu_die = up_cpu_die,
82#endif
67}; 83};
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index c937506a03aa..bc7d9b05e2f4 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -22,6 +22,7 @@
22#include <linux/delay.h> 22#include <linux/delay.h>
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/interrupt.h> 24#include <linux/interrupt.h>
25#include <linux/smp.h>
25#include <linux/spinlock.h> 26#include <linux/spinlock.h>
26#include <linux/threads.h> 27#include <linux/threads.h>
27#include <linux/module.h> 28#include <linux/module.h>
@@ -44,7 +45,7 @@
44#include <asm/mipsmtregs.h> 45#include <asm/mipsmtregs.h>
45#endif /* CONFIG_MIPS_MT_SMTC */ 46#endif /* CONFIG_MIPS_MT_SMTC */
46 47
47static volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */ 48volatile cpumask_t cpu_callin_map; /* Bitmask of started secondaries */
48int __cpu_number_map[NR_CPUS]; /* Map physical to logical */ 49int __cpu_number_map[NR_CPUS]; /* Map physical to logical */
49int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */ 50int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */
50 51
@@ -200,6 +201,8 @@ void __devinit smp_prepare_boot_cpu(void)
200 * and keep control until "cpu_online(cpu)" is set. Note: cpu is 201 * and keep control until "cpu_online(cpu)" is set. Note: cpu is
201 * physical, not logical. 202 * physical, not logical.
202 */ 203 */
204static struct task_struct *cpu_idle_thread[NR_CPUS];
205
203int __cpuinit __cpu_up(unsigned int cpu) 206int __cpuinit __cpu_up(unsigned int cpu)
204{ 207{
205 struct task_struct *idle; 208 struct task_struct *idle;
@@ -209,9 +212,16 @@ int __cpuinit __cpu_up(unsigned int cpu)
209 * The following code is purely to make sure 212 * The following code is purely to make sure
210 * Linux can schedule processes on this slave. 213 * Linux can schedule processes on this slave.
211 */ 214 */
212 idle = fork_idle(cpu); 215 if (!cpu_idle_thread[cpu]) {
213 if (IS_ERR(idle)) 216 idle = fork_idle(cpu);
214 panic(KERN_ERR "Fork failed for CPU %d", cpu); 217 cpu_idle_thread[cpu] = idle;
218
219 if (IS_ERR(idle))
220 panic(KERN_ERR "Fork failed for CPU %d", cpu);
221 } else {
222 idle = cpu_idle_thread[cpu];
223 init_idle(idle, cpu);
224 }
215 225
216 mp_ops->boot_secondary(cpu, idle); 226 mp_ops->boot_secondary(cpu, idle);
217 227
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c
index 5f5af7d4c890..c16bb6d6c25c 100644
--- a/arch/mips/kernel/smtc.c
+++ b/arch/mips/kernel/smtc.c
@@ -20,6 +20,7 @@
20#include <linux/clockchips.h> 20#include <linux/clockchips.h>
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/sched.h> 22#include <linux/sched.h>
23#include <linux/smp.h>
23#include <linux/cpumask.h> 24#include <linux/cpumask.h>
24#include <linux/interrupt.h> 25#include <linux/interrupt.h>
25#include <linux/kernel_stat.h> 26#include <linux/kernel_stat.h>
@@ -464,11 +465,8 @@ void smtc_prepare_cpus(int cpus)
464 smtc_configure_tlb(); 465 smtc_configure_tlb();
465 466
466 for (tc = 0, vpe = 0 ; (vpe < nvpe) && (tc < ntc) ; vpe++) { 467 for (tc = 0, vpe = 0 ; (vpe < nvpe) && (tc < ntc) ; vpe++) {
467 /* 468 if (tcpervpe[vpe] == 0)
468 * Set the MVP bits. 469 continue;
469 */
470 settc(tc);
471 write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() | VPECONF0_MVP);
472 if (vpe != 0) 470 if (vpe != 0)
473 printk(", "); 471 printk(", ");
474 printk("VPE %d: TC", vpe); 472 printk("VPE %d: TC", vpe);
@@ -487,6 +485,12 @@ void smtc_prepare_cpus(int cpus)
487 } 485 }
488 if (vpe != 0) { 486 if (vpe != 0) {
489 /* 487 /*
488 * Allow this VPE to control others.
489 */
490 write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() |
491 VPECONF0_MVP);
492
493 /*
490 * Clear any stale software interrupts from VPE's Cause 494 * Clear any stale software interrupts from VPE's Cause
491 */ 495 */
492 write_vpe_c0_cause(0); 496 write_vpe_c0_cause(0);
@@ -924,6 +928,7 @@ void ipi_decode(struct smtc_ipi *pipi)
924 int irq = MIPS_CPU_IRQ_BASE + 1; 928 int irq = MIPS_CPU_IRQ_BASE + 1;
925 929
926 smtc_ipi_nq(&freeIPIq, pipi); 930 smtc_ipi_nq(&freeIPIq, pipi);
931
927 switch (type_copy) { 932 switch (type_copy) {
928 case SMTC_CLOCK_TICK: 933 case SMTC_CLOCK_TICK:
929 irq_enter(); 934 irq_enter();
diff --git a/arch/mips/kernel/stacktrace.c b/arch/mips/kernel/stacktrace.c
index 58f5cd76c8c3..d52ff77baf3f 100644
--- a/arch/mips/kernel/stacktrace.c
+++ b/arch/mips/kernel/stacktrace.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/kernel/stacktrace.c
3 *
4 * Stack trace management functions 2 * Stack trace management functions
5 * 3 *
6 * Copyright (C) 2006 Atsushi Nemoto <anemo@mba.ocn.ne.jp> 4 * Copyright (C) 2006 Atsushi Nemoto <anemo@mba.ocn.ne.jp>
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
index 9021108eb9c1..05dd170a83f7 100644
--- a/arch/mips/kernel/sync-r4k.c
+++ b/arch/mips/kernel/sync-r4k.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Count register synchronisation. 2 * Count register synchronisation.
3 * 3 *
4 * All CPUs will have their count registers synchronised to the CPU0 expirelo 4 * All CPUs will have their count registers synchronised to the CPU0 next time
5 * value. This can cause a small timewarp for CPU0. All other CPU's should 5 * value. This can cause a small timewarp for CPU0. All other CPU's should
6 * not have done anything significant (but they may have had interrupts 6 * not have done anything significant (but they may have had interrupts
7 * enabled briefly - prom_smp_finish() should not be responsible for enabling 7 * enabled briefly - prom_smp_finish() should not be responsible for enabling
@@ -13,21 +13,22 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/irqflags.h> 15#include <linux/irqflags.h>
16#include <linux/r4k-timer.h> 16#include <linux/cpumask.h>
17 17
18#include <asm/r4k-timer.h>
18#include <asm/atomic.h> 19#include <asm/atomic.h>
19#include <asm/barrier.h> 20#include <asm/barrier.h>
20#include <asm/cpumask.h>
21#include <asm/mipsregs.h> 21#include <asm/mipsregs.h>
22 22
23static atomic_t __initdata count_start_flag = ATOMIC_INIT(0); 23static atomic_t __cpuinitdata count_start_flag = ATOMIC_INIT(0);
24static atomic_t __initdata count_count_start = ATOMIC_INIT(0); 24static atomic_t __cpuinitdata count_count_start = ATOMIC_INIT(0);
25static atomic_t __initdata count_count_stop = ATOMIC_INIT(0); 25static atomic_t __cpuinitdata count_count_stop = ATOMIC_INIT(0);
26static atomic_t __cpuinitdata count_reference = ATOMIC_INIT(0);
26 27
27#define COUNTON 100 28#define COUNTON 100
28#define NR_LOOPS 5 29#define NR_LOOPS 5
29 30
30void __init synchronise_count_master(void) 31void __cpuinit synchronise_count_master(void)
31{ 32{
32 int i; 33 int i;
33 unsigned long flags; 34 unsigned long flags;
@@ -42,19 +43,20 @@ void __init synchronise_count_master(void)
42 return; 43 return;
43#endif 44#endif
44 45
45 pr_info("Checking COUNT synchronization across %u CPUs: ", 46 printk(KERN_INFO "Synchronize counters across %u CPUs: ",
46 num_online_cpus()); 47 num_online_cpus());
47 48
48 local_irq_save(flags); 49 local_irq_save(flags);
49 50
50 /* 51 /*
51 * Notify the slaves that it's time to start 52 * Notify the slaves that it's time to start
52 */ 53 */
54 atomic_set(&count_reference, read_c0_count());
53 atomic_set(&count_start_flag, 1); 55 atomic_set(&count_start_flag, 1);
54 smp_wmb(); 56 smp_wmb();
55 57
56 /* Count will be initialised to expirelo for all CPU's */ 58 /* Count will be initialised to current timer for all CPU's */
57 initcount = expirelo; 59 initcount = read_c0_count();
58 60
59 /* 61 /*
60 * We loop a few times to get a primed instruction cache, 62 * We loop a few times to get a primed instruction cache,
@@ -106,7 +108,7 @@ void __init synchronise_count_master(void)
106 printk("done.\n"); 108 printk("done.\n");
107} 109}
108 110
109void __init synchronise_count_slave(void) 111void __cpuinit synchronise_count_slave(void)
110{ 112{
111 int i; 113 int i;
112 unsigned long flags; 114 unsigned long flags;
@@ -131,8 +133,8 @@ void __init synchronise_count_slave(void)
131 while (!atomic_read(&count_start_flag)) 133 while (!atomic_read(&count_start_flag))
132 mb(); 134 mb();
133 135
134 /* Count will be initialised to expirelo for all CPU's */ 136 /* Count will be initialised to next expire for all CPU's */
135 initcount = expirelo; 137 initcount = atomic_read(&count_reference);
136 138
137 ncpus = num_online_cpus(); 139 ncpus = num_online_cpus();
138 for (i = 0; i < NR_LOOPS; i++) { 140 for (i = 0; i < NR_LOOPS; i++) {
@@ -156,4 +158,3 @@ void __init synchronise_count_slave(void)
156 local_irq_restore(flags); 158 local_irq_restore(flags);
157} 159}
158#undef NR_LOOPS 160#undef NR_LOOPS
159#endif
diff --git a/arch/mips/kernel/topology.c b/arch/mips/kernel/topology.c
index 660e44ed44d7..cf3eb61fad12 100644
--- a/arch/mips/kernel/topology.c
+++ b/arch/mips/kernel/topology.c
@@ -17,7 +17,10 @@ static int __init topology_init(void)
17#endif /* CONFIG_NUMA */ 17#endif /* CONFIG_NUMA */
18 18
19 for_each_present_cpu(i) { 19 for_each_present_cpu(i) {
20 ret = register_cpu(&per_cpu(cpu_devices, i), i); 20 struct cpu *c = &per_cpu(cpu_devices, i);
21
22 c->hotpluggable = 1;
23 ret = register_cpu(c, i);
21 if (ret) 24 if (ret)
22 printk(KERN_WARNING "topology_init: register_cpu %d " 25 printk(KERN_WARNING "topology_init: register_cpu %d "
23 "failed (%d)\n", i, ret); 26 "failed (%d)\n", i, ret);
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index e83da174b533..08f1edf355e8 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -1502,7 +1502,7 @@ void __cpuinit per_cpu_trap_init(void)
1502 status_set); 1502 status_set);
1503 1503
1504 if (cpu_has_mips_r2) { 1504 if (cpu_has_mips_r2) {
1505 unsigned int enable = 0x0000000f; 1505 unsigned int enable = 0x0000000f | cpu_hwrena_impl_bits;
1506 1506
1507 if (!noulri && cpu_has_userlocal) 1507 if (!noulri && cpu_has_userlocal)
1508 enable |= (1 << 29); 1508 enable |= (1 << 29);
@@ -1510,10 +1510,6 @@ void __cpuinit per_cpu_trap_init(void)
1510 write_c0_hwrena(enable); 1510 write_c0_hwrena(enable);
1511 } 1511 }
1512 1512
1513#ifdef CONFIG_CPU_CAVIUM_OCTEON
1514 write_c0_hwrena(0xc000000f); /* Octeon has register 30 and 31 */
1515#endif
1516
1517#ifdef CONFIG_MIPS_MT_SMTC 1513#ifdef CONFIG_MIPS_MT_SMTC
1518 if (!secondaryTC) { 1514 if (!secondaryTC) {
1519#endif /* CONFIG_MIPS_MT_SMTC */ 1515#endif /* CONFIG_MIPS_MT_SMTC */
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c
index 3ca5f42e819d..9a1ab7e87fd4 100644
--- a/arch/mips/kernel/vpe.c
+++ b/arch/mips/kernel/vpe.c
@@ -73,7 +73,7 @@ static int major;
73static const int minor = 1; /* fixed for now */ 73static const int minor = 1; /* fixed for now */
74 74
75#ifdef CONFIG_MIPS_APSP_KSPD 75#ifdef CONFIG_MIPS_APSP_KSPD
76 static struct kspd_notifications kspd_events; 76static struct kspd_notifications kspd_events;
77static int kspd_events_reqd = 0; 77static int kspd_events_reqd = 0;
78#endif 78#endif
79 79
@@ -155,10 +155,9 @@ struct {
155}; 155};
156 156
157static void release_progmem(void *ptr); 157static void release_progmem(void *ptr);
158extern void save_gp_address(unsigned int secbase, unsigned int rel);
159 158
160/* get the vpe associated with this minor */ 159/* get the vpe associated with this minor */
161struct vpe *get_vpe(int minor) 160static struct vpe *get_vpe(int minor)
162{ 161{
163 struct vpe *v; 162 struct vpe *v;
164 163
@@ -174,7 +173,7 @@ struct vpe *get_vpe(int minor)
174} 173}
175 174
176/* get the vpe associated with this minor */ 175/* get the vpe associated with this minor */
177struct tc *get_tc(int index) 176static struct tc *get_tc(int index)
178{ 177{
179 struct tc *t; 178 struct tc *t;
180 179
@@ -186,20 +185,8 @@ struct tc *get_tc(int index)
186 return NULL; 185 return NULL;
187} 186}
188 187
189struct tc *get_tc_unused(void)
190{
191 struct tc *t;
192
193 list_for_each_entry(t, &vpecontrol.tc_list, list) {
194 if (t->state == TC_STATE_UNUSED)
195 return t;
196 }
197
198 return NULL;
199}
200
201/* allocate a vpe and associate it with this minor (or index) */ 188/* allocate a vpe and associate it with this minor (or index) */
202struct vpe *alloc_vpe(int minor) 189static struct vpe *alloc_vpe(int minor)
203{ 190{
204 struct vpe *v; 191 struct vpe *v;
205 192
@@ -216,7 +203,7 @@ struct vpe *alloc_vpe(int minor)
216} 203}
217 204
218/* allocate a tc. At startup only tc0 is running, all other can be halted. */ 205/* allocate a tc. At startup only tc0 is running, all other can be halted. */
219struct tc *alloc_tc(int index) 206static struct tc *alloc_tc(int index)
220{ 207{
221 struct tc *tc; 208 struct tc *tc;
222 209
@@ -232,7 +219,7 @@ out:
232} 219}
233 220
234/* clean up and free everything */ 221/* clean up and free everything */
235void release_vpe(struct vpe *v) 222static void release_vpe(struct vpe *v)
236{ 223{
237 list_del(&v->list); 224 list_del(&v->list);
238 if (v->load_addr) 225 if (v->load_addr)
@@ -240,7 +227,7 @@ void release_vpe(struct vpe *v)
240 kfree(v); 227 kfree(v);
241} 228}
242 229
243void dump_mtregs(void) 230static void dump_mtregs(void)
244{ 231{
245 unsigned long val; 232 unsigned long val;
246 233
@@ -327,7 +314,8 @@ static void layout_sections(struct module *mod, const Elf_Ehdr * hdr,
327 || (s->sh_flags & masks[m][1]) 314 || (s->sh_flags & masks[m][1])
328 || s->sh_entsize != ~0UL) 315 || s->sh_entsize != ~0UL)
329 continue; 316 continue;
330 s->sh_entsize = get_offset(&mod->core_size, s); 317 s->sh_entsize =
318 get_offset((unsigned long *)&mod->core_size, s);
331 } 319 }
332 320
333 if (m == 0) 321 if (m == 0)
@@ -461,16 +449,15 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
461{ 449{
462 unsigned long insnlo = *location; 450 unsigned long insnlo = *location;
463 Elf32_Addr val, vallo; 451 Elf32_Addr val, vallo;
452 struct mips_hi16 *l, *next;
464 453
465 /* Sign extend the addend we extract from the lo insn. */ 454 /* Sign extend the addend we extract from the lo insn. */
466 vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000; 455 vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;
467 456
468 if (mips_hi16_list != NULL) { 457 if (mips_hi16_list != NULL) {
469 struct mips_hi16 *l;
470 458
471 l = mips_hi16_list; 459 l = mips_hi16_list;
472 while (l != NULL) { 460 while (l != NULL) {
473 struct mips_hi16 *next;
474 unsigned long insn; 461 unsigned long insn;
475 462
476 /* 463 /*
@@ -480,7 +467,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
480 printk(KERN_DEBUG "VPE loader: " 467 printk(KERN_DEBUG "VPE loader: "
481 "apply_r_mips_lo16/hi16: \t" 468 "apply_r_mips_lo16/hi16: \t"
482 "inconsistent value information\n"); 469 "inconsistent value information\n");
483 return -ENOEXEC; 470 goto out_free;
484 } 471 }
485 472
486 /* 473 /*
@@ -518,6 +505,16 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
518 *location = insnlo; 505 *location = insnlo;
519 506
520 return 0; 507 return 0;
508
509out_free:
510 while (l != NULL) {
511 next = l->next;
512 kfree(l);
513 l = next;
514 }
515 mips_hi16_list = NULL;
516
517 return -ENOEXEC;
521} 518}
522 519
523static int (*reloc_handlers[]) (struct module *me, uint32_t *location, 520static int (*reloc_handlers[]) (struct module *me, uint32_t *location,
@@ -541,7 +538,7 @@ static char *rstrs[] = {
541 [R_MIPS_PC16] = "MIPS_PC16" 538 [R_MIPS_PC16] = "MIPS_PC16"
542}; 539};
543 540
544int apply_relocations(Elf32_Shdr *sechdrs, 541static int apply_relocations(Elf32_Shdr *sechdrs,
545 const char *strtab, 542 const char *strtab,
546 unsigned int symindex, 543 unsigned int symindex,
547 unsigned int relsec, 544 unsigned int relsec,
@@ -586,7 +583,7 @@ int apply_relocations(Elf32_Shdr *sechdrs,
586 return 0; 583 return 0;
587} 584}
588 585
589void save_gp_address(unsigned int secbase, unsigned int rel) 586static inline void save_gp_address(unsigned int secbase, unsigned int rel)
590{ 587{
591 gp_addr = secbase + rel; 588 gp_addr = secbase + rel;
592 gp_offs = gp_addr - (secbase & 0xffff0000); 589 gp_offs = gp_addr - (secbase & 0xffff0000);
@@ -1387,7 +1384,7 @@ static ssize_t store_ntcs(struct device *dev, struct device_attribute *attr,
1387 return len; 1384 return len;
1388 1385
1389out_einval: 1386out_einval:
1390 return -EINVAL;; 1387 return -EINVAL;
1391} 1388}
1392 1389
1393static struct device_attribute vpe_class_attributes[] = { 1390static struct device_attribute vpe_class_attributes[] = {
diff --git a/arch/mips/lib/delay.c b/arch/mips/lib/delay.c
index f69c6b569eb3..6b3b1de9dcae 100644
--- a/arch/mips/lib/delay.c
+++ b/arch/mips/lib/delay.c
@@ -43,7 +43,7 @@ void __udelay(unsigned long us)
43{ 43{
44 unsigned int lpj = current_cpu_data.udelay_val; 44 unsigned int lpj = current_cpu_data.udelay_val;
45 45
46 __delay((us * 0x000010c7 * HZ * lpj) >> 32); 46 __delay((us * 0x000010c7ull * HZ * lpj) >> 32);
47} 47}
48EXPORT_SYMBOL(__udelay); 48EXPORT_SYMBOL(__udelay);
49 49
@@ -51,6 +51,6 @@ void __ndelay(unsigned long ns)
51{ 51{
52 unsigned int lpj = current_cpu_data.udelay_val; 52 unsigned int lpj = current_cpu_data.udelay_val;
53 53
54 __delay((us * 0x00000005 * HZ * lpj) >> 32); 54 __delay((ns * 0x00000005ull * HZ * lpj) >> 32);
55} 55}
56EXPORT_SYMBOL(__ndelay); 56EXPORT_SYMBOL(__ndelay);
diff --git a/arch/mips/mipssim/sim_time.c b/arch/mips/mipssim/sim_time.c
index 881ecbc1fa23..5492c42f7650 100644
--- a/arch/mips/mipssim/sim_time.c
+++ b/arch/mips/mipssim/sim_time.c
@@ -89,12 +89,13 @@ unsigned __cpuinit get_c0_compare_int(void)
89 if (cpu_has_veic) { 89 if (cpu_has_veic) {
90 set_vi_handler(MSC01E_INT_CPUCTR, mips_timer_dispatch); 90 set_vi_handler(MSC01E_INT_CPUCTR, mips_timer_dispatch);
91 mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR; 91 mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR;
92 } else { 92
93#endif 93 return mips_cpu_timer_irq;
94 if (cpu_has_vint)
95 set_vi_handler(cp0_compare_irq, mips_timer_dispatch);
96 mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
97 } 94 }
95#endif
96 if (cpu_has_vint)
97 set_vi_handler(cp0_compare_irq, mips_timer_dispatch);
98 mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
98 99
99 return mips_cpu_timer_irq; 100 return mips_cpu_timer_irq;
100} 101}
diff --git a/arch/mips/mm/Makefile b/arch/mips/mm/Makefile
index d7ec95522292..f0e435599707 100644
--- a/arch/mips/mm/Makefile
+++ b/arch/mips/mm/Makefile
@@ -8,6 +8,7 @@ obj-y += cache.o dma-default.o extable.o fault.o \
8obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o 8obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
9obj-$(CONFIG_64BIT) += pgtable-64.o 9obj-$(CONFIG_64BIT) += pgtable-64.o
10obj-$(CONFIG_HIGHMEM) += highmem.o 10obj-$(CONFIG_HIGHMEM) += highmem.o
11obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
11 12
12obj-$(CONFIG_CPU_LOONGSON2) += c-r4k.o cex-gen.o tlb-r4k.o 13obj-$(CONFIG_CPU_LOONGSON2) += c-r4k.o cex-gen.o tlb-r4k.o
13obj-$(CONFIG_CPU_MIPS32) += c-r4k.o cex-gen.o tlb-r4k.o 14obj-$(CONFIG_CPU_MIPS32) += c-r4k.o cex-gen.o tlb-r4k.o
diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c
index 44d01a0a8490..10ab69f7183f 100644
--- a/arch/mips/mm/c-octeon.c
+++ b/arch/mips/mm/c-octeon.c
@@ -8,6 +8,7 @@
8#include <linux/init.h> 8#include <linux/init.h>
9#include <linux/kernel.h> 9#include <linux/kernel.h>
10#include <linux/sched.h> 10#include <linux/sched.h>
11#include <linux/smp.h>
11#include <linux/mm.h> 12#include <linux/mm.h>
12#include <linux/bitops.h> 13#include <linux/bitops.h>
13#include <linux/cpu.h> 14#include <linux/cpu.h>
@@ -288,7 +289,7 @@ static void cache_parity_error_octeon(int non_recoverable)
288} 289}
289 290
290/** 291/**
291 * Called when the the exception is not recoverable 292 * Called when the the exception is recoverable
292 */ 293 */
293 294
294asmlinkage void cache_parity_error_octeon_recoverable(void) 295asmlinkage void cache_parity_error_octeon_recoverable(void)
@@ -297,7 +298,7 @@ asmlinkage void cache_parity_error_octeon_recoverable(void)
297} 298}
298 299
299/** 300/**
300 * Called when the the exception is recoverable 301 * Called when the the exception is not recoverable
301 */ 302 */
302 303
303asmlinkage void cache_parity_error_octeon_non_recoverable(void) 304asmlinkage void cache_parity_error_octeon_non_recoverable(void)
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c
index 5500c20c79ae..54e5f7b9f440 100644
--- a/arch/mips/mm/c-r3k.c
+++ b/arch/mips/mm/c-r3k.c
@@ -12,6 +12,7 @@
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/sched.h> 14#include <linux/sched.h>
15#include <linux/smp.h>
15#include <linux/mm.h> 16#include <linux/mm.h>
16 17
17#include <asm/page.h> 18#include <asm/page.h>
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 171951d2305b..6721ee2b1e8b 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -13,6 +13,7 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/linkage.h> 14#include <linux/linkage.h>
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/smp.h>
16#include <linux/mm.h> 17#include <linux/mm.h>
17#include <linux/module.h> 18#include <linux/module.h>
18#include <linux/bitops.h> 19#include <linux/bitops.h>
@@ -100,6 +101,12 @@ static inline void r4k_blast_dcache_page_dc32(unsigned long addr)
100 blast_dcache32_page(addr); 101 blast_dcache32_page(addr);
101} 102}
102 103
104static inline void r4k_blast_dcache_page_dc64(unsigned long addr)
105{
106 R4600_HIT_CACHEOP_WAR_IMPL;
107 blast_dcache64_page(addr);
108}
109
103static void __cpuinit r4k_blast_dcache_page_setup(void) 110static void __cpuinit r4k_blast_dcache_page_setup(void)
104{ 111{
105 unsigned long dc_lsize = cpu_dcache_line_size(); 112 unsigned long dc_lsize = cpu_dcache_line_size();
@@ -110,6 +117,8 @@ static void __cpuinit r4k_blast_dcache_page_setup(void)
110 r4k_blast_dcache_page = blast_dcache16_page; 117 r4k_blast_dcache_page = blast_dcache16_page;
111 else if (dc_lsize == 32) 118 else if (dc_lsize == 32)
112 r4k_blast_dcache_page = r4k_blast_dcache_page_dc32; 119 r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
120 else if (dc_lsize == 64)
121 r4k_blast_dcache_page = r4k_blast_dcache_page_dc64;
113} 122}
114 123
115static void (* r4k_blast_dcache_page_indexed)(unsigned long addr); 124static void (* r4k_blast_dcache_page_indexed)(unsigned long addr);
@@ -124,6 +133,8 @@ static void __cpuinit r4k_blast_dcache_page_indexed_setup(void)
124 r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed; 133 r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
125 else if (dc_lsize == 32) 134 else if (dc_lsize == 32)
126 r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed; 135 r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
136 else if (dc_lsize == 64)
137 r4k_blast_dcache_page_indexed = blast_dcache64_page_indexed;
127} 138}
128 139
129static void (* r4k_blast_dcache)(void); 140static void (* r4k_blast_dcache)(void);
@@ -138,6 +149,8 @@ static void __cpuinit r4k_blast_dcache_setup(void)
138 r4k_blast_dcache = blast_dcache16; 149 r4k_blast_dcache = blast_dcache16;
139 else if (dc_lsize == 32) 150 else if (dc_lsize == 32)
140 r4k_blast_dcache = blast_dcache32; 151 r4k_blast_dcache = blast_dcache32;
152 else if (dc_lsize == 64)
153 r4k_blast_dcache = blast_dcache64;
141} 154}
142 155
143/* force code alignment (used for TX49XX_ICACHE_INDEX_INV_WAR) */ 156/* force code alignment (used for TX49XX_ICACHE_INDEX_INV_WAR) */
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c
index f7c8f9ce39c1..6515b4418714 100644
--- a/arch/mips/mm/c-tx39.c
+++ b/arch/mips/mm/c-tx39.c
@@ -11,6 +11,7 @@
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sched.h> 13#include <linux/sched.h>
14#include <linux/smp.h>
14#include <linux/mm.h> 15#include <linux/mm.h>
15 16
16#include <asm/cacheops.h> 17#include <asm/cacheops.h>
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index 4fdb7f5216b9..7e48e76148aa 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -20,9 +20,10 @@
20 20
21#include <dma-coherence.h> 21#include <dma-coherence.h>
22 22
23static inline unsigned long dma_addr_to_virt(dma_addr_t dma_addr) 23static inline unsigned long dma_addr_to_virt(struct device *dev,
24 dma_addr_t dma_addr)
24{ 25{
25 unsigned long addr = plat_dma_addr_to_phys(dma_addr); 26 unsigned long addr = plat_dma_addr_to_phys(dev, dma_addr);
26 27
27 return (unsigned long)phys_to_virt(addr); 28 return (unsigned long)phys_to_virt(addr);
28} 29}
@@ -111,7 +112,7 @@ EXPORT_SYMBOL(dma_alloc_coherent);
111void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr, 112void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,
112 dma_addr_t dma_handle) 113 dma_addr_t dma_handle)
113{ 114{
114 plat_unmap_dma_mem(dev, dma_handle); 115 plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
115 free_pages((unsigned long) vaddr, get_order(size)); 116 free_pages((unsigned long) vaddr, get_order(size));
116} 117}
117 118
@@ -122,7 +123,7 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
122{ 123{
123 unsigned long addr = (unsigned long) vaddr; 124 unsigned long addr = (unsigned long) vaddr;
124 125
125 plat_unmap_dma_mem(dev, dma_handle); 126 plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
126 127
127 if (!plat_device_is_coherent(dev)) 128 if (!plat_device_is_coherent(dev))
128 addr = CAC_ADDR(addr); 129 addr = CAC_ADDR(addr);
@@ -170,10 +171,10 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
170 enum dma_data_direction direction) 171 enum dma_data_direction direction)
171{ 172{
172 if (cpu_is_noncoherent_r10000(dev)) 173 if (cpu_is_noncoherent_r10000(dev))
173 __dma_sync(dma_addr_to_virt(dma_addr), size, 174 __dma_sync(dma_addr_to_virt(dev, dma_addr), size,
174 direction); 175 direction);
175 176
176 plat_unmap_dma_mem(dev, dma_addr); 177 plat_unmap_dma_mem(dev, dma_addr, size, direction);
177} 178}
178 179
179EXPORT_SYMBOL(dma_unmap_single); 180EXPORT_SYMBOL(dma_unmap_single);
@@ -232,7 +233,7 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
232 if (addr) 233 if (addr)
233 __dma_sync(addr, sg->length, direction); 234 __dma_sync(addr, sg->length, direction);
234 } 235 }
235 plat_unmap_dma_mem(dev, sg->dma_address); 236 plat_unmap_dma_mem(dev, sg->dma_address, sg->length, direction);
236 } 237 }
237} 238}
238 239
@@ -246,7 +247,7 @@ void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
246 if (cpu_is_noncoherent_r10000(dev)) { 247 if (cpu_is_noncoherent_r10000(dev)) {
247 unsigned long addr; 248 unsigned long addr;
248 249
249 addr = dma_addr_to_virt(dma_handle); 250 addr = dma_addr_to_virt(dev, dma_handle);
250 __dma_sync(addr, size, direction); 251 __dma_sync(addr, size, direction);
251 } 252 }
252} 253}
@@ -262,7 +263,7 @@ void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle,
262 if (!plat_device_is_coherent(dev)) { 263 if (!plat_device_is_coherent(dev)) {
263 unsigned long addr; 264 unsigned long addr;
264 265
265 addr = dma_addr_to_virt(dma_handle); 266 addr = dma_addr_to_virt(dev, dma_handle);
266 __dma_sync(addr, size, direction); 267 __dma_sync(addr, size, direction);
267 } 268 }
268} 269}
@@ -277,7 +278,7 @@ void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,
277 if (cpu_is_noncoherent_r10000(dev)) { 278 if (cpu_is_noncoherent_r10000(dev)) {
278 unsigned long addr; 279 unsigned long addr;
279 280
280 addr = dma_addr_to_virt(dma_handle); 281 addr = dma_addr_to_virt(dev, dma_handle);
281 __dma_sync(addr + offset, size, direction); 282 __dma_sync(addr + offset, size, direction);
282 } 283 }
283} 284}
@@ -293,7 +294,7 @@ void dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
293 if (!plat_device_is_coherent(dev)) { 294 if (!plat_device_is_coherent(dev)) {
294 unsigned long addr; 295 unsigned long addr;
295 296
296 addr = dma_addr_to_virt(dma_handle); 297 addr = dma_addr_to_virt(dev, dma_handle);
297 __dma_sync(addr + offset, size, direction); 298 __dma_sync(addr + offset, size, direction);
298 } 299 }
299} 300}
diff --git a/arch/mips/mm/extable.c b/arch/mips/mm/extable.c
index 297fb9f390dc..9d25d2ba4b9e 100644
--- a/arch/mips/mm/extable.c
+++ b/arch/mips/mm/extable.c
@@ -1,5 +1,9 @@
1/* 1/*
2 * linux/arch/mips/mm/extable.c 2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1997, 99, 2001 - 2004 Ralf Baechle <ralf@linux-mips.org>
3 */ 7 */
4#include <linux/module.h> 8#include <linux/module.h>
5#include <linux/spinlock.h> 9#include <linux/spinlock.h>
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index 55767ad9f00e..f956ecbb8136 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -102,7 +102,7 @@ good_area:
102 * make sure we exit gracefully rather than endlessly redo 102 * make sure we exit gracefully rather than endlessly redo
103 * the fault. 103 * the fault.
104 */ 104 */
105 fault = handle_mm_fault(mm, vma, address, write); 105 fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0);
106 if (unlikely(fault & VM_FAULT_ERROR)) { 106 if (unlikely(fault & VM_FAULT_ERROR)) {
107 if (fault & VM_FAULT_OOM) 107 if (fault & VM_FAULT_OOM)
108 goto out_of_memory; 108 goto out_of_memory;
@@ -171,6 +171,7 @@ out_of_memory:
171 * We ran out of memory, call the OOM killer, and return the userspace 171 * We ran out of memory, call the OOM killer, and return the userspace
172 * (which will retry the fault, or kill us if we got oom-killed). 172 * (which will retry the fault, or kill us if we got oom-killed).
173 */ 173 */
174 up_read(&mm->mmap_sem);
174 pagefault_out_of_memory(); 175 pagefault_out_of_memory();
175 return; 176 return;
176 177
diff --git a/arch/mips/mm/highmem.c b/arch/mips/mm/highmem.c
index 2b1309b2580a..e274fda329f4 100644
--- a/arch/mips/mm/highmem.c
+++ b/arch/mips/mm/highmem.c
@@ -1,5 +1,6 @@
1#include <linux/module.h> 1#include <linux/module.h>
2#include <linux/highmem.h> 2#include <linux/highmem.h>
3#include <linux/smp.h>
3#include <asm/fixmap.h> 4#include <asm/fixmap.h>
4#include <asm/tlbflush.h> 5#include <asm/tlbflush.h>
5 6
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
new file mode 100644
index 000000000000..8c2834f5919d
--- /dev/null
+++ b/arch/mips/mm/hugetlbpage.c
@@ -0,0 +1,100 @@
1/*
2 * MIPS Huge TLB Page Support for Kernel.
3 *
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details.
7 *
8 * Copyright (C) 2002, Rohit Seth <rohit.seth@intel.com>
9 * Copyright 2005, Embedded Alley Solutions, Inc.
10 * Matt Porter <mporter@embeddedalley.com>
11 * Copyright (C) 2008, 2009 Cavium Networks, Inc.
12 */
13
14#include <linux/init.h>
15#include <linux/fs.h>
16#include <linux/mm.h>
17#include <linux/hugetlb.h>
18#include <linux/pagemap.h>
19#include <linux/slab.h>
20#include <linux/err.h>
21#include <linux/sysctl.h>
22#include <asm/mman.h>
23#include <asm/tlb.h>
24#include <asm/tlbflush.h>
25
26pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr,
27 unsigned long sz)
28{
29 pgd_t *pgd;
30 pud_t *pud;
31 pte_t *pte = NULL;
32
33 pgd = pgd_offset(mm, addr);
34 pud = pud_alloc(mm, pgd, addr);
35 if (pud)
36 pte = (pte_t *)pmd_alloc(mm, pud, addr);
37
38 return pte;
39}
40
41pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
42{
43 pgd_t *pgd;
44 pud_t *pud;
45 pmd_t *pmd = NULL;
46
47 pgd = pgd_offset(mm, addr);
48 if (pgd_present(*pgd)) {
49 pud = pud_offset(pgd, addr);
50 if (pud_present(*pud))
51 pmd = pmd_offset(pud, addr);
52 }
53 return (pte_t *) pmd;
54}
55
56int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep)
57{
58 return 0;
59}
60
61/*
62 * This function checks for proper alignment of input addr and len parameters.
63 */
64int is_aligned_hugepage_range(unsigned long addr, unsigned long len)
65{
66 if (len & ~HPAGE_MASK)
67 return -EINVAL;
68 if (addr & ~HPAGE_MASK)
69 return -EINVAL;
70 return 0;
71}
72
73struct page *
74follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
75{
76 return ERR_PTR(-EINVAL);
77}
78
79int pmd_huge(pmd_t pmd)
80{
81 return (pmd_val(pmd) & _PAGE_HUGE) != 0;
82}
83
84int pud_huge(pud_t pud)
85{
86 return (pud_val(pud) & _PAGE_HUGE) != 0;
87}
88
89struct page *
90follow_huge_pmd(struct mm_struct *mm, unsigned long address,
91 pmd_t *pmd, int write)
92{
93 struct page *page;
94
95 page = pte_page(*(pte_t *)pmd);
96 if (page)
97 page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT);
98 return page;
99}
100
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index c5511294a9ee..0e820508ff23 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -13,6 +13,7 @@
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/signal.h> 14#include <linux/signal.h>
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/smp.h>
16#include <linux/kernel.h> 17#include <linux/kernel.h>
17#include <linux/errno.h> 18#include <linux/errno.h>
18#include <linux/string.h> 19#include <linux/string.h>
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c
index 48060c635acd..f5c73754d664 100644
--- a/arch/mips/mm/page.c
+++ b/arch/mips/mm/page.c
@@ -10,6 +10,7 @@
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/smp.h>
13#include <linux/mm.h> 14#include <linux/mm.h>
14#include <linux/module.h> 15#include <linux/module.h>
15#include <linux/proc_fs.h> 16#include <linux/proc_fs.h>
diff --git a/arch/mips/mm/tlb-r3k.c b/arch/mips/mm/tlb-r3k.c
index 1c0048a6f5cf..0f5ab236ab69 100644
--- a/arch/mips/mm/tlb-r3k.c
+++ b/arch/mips/mm/tlb-r3k.c
@@ -13,6 +13,7 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/smp.h>
16#include <linux/mm.h> 17#include <linux/mm.h>
17 18
18#include <asm/page.h> 19#include <asm/page.h>
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
index 892be426787c..cee502caf398 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
@@ -10,7 +10,9 @@
10 */ 10 */
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/smp.h>
13#include <linux/mm.h> 14#include <linux/mm.h>
15#include <linux/hugetlb.h>
14 16
15#include <asm/cpu.h> 17#include <asm/cpu.h>
16#include <asm/bootinfo.h> 18#include <asm/bootinfo.h>
@@ -295,21 +297,41 @@ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte)
295 pudp = pud_offset(pgdp, address); 297 pudp = pud_offset(pgdp, address);
296 pmdp = pmd_offset(pudp, address); 298 pmdp = pmd_offset(pudp, address);
297 idx = read_c0_index(); 299 idx = read_c0_index();
298 ptep = pte_offset_map(pmdp, address); 300#ifdef CONFIG_HUGETLB_PAGE
301 /* this could be a huge page */
302 if (pmd_huge(*pmdp)) {
303 unsigned long lo;
304 write_c0_pagemask(PM_HUGE_MASK);
305 ptep = (pte_t *)pmdp;
306 lo = pte_val(*ptep) >> 6;
307 write_c0_entrylo0(lo);
308 write_c0_entrylo1(lo + (HPAGE_SIZE >> 7));
309
310 mtc0_tlbw_hazard();
311 if (idx < 0)
312 tlb_write_random();
313 else
314 tlb_write_indexed();
315 write_c0_pagemask(PM_DEFAULT_MASK);
316 } else
317#endif
318 {
319 ptep = pte_offset_map(pmdp, address);
299 320
300#if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) 321#if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32)
301 write_c0_entrylo0(ptep->pte_high); 322 write_c0_entrylo0(ptep->pte_high);
302 ptep++; 323 ptep++;
303 write_c0_entrylo1(ptep->pte_high); 324 write_c0_entrylo1(ptep->pte_high);
304#else 325#else
305 write_c0_entrylo0(pte_val(*ptep++) >> 6); 326 write_c0_entrylo0(pte_val(*ptep++) >> 6);
306 write_c0_entrylo1(pte_val(*ptep) >> 6); 327 write_c0_entrylo1(pte_val(*ptep) >> 6);
307#endif 328#endif
308 mtc0_tlbw_hazard(); 329 mtc0_tlbw_hazard();
309 if (idx < 0) 330 if (idx < 0)
310 tlb_write_random(); 331 tlb_write_random();
311 else 332 else
312 tlb_write_indexed(); 333 tlb_write_indexed();
334 }
313 tlbw_use_hazard(); 335 tlbw_use_hazard();
314 FLUSH_ITLB_VM(vma); 336 FLUSH_ITLB_VM(vma);
315 EXIT_CRITICAL(flags); 337 EXIT_CRITICAL(flags);
diff --git a/arch/mips/mm/tlb-r8k.c b/arch/mips/mm/tlb-r8k.c
index 4ec95cc2df2f..2b82f23df1a1 100644
--- a/arch/mips/mm/tlb-r8k.c
+++ b/arch/mips/mm/tlb-r8k.c
@@ -10,6 +10,7 @@
10 */ 10 */
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/smp.h>
13#include <linux/mm.h> 14#include <linux/mm.h>
14 15
15#include <asm/cpu.h> 16#include <asm/cpu.h>
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 0615b62efd6d..9a17bf8395df 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -6,8 +6,9 @@
6 * Synthesize TLB refill handlers at runtime. 6 * Synthesize TLB refill handlers at runtime.
7 * 7 *
8 * Copyright (C) 2004, 2005, 2006, 2008 Thiemo Seufer 8 * Copyright (C) 2004, 2005, 2006, 2008 Thiemo Seufer
9 * Copyright (C) 2005, 2007 Maciej W. Rozycki 9 * Copyright (C) 2005, 2007, 2008, 2009 Maciej W. Rozycki
10 * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org) 10 * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)
11 * Copyright (C) 2008, 2009 Cavium Networks, Inc.
11 * 12 *
12 * ... and the days got worse and worse and now you see 13 * ... and the days got worse and worse and now you see
13 * I've gone completly out of my mind. 14 * I've gone completly out of my mind.
@@ -19,8 +20,10 @@
19 * (Condolences to Napoleon XIV) 20 * (Condolences to Napoleon XIV)
20 */ 21 */
21 22
23#include <linux/bug.h>
22#include <linux/kernel.h> 24#include <linux/kernel.h>
23#include <linux/types.h> 25#include <linux/types.h>
26#include <linux/smp.h>
24#include <linux/string.h> 27#include <linux/string.h>
25#include <linux/init.h> 28#include <linux/init.h>
26 29
@@ -82,6 +85,9 @@ enum label_id {
82 label_nopage_tlbm, 85 label_nopage_tlbm,
83 label_smp_pgtable_change, 86 label_smp_pgtable_change,
84 label_r3000_write_probe_fail, 87 label_r3000_write_probe_fail,
88#ifdef CONFIG_HUGETLB_PAGE
89 label_tlb_huge_update,
90#endif
85}; 91};
86 92
87UASM_L_LA(_second_part) 93UASM_L_LA(_second_part)
@@ -98,6 +104,9 @@ UASM_L_LA(_nopage_tlbs)
98UASM_L_LA(_nopage_tlbm) 104UASM_L_LA(_nopage_tlbm)
99UASM_L_LA(_smp_pgtable_change) 105UASM_L_LA(_smp_pgtable_change)
100UASM_L_LA(_r3000_write_probe_fail) 106UASM_L_LA(_r3000_write_probe_fail)
107#ifdef CONFIG_HUGETLB_PAGE
108UASM_L_LA(_tlb_huge_update)
109#endif
101 110
102/* 111/*
103 * For debug purposes. 112 * For debug purposes.
@@ -125,6 +134,7 @@ static inline void dump_handler(const u32 *handler, int count)
125#define C0_TCBIND 2, 2 134#define C0_TCBIND 2, 2
126#define C0_ENTRYLO1 3, 0 135#define C0_ENTRYLO1 3, 0
127#define C0_CONTEXT 4, 0 136#define C0_CONTEXT 4, 0
137#define C0_PAGEMASK 5, 0
128#define C0_BADVADDR 8, 0 138#define C0_BADVADDR 8, 0
129#define C0_ENTRYHI 10, 0 139#define C0_ENTRYHI 10, 0
130#define C0_EPC 14, 0 140#define C0_EPC 14, 0
@@ -258,7 +268,8 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
258 } 268 }
259 269
260 if (cpu_has_mips_r2) { 270 if (cpu_has_mips_r2) {
261 uasm_i_ehb(p); 271 if (cpu_has_mips_r2_exec_hazard)
272 uasm_i_ehb(p);
262 tlbw(p); 273 tlbw(p);
263 return; 274 return;
264 } 275 }
@@ -310,7 +321,6 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
310 case CPU_BCM3302: 321 case CPU_BCM3302:
311 case CPU_BCM4710: 322 case CPU_BCM4710:
312 case CPU_LOONGSON2: 323 case CPU_LOONGSON2:
313 case CPU_CAVIUM_OCTEON:
314 case CPU_R5500: 324 case CPU_R5500:
315 if (m4kc_tlbp_war()) 325 if (m4kc_tlbp_war())
316 uasm_i_nop(p); 326 uasm_i_nop(p);
@@ -382,6 +392,98 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
382 } 392 }
383} 393}
384 394
395#ifdef CONFIG_HUGETLB_PAGE
396static __cpuinit void build_huge_tlb_write_entry(u32 **p,
397 struct uasm_label **l,
398 struct uasm_reloc **r,
399 unsigned int tmp,
400 enum tlb_write_entry wmode)
401{
402 /* Set huge page tlb entry size */
403 uasm_i_lui(p, tmp, PM_HUGE_MASK >> 16);
404 uasm_i_ori(p, tmp, tmp, PM_HUGE_MASK & 0xffff);
405 uasm_i_mtc0(p, tmp, C0_PAGEMASK);
406
407 build_tlb_write_entry(p, l, r, wmode);
408
409 /* Reset default page size */
410 if (PM_DEFAULT_MASK >> 16) {
411 uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16);
412 uasm_i_ori(p, tmp, tmp, PM_DEFAULT_MASK & 0xffff);
413 uasm_il_b(p, r, label_leave);
414 uasm_i_mtc0(p, tmp, C0_PAGEMASK);
415 } else if (PM_DEFAULT_MASK) {
416 uasm_i_ori(p, tmp, 0, PM_DEFAULT_MASK);
417 uasm_il_b(p, r, label_leave);
418 uasm_i_mtc0(p, tmp, C0_PAGEMASK);
419 } else {
420 uasm_il_b(p, r, label_leave);
421 uasm_i_mtc0(p, 0, C0_PAGEMASK);
422 }
423}
424
425/*
426 * Check if Huge PTE is present, if so then jump to LABEL.
427 */
428static void __cpuinit
429build_is_huge_pte(u32 **p, struct uasm_reloc **r, unsigned int tmp,
430 unsigned int pmd, int lid)
431{
432 UASM_i_LW(p, tmp, 0, pmd);
433 uasm_i_andi(p, tmp, tmp, _PAGE_HUGE);
434 uasm_il_bnez(p, r, tmp, lid);
435}
436
437static __cpuinit void build_huge_update_entries(u32 **p,
438 unsigned int pte,
439 unsigned int tmp)
440{
441 int small_sequence;
442
443 /*
444 * A huge PTE describes an area the size of the
445 * configured huge page size. This is twice the
446 * of the large TLB entry size we intend to use.
447 * A TLB entry half the size of the configured
448 * huge page size is configured into entrylo0
449 * and entrylo1 to cover the contiguous huge PTE
450 * address space.
451 */
452 small_sequence = (HPAGE_SIZE >> 7) < 0x10000;
453
454 /* We can clobber tmp. It isn't used after this.*/
455 if (!small_sequence)
456 uasm_i_lui(p, tmp, HPAGE_SIZE >> (7 + 16));
457
458 UASM_i_SRL(p, pte, pte, 6); /* convert to entrylo */
459 uasm_i_mtc0(p, pte, C0_ENTRYLO0); /* load it */
460 /* convert to entrylo1 */
461 if (small_sequence)
462 UASM_i_ADDIU(p, pte, pte, HPAGE_SIZE >> 7);
463 else
464 UASM_i_ADDU(p, pte, pte, tmp);
465
466 uasm_i_mtc0(p, pte, C0_ENTRYLO1); /* load it */
467}
468
469static __cpuinit void build_huge_handler_tail(u32 **p,
470 struct uasm_reloc **r,
471 struct uasm_label **l,
472 unsigned int pte,
473 unsigned int ptr)
474{
475#ifdef CONFIG_SMP
476 UASM_i_SC(p, pte, 0, ptr);
477 uasm_il_beqz(p, r, pte, label_tlb_huge_update);
478 UASM_i_LW(p, pte, 0, ptr); /* Needed because SC killed our PTE */
479#else
480 UASM_i_SW(p, pte, 0, ptr);
481#endif
482 build_huge_update_entries(p, pte, ptr);
483 build_huge_tlb_write_entry(p, l, r, pte, tlb_indexed);
484}
485#endif /* CONFIG_HUGETLB_PAGE */
486
385#ifdef CONFIG_64BIT 487#ifdef CONFIG_64BIT
386/* 488/*
387 * TMP and PTR are scratch. 489 * TMP and PTR are scratch.
@@ -649,6 +751,14 @@ static void __cpuinit build_update_entries(u32 **p, unsigned int tmp,
649#endif 751#endif
650} 752}
651 753
754/*
755 * For a 64-bit kernel, we are using the 64-bit XTLB refill exception
756 * because EXL == 0. If we wrap, we can also use the 32 instruction
757 * slots before the XTLB refill exception handler which belong to the
758 * unused TLB refill exception.
759 */
760#define MIPS64_REFILL_INSNS 32
761
652static void __cpuinit build_r4000_tlb_refill_handler(void) 762static void __cpuinit build_r4000_tlb_refill_handler(void)
653{ 763{
654 u32 *p = tlb_handler; 764 u32 *p = tlb_handler;
@@ -680,12 +790,23 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
680 build_get_pgde32(&p, K0, K1); /* get pgd in K1 */ 790 build_get_pgde32(&p, K0, K1); /* get pgd in K1 */
681#endif 791#endif
682 792
793#ifdef CONFIG_HUGETLB_PAGE
794 build_is_huge_pte(&p, &r, K0, K1, label_tlb_huge_update);
795#endif
796
683 build_get_ptep(&p, K0, K1); 797 build_get_ptep(&p, K0, K1);
684 build_update_entries(&p, K0, K1); 798 build_update_entries(&p, K0, K1);
685 build_tlb_write_entry(&p, &l, &r, tlb_random); 799 build_tlb_write_entry(&p, &l, &r, tlb_random);
686 uasm_l_leave(&l, p); 800 uasm_l_leave(&l, p);
687 uasm_i_eret(&p); /* return from trap */ 801 uasm_i_eret(&p); /* return from trap */
688 802
803#ifdef CONFIG_HUGETLB_PAGE
804 uasm_l_tlb_huge_update(&l, p);
805 UASM_i_LW(&p, K0, 0, K1);
806 build_huge_update_entries(&p, K0, K1);
807 build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random);
808#endif
809
689#ifdef CONFIG_64BIT 810#ifdef CONFIG_64BIT
690 build_get_pgd_vmalloc64(&p, &l, &r, K0, K1); 811 build_get_pgd_vmalloc64(&p, &l, &r, K0, K1);
691#endif 812#endif
@@ -702,9 +823,10 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
702 if ((p - tlb_handler) > 64) 823 if ((p - tlb_handler) > 64)
703 panic("TLB refill handler space exceeded"); 824 panic("TLB refill handler space exceeded");
704#else 825#else
705 if (((p - tlb_handler) > 63) 826 if (((p - tlb_handler) > (MIPS64_REFILL_INSNS * 2) - 1)
706 || (((p - tlb_handler) > 61) 827 || (((p - tlb_handler) > (MIPS64_REFILL_INSNS * 2) - 3)
707 && uasm_insn_has_bdelay(relocs, tlb_handler + 29))) 828 && uasm_insn_has_bdelay(relocs,
829 tlb_handler + MIPS64_REFILL_INSNS - 3)))
708 panic("TLB refill handler space exceeded"); 830 panic("TLB refill handler space exceeded");
709#endif 831#endif
710 832
@@ -717,39 +839,74 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
717 uasm_copy_handler(relocs, labels, tlb_handler, p, f); 839 uasm_copy_handler(relocs, labels, tlb_handler, p, f);
718 final_len = p - tlb_handler; 840 final_len = p - tlb_handler;
719#else /* CONFIG_64BIT */ 841#else /* CONFIG_64BIT */
720 f = final_handler + 32; 842 f = final_handler + MIPS64_REFILL_INSNS;
721 if ((p - tlb_handler) <= 32) { 843 if ((p - tlb_handler) <= MIPS64_REFILL_INSNS) {
722 /* Just copy the handler. */ 844 /* Just copy the handler. */
723 uasm_copy_handler(relocs, labels, tlb_handler, p, f); 845 uasm_copy_handler(relocs, labels, tlb_handler, p, f);
724 final_len = p - tlb_handler; 846 final_len = p - tlb_handler;
725 } else { 847 } else {
726 u32 *split = tlb_handler + 30; 848#if defined(CONFIG_HUGETLB_PAGE)
849 const enum label_id ls = label_tlb_huge_update;
850#elif defined(MODULE_START)
851 const enum label_id ls = label_module_alloc;
852#else
853 const enum label_id ls = label_vmalloc;
854#endif
855 u32 *split;
856 int ov = 0;
857 int i;
858
859 for (i = 0; i < ARRAY_SIZE(labels) && labels[i].lab != ls; i++)
860 ;
861 BUG_ON(i == ARRAY_SIZE(labels));
862 split = labels[i].addr;
727 863
728 /* 864 /*
729 * Find the split point. 865 * See if we have overflown one way or the other.
730 */ 866 */
731 if (uasm_insn_has_bdelay(relocs, split - 1)) 867 if (split > tlb_handler + MIPS64_REFILL_INSNS ||
732 split--; 868 split < p - MIPS64_REFILL_INSNS)
733 869 ov = 1;
870
871 if (ov) {
872 /*
873 * Split two instructions before the end. One
874 * for the branch and one for the instruction
875 * in the delay slot.
876 */
877 split = tlb_handler + MIPS64_REFILL_INSNS - 2;
878
879 /*
880 * If the branch would fall in a delay slot,
881 * we must back up an additional instruction
882 * so that it is no longer in a delay slot.
883 */
884 if (uasm_insn_has_bdelay(relocs, split - 1))
885 split--;
886 }
734 /* Copy first part of the handler. */ 887 /* Copy first part of the handler. */
735 uasm_copy_handler(relocs, labels, tlb_handler, split, f); 888 uasm_copy_handler(relocs, labels, tlb_handler, split, f);
736 f += split - tlb_handler; 889 f += split - tlb_handler;
737 890
738 /* Insert branch. */ 891 if (ov) {
739 uasm_l_split(&l, final_handler); 892 /* Insert branch. */
740 uasm_il_b(&f, &r, label_split); 893 uasm_l_split(&l, final_handler);
741 if (uasm_insn_has_bdelay(relocs, split)) 894 uasm_il_b(&f, &r, label_split);
742 uasm_i_nop(&f); 895 if (uasm_insn_has_bdelay(relocs, split))
743 else { 896 uasm_i_nop(&f);
744 uasm_copy_handler(relocs, labels, split, split + 1, f); 897 else {
745 uasm_move_labels(labels, f, f + 1, -1); 898 uasm_copy_handler(relocs, labels,
746 f++; 899 split, split + 1, f);
747 split++; 900 uasm_move_labels(labels, f, f + 1, -1);
901 f++;
902 split++;
903 }
748 } 904 }
749 905
750 /* Copy the rest of the handler. */ 906 /* Copy the rest of the handler. */
751 uasm_copy_handler(relocs, labels, split, p, final_handler); 907 uasm_copy_handler(relocs, labels, split, p, final_handler);
752 final_len = (f - (final_handler + 32)) + (p - split); 908 final_len = (f - (final_handler + MIPS64_REFILL_INSNS)) +
909 (p - split);
753 } 910 }
754#endif /* CONFIG_64BIT */ 911#endif /* CONFIG_64BIT */
755 912
@@ -782,7 +939,7 @@ u32 handle_tlbs[FASTPATH_SIZE] __cacheline_aligned;
782u32 handle_tlbm[FASTPATH_SIZE] __cacheline_aligned; 939u32 handle_tlbm[FASTPATH_SIZE] __cacheline_aligned;
783 940
784static void __cpuinit 941static void __cpuinit
785iPTE_LW(u32 **p, struct uasm_label **l, unsigned int pte, unsigned int ptr) 942iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr)
786{ 943{
787#ifdef CONFIG_SMP 944#ifdef CONFIG_SMP
788# ifdef CONFIG_64BIT_PHYS_ADDR 945# ifdef CONFIG_64BIT_PHYS_ADDR
@@ -862,13 +1019,13 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
862 * with it's original value. 1019 * with it's original value.
863 */ 1020 */
864static void __cpuinit 1021static void __cpuinit
865build_pte_present(u32 **p, struct uasm_label **l, struct uasm_reloc **r, 1022build_pte_present(u32 **p, struct uasm_reloc **r,
866 unsigned int pte, unsigned int ptr, enum label_id lid) 1023 unsigned int pte, unsigned int ptr, enum label_id lid)
867{ 1024{
868 uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); 1025 uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_READ);
869 uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_READ); 1026 uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_READ);
870 uasm_il_bnez(p, r, pte, lid); 1027 uasm_il_bnez(p, r, pte, lid);
871 iPTE_LW(p, l, pte, ptr); 1028 iPTE_LW(p, pte, ptr);
872} 1029}
873 1030
874/* Make PTE valid, store result in PTR. */ 1031/* Make PTE valid, store result in PTR. */
@@ -886,13 +1043,13 @@ build_make_valid(u32 **p, struct uasm_reloc **r, unsigned int pte,
886 * restore PTE with value from PTR when done. 1043 * restore PTE with value from PTR when done.
887 */ 1044 */
888static void __cpuinit 1045static void __cpuinit
889build_pte_writable(u32 **p, struct uasm_label **l, struct uasm_reloc **r, 1046build_pte_writable(u32 **p, struct uasm_reloc **r,
890 unsigned int pte, unsigned int ptr, enum label_id lid) 1047 unsigned int pte, unsigned int ptr, enum label_id lid)
891{ 1048{
892 uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); 1049 uasm_i_andi(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE);
893 uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE); 1050 uasm_i_xori(p, pte, pte, _PAGE_PRESENT | _PAGE_WRITE);
894 uasm_il_bnez(p, r, pte, lid); 1051 uasm_il_bnez(p, r, pte, lid);
895 iPTE_LW(p, l, pte, ptr); 1052 iPTE_LW(p, pte, ptr);
896} 1053}
897 1054
898/* Make PTE writable, update software status bits as well, then store 1055/* Make PTE writable, update software status bits as well, then store
@@ -913,12 +1070,12 @@ build_make_write(u32 **p, struct uasm_reloc **r, unsigned int pte,
913 * restore PTE with value from PTR when done. 1070 * restore PTE with value from PTR when done.
914 */ 1071 */
915static void __cpuinit 1072static void __cpuinit
916build_pte_modifiable(u32 **p, struct uasm_label **l, struct uasm_reloc **r, 1073build_pte_modifiable(u32 **p, struct uasm_reloc **r,
917 unsigned int pte, unsigned int ptr, enum label_id lid) 1074 unsigned int pte, unsigned int ptr, enum label_id lid)
918{ 1075{
919 uasm_i_andi(p, pte, pte, _PAGE_WRITE); 1076 uasm_i_andi(p, pte, pte, _PAGE_WRITE);
920 uasm_il_beqz(p, r, pte, lid); 1077 uasm_il_beqz(p, r, pte, lid);
921 iPTE_LW(p, l, pte, ptr); 1078 iPTE_LW(p, pte, ptr);
922} 1079}
923 1080
924/* 1081/*
@@ -994,7 +1151,7 @@ static void __cpuinit build_r3000_tlb_load_handler(void)
994 memset(relocs, 0, sizeof(relocs)); 1151 memset(relocs, 0, sizeof(relocs));
995 1152
996 build_r3000_tlbchange_handler_head(&p, K0, K1); 1153 build_r3000_tlbchange_handler_head(&p, K0, K1);
997 build_pte_present(&p, &l, &r, K0, K1, label_nopage_tlbl); 1154 build_pte_present(&p, &r, K0, K1, label_nopage_tlbl);
998 uasm_i_nop(&p); /* load delay */ 1155 uasm_i_nop(&p); /* load delay */
999 build_make_valid(&p, &r, K0, K1); 1156 build_make_valid(&p, &r, K0, K1);
1000 build_r3000_tlb_reload_write(&p, &l, &r, K0, K1); 1157 build_r3000_tlb_reload_write(&p, &l, &r, K0, K1);
@@ -1024,7 +1181,7 @@ static void __cpuinit build_r3000_tlb_store_handler(void)
1024 memset(relocs, 0, sizeof(relocs)); 1181 memset(relocs, 0, sizeof(relocs));
1025 1182
1026 build_r3000_tlbchange_handler_head(&p, K0, K1); 1183 build_r3000_tlbchange_handler_head(&p, K0, K1);
1027 build_pte_writable(&p, &l, &r, K0, K1, label_nopage_tlbs); 1184 build_pte_writable(&p, &r, K0, K1, label_nopage_tlbs);
1028 uasm_i_nop(&p); /* load delay */ 1185 uasm_i_nop(&p); /* load delay */
1029 build_make_write(&p, &r, K0, K1); 1186 build_make_write(&p, &r, K0, K1);
1030 build_r3000_tlb_reload_write(&p, &l, &r, K0, K1); 1187 build_r3000_tlb_reload_write(&p, &l, &r, K0, K1);
@@ -1054,7 +1211,7 @@ static void __cpuinit build_r3000_tlb_modify_handler(void)
1054 memset(relocs, 0, sizeof(relocs)); 1211 memset(relocs, 0, sizeof(relocs));
1055 1212
1056 build_r3000_tlbchange_handler_head(&p, K0, K1); 1213 build_r3000_tlbchange_handler_head(&p, K0, K1);
1057 build_pte_modifiable(&p, &l, &r, K0, K1, label_nopage_tlbm); 1214 build_pte_modifiable(&p, &r, K0, K1, label_nopage_tlbm);
1058 uasm_i_nop(&p); /* load delay */ 1215 uasm_i_nop(&p); /* load delay */
1059 build_make_write(&p, &r, K0, K1); 1216 build_make_write(&p, &r, K0, K1);
1060 build_r3000_pte_reload_tlbwi(&p, K0, K1); 1217 build_r3000_pte_reload_tlbwi(&p, K0, K1);
@@ -1087,6 +1244,15 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
1087 build_get_pgde32(p, pte, ptr); /* get pgd in ptr */ 1244 build_get_pgde32(p, pte, ptr); /* get pgd in ptr */
1088#endif 1245#endif
1089 1246
1247#ifdef CONFIG_HUGETLB_PAGE
1248 /*
1249 * For huge tlb entries, pmd doesn't contain an address but
1250 * instead contains the tlb pte. Check the PAGE_HUGE bit and
1251 * see if we need to jump to huge tlb processing.
1252 */
1253 build_is_huge_pte(p, r, pte, ptr, label_tlb_huge_update);
1254#endif
1255
1090 UASM_i_MFC0(p, pte, C0_BADVADDR); 1256 UASM_i_MFC0(p, pte, C0_BADVADDR);
1091 UASM_i_LW(p, ptr, 0, ptr); 1257 UASM_i_LW(p, ptr, 0, ptr);
1092 UASM_i_SRL(p, pte, pte, PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2); 1258 UASM_i_SRL(p, pte, pte, PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2);
@@ -1096,7 +1262,7 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
1096#ifdef CONFIG_SMP 1262#ifdef CONFIG_SMP
1097 uasm_l_smp_pgtable_change(l, *p); 1263 uasm_l_smp_pgtable_change(l, *p);
1098#endif 1264#endif
1099 iPTE_LW(p, l, pte, ptr); /* get even pte */ 1265 iPTE_LW(p, pte, ptr); /* get even pte */
1100 if (!m4kc_tlbp_war()) 1266 if (!m4kc_tlbp_war())
1101 build_tlb_probe_entry(p); 1267 build_tlb_probe_entry(p);
1102} 1268}
@@ -1138,12 +1304,25 @@ static void __cpuinit build_r4000_tlb_load_handler(void)
1138 } 1304 }
1139 1305
1140 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1); 1306 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1);
1141 build_pte_present(&p, &l, &r, K0, K1, label_nopage_tlbl); 1307 build_pte_present(&p, &r, K0, K1, label_nopage_tlbl);
1142 if (m4kc_tlbp_war()) 1308 if (m4kc_tlbp_war())
1143 build_tlb_probe_entry(&p); 1309 build_tlb_probe_entry(&p);
1144 build_make_valid(&p, &r, K0, K1); 1310 build_make_valid(&p, &r, K0, K1);
1145 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1); 1311 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1);
1146 1312
1313#ifdef CONFIG_HUGETLB_PAGE
1314 /*
1315 * This is the entry point when build_r4000_tlbchange_handler_head
1316 * spots a huge page.
1317 */
1318 uasm_l_tlb_huge_update(&l, p);
1319 iPTE_LW(&p, K0, K1);
1320 build_pte_present(&p, &r, K0, K1, label_nopage_tlbl);
1321 build_tlb_probe_entry(&p);
1322 uasm_i_ori(&p, K0, K0, (_PAGE_ACCESSED | _PAGE_VALID));
1323 build_huge_handler_tail(&p, &r, &l, K0, K1);
1324#endif
1325
1147 uasm_l_nopage_tlbl(&l, p); 1326 uasm_l_nopage_tlbl(&l, p);
1148 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_0 & 0x0fffffff); 1327 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_0 & 0x0fffffff);
1149 uasm_i_nop(&p); 1328 uasm_i_nop(&p);
@@ -1169,12 +1348,26 @@ static void __cpuinit build_r4000_tlb_store_handler(void)
1169 memset(relocs, 0, sizeof(relocs)); 1348 memset(relocs, 0, sizeof(relocs));
1170 1349
1171 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1); 1350 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1);
1172 build_pte_writable(&p, &l, &r, K0, K1, label_nopage_tlbs); 1351 build_pte_writable(&p, &r, K0, K1, label_nopage_tlbs);
1173 if (m4kc_tlbp_war()) 1352 if (m4kc_tlbp_war())
1174 build_tlb_probe_entry(&p); 1353 build_tlb_probe_entry(&p);
1175 build_make_write(&p, &r, K0, K1); 1354 build_make_write(&p, &r, K0, K1);
1176 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1); 1355 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1);
1177 1356
1357#ifdef CONFIG_HUGETLB_PAGE
1358 /*
1359 * This is the entry point when
1360 * build_r4000_tlbchange_handler_head spots a huge page.
1361 */
1362 uasm_l_tlb_huge_update(&l, p);
1363 iPTE_LW(&p, K0, K1);
1364 build_pte_writable(&p, &r, K0, K1, label_nopage_tlbs);
1365 build_tlb_probe_entry(&p);
1366 uasm_i_ori(&p, K0, K0,
1367 _PAGE_ACCESSED | _PAGE_MODIFIED | _PAGE_VALID | _PAGE_DIRTY);
1368 build_huge_handler_tail(&p, &r, &l, K0, K1);
1369#endif
1370
1178 uasm_l_nopage_tlbs(&l, p); 1371 uasm_l_nopage_tlbs(&l, p);
1179 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff); 1372 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff);
1180 uasm_i_nop(&p); 1373 uasm_i_nop(&p);
@@ -1200,13 +1393,27 @@ static void __cpuinit build_r4000_tlb_modify_handler(void)
1200 memset(relocs, 0, sizeof(relocs)); 1393 memset(relocs, 0, sizeof(relocs));
1201 1394
1202 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1); 1395 build_r4000_tlbchange_handler_head(&p, &l, &r, K0, K1);
1203 build_pte_modifiable(&p, &l, &r, K0, K1, label_nopage_tlbm); 1396 build_pte_modifiable(&p, &r, K0, K1, label_nopage_tlbm);
1204 if (m4kc_tlbp_war()) 1397 if (m4kc_tlbp_war())
1205 build_tlb_probe_entry(&p); 1398 build_tlb_probe_entry(&p);
1206 /* Present and writable bits set, set accessed and dirty bits. */ 1399 /* Present and writable bits set, set accessed and dirty bits. */
1207 build_make_write(&p, &r, K0, K1); 1400 build_make_write(&p, &r, K0, K1);
1208 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1); 1401 build_r4000_tlbchange_handler_tail(&p, &l, &r, K0, K1);
1209 1402
1403#ifdef CONFIG_HUGETLB_PAGE
1404 /*
1405 * This is the entry point when
1406 * build_r4000_tlbchange_handler_head spots a huge page.
1407 */
1408 uasm_l_tlb_huge_update(&l, p);
1409 iPTE_LW(&p, K0, K1);
1410 build_pte_modifiable(&p, &r, K0, K1, label_nopage_tlbm);
1411 build_tlb_probe_entry(&p);
1412 uasm_i_ori(&p, K0, K0,
1413 _PAGE_ACCESSED | _PAGE_MODIFIED | _PAGE_VALID | _PAGE_DIRTY);
1414 build_huge_handler_tail(&p, &r, &l, K0, K1);
1415#endif
1416
1210 uasm_l_nopage_tlbm(&l, p); 1417 uasm_l_nopage_tlbm(&l, p);
1211 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff); 1418 uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff);
1212 uasm_i_nop(&p); 1419 uasm_i_nop(&p);
diff --git a/arch/mips/mti-malta/malta-init.c b/arch/mips/mti-malta/malta-init.c
index 475038a141a6..27c807b67fea 100644
--- a/arch/mips/mti-malta/malta-init.c
+++ b/arch/mips/mti-malta/malta-init.c
@@ -30,6 +30,7 @@
30#include <asm/cacheflush.h> 30#include <asm/cacheflush.h>
31#include <asm/traps.h> 31#include <asm/traps.h>
32 32
33#include <asm/gcmpregs.h>
33#include <asm/mips-boards/prom.h> 34#include <asm/mips-boards/prom.h>
34#include <asm/mips-boards/generic.h> 35#include <asm/mips-boards/generic.h>
35#include <asm/mips-boards/bonito64.h> 36#include <asm/mips-boards/bonito64.h>
@@ -192,6 +193,8 @@ extern struct plat_smp_ops msmtc_smp_ops;
192 193
193void __init prom_init(void) 194void __init prom_init(void)
194{ 195{
196 int result;
197
195 prom_argc = fw_arg0; 198 prom_argc = fw_arg0;
196 _prom_argv = (int *) fw_arg1; 199 _prom_argv = (int *) fw_arg1;
197 _prom_envp = (int *) fw_arg2; 200 _prom_envp = (int *) fw_arg2;
@@ -358,12 +361,21 @@ void __init prom_init(void)
358#ifdef CONFIG_SERIAL_8250_CONSOLE 361#ifdef CONFIG_SERIAL_8250_CONSOLE
359 console_config(); 362 console_config();
360#endif 363#endif
364 /* Early detection of CMP support */
365 result = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);
366
361#ifdef CONFIG_MIPS_CMP 367#ifdef CONFIG_MIPS_CMP
362 register_smp_ops(&cmp_smp_ops); 368 if (result)
369 register_smp_ops(&cmp_smp_ops);
363#endif 370#endif
364#ifdef CONFIG_MIPS_MT_SMP 371#ifdef CONFIG_MIPS_MT_SMP
372#ifdef CONFIG_MIPS_CMP
373 if (!result)
374 register_smp_ops(&vsmp_smp_ops);
375#else
365 register_smp_ops(&vsmp_smp_ops); 376 register_smp_ops(&vsmp_smp_ops);
366#endif 377#endif
378#endif
367#ifdef CONFIG_MIPS_MT_SMTC 379#ifdef CONFIG_MIPS_MT_SMTC
368 register_smp_ops(&msmtc_smp_ops); 380 register_smp_ops(&msmtc_smp_ops);
369#endif 381#endif
diff --git a/arch/mips/mti-malta/malta-int.c b/arch/mips/mti-malta/malta-int.c
index ea176113fea9..3e0a9b35ba5c 100644
--- a/arch/mips/mti-malta/malta-int.c
+++ b/arch/mips/mti-malta/malta-int.c
@@ -24,6 +24,7 @@
24#include <linux/init.h> 24#include <linux/init.h>
25#include <linux/irq.h> 25#include <linux/irq.h>
26#include <linux/sched.h> 26#include <linux/sched.h>
27#include <linux/smp.h>
27#include <linux/slab.h> 28#include <linux/slab.h>
28#include <linux/interrupt.h> 29#include <linux/interrupt.h>
29#include <linux/io.h> 30#include <linux/io.h>
@@ -332,6 +333,21 @@ static struct irqaction irq_call = {
332}; 333};
333#endif /* CONFIG_MIPS_MT_SMP */ 334#endif /* CONFIG_MIPS_MT_SMP */
334 335
336static int gic_resched_int_base;
337static int gic_call_int_base;
338#define GIC_RESCHED_INT(cpu) (gic_resched_int_base+(cpu))
339#define GIC_CALL_INT(cpu) (gic_call_int_base+(cpu))
340
341unsigned int plat_ipi_call_int_xlate(unsigned int cpu)
342{
343 return GIC_CALL_INT(cpu);
344}
345
346unsigned int plat_ipi_resched_int_xlate(unsigned int cpu)
347{
348 return GIC_RESCHED_INT(cpu);
349}
350
335static struct irqaction i8259irq = { 351static struct irqaction i8259irq = {
336 .handler = no_action, 352 .handler = no_action,
337 .name = "XT-PIC cascade" 353 .name = "XT-PIC cascade"
@@ -369,7 +385,7 @@ static int __initdata msc_nr_eicirqs = ARRAY_SIZE(msc_eicirqmap);
369 * Interrupts and CPUs/Core Interrupts. The nature of the External 385 * Interrupts and CPUs/Core Interrupts. The nature of the External
370 * Interrupts is also defined here - polarity/trigger. 386 * Interrupts is also defined here - polarity/trigger.
371 */ 387 */
372static struct gic_intr_map gic_intr_map[] = { 388static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = {
373 { GIC_EXT_INTR(0), X, X, X, X, 0 }, 389 { GIC_EXT_INTR(0), X, X, X, X, 0 },
374 { GIC_EXT_INTR(1), X, X, X, X, 0 }, 390 { GIC_EXT_INTR(1), X, X, X, X, 0 },
375 { GIC_EXT_INTR(2), X, X, X, X, 0 }, 391 { GIC_EXT_INTR(2), X, X, X, X, 0 },
@@ -386,21 +402,14 @@ static struct gic_intr_map gic_intr_map[] = {
386 { GIC_EXT_INTR(13), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, 402 { GIC_EXT_INTR(13), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 },
387 { GIC_EXT_INTR(14), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, 403 { GIC_EXT_INTR(14), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 },
388 { GIC_EXT_INTR(15), X, X, X, X, 0 }, 404 { GIC_EXT_INTR(15), X, X, X, X, 0 },
389 { GIC_EXT_INTR(16), 0, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 }, 405/* This is the end of the general interrupts now we do IPI ones */
390 { GIC_EXT_INTR(17), 0, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
391 { GIC_EXT_INTR(18), 1, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
392 { GIC_EXT_INTR(19), 1, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
393 { GIC_EXT_INTR(20), 2, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
394 { GIC_EXT_INTR(21), 2, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
395 { GIC_EXT_INTR(22), 3, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
396 { GIC_EXT_INTR(23), 3, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_EDGE, 1 },
397}; 406};
398#endif 407#endif
399 408
400/* 409/*
401 * GCMP needs to be detected before any SMP initialisation 410 * GCMP needs to be detected before any SMP initialisation
402 */ 411 */
403static int __init gcmp_probe(unsigned long addr, unsigned long size) 412int __init gcmp_probe(unsigned long addr, unsigned long size)
404{ 413{
405 if (gcmp_present >= 0) 414 if (gcmp_present >= 0)
406 return gcmp_present; 415 return gcmp_present;
@@ -415,28 +424,36 @@ static int __init gcmp_probe(unsigned long addr, unsigned long size)
415} 424}
416 425
417#if defined(CONFIG_MIPS_MT_SMP) 426#if defined(CONFIG_MIPS_MT_SMP)
427static void __init fill_ipi_map1(int baseintr, int cpu, int cpupin)
428{
429 int intr = baseintr + cpu;
430 gic_intr_map[intr].intrnum = GIC_EXT_INTR(intr);
431 gic_intr_map[intr].cpunum = cpu;
432 gic_intr_map[intr].pin = cpupin;
433 gic_intr_map[intr].polarity = GIC_POL_POS;
434 gic_intr_map[intr].trigtype = GIC_TRIG_EDGE;
435 gic_intr_map[intr].ipiflag = 1;
436 ipi_map[cpu] |= (1 << (cpupin + 2));
437}
438
418static void __init fill_ipi_map(void) 439static void __init fill_ipi_map(void)
419{ 440{
420 int i; 441 int cpu;
421 442
422 for (i = 0; i < ARRAY_SIZE(gic_intr_map); i++) { 443 for (cpu = 0; cpu < NR_CPUS; cpu++) {
423 if (gic_intr_map[i].ipiflag && (gic_intr_map[i].cpunum != X)) 444 fill_ipi_map1(gic_resched_int_base, cpu, GIC_CPU_INT1);
424 ipi_map[gic_intr_map[i].cpunum] |= 445 fill_ipi_map1(gic_call_int_base, cpu, GIC_CPU_INT2);
425 (1 << (gic_intr_map[i].pin + 2));
426 } 446 }
427} 447}
428#endif 448#endif
429 449
430void __init arch_init_irq(void) 450void __init arch_init_irq(void)
431{ 451{
432 int gic_present, gcmp_present;
433
434 init_i8259_irqs(); 452 init_i8259_irqs();
435 453
436 if (!cpu_has_veic) 454 if (!cpu_has_veic)
437 mips_cpu_irq_init(); 455 mips_cpu_irq_init();
438 456
439 gcmp_present = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);
440 if (gcmp_present) { 457 if (gcmp_present) {
441 GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; 458 GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK;
442 gic_present = 1; 459 gic_present = 1;
@@ -513,24 +530,10 @@ void __init arch_init_irq(void)
513 if (gic_present) { 530 if (gic_present) {
514 /* FIXME */ 531 /* FIXME */
515 int i; 532 int i;
516 struct { 533
517 unsigned int resched; 534 gic_call_int_base = GIC_NUM_INTRS - NR_CPUS;
518 unsigned int call; 535 gic_resched_int_base = gic_call_int_base - NR_CPUS;
519 } ipiirq[] = { 536
520 {
521 .resched = GIC_IPI_EXT_INTR_RESCHED_VPE0,
522 .call = GIC_IPI_EXT_INTR_CALLFNC_VPE0},
523 {
524 .resched = GIC_IPI_EXT_INTR_RESCHED_VPE1,
525 .call = GIC_IPI_EXT_INTR_CALLFNC_VPE1
526 }, {
527 .resched = GIC_IPI_EXT_INTR_RESCHED_VPE2,
528 .call = GIC_IPI_EXT_INTR_CALLFNC_VPE2
529 }, {
530 .resched = GIC_IPI_EXT_INTR_RESCHED_VPE3,
531 .call = GIC_IPI_EXT_INTR_CALLFNC_VPE3
532 }
533 };
534 fill_ipi_map(); 537 fill_ipi_map();
535 gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); 538 gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE);
536 if (!gcmp_present) { 539 if (!gcmp_present) {
@@ -552,12 +555,15 @@ void __init arch_init_irq(void)
552 printk("CPU%d: status register now %08x\n", smp_processor_id(), read_c0_status()); 555 printk("CPU%d: status register now %08x\n", smp_processor_id(), read_c0_status());
553 write_c0_status(0x1100dc00); 556 write_c0_status(0x1100dc00);
554 printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status()); 557 printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status());
555 for (i = 0; i < ARRAY_SIZE(ipiirq); i++) { 558 for (i = 0; i < NR_CPUS; i++) {
556 setup_irq(MIPS_GIC_IRQ_BASE + ipiirq[i].resched, &irq_resched); 559 setup_irq(MIPS_GIC_IRQ_BASE +
557 setup_irq(MIPS_GIC_IRQ_BASE + ipiirq[i].call, &irq_call); 560 GIC_RESCHED_INT(i), &irq_resched);
558 561 setup_irq(MIPS_GIC_IRQ_BASE +
559 set_irq_handler(MIPS_GIC_IRQ_BASE + ipiirq[i].resched, handle_percpu_irq); 562 GIC_CALL_INT(i), &irq_call);
560 set_irq_handler(MIPS_GIC_IRQ_BASE + ipiirq[i].call, handle_percpu_irq); 563 set_irq_handler(MIPS_GIC_IRQ_BASE +
564 GIC_RESCHED_INT(i), handle_percpu_irq);
565 set_irq_handler(MIPS_GIC_IRQ_BASE +
566 GIC_CALL_INT(i), handle_percpu_irq);
561 } 567 }
562 } else { 568 } else {
563 /* set up ipi interrupts */ 569 /* set up ipi interrupts */
diff --git a/arch/mips/mti-malta/malta-reset.c b/arch/mips/mti-malta/malta-reset.c
index 42dee4da37ba..f48d60e84290 100644
--- a/arch/mips/mti-malta/malta-reset.c
+++ b/arch/mips/mti-malta/malta-reset.c
@@ -28,9 +28,6 @@
28#include <asm/reboot.h> 28#include <asm/reboot.h>
29#include <asm/mips-boards/generic.h> 29#include <asm/mips-boards/generic.h>
30 30
31static void mips_machine_restart(char *command);
32static void mips_machine_halt(void);
33
34static void mips_machine_restart(char *command) 31static void mips_machine_restart(char *command)
35{ 32{
36 unsigned int __iomem *softres_reg = 33 unsigned int __iomem *softres_reg =
diff --git a/arch/mips/nxp/pnx8550/common/time.c b/arch/mips/nxp/pnx8550/common/time.c
index 8df43e9e4d90..18b192784877 100644
--- a/arch/mips/nxp/pnx8550/common/time.c
+++ b/arch/mips/nxp/pnx8550/common/time.c
@@ -138,7 +138,7 @@ __init void plat_time_init(void)
138 * HZ timer interrupts per second. 138 * HZ timer interrupts per second.
139 */ 139 */
140 mips_hpt_frequency = 27UL * ((1000000UL * n)/(m * pow2p)); 140 mips_hpt_frequency = 27UL * ((1000000UL * n)/(m * pow2p));
141 cpj = (mips_hpt_frequency + HZ / 2) / HZ; 141 cpj = DIV_ROUND_CLOSEST(mips_hpt_frequency, HZ);
142 write_c0_count(0); 142 write_c0_count(0);
143 timer_ack(); 143 timer_ack();
144 144
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile
index e8a97f59e066..63d8a297c58d 100644
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
@@ -52,3 +52,8 @@ obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o
52obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o 52obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o
53obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o 53obj-$(CONFIG_WR_PPMC) += fixup-wrppmc.o
54obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o 54obj-$(CONFIG_MIKROTIK_RB532) += pci-rc32434.o ops-rc32434.o fixup-rc32434.o
55obj-$(CONFIG_CPU_CAVIUM_OCTEON) += pci-octeon.o pcie-octeon.o
56
57ifdef CONFIG_PCI_MSI
58obj-$(CONFIG_CPU_CAVIUM_OCTEON) += msi-octeon.o
59endif
diff --git a/arch/mips/pci/fixup-capcella.c b/arch/mips/pci/fixup-capcella.c
index 1416bca6d1a3..1c02f5737367 100644
--- a/arch/mips/pci/fixup-capcella.c
+++ b/arch/mips/pci/fixup-capcella.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * fixup-cappcela.c, The ZAO Networks Capcella specific PCI fixups. 2 * fixup-cappcela.c, The ZAO Networks Capcella specific PCI fixups.
3 * 3 *
4 * Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/fixup-emma2rh.c b/arch/mips/pci/fixup-emma2rh.c
index fba5aad00d51..0d9ccf4dfc5a 100644
--- a/arch/mips/pci/fixup-emma2rh.c
+++ b/arch/mips/pci/fixup-emma2rh.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/pci/fixup-emma2rh.c
3 * This file defines the PCI configration.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c 4 * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c
diff --git a/arch/mips/pci/fixup-mpc30x.c b/arch/mips/pci/fixup-mpc30x.c
index 591159625722..e08f49cb6875 100644
--- a/arch/mips/pci/fixup-mpc30x.c
+++ b/arch/mips/pci/fixup-mpc30x.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * fixup-mpc30x.c, The Victor MP-C303/304 specific PCI fixups. 2 * fixup-mpc30x.c, The Victor MP-C303/304 specific PCI fixups.
3 * 3 *
4 * Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/fixup-sb1250.c b/arch/mips/pci/fixup-sb1250.c
index 0ad39e53f7b1..f0bb9146e6c0 100644
--- a/arch/mips/pci/fixup-sb1250.c
+++ b/arch/mips/pci/fixup-sb1250.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/pci/fixup-sb1250.c
3 *
4 * Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved. 2 * Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved.
5 * Author: Maciej W. Rozycki <macro@mips.com> 3 * Author: Maciej W. Rozycki <macro@mips.com>
6 * 4 *
diff --git a/arch/mips/pci/fixup-tb0219.c b/arch/mips/pci/fixup-tb0219.c
index ed87733f6796..8084b17d4406 100644
--- a/arch/mips/pci/fixup-tb0219.c
+++ b/arch/mips/pci/fixup-tb0219.c
@@ -2,7 +2,7 @@
2 * fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups. 2 * fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups.
3 * 3 *
4 * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp> 4 * Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp>
5 * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 5 * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/fixup-tb0226.c b/arch/mips/pci/fixup-tb0226.c
index e3eedf4bf9bd..4196ccf3ea3d 100644
--- a/arch/mips/pci/fixup-tb0226.c
+++ b/arch/mips/pci/fixup-tb0226.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups. 2 * fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups.
3 * 3 *
4 * Copyright (C) 2002-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/fixup-tb0287.c b/arch/mips/pci/fixup-tb0287.c
index 267ab3dc3d42..2fe29db43725 100644
--- a/arch/mips/pci/fixup-tb0287.c
+++ b/arch/mips/pci/fixup-tb0287.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * fixup-tb0287.c, The TANBAC TB0287 specific PCI fixups. 2 * fixup-tb0287.c, The TANBAC TB0287 specific PCI fixups.
3 * 3 *
4 * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2005 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/msi-octeon.c b/arch/mips/pci/msi-octeon.c
new file mode 100644
index 000000000000..03742e647657
--- /dev/null
+++ b/arch/mips/pci/msi-octeon.c
@@ -0,0 +1,288 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2005-2009 Cavium Networks
7 */
8#include <linux/kernel.h>
9#include <linux/init.h>
10#include <linux/msi.h>
11#include <linux/spinlock.h>
12#include <linux/interrupt.h>
13
14#include <asm/octeon/octeon.h>
15#include <asm/octeon/cvmx-npi-defs.h>
16#include <asm/octeon/cvmx-pci-defs.h>
17#include <asm/octeon/cvmx-npei-defs.h>
18#include <asm/octeon/cvmx-pexp-defs.h>
19#include <asm/octeon/pci-octeon.h>
20
21/*
22 * Each bit in msi_free_irq_bitmask represents a MSI interrupt that is
23 * in use.
24 */
25static uint64_t msi_free_irq_bitmask;
26
27/*
28 * Each bit in msi_multiple_irq_bitmask tells that the device using
29 * this bit in msi_free_irq_bitmask is also using the next bit. This
30 * is used so we can disable all of the MSI interrupts when a device
31 * uses multiple.
32 */
33static uint64_t msi_multiple_irq_bitmask;
34
35/*
36 * This lock controls updates to msi_free_irq_bitmask and
37 * msi_multiple_irq_bitmask.
38 */
39static DEFINE_SPINLOCK(msi_free_irq_bitmask_lock);
40
41
42/**
43 * Called when a driver request MSI interrupts instead of the
44 * legacy INT A-D. This routine will allocate multiple interrupts
45 * for MSI devices that support them. A device can override this by
46 * programming the MSI control bits [6:4] before calling
47 * pci_enable_msi().
48 *
49 * @dev: Device requesting MSI interrupts
50 * @desc: MSI descriptor
51 *
52 * Returns 0 on success.
53 */
54int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
55{
56 struct msi_msg msg;
57 uint16_t control;
58 int configured_private_bits;
59 int request_private_bits;
60 int irq;
61 int irq_step;
62 uint64_t search_mask;
63
64 /*
65 * Read the MSI config to figure out how many IRQs this device
66 * wants. Most devices only want 1, which will give
67 * configured_private_bits and request_private_bits equal 0.
68 */
69 pci_read_config_word(dev, desc->msi_attrib.pos + PCI_MSI_FLAGS,
70 &control);
71
72 /*
73 * If the number of private bits has been configured then use
74 * that value instead of the requested number. This gives the
75 * driver the chance to override the number of interrupts
76 * before calling pci_enable_msi().
77 */
78 configured_private_bits = (control & PCI_MSI_FLAGS_QSIZE) >> 4;
79 if (configured_private_bits == 0) {
80 /* Nothing is configured, so use the hardware requested size */
81 request_private_bits = (control & PCI_MSI_FLAGS_QMASK) >> 1;
82 } else {
83 /*
84 * Use the number of configured bits, assuming the
85 * driver wanted to override the hardware request
86 * value.
87 */
88 request_private_bits = configured_private_bits;
89 }
90
91 /*
92 * The PCI 2.3 spec mandates that there are at most 32
93 * interrupts. If this device asks for more, only give it one.
94 */
95 if (request_private_bits > 5)
96 request_private_bits = 0;
97
98try_only_one:
99 /*
100 * The IRQs have to be aligned on a power of two based on the
101 * number being requested.
102 */
103 irq_step = 1 << request_private_bits;
104
105 /* Mask with one bit for each IRQ */
106 search_mask = (1 << irq_step) - 1;
107
108 /*
109 * We're going to search msi_free_irq_bitmask_lock for zero
110 * bits. This represents an MSI interrupt number that isn't in
111 * use.
112 */
113 spin_lock(&msi_free_irq_bitmask_lock);
114 for (irq = 0; irq < 64; irq += irq_step) {
115 if ((msi_free_irq_bitmask & (search_mask << irq)) == 0) {
116 msi_free_irq_bitmask |= search_mask << irq;
117 msi_multiple_irq_bitmask |= (search_mask >> 1) << irq;
118 break;
119 }
120 }
121 spin_unlock(&msi_free_irq_bitmask_lock);
122
123 /* Make sure the search for available interrupts didn't fail */
124 if (irq >= 64) {
125 if (request_private_bits) {
126 pr_err("arch_setup_msi_irq: Unable to find %d free "
127 "interrupts, trying just one",
128 1 << request_private_bits);
129 request_private_bits = 0;
130 goto try_only_one;
131 } else
132 panic("arch_setup_msi_irq: Unable to find a free MSI "
133 "interrupt");
134 }
135
136 /* MSI interrupts start at logical IRQ OCTEON_IRQ_MSI_BIT0 */
137 irq += OCTEON_IRQ_MSI_BIT0;
138
139 switch (octeon_dma_bar_type) {
140 case OCTEON_DMA_BAR_TYPE_SMALL:
141 /* When not using big bar, Bar 0 is based at 128MB */
142 msg.address_lo =
143 ((128ul << 20) + CVMX_PCI_MSI_RCV) & 0xffffffff;
144 msg.address_hi = ((128ul << 20) + CVMX_PCI_MSI_RCV) >> 32;
145 case OCTEON_DMA_BAR_TYPE_BIG:
146 /* When using big bar, Bar 0 is based at 0 */
147 msg.address_lo = (0 + CVMX_PCI_MSI_RCV) & 0xffffffff;
148 msg.address_hi = (0 + CVMX_PCI_MSI_RCV) >> 32;
149 break;
150 case OCTEON_DMA_BAR_TYPE_PCIE:
151 /* When using PCIe, Bar 0 is based at 0 */
152 /* FIXME CVMX_NPEI_MSI_RCV* other than 0? */
153 msg.address_lo = (0 + CVMX_NPEI_PCIE_MSI_RCV) & 0xffffffff;
154 msg.address_hi = (0 + CVMX_NPEI_PCIE_MSI_RCV) >> 32;
155 break;
156 default:
157 panic("arch_setup_msi_irq: Invalid octeon_dma_bar_type\n");
158 }
159 msg.data = irq - OCTEON_IRQ_MSI_BIT0;
160
161 /* Update the number of IRQs the device has available to it */
162 control &= ~PCI_MSI_FLAGS_QSIZE;
163 control |= request_private_bits << 4;
164 pci_write_config_word(dev, desc->msi_attrib.pos + PCI_MSI_FLAGS,
165 control);
166
167 set_irq_msi(irq, desc);
168 write_msi_msg(irq, &msg);
169 return 0;
170}
171
172
173/**
174 * Called when a device no longer needs its MSI interrupts. All
175 * MSI interrupts for the device are freed.
176 *
177 * @irq: The devices first irq number. There may be multple in sequence.
178 */
179void arch_teardown_msi_irq(unsigned int irq)
180{
181 int number_irqs;
182 uint64_t bitmask;
183
184 if ((irq < OCTEON_IRQ_MSI_BIT0) || (irq > OCTEON_IRQ_MSI_BIT63))
185 panic("arch_teardown_msi_irq: Attempted to teardown illegal "
186 "MSI interrupt (%d)", irq);
187 irq -= OCTEON_IRQ_MSI_BIT0;
188
189 /*
190 * Count the number of IRQs we need to free by looking at the
191 * msi_multiple_irq_bitmask. Each bit set means that the next
192 * IRQ is also owned by this device.
193 */
194 number_irqs = 0;
195 while ((irq+number_irqs < 64) &&
196 (msi_multiple_irq_bitmask & (1ull << (irq + number_irqs))))
197 number_irqs++;
198 number_irqs++;
199 /* Mask with one bit for each IRQ */
200 bitmask = (1 << number_irqs) - 1;
201 /* Shift the mask to the correct bit location */
202 bitmask <<= irq;
203 if ((msi_free_irq_bitmask & bitmask) != bitmask)
204 panic("arch_teardown_msi_irq: Attempted to teardown MSI "
205 "interrupt (%d) not in use", irq);
206
207 /* Checks are done, update the in use bitmask */
208 spin_lock(&msi_free_irq_bitmask_lock);
209 msi_free_irq_bitmask &= ~bitmask;
210 msi_multiple_irq_bitmask &= ~bitmask;
211 spin_unlock(&msi_free_irq_bitmask_lock);
212}
213
214
215/*
216 * Called by the interrupt handling code when an MSI interrupt
217 * occurs.
218 */
219static irqreturn_t octeon_msi_interrupt(int cpl, void *dev_id)
220{
221 uint64_t msi_bits;
222 int irq;
223
224 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_PCIE)
225 msi_bits = cvmx_read_csr(CVMX_PEXP_NPEI_MSI_RCV0);
226 else
227 msi_bits = cvmx_read_csr(CVMX_NPI_NPI_MSI_RCV);
228 irq = fls64(msi_bits);
229 if (irq) {
230 irq += OCTEON_IRQ_MSI_BIT0 - 1;
231 if (irq_desc[irq].action) {
232 do_IRQ(irq);
233 return IRQ_HANDLED;
234 } else {
235 pr_err("Spurious MSI interrupt %d\n", irq);
236 if (octeon_has_feature(OCTEON_FEATURE_PCIE)) {
237 /* These chips have PCIe */
238 cvmx_write_csr(CVMX_PEXP_NPEI_MSI_RCV0,
239 1ull << (irq -
240 OCTEON_IRQ_MSI_BIT0));
241 } else {
242 /* These chips have PCI */
243 cvmx_write_csr(CVMX_NPI_NPI_MSI_RCV,
244 1ull << (irq -
245 OCTEON_IRQ_MSI_BIT0));
246 }
247 }
248 }
249 return IRQ_NONE;
250}
251
252
253/*
254 * Initializes the MSI interrupt handling code
255 */
256int octeon_msi_initialize(void)
257{
258 if (octeon_has_feature(OCTEON_FEATURE_PCIE)) {
259 if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt,
260 IRQF_SHARED,
261 "MSI[0:63]", octeon_msi_interrupt))
262 panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed");
263 } else if (octeon_is_pci_host()) {
264 if (request_irq(OCTEON_IRQ_PCI_MSI0, octeon_msi_interrupt,
265 IRQF_SHARED,
266 "MSI[0:15]", octeon_msi_interrupt))
267 panic("request_irq(OCTEON_IRQ_PCI_MSI0) failed");
268
269 if (request_irq(OCTEON_IRQ_PCI_MSI1, octeon_msi_interrupt,
270 IRQF_SHARED,
271 "MSI[16:31]", octeon_msi_interrupt))
272 panic("request_irq(OCTEON_IRQ_PCI_MSI1) failed");
273
274 if (request_irq(OCTEON_IRQ_PCI_MSI2, octeon_msi_interrupt,
275 IRQF_SHARED,
276 "MSI[32:47]", octeon_msi_interrupt))
277 panic("request_irq(OCTEON_IRQ_PCI_MSI2) failed");
278
279 if (request_irq(OCTEON_IRQ_PCI_MSI3, octeon_msi_interrupt,
280 IRQF_SHARED,
281 "MSI[48:63]", octeon_msi_interrupt))
282 panic("request_irq(OCTEON_IRQ_PCI_MSI3) failed");
283
284 }
285 return 0;
286}
287
288subsys_initcall(octeon_msi_initialize);
diff --git a/arch/mips/pci/ops-emma2rh.c b/arch/mips/pci/ops-emma2rh.c
index 5947a70b0b7f..710aef5c070e 100644
--- a/arch/mips/pci/ops-emma2rh.c
+++ b/arch/mips/pci/ops-emma2rh.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/pci/ops-emma2rh.c
3 * This file defines the PCI operation for EMMA2RH.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/pci/ops-vr41xx.c 4 * This file is based on the arch/mips/pci/ops-vr41xx.c
diff --git a/arch/mips/pci/ops-vr41xx.c b/arch/mips/pci/ops-vr41xx.c
index 900c6b32576c..28962a7c6606 100644
--- a/arch/mips/pci/ops-vr41xx.c
+++ b/arch/mips/pci/ops-vr41xx.c
@@ -2,8 +2,8 @@
2 * ops-vr41xx.c, PCI configuration routines for the PCIU of NEC VR4100 series. 2 * ops-vr41xx.c, PCI configuration routines for the PCIU of NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2001-2003 MontaVista Software Inc. 4 * Copyright (C) 2001-2003 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
21 */ 21 */
22/* 22/*
23 * Changes: 23 * Changes:
24 * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> 24 * MontaVista Software Inc. <source@mvista.com>
25 * - New creation, NEC VR4122 and VR4131 are supported. 25 * - New creation, NEC VR4122 and VR4131 are supported.
26 */ 26 */
27#include <linux/pci.h> 27#include <linux/pci.h>
diff --git a/arch/mips/pci/pci-emma2rh.c b/arch/mips/pci/pci-emma2rh.c
index 2df4190232cd..773e34ff4d1c 100644
--- a/arch/mips/pci/pci-emma2rh.c
+++ b/arch/mips/pci/pci-emma2rh.c
@@ -1,7 +1,4 @@
1/* 1/*
2 * arch/mips/pci/pci-emma2rh.c
3 * This file defines the PCI configration.
4 *
5 * Copyright (C) NEC Electronics Corporation 2004-2006 2 * Copyright (C) NEC Electronics Corporation 2004-2006
6 * 3 *
7 * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c 4 * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c
index dda6f2058665..a0e726eb039a 100644
--- a/arch/mips/pci/pci-ip27.c
+++ b/arch/mips/pci/pci-ip27.c
@@ -10,6 +10,7 @@
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/pci.h> 12#include <linux/pci.h>
13#include <linux/smp.h>
13#include <asm/sn/arch.h> 14#include <asm/sn/arch.h>
14#include <asm/pci/bridge.h> 15#include <asm/pci/bridge.h>
15#include <asm/paccess.h> 16#include <asm/paccess.h>
diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c
new file mode 100644
index 000000000000..9cb0c807f564
--- /dev/null
+++ b/arch/mips/pci/pci-octeon.c
@@ -0,0 +1,675 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2005-2009 Cavium Networks
7 */
8#include <linux/kernel.h>
9#include <linux/init.h>
10#include <linux/pci.h>
11#include <linux/interrupt.h>
12#include <linux/time.h>
13#include <linux/delay.h>
14
15#include <asm/time.h>
16
17#include <asm/octeon/octeon.h>
18#include <asm/octeon/cvmx-npi-defs.h>
19#include <asm/octeon/cvmx-pci-defs.h>
20#include <asm/octeon/pci-octeon.h>
21
22#define USE_OCTEON_INTERNAL_ARBITER
23
24/*
25 * Octeon's PCI controller uses did=3, subdid=2 for PCI IO
26 * addresses. Use PCI endian swapping 1 so no address swapping is
27 * necessary. The Linux io routines will endian swap the data.
28 */
29#define OCTEON_PCI_IOSPACE_BASE 0x80011a0400000000ull
30#define OCTEON_PCI_IOSPACE_SIZE (1ull<<32)
31
32/* Octeon't PCI controller uses did=3, subdid=3 for PCI memory. */
33#define OCTEON_PCI_MEMSPACE_OFFSET (0x00011b0000000000ull)
34
35/**
36 * This is the bit decoding used for the Octeon PCI controller addresses
37 */
38union octeon_pci_address {
39 uint64_t u64;
40 struct {
41 uint64_t upper:2;
42 uint64_t reserved:13;
43 uint64_t io:1;
44 uint64_t did:5;
45 uint64_t subdid:3;
46 uint64_t reserved2:4;
47 uint64_t endian_swap:2;
48 uint64_t reserved3:10;
49 uint64_t bus:8;
50 uint64_t dev:5;
51 uint64_t func:3;
52 uint64_t reg:8;
53 } s;
54};
55
56int __initdata (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
57 u8 slot, u8 pin);
58enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
59
60/**
61 * Map a PCI device to the appropriate interrupt line
62 *
63 * @dev: The Linux PCI device structure for the device to map
64 * @slot: The slot number for this device on __BUS 0__. Linux
65 * enumerates through all the bridges and figures out the
66 * slot on Bus 0 where this device eventually hooks to.
67 * @pin: The PCI interrupt pin read from the device, then swizzled
68 * as it goes through each bridge.
69 * Returns Interrupt number for the device
70 */
71int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
72{
73 if (octeon_pcibios_map_irq)
74 return octeon_pcibios_map_irq(dev, slot, pin);
75 else
76 panic("octeon_pcibios_map_irq not set.");
77}
78
79
80/*
81 * Called to perform platform specific PCI setup
82 */
83int pcibios_plat_dev_init(struct pci_dev *dev)
84{
85 uint16_t config;
86 uint32_t dconfig;
87 int pos;
88 /*
89 * Force the Cache line setting to 64 bytes. The standard
90 * Linux bus scan doesn't seem to set it. Octeon really has
91 * 128 byte lines, but Intel bridges get really upset if you
92 * try and set values above 64 bytes. Value is specified in
93 * 32bit words.
94 */
95 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 64 / 4);
96 /* Set latency timers for all devices */
97 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 48);
98
99 /* Enable reporting System errors and parity errors on all devices */
100 /* Enable parity checking and error reporting */
101 pci_read_config_word(dev, PCI_COMMAND, &config);
102 config |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
103 pci_write_config_word(dev, PCI_COMMAND, config);
104
105 if (dev->subordinate) {
106 /* Set latency timers on sub bridges */
107 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 48);
108 /* More bridge error detection */
109 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &config);
110 config |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR;
111 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, config);
112 }
113
114 /* Enable the PCIe normal error reporting */
115 pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
116 if (pos) {
117 /* Update Device Control */
118 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &config);
119 /* Correctable Error Reporting */
120 config |= PCI_EXP_DEVCTL_CERE;
121 /* Non-Fatal Error Reporting */
122 config |= PCI_EXP_DEVCTL_NFERE;
123 /* Fatal Error Reporting */
124 config |= PCI_EXP_DEVCTL_FERE;
125 /* Unsupported Request */
126 config |= PCI_EXP_DEVCTL_URRE;
127 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, config);
128 }
129
130 /* Find the Advanced Error Reporting capability */
131 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
132 if (pos) {
133 /* Clear Uncorrectable Error Status */
134 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS,
135 &dconfig);
136 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS,
137 dconfig);
138 /* Enable reporting of all uncorrectable errors */
139 /* Uncorrectable Error Mask - turned on bits disable errors */
140 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, 0);
141 /*
142 * Leave severity at HW default. This only controls if
143 * errors are reported as uncorrectable or
144 * correctable, not if the error is reported.
145 */
146 /* PCI_ERR_UNCOR_SEVER - Uncorrectable Error Severity */
147 /* Clear Correctable Error Status */
148 pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS, &dconfig);
149 pci_write_config_dword(dev, pos + PCI_ERR_COR_STATUS, dconfig);
150 /* Enable reporting of all correctable errors */
151 /* Correctable Error Mask - turned on bits disable errors */
152 pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, 0);
153 /* Advanced Error Capabilities */
154 pci_read_config_dword(dev, pos + PCI_ERR_CAP, &dconfig);
155 /* ECRC Generation Enable */
156 if (config & PCI_ERR_CAP_ECRC_GENC)
157 config |= PCI_ERR_CAP_ECRC_GENE;
158 /* ECRC Check Enable */
159 if (config & PCI_ERR_CAP_ECRC_CHKC)
160 config |= PCI_ERR_CAP_ECRC_CHKE;
161 pci_write_config_dword(dev, pos + PCI_ERR_CAP, dconfig);
162 /* PCI_ERR_HEADER_LOG - Header Log Register (16 bytes) */
163 /* Report all errors to the root complex */
164 pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND,
165 PCI_ERR_ROOT_CMD_COR_EN |
166 PCI_ERR_ROOT_CMD_NONFATAL_EN |
167 PCI_ERR_ROOT_CMD_FATAL_EN);
168 /* Clear the Root status register */
169 pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, &dconfig);
170 pci_write_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, dconfig);
171 }
172
173 return 0;
174}
175
176/**
177 * Return the mapping of PCI device number to IRQ line. Each
178 * character in the return string represents the interrupt
179 * line for the device at that position. Device 1 maps to the
180 * first character, etc. The characters A-D are used for PCI
181 * interrupts.
182 *
183 * Returns PCI interrupt mapping
184 */
185const char *octeon_get_pci_interrupts(void)
186{
187 /*
188 * Returning an empty string causes the interrupts to be
189 * routed based on the PCI specification. From the PCI spec:
190 *
191 * INTA# of Device Number 0 is connected to IRQW on the system
192 * board. (Device Number has no significance regarding being
193 * located on the system board or in a connector.) INTA# of
194 * Device Number 1 is connected to IRQX on the system
195 * board. INTA# of Device Number 2 is connected to IRQY on the
196 * system board. INTA# of Device Number 3 is connected to IRQZ
197 * on the system board. The table below describes how each
198 * agent's INTx# lines are connected to the system board
199 * interrupt lines. The following equation can be used to
200 * determine to which INTx# signal on the system board a given
201 * device's INTx# line(s) is connected.
202 *
203 * MB = (D + I) MOD 4 MB = System board Interrupt (IRQW = 0,
204 * IRQX = 1, IRQY = 2, and IRQZ = 3) D = Device Number I =
205 * Interrupt Number (INTA# = 0, INTB# = 1, INTC# = 2, and
206 * INTD# = 3)
207 */
208 switch (octeon_bootinfo->board_type) {
209 case CVMX_BOARD_TYPE_NAO38:
210 /* This is really the NAC38 */
211 return "AAAAADABAAAAAAAAAAAAAAAAAAAAAAAA";
212 case CVMX_BOARD_TYPE_THUNDER:
213 return "";
214 case CVMX_BOARD_TYPE_EBH3000:
215 return "";
216 case CVMX_BOARD_TYPE_EBH3100:
217 case CVMX_BOARD_TYPE_CN3010_EVB_HS5:
218 case CVMX_BOARD_TYPE_CN3005_EVB_HS5:
219 return "AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
220 case CVMX_BOARD_TYPE_BBGW_REF:
221 return "AABCD";
222 default:
223 return "";
224 }
225}
226
227/**
228 * Map a PCI device to the appropriate interrupt line
229 *
230 * @dev: The Linux PCI device structure for the device to map
231 * @slot: The slot number for this device on __BUS 0__. Linux
232 * enumerates through all the bridges and figures out the
233 * slot on Bus 0 where this device eventually hooks to.
234 * @pin: The PCI interrupt pin read from the device, then swizzled
235 * as it goes through each bridge.
236 * Returns Interrupt number for the device
237 */
238int __init octeon_pci_pcibios_map_irq(const struct pci_dev *dev,
239 u8 slot, u8 pin)
240{
241 int irq_num;
242 const char *interrupts;
243 int dev_num;
244
245 /* Get the board specific interrupt mapping */
246 interrupts = octeon_get_pci_interrupts();
247
248 dev_num = dev->devfn >> 3;
249 if (dev_num < strlen(interrupts))
250 irq_num = ((interrupts[dev_num] - 'A' + pin - 1) & 3) +
251 OCTEON_IRQ_PCI_INT0;
252 else
253 irq_num = ((slot + pin - 3) & 3) + OCTEON_IRQ_PCI_INT0;
254 return irq_num;
255}
256
257
258/*
259 * Read a value from configuration space
260 */
261static int octeon_read_config(struct pci_bus *bus, unsigned int devfn,
262 int reg, int size, u32 *val)
263{
264 union octeon_pci_address pci_addr;
265
266 pci_addr.u64 = 0;
267 pci_addr.s.upper = 2;
268 pci_addr.s.io = 1;
269 pci_addr.s.did = 3;
270 pci_addr.s.subdid = 1;
271 pci_addr.s.endian_swap = 1;
272 pci_addr.s.bus = bus->number;
273 pci_addr.s.dev = devfn >> 3;
274 pci_addr.s.func = devfn & 0x7;
275 pci_addr.s.reg = reg;
276
277#if PCI_CONFIG_SPACE_DELAY
278 udelay(PCI_CONFIG_SPACE_DELAY);
279#endif
280 switch (size) {
281 case 4:
282 *val = le32_to_cpu(cvmx_read64_uint32(pci_addr.u64));
283 return PCIBIOS_SUCCESSFUL;
284 case 2:
285 *val = le16_to_cpu(cvmx_read64_uint16(pci_addr.u64));
286 return PCIBIOS_SUCCESSFUL;
287 case 1:
288 *val = cvmx_read64_uint8(pci_addr.u64);
289 return PCIBIOS_SUCCESSFUL;
290 }
291 return PCIBIOS_FUNC_NOT_SUPPORTED;
292}
293
294
295/*
296 * Write a value to PCI configuration space
297 */
298static int octeon_write_config(struct pci_bus *bus, unsigned int devfn,
299 int reg, int size, u32 val)
300{
301 union octeon_pci_address pci_addr;
302
303 pci_addr.u64 = 0;
304 pci_addr.s.upper = 2;
305 pci_addr.s.io = 1;
306 pci_addr.s.did = 3;
307 pci_addr.s.subdid = 1;
308 pci_addr.s.endian_swap = 1;
309 pci_addr.s.bus = bus->number;
310 pci_addr.s.dev = devfn >> 3;
311 pci_addr.s.func = devfn & 0x7;
312 pci_addr.s.reg = reg;
313
314#if PCI_CONFIG_SPACE_DELAY
315 udelay(PCI_CONFIG_SPACE_DELAY);
316#endif
317 switch (size) {
318 case 4:
319 cvmx_write64_uint32(pci_addr.u64, cpu_to_le32(val));
320 return PCIBIOS_SUCCESSFUL;
321 case 2:
322 cvmx_write64_uint16(pci_addr.u64, cpu_to_le16(val));
323 return PCIBIOS_SUCCESSFUL;
324 case 1:
325 cvmx_write64_uint8(pci_addr.u64, val);
326 return PCIBIOS_SUCCESSFUL;
327 }
328 return PCIBIOS_FUNC_NOT_SUPPORTED;
329}
330
331
332static struct pci_ops octeon_pci_ops = {
333 octeon_read_config,
334 octeon_write_config,
335};
336
337static struct resource octeon_pci_mem_resource = {
338 .start = 0,
339 .end = 0,
340 .name = "Octeon PCI MEM",
341 .flags = IORESOURCE_MEM,
342};
343
344/*
345 * PCI ports must be above 16KB so the ISA bus filtering in the PCI-X to PCI
346 * bridge
347 */
348static struct resource octeon_pci_io_resource = {
349 .start = 0x4000,
350 .end = OCTEON_PCI_IOSPACE_SIZE - 1,
351 .name = "Octeon PCI IO",
352 .flags = IORESOURCE_IO,
353};
354
355static struct pci_controller octeon_pci_controller = {
356 .pci_ops = &octeon_pci_ops,
357 .mem_resource = &octeon_pci_mem_resource,
358 .mem_offset = OCTEON_PCI_MEMSPACE_OFFSET,
359 .io_resource = &octeon_pci_io_resource,
360 .io_offset = 0,
361 .io_map_base = OCTEON_PCI_IOSPACE_BASE,
362};
363
364
365/*
366 * Low level initialize the Octeon PCI controller
367 */
368static void octeon_pci_initialize(void)
369{
370 union cvmx_pci_cfg01 cfg01;
371 union cvmx_npi_ctl_status ctl_status;
372 union cvmx_pci_ctl_status_2 ctl_status_2;
373 union cvmx_pci_cfg19 cfg19;
374 union cvmx_pci_cfg16 cfg16;
375 union cvmx_pci_cfg22 cfg22;
376 union cvmx_pci_cfg56 cfg56;
377
378 /* Reset the PCI Bus */
379 cvmx_write_csr(CVMX_CIU_SOFT_PRST, 0x1);
380 cvmx_read_csr(CVMX_CIU_SOFT_PRST);
381
382 udelay(2000); /* Hold PCI reset for 2 ms */
383
384 ctl_status.u64 = 0; /* cvmx_read_csr(CVMX_NPI_CTL_STATUS); */
385 ctl_status.s.max_word = 1;
386 ctl_status.s.timer = 1;
387 cvmx_write_csr(CVMX_NPI_CTL_STATUS, ctl_status.u64);
388
389 /* Deassert PCI reset and advertize PCX Host Mode Device Capability
390 (64b) */
391 cvmx_write_csr(CVMX_CIU_SOFT_PRST, 0x4);
392 cvmx_read_csr(CVMX_CIU_SOFT_PRST);
393
394 udelay(2000); /* Wait 2 ms after deasserting PCI reset */
395
396 ctl_status_2.u32 = 0;
397 ctl_status_2.s.tsr_hwm = 1; /* Initializes to 0. Must be set
398 before any PCI reads. */
399 ctl_status_2.s.bar2pres = 1; /* Enable BAR2 */
400 ctl_status_2.s.bar2_enb = 1;
401 ctl_status_2.s.bar2_cax = 1; /* Don't use L2 */
402 ctl_status_2.s.bar2_esx = 1;
403 ctl_status_2.s.pmo_amod = 1; /* Round robin priority */
404 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_BIG) {
405 /* BAR1 hole */
406 ctl_status_2.s.bb1_hole = OCTEON_PCI_BAR1_HOLE_BITS;
407 ctl_status_2.s.bb1_siz = 1; /* BAR1 is 2GB */
408 ctl_status_2.s.bb_ca = 1; /* Don't use L2 with big bars */
409 ctl_status_2.s.bb_es = 1; /* Big bar in byte swap mode */
410 ctl_status_2.s.bb1 = 1; /* BAR1 is big */
411 ctl_status_2.s.bb0 = 1; /* BAR0 is big */
412 }
413
414 octeon_npi_write32(CVMX_NPI_PCI_CTL_STATUS_2, ctl_status_2.u32);
415 udelay(2000); /* Wait 2 ms before doing PCI reads */
416
417 ctl_status_2.u32 = octeon_npi_read32(CVMX_NPI_PCI_CTL_STATUS_2);
418 pr_notice("PCI Status: %s %s-bit\n",
419 ctl_status_2.s.ap_pcix ? "PCI-X" : "PCI",
420 ctl_status_2.s.ap_64ad ? "64" : "32");
421
422 if (OCTEON_IS_MODEL(OCTEON_CN58XX) || OCTEON_IS_MODEL(OCTEON_CN50XX)) {
423 union cvmx_pci_cnt_reg cnt_reg_start;
424 union cvmx_pci_cnt_reg cnt_reg_end;
425 unsigned long cycles, pci_clock;
426
427 cnt_reg_start.u64 = cvmx_read_csr(CVMX_NPI_PCI_CNT_REG);
428 cycles = read_c0_cvmcount();
429 udelay(1000);
430 cnt_reg_end.u64 = cvmx_read_csr(CVMX_NPI_PCI_CNT_REG);
431 cycles = read_c0_cvmcount() - cycles;
432 pci_clock = (cnt_reg_end.s.pcicnt - cnt_reg_start.s.pcicnt) /
433 (cycles / (mips_hpt_frequency / 1000000));
434 pr_notice("PCI Clock: %lu MHz\n", pci_clock);
435 }
436
437 /*
438 * TDOMC must be set to one in PCI mode. TDOMC should be set to 4
439 * in PCI-X mode to allow four oustanding splits. Otherwise,
440 * should not change from its reset value. Don't write PCI_CFG19
441 * in PCI mode (0x82000001 reset value), write it to 0x82000004
442 * after PCI-X mode is known. MRBCI,MDWE,MDRE -> must be zero.
443 * MRBCM -> must be one.
444 */
445 if (ctl_status_2.s.ap_pcix) {
446 cfg19.u32 = 0;
447 /*
448 * Target Delayed/Split request outstanding maximum
449 * count. [1..31] and 0=32. NOTE: If the user
450 * programs these bits beyond the Designed Maximum
451 * outstanding count, then the designed maximum table
452 * depth will be used instead. No additional
453 * Deferred/Split transactions will be accepted if
454 * this outstanding maximum count is
455 * reached. Furthermore, no additional deferred/split
456 * transactions will be accepted if the I/O delay/ I/O
457 * Split Request outstanding maximum is reached.
458 */
459 cfg19.s.tdomc = 4;
460 /*
461 * Master Deferred Read Request Outstanding Max Count
462 * (PCI only). CR4C[26:24] Max SAC cycles MAX DAC
463 * cycles 000 8 4 001 1 0 010 2 1 011 3 1 100 4 2 101
464 * 5 2 110 6 3 111 7 3 For example, if these bits are
465 * programmed to 100, the core can support 2 DAC
466 * cycles, 4 SAC cycles or a combination of 1 DAC and
467 * 2 SAC cycles. NOTE: For the PCI-X maximum
468 * outstanding split transactions, refer to
469 * CRE0[22:20].
470 */
471 cfg19.s.mdrrmc = 2;
472 /*
473 * Master Request (Memory Read) Byte Count/Byte Enable
474 * select. 0 = Byte Enables valid. In PCI mode, a
475 * burst transaction cannot be performed using Memory
476 * Read command=4?h6. 1 = DWORD Byte Count valid
477 * (default). In PCI Mode, the memory read byte
478 * enables are automatically generated by the
479 * core. Note: N3 Master Request transaction sizes are
480 * always determined through the
481 * am_attr[<35:32>|<7:0>] field.
482 */
483 cfg19.s.mrbcm = 1;
484 octeon_npi_write32(CVMX_NPI_PCI_CFG19, cfg19.u32);
485 }
486
487
488 cfg01.u32 = 0;
489 cfg01.s.msae = 1; /* Memory Space Access Enable */
490 cfg01.s.me = 1; /* Master Enable */
491 cfg01.s.pee = 1; /* PERR# Enable */
492 cfg01.s.see = 1; /* System Error Enable */
493 cfg01.s.fbbe = 1; /* Fast Back to Back Transaction Enable */
494
495 octeon_npi_write32(CVMX_NPI_PCI_CFG01, cfg01.u32);
496
497#ifdef USE_OCTEON_INTERNAL_ARBITER
498 /*
499 * When OCTEON is a PCI host, most systems will use OCTEON's
500 * internal arbiter, so must enable it before any PCI/PCI-X
501 * traffic can occur.
502 */
503 {
504 union cvmx_npi_pci_int_arb_cfg pci_int_arb_cfg;
505
506 pci_int_arb_cfg.u64 = 0;
507 pci_int_arb_cfg.s.en = 1; /* Internal arbiter enable */
508 cvmx_write_csr(CVMX_NPI_PCI_INT_ARB_CFG, pci_int_arb_cfg.u64);
509 }
510#endif /* USE_OCTEON_INTERNAL_ARBITER */
511
512 /*
513 * Preferrably written to 1 to set MLTD. [RDSATI,TRTAE,
514 * TWTAE,TMAE,DPPMR -> must be zero. TILT -> must not be set to
515 * 1..7.
516 */
517 cfg16.u32 = 0;
518 cfg16.s.mltd = 1; /* Master Latency Timer Disable */
519 octeon_npi_write32(CVMX_NPI_PCI_CFG16, cfg16.u32);
520
521 /*
522 * Should be written to 0x4ff00. MTTV -> must be zero.
523 * FLUSH -> must be 1. MRV -> should be 0xFF.
524 */
525 cfg22.u32 = 0;
526 /* Master Retry Value [1..255] and 0=infinite */
527 cfg22.s.mrv = 0xff;
528 /*
529 * AM_DO_FLUSH_I control NOTE: This bit MUST BE ONE for proper
530 * N3K operation.
531 */
532 cfg22.s.flush = 1;
533 octeon_npi_write32(CVMX_NPI_PCI_CFG22, cfg22.u32);
534
535 /*
536 * MOST Indicates the maximum number of outstanding splits (in -1
537 * notation) when OCTEON is in PCI-X mode. PCI-X performance is
538 * affected by the MOST selection. Should generally be written
539 * with one of 0x3be807, 0x2be807, 0x1be807, or 0x0be807,
540 * depending on the desired MOST of 3, 2, 1, or 0, respectively.
541 */
542 cfg56.u32 = 0;
543 cfg56.s.pxcid = 7; /* RO - PCI-X Capability ID */
544 cfg56.s.ncp = 0xe8; /* RO - Next Capability Pointer */
545 cfg56.s.dpere = 1; /* Data Parity Error Recovery Enable */
546 cfg56.s.roe = 1; /* Relaxed Ordering Enable */
547 cfg56.s.mmbc = 1; /* Maximum Memory Byte Count
548 [0=512B,1=1024B,2=2048B,3=4096B] */
549 cfg56.s.most = 3; /* Maximum outstanding Split transactions [0=1
550 .. 7=32] */
551
552 octeon_npi_write32(CVMX_NPI_PCI_CFG56, cfg56.u32);
553
554 /*
555 * Affects PCI performance when OCTEON services reads to its
556 * BAR1/BAR2. Refer to Section 10.6.1. The recommended values are
557 * 0x22, 0x33, and 0x33 for PCI_READ_CMD_6, PCI_READ_CMD_C, and
558 * PCI_READ_CMD_E, respectively. Unfortunately due to errata DDR-700,
559 * these values need to be changed so they won't possibly prefetch off
560 * of the end of memory if PCI is DMAing a buffer at the end of
561 * memory. Note that these values differ from their reset values.
562 */
563 octeon_npi_write32(CVMX_NPI_PCI_READ_CMD_6, 0x21);
564 octeon_npi_write32(CVMX_NPI_PCI_READ_CMD_C, 0x31);
565 octeon_npi_write32(CVMX_NPI_PCI_READ_CMD_E, 0x31);
566}
567
568
569/*
570 * Initialize the Octeon PCI controller
571 */
572static int __init octeon_pci_setup(void)
573{
574 union cvmx_npi_mem_access_subidx mem_access;
575 int index;
576
577 /* Only these chips have PCI */
578 if (octeon_has_feature(OCTEON_FEATURE_PCIE))
579 return 0;
580
581 /* Point pcibios_map_irq() to the PCI version of it */
582 octeon_pcibios_map_irq = octeon_pci_pcibios_map_irq;
583
584 /* Only use the big bars on chips that support it */
585 if (OCTEON_IS_MODEL(OCTEON_CN31XX) ||
586 OCTEON_IS_MODEL(OCTEON_CN38XX_PASS2) ||
587 OCTEON_IS_MODEL(OCTEON_CN38XX_PASS1))
588 octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_SMALL;
589 else
590 octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_BIG;
591
592 /* PCI I/O and PCI MEM values */
593 set_io_port_base(OCTEON_PCI_IOSPACE_BASE);
594 ioport_resource.start = 0;
595 ioport_resource.end = OCTEON_PCI_IOSPACE_SIZE - 1;
596 if (!octeon_is_pci_host()) {
597 pr_notice("Not in host mode, PCI Controller not initialized\n");
598 return 0;
599 }
600
601 pr_notice("%s Octeon big bar support\n",
602 (octeon_dma_bar_type ==
603 OCTEON_DMA_BAR_TYPE_BIG) ? "Enabling" : "Disabling");
604
605 octeon_pci_initialize();
606
607 mem_access.u64 = 0;
608 mem_access.s.esr = 1; /* Endian-Swap on read. */
609 mem_access.s.esw = 1; /* Endian-Swap on write. */
610 mem_access.s.nsr = 0; /* No-Snoop on read. */
611 mem_access.s.nsw = 0; /* No-Snoop on write. */
612 mem_access.s.ror = 0; /* Relax Read on read. */
613 mem_access.s.row = 0; /* Relax Order on write. */
614 mem_access.s.ba = 0; /* PCI Address bits [63:36]. */
615 cvmx_write_csr(CVMX_NPI_MEM_ACCESS_SUBID3, mem_access.u64);
616
617 /*
618 * Remap the Octeon BAR 2 above all 32 bit devices
619 * (0x8000000000ul). This is done here so it is remapped
620 * before the readl()'s below. We don't want BAR2 overlapping
621 * with BAR0/BAR1 during these reads.
622 */
623 octeon_npi_write32(CVMX_NPI_PCI_CFG08, 0);
624 octeon_npi_write32(CVMX_NPI_PCI_CFG09, 0x80);
625
626 /* Disable the BAR1 movable mappings */
627 for (index = 0; index < 32; index++)
628 octeon_npi_write32(CVMX_NPI_PCI_BAR1_INDEXX(index), 0);
629
630 if (octeon_dma_bar_type == OCTEON_DMA_BAR_TYPE_BIG) {
631 /* Remap the Octeon BAR 0 to 0-2GB */
632 octeon_npi_write32(CVMX_NPI_PCI_CFG04, 0);
633 octeon_npi_write32(CVMX_NPI_PCI_CFG05, 0);
634
635 /*
636 * Remap the Octeon BAR 1 to map 2GB-4GB (minus the
637 * BAR 1 hole).
638 */
639 octeon_npi_write32(CVMX_NPI_PCI_CFG06, 2ul << 30);
640 octeon_npi_write32(CVMX_NPI_PCI_CFG07, 0);
641
642 /* Devices go after BAR1 */
643 octeon_pci_mem_resource.start =
644 OCTEON_PCI_MEMSPACE_OFFSET + (4ul << 30) -
645 (OCTEON_PCI_BAR1_HOLE_SIZE << 20);
646 octeon_pci_mem_resource.end =
647 octeon_pci_mem_resource.start + (1ul << 30);
648 } else {
649 /* Remap the Octeon BAR 0 to map 128MB-(128MB+4KB) */
650 octeon_npi_write32(CVMX_NPI_PCI_CFG04, 128ul << 20);
651 octeon_npi_write32(CVMX_NPI_PCI_CFG05, 0);
652
653 /* Remap the Octeon BAR 1 to map 0-128MB */
654 octeon_npi_write32(CVMX_NPI_PCI_CFG06, 0);
655 octeon_npi_write32(CVMX_NPI_PCI_CFG07, 0);
656
657 /* Devices go after BAR0 */
658 octeon_pci_mem_resource.start =
659 OCTEON_PCI_MEMSPACE_OFFSET + (128ul << 20) +
660 (4ul << 10);
661 octeon_pci_mem_resource.end =
662 octeon_pci_mem_resource.start + (1ul << 30);
663 }
664
665 register_pci_controller(&octeon_pci_controller);
666
667 /*
668 * Clear any errors that might be pending from before the bus
669 * was setup properly.
670 */
671 cvmx_write_csr(CVMX_NPI_PCI_INT_SUM2, -1);
672 return 0;
673}
674
675arch_initcall(octeon_pci_setup);
diff --git a/arch/mips/pci/pci-tx4927.c b/arch/mips/pci/pci-tx4927.c
index aaa900596792..a5807406a7f1 100644
--- a/arch/mips/pci/pci-tx4927.c
+++ b/arch/mips/pci/pci-tx4927.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/pci/pci-tx4927.c
3 *
4 * Based on linux/arch/mips/txx9/rbtx4938/setup.c, 2 * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
5 * and RBTX49xx patch from CELF patch archive. 3 * and RBTX49xx patch from CELF patch archive.
6 * 4 *
diff --git a/arch/mips/pci/pci-tx4938.c b/arch/mips/pci/pci-tx4938.c
index 1ea257bc3b8f..20e45f30b2ef 100644
--- a/arch/mips/pci/pci-tx4938.c
+++ b/arch/mips/pci/pci-tx4938.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/pci/pci-tx4938.c
3 *
4 * Based on linux/arch/mips/txx9/rbtx4938/setup.c, 2 * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
5 * and RBTX49xx patch from CELF patch archive. 3 * and RBTX49xx patch from CELF patch archive.
6 * 4 *
diff --git a/arch/mips/pci/pci-tx4939.c b/arch/mips/pci/pci-tx4939.c
index 5fecf1cdc325..9ef840693baf 100644
--- a/arch/mips/pci/pci-tx4939.c
+++ b/arch/mips/pci/pci-tx4939.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/pci/pci-tx4939.c
3 *
4 * Based on linux/arch/mips/txx9/rbtx4939/setup.c, 2 * Based on linux/arch/mips/txx9/rbtx4939/setup.c,
5 * and RBTX49xx patch from CELF patch archive. 3 * and RBTX49xx patch from CELF patch archive.
6 * 4 *
diff --git a/arch/mips/pci/pci-vr41xx.c b/arch/mips/pci/pci-vr41xx.c
index d1e049b55f34..56525711f8b7 100644
--- a/arch/mips/pci/pci-vr41xx.c
+++ b/arch/mips/pci/pci-vr41xx.c
@@ -2,8 +2,8 @@
2 * pci-vr41xx.c, PCI Control Unit routines for the NEC VR4100 series. 2 * pci-vr41xx.c, PCI Control Unit routines for the NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2001-2003 MontaVista Software Inc. 4 * Copyright (C) 2001-2003 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copyright (C) 2004-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copyright (C) 2004-2008 Yoichi Yuasa <yuasa@linux-mips.org>
7 * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) 7 * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
8 * 8 *
9 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
@@ -22,7 +22,7 @@
22 */ 22 */
23/* 23/*
24 * Changes: 24 * Changes:
25 * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> 25 * MontaVista Software Inc. <source@mvista.com>
26 * - New creation, NEC VR4122 and VR4131 are supported. 26 * - New creation, NEC VR4122 and VR4131 are supported.
27 */ 27 */
28#include <linux/init.h> 28#include <linux/init.h>
diff --git a/arch/mips/pci/pci-vr41xx.h b/arch/mips/pci/pci-vr41xx.h
index 8a35e32b8376..6b1ae2eb1c06 100644
--- a/arch/mips/pci/pci-vr41xx.h
+++ b/arch/mips/pci/pci-vr41xx.h
@@ -2,8 +2,8 @@
2 * pci-vr41xx.h, Include file for PCI Control Unit of the NEC VR4100 series. 2 * pci-vr41xx.h, Include file for PCI Control Unit of the NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2002 MontaVista Software Inc. 4 * Copyright (C) 2002 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@linux-mips.org>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c
new file mode 100644
index 000000000000..6aa5c542d52d
--- /dev/null
+++ b/arch/mips/pci/pcie-octeon.c
@@ -0,0 +1,1372 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2007, 2008 Cavium Networks
7 */
8#include <linux/kernel.h>
9#include <linux/init.h>
10#include <linux/pci.h>
11#include <linux/interrupt.h>
12#include <linux/time.h>
13#include <linux/delay.h>
14
15#include <asm/octeon/octeon.h>
16#include <asm/octeon/cvmx-npei-defs.h>
17#include <asm/octeon/cvmx-pciercx-defs.h>
18#include <asm/octeon/cvmx-pescx-defs.h>
19#include <asm/octeon/cvmx-pexp-defs.h>
20#include <asm/octeon/cvmx-helper-errata.h>
21#include <asm/octeon/pci-octeon.h>
22
23union cvmx_pcie_address {
24 uint64_t u64;
25 struct {
26 uint64_t upper:2; /* Normally 2 for XKPHYS */
27 uint64_t reserved_49_61:13; /* Must be zero */
28 uint64_t io:1; /* 1 for IO space access */
29 uint64_t did:5; /* PCIe DID = 3 */
30 uint64_t subdid:3; /* PCIe SubDID = 1 */
31 uint64_t reserved_36_39:4; /* Must be zero */
32 uint64_t es:2; /* Endian swap = 1 */
33 uint64_t port:2; /* PCIe port 0,1 */
34 uint64_t reserved_29_31:3; /* Must be zero */
35 /*
36 * Selects the type of the configuration request (0 = type 0,
37 * 1 = type 1).
38 */
39 uint64_t ty:1;
40 /* Target bus number sent in the ID in the request. */
41 uint64_t bus:8;
42 /*
43 * Target device number sent in the ID in the
44 * request. Note that Dev must be zero for type 0
45 * configuration requests.
46 */
47 uint64_t dev:5;
48 /* Target function number sent in the ID in the request. */
49 uint64_t func:3;
50 /*
51 * Selects a register in the configuration space of
52 * the target.
53 */
54 uint64_t reg:12;
55 } config;
56 struct {
57 uint64_t upper:2; /* Normally 2 for XKPHYS */
58 uint64_t reserved_49_61:13; /* Must be zero */
59 uint64_t io:1; /* 1 for IO space access */
60 uint64_t did:5; /* PCIe DID = 3 */
61 uint64_t subdid:3; /* PCIe SubDID = 2 */
62 uint64_t reserved_36_39:4; /* Must be zero */
63 uint64_t es:2; /* Endian swap = 1 */
64 uint64_t port:2; /* PCIe port 0,1 */
65 uint64_t address:32; /* PCIe IO address */
66 } io;
67 struct {
68 uint64_t upper:2; /* Normally 2 for XKPHYS */
69 uint64_t reserved_49_61:13; /* Must be zero */
70 uint64_t io:1; /* 1 for IO space access */
71 uint64_t did:5; /* PCIe DID = 3 */
72 uint64_t subdid:3; /* PCIe SubDID = 3-6 */
73 uint64_t reserved_36_39:4; /* Must be zero */
74 uint64_t address:36; /* PCIe Mem address */
75 } mem;
76};
77
78/**
79 * Return the Core virtual base address for PCIe IO access. IOs are
80 * read/written as an offset from this address.
81 *
82 * @pcie_port: PCIe port the IO is for
83 *
84 * Returns 64bit Octeon IO base address for read/write
85 */
86static inline uint64_t cvmx_pcie_get_io_base_address(int pcie_port)
87{
88 union cvmx_pcie_address pcie_addr;
89 pcie_addr.u64 = 0;
90 pcie_addr.io.upper = 0;
91 pcie_addr.io.io = 1;
92 pcie_addr.io.did = 3;
93 pcie_addr.io.subdid = 2;
94 pcie_addr.io.es = 1;
95 pcie_addr.io.port = pcie_port;
96 return pcie_addr.u64;
97}
98
99/**
100 * Size of the IO address region returned at address
101 * cvmx_pcie_get_io_base_address()
102 *
103 * @pcie_port: PCIe port the IO is for
104 *
105 * Returns Size of the IO window
106 */
107static inline uint64_t cvmx_pcie_get_io_size(int pcie_port)
108{
109 return 1ull << 32;
110}
111
112/**
113 * Return the Core virtual base address for PCIe MEM access. Memory is
114 * read/written as an offset from this address.
115 *
116 * @pcie_port: PCIe port the IO is for
117 *
118 * Returns 64bit Octeon IO base address for read/write
119 */
120static inline uint64_t cvmx_pcie_get_mem_base_address(int pcie_port)
121{
122 union cvmx_pcie_address pcie_addr;
123 pcie_addr.u64 = 0;
124 pcie_addr.mem.upper = 0;
125 pcie_addr.mem.io = 1;
126 pcie_addr.mem.did = 3;
127 pcie_addr.mem.subdid = 3 + pcie_port;
128 return pcie_addr.u64;
129}
130
131/**
132 * Size of the Mem address region returned at address
133 * cvmx_pcie_get_mem_base_address()
134 *
135 * @pcie_port: PCIe port the IO is for
136 *
137 * Returns Size of the Mem window
138 */
139static inline uint64_t cvmx_pcie_get_mem_size(int pcie_port)
140{
141 return 1ull << 36;
142}
143
144/**
145 * Read a PCIe config space register indirectly. This is used for
146 * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
147 *
148 * @pcie_port: PCIe port to read from
149 * @cfg_offset: Address to read
150 *
151 * Returns Value read
152 */
153static uint32_t cvmx_pcie_cfgx_read(int pcie_port, uint32_t cfg_offset)
154{
155 union cvmx_pescx_cfg_rd pescx_cfg_rd;
156 pescx_cfg_rd.u64 = 0;
157 pescx_cfg_rd.s.addr = cfg_offset;
158 cvmx_write_csr(CVMX_PESCX_CFG_RD(pcie_port), pescx_cfg_rd.u64);
159 pescx_cfg_rd.u64 = cvmx_read_csr(CVMX_PESCX_CFG_RD(pcie_port));
160 return pescx_cfg_rd.s.data;
161}
162
163/**
164 * Write a PCIe config space register indirectly. This is used for
165 * registers of the form PCIEEP_CFG??? and PCIERC?_CFG???.
166 *
167 * @pcie_port: PCIe port to write to
168 * @cfg_offset: Address to write
169 * @val: Value to write
170 */
171static void cvmx_pcie_cfgx_write(int pcie_port, uint32_t cfg_offset,
172 uint32_t val)
173{
174 union cvmx_pescx_cfg_wr pescx_cfg_wr;
175 pescx_cfg_wr.u64 = 0;
176 pescx_cfg_wr.s.addr = cfg_offset;
177 pescx_cfg_wr.s.data = val;
178 cvmx_write_csr(CVMX_PESCX_CFG_WR(pcie_port), pescx_cfg_wr.u64);
179}
180
181/**
182 * Build a PCIe config space request address for a device
183 *
184 * @pcie_port: PCIe port to access
185 * @bus: Sub bus
186 * @dev: Device ID
187 * @fn: Device sub function
188 * @reg: Register to access
189 *
190 * Returns 64bit Octeon IO address
191 */
192static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus,
193 int dev, int fn, int reg)
194{
195 union cvmx_pcie_address pcie_addr;
196 union cvmx_pciercx_cfg006 pciercx_cfg006;
197
198 pciercx_cfg006.u32 =
199 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG006(pcie_port));
200 if ((bus <= pciercx_cfg006.s.pbnum) && (dev != 0))
201 return 0;
202
203 pcie_addr.u64 = 0;
204 pcie_addr.config.upper = 2;
205 pcie_addr.config.io = 1;
206 pcie_addr.config.did = 3;
207 pcie_addr.config.subdid = 1;
208 pcie_addr.config.es = 1;
209 pcie_addr.config.port = pcie_port;
210 pcie_addr.config.ty = (bus > pciercx_cfg006.s.pbnum);
211 pcie_addr.config.bus = bus;
212 pcie_addr.config.dev = dev;
213 pcie_addr.config.func = fn;
214 pcie_addr.config.reg = reg;
215 return pcie_addr.u64;
216}
217
218/**
219 * Read 8bits from a Device's config space
220 *
221 * @pcie_port: PCIe port the device is on
222 * @bus: Sub bus
223 * @dev: Device ID
224 * @fn: Device sub function
225 * @reg: Register to access
226 *
227 * Returns Result of the read
228 */
229static uint8_t cvmx_pcie_config_read8(int pcie_port, int bus, int dev,
230 int fn, int reg)
231{
232 uint64_t address =
233 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
234 if (address)
235 return cvmx_read64_uint8(address);
236 else
237 return 0xff;
238}
239
240/**
241 * Read 16bits from a Device's config space
242 *
243 * @pcie_port: PCIe port the device is on
244 * @bus: Sub bus
245 * @dev: Device ID
246 * @fn: Device sub function
247 * @reg: Register to access
248 *
249 * Returns Result of the read
250 */
251static uint16_t cvmx_pcie_config_read16(int pcie_port, int bus, int dev,
252 int fn, int reg)
253{
254 uint64_t address =
255 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
256 if (address)
257 return le16_to_cpu(cvmx_read64_uint16(address));
258 else
259 return 0xffff;
260}
261
262/**
263 * Read 32bits from a Device's config space
264 *
265 * @pcie_port: PCIe port the device is on
266 * @bus: Sub bus
267 * @dev: Device ID
268 * @fn: Device sub function
269 * @reg: Register to access
270 *
271 * Returns Result of the read
272 */
273static uint32_t cvmx_pcie_config_read32(int pcie_port, int bus, int dev,
274 int fn, int reg)
275{
276 uint64_t address =
277 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
278 if (address)
279 return le32_to_cpu(cvmx_read64_uint32(address));
280 else
281 return 0xffffffff;
282}
283
284/**
285 * Write 8bits to a Device's config space
286 *
287 * @pcie_port: PCIe port the device is on
288 * @bus: Sub bus
289 * @dev: Device ID
290 * @fn: Device sub function
291 * @reg: Register to access
292 * @val: Value to write
293 */
294static void cvmx_pcie_config_write8(int pcie_port, int bus, int dev, int fn,
295 int reg, uint8_t val)
296{
297 uint64_t address =
298 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
299 if (address)
300 cvmx_write64_uint8(address, val);
301}
302
303/**
304 * Write 16bits to a Device's config space
305 *
306 * @pcie_port: PCIe port the device is on
307 * @bus: Sub bus
308 * @dev: Device ID
309 * @fn: Device sub function
310 * @reg: Register to access
311 * @val: Value to write
312 */
313static void cvmx_pcie_config_write16(int pcie_port, int bus, int dev, int fn,
314 int reg, uint16_t val)
315{
316 uint64_t address =
317 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
318 if (address)
319 cvmx_write64_uint16(address, cpu_to_le16(val));
320}
321
322/**
323 * Write 32bits to a Device's config space
324 *
325 * @pcie_port: PCIe port the device is on
326 * @bus: Sub bus
327 * @dev: Device ID
328 * @fn: Device sub function
329 * @reg: Register to access
330 * @val: Value to write
331 */
332static void cvmx_pcie_config_write32(int pcie_port, int bus, int dev, int fn,
333 int reg, uint32_t val)
334{
335 uint64_t address =
336 __cvmx_pcie_build_config_addr(pcie_port, bus, dev, fn, reg);
337 if (address)
338 cvmx_write64_uint32(address, cpu_to_le32(val));
339}
340
341/**
342 * Initialize the RC config space CSRs
343 *
344 * @pcie_port: PCIe port to initialize
345 */
346static void __cvmx_pcie_rc_initialize_config_space(int pcie_port)
347{
348 union cvmx_pciercx_cfg030 pciercx_cfg030;
349 union cvmx_npei_ctl_status2 npei_ctl_status2;
350 union cvmx_pciercx_cfg070 pciercx_cfg070;
351 union cvmx_pciercx_cfg001 pciercx_cfg001;
352 union cvmx_pciercx_cfg032 pciercx_cfg032;
353 union cvmx_pciercx_cfg006 pciercx_cfg006;
354 union cvmx_pciercx_cfg008 pciercx_cfg008;
355 union cvmx_pciercx_cfg009 pciercx_cfg009;
356 union cvmx_pciercx_cfg010 pciercx_cfg010;
357 union cvmx_pciercx_cfg011 pciercx_cfg011;
358 union cvmx_pciercx_cfg035 pciercx_cfg035;
359 union cvmx_pciercx_cfg075 pciercx_cfg075;
360 union cvmx_pciercx_cfg034 pciercx_cfg034;
361
362 /* Max Payload Size (PCIE*_CFG030[MPS]) */
363 /* Max Read Request Size (PCIE*_CFG030[MRRS]) */
364 /* Relaxed-order, no-snoop enables (PCIE*_CFG030[RO_EN,NS_EN] */
365 /* Error Message Enables (PCIE*_CFG030[CE_EN,NFE_EN,FE_EN,UR_EN]) */
366 pciercx_cfg030.u32 =
367 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG030(pcie_port));
368 /*
369 * Max payload size = 128 bytes for best Octeon DMA
370 * performance.
371 */
372 pciercx_cfg030.s.mps = 0;
373 /*
374 * Max read request size = 128 bytes for best Octeon DMA
375 * performance.
376 */
377 pciercx_cfg030.s.mrrs = 0;
378 /* Enable relaxed ordering. */
379 pciercx_cfg030.s.ro_en = 1;
380 /* Enable no snoop. */
381 pciercx_cfg030.s.ns_en = 1;
382 /* Correctable error reporting enable. */
383 pciercx_cfg030.s.ce_en = 1;
384 /* Non-fatal error reporting enable. */
385 pciercx_cfg030.s.nfe_en = 1;
386 /* Fatal error reporting enable. */
387 pciercx_cfg030.s.fe_en = 1;
388 /* Unsupported request reporting enable. */
389 pciercx_cfg030.s.ur_en = 1;
390 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG030(pcie_port),
391 pciercx_cfg030.u32);
392
393 /*
394 * Max Payload Size (NPEI_CTL_STATUS2[MPS]) must match
395 * PCIE*_CFG030[MPS]
396 *
397 * Max Read Request Size (NPEI_CTL_STATUS2[MRRS]) must not
398 * exceed PCIE*_CFG030[MRRS].
399 */
400 npei_ctl_status2.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_CTL_STATUS2);
401 /* Max payload size = 128 bytes for best Octeon DMA performance */
402 npei_ctl_status2.s.mps = 0;
403 /* Max read request size = 128 bytes for best Octeon DMA performance */
404 npei_ctl_status2.s.mrrs = 0;
405 cvmx_write_csr(CVMX_PEXP_NPEI_CTL_STATUS2, npei_ctl_status2.u64);
406
407 /* ECRC Generation (PCIE*_CFG070[GE,CE]) */
408 pciercx_cfg070.u32 =
409 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG070(pcie_port));
410 pciercx_cfg070.s.ge = 1; /* ECRC generation enable. */
411 pciercx_cfg070.s.ce = 1; /* ECRC check enable. */
412 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG070(pcie_port),
413 pciercx_cfg070.u32);
414
415 /*
416 * Access Enables (PCIE*_CFG001[MSAE,ME]) ME and MSAE should
417 * always be set.
418 *
419 * Interrupt Disable (PCIE*_CFG001[I_DIS]) System Error
420 * Message Enable (PCIE*_CFG001[SEE])
421 */
422 pciercx_cfg001.u32 =
423 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG001(pcie_port));
424 pciercx_cfg001.s.msae = 1; /* Memory space enable. */
425 pciercx_cfg001.s.me = 1; /* Bus master enable. */
426 pciercx_cfg001.s.i_dis = 1; /* INTx assertion disable. */
427 pciercx_cfg001.s.see = 1; /* SERR# enable */
428 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG001(pcie_port),
429 pciercx_cfg001.u32);
430
431 /* Advanced Error Recovery Message Enables */
432 /* (PCIE*_CFG066,PCIE*_CFG067,PCIE*_CFG069) */
433 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG066(pcie_port), 0);
434 /* Use CVMX_PCIERCX_CFG067 hardware default */
435 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG069(pcie_port), 0);
436
437 /* Active State Power Management (PCIE*_CFG032[ASLPC]) */
438 pciercx_cfg032.u32 =
439 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG032(pcie_port));
440 pciercx_cfg032.s.aslpc = 0; /* Active state Link PM control. */
441 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG032(pcie_port),
442 pciercx_cfg032.u32);
443
444 /* Entrance Latencies (PCIE*_CFG451[L0EL,L1EL]) */
445
446 /*
447 * Link Width Mode (PCIERCn_CFG452[LME]) - Set during
448 * cvmx_pcie_rc_initialize_link()
449 *
450 * Primary Bus Number (PCIERCn_CFG006[PBNUM])
451 *
452 * We set the primary bus number to 1 so IDT bridges are
453 * happy. They don't like zero.
454 */
455 pciercx_cfg006.u32 = 0;
456 pciercx_cfg006.s.pbnum = 1;
457 pciercx_cfg006.s.sbnum = 1;
458 pciercx_cfg006.s.subbnum = 1;
459 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG006(pcie_port),
460 pciercx_cfg006.u32);
461
462 /*
463 * Memory-mapped I/O BAR (PCIERCn_CFG008)
464 * Most applications should disable the memory-mapped I/O BAR by
465 * setting PCIERCn_CFG008[ML_ADDR] < PCIERCn_CFG008[MB_ADDR]
466 */
467 pciercx_cfg008.u32 = 0;
468 pciercx_cfg008.s.mb_addr = 0x100;
469 pciercx_cfg008.s.ml_addr = 0;
470 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG008(pcie_port),
471 pciercx_cfg008.u32);
472
473 /*
474 * Prefetchable BAR (PCIERCn_CFG009,PCIERCn_CFG010,PCIERCn_CFG011)
475 * Most applications should disable the prefetchable BAR by setting
476 * PCIERCn_CFG011[UMEM_LIMIT],PCIERCn_CFG009[LMEM_LIMIT] <
477 * PCIERCn_CFG010[UMEM_BASE],PCIERCn_CFG009[LMEM_BASE]
478 */
479 pciercx_cfg009.u32 =
480 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG009(pcie_port));
481 pciercx_cfg010.u32 =
482 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG010(pcie_port));
483 pciercx_cfg011.u32 =
484 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG011(pcie_port));
485 pciercx_cfg009.s.lmem_base = 0x100;
486 pciercx_cfg009.s.lmem_limit = 0;
487 pciercx_cfg010.s.umem_base = 0x100;
488 pciercx_cfg011.s.umem_limit = 0;
489 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG009(pcie_port),
490 pciercx_cfg009.u32);
491 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG010(pcie_port),
492 pciercx_cfg010.u32);
493 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG011(pcie_port),
494 pciercx_cfg011.u32);
495
496 /*
497 * System Error Interrupt Enables (PCIERCn_CFG035[SECEE,SEFEE,SENFEE])
498 * PME Interrupt Enables (PCIERCn_CFG035[PMEIE])
499 */
500 pciercx_cfg035.u32 =
501 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG035(pcie_port));
502 /* System error on correctable error enable. */
503 pciercx_cfg035.s.secee = 1;
504 /* System error on fatal error enable. */
505 pciercx_cfg035.s.sefee = 1;
506 /* System error on non-fatal error enable. */
507 pciercx_cfg035.s.senfee = 1;
508 /* PME interrupt enable. */
509 pciercx_cfg035.s.pmeie = 1;
510 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG035(pcie_port),
511 pciercx_cfg035.u32);
512
513 /*
514 * Advanced Error Recovery Interrupt Enables
515 * (PCIERCn_CFG075[CERE,NFERE,FERE])
516 */
517 pciercx_cfg075.u32 =
518 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG075(pcie_port));
519 /* Correctable error reporting enable. */
520 pciercx_cfg075.s.cere = 1;
521 /* Non-fatal error reporting enable. */
522 pciercx_cfg075.s.nfere = 1;
523 /* Fatal error reporting enable. */
524 pciercx_cfg075.s.fere = 1;
525 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG075(pcie_port),
526 pciercx_cfg075.u32);
527
528 /* HP Interrupt Enables (PCIERCn_CFG034[HPINT_EN],
529 * PCIERCn_CFG034[DLLS_EN,CCINT_EN])
530 */
531 pciercx_cfg034.u32 =
532 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG034(pcie_port));
533 /* Hot-plug interrupt enable. */
534 pciercx_cfg034.s.hpint_en = 1;
535 /* Data Link Layer state changed enable */
536 pciercx_cfg034.s.dlls_en = 1;
537 /* Command completed interrupt enable. */
538 pciercx_cfg034.s.ccint_en = 1;
539 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG034(pcie_port),
540 pciercx_cfg034.u32);
541}
542
543/**
544 * Initialize a host mode PCIe link. This function takes a PCIe
545 * port from reset to a link up state. Software can then begin
546 * configuring the rest of the link.
547 *
548 * @pcie_port: PCIe port to initialize
549 *
550 * Returns Zero on success
551 */
552static int __cvmx_pcie_rc_initialize_link(int pcie_port)
553{
554 uint64_t start_cycle;
555 union cvmx_pescx_ctl_status pescx_ctl_status;
556 union cvmx_pciercx_cfg452 pciercx_cfg452;
557 union cvmx_pciercx_cfg032 pciercx_cfg032;
558 union cvmx_pciercx_cfg448 pciercx_cfg448;
559
560 /* Set the lane width */
561 pciercx_cfg452.u32 =
562 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG452(pcie_port));
563 pescx_ctl_status.u64 = cvmx_read_csr(CVMX_PESCX_CTL_STATUS(pcie_port));
564 if (pescx_ctl_status.s.qlm_cfg == 0) {
565 /* We're in 8 lane (56XX) or 4 lane (54XX) mode */
566 pciercx_cfg452.s.lme = 0xf;
567 } else {
568 /* We're in 4 lane (56XX) or 2 lane (52XX) mode */
569 pciercx_cfg452.s.lme = 0x7;
570 }
571 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG452(pcie_port),
572 pciercx_cfg452.u32);
573
574 /*
575 * CN52XX pass 1.x has an errata where length mismatches on UR
576 * responses can cause bus errors on 64bit memory
577 * reads. Turning off length error checking fixes this.
578 */
579 if (OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X)) {
580 union cvmx_pciercx_cfg455 pciercx_cfg455;
581 pciercx_cfg455.u32 =
582 cvmx_pcie_cfgx_read(pcie_port,
583 CVMX_PCIERCX_CFG455(pcie_port));
584 pciercx_cfg455.s.m_cpl_len_err = 1;
585 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG455(pcie_port),
586 pciercx_cfg455.u32);
587 }
588
589 /* Lane swap needs to be manually enabled for CN52XX */
590 if (OCTEON_IS_MODEL(OCTEON_CN52XX) && (pcie_port == 1)) {
591 pescx_ctl_status.s.lane_swp = 1;
592 cvmx_write_csr(CVMX_PESCX_CTL_STATUS(pcie_port),
593 pescx_ctl_status.u64);
594 }
595
596 /* Bring up the link */
597 pescx_ctl_status.u64 = cvmx_read_csr(CVMX_PESCX_CTL_STATUS(pcie_port));
598 pescx_ctl_status.s.lnk_enb = 1;
599 cvmx_write_csr(CVMX_PESCX_CTL_STATUS(pcie_port), pescx_ctl_status.u64);
600
601 /*
602 * CN52XX pass 1.0: Due to a bug in 2nd order CDR, it needs to
603 * be disabled.
604 */
605 if (OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_0))
606 __cvmx_helper_errata_qlm_disable_2nd_order_cdr(0);
607
608 /* Wait for the link to come up */
609 cvmx_dprintf("PCIe: Waiting for port %d link\n", pcie_port);
610 start_cycle = cvmx_get_cycle();
611 do {
612 if (cvmx_get_cycle() - start_cycle >
613 2 * cvmx_sysinfo_get()->cpu_clock_hz) {
614 cvmx_dprintf("PCIe: Port %d link timeout\n",
615 pcie_port);
616 return -1;
617 }
618 cvmx_wait(10000);
619 pciercx_cfg032.u32 =
620 cvmx_pcie_cfgx_read(pcie_port,
621 CVMX_PCIERCX_CFG032(pcie_port));
622 } while (pciercx_cfg032.s.dlla == 0);
623
624 /* Display the link status */
625 cvmx_dprintf("PCIe: Port %d link active, %d lanes\n", pcie_port,
626 pciercx_cfg032.s.nlw);
627
628 /*
629 * Update the Replay Time Limit. Empirically, some PCIe
630 * devices take a little longer to respond than expected under
631 * load. As a workaround for this we configure the Replay Time
632 * Limit to the value expected for a 512 byte MPS instead of
633 * our actual 256 byte MPS. The numbers below are directly
634 * from the PCIe spec table 3-4.
635 */
636 pciercx_cfg448.u32 =
637 cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG448(pcie_port));
638 switch (pciercx_cfg032.s.nlw) {
639 case 1: /* 1 lane */
640 pciercx_cfg448.s.rtl = 1677;
641 break;
642 case 2: /* 2 lanes */
643 pciercx_cfg448.s.rtl = 867;
644 break;
645 case 4: /* 4 lanes */
646 pciercx_cfg448.s.rtl = 462;
647 break;
648 case 8: /* 8 lanes */
649 pciercx_cfg448.s.rtl = 258;
650 break;
651 }
652 cvmx_pcie_cfgx_write(pcie_port, CVMX_PCIERCX_CFG448(pcie_port),
653 pciercx_cfg448.u32);
654
655 return 0;
656}
657
658/**
659 * Initialize a PCIe port for use in host(RC) mode. It doesn't
660 * enumerate the bus.
661 *
662 * @pcie_port: PCIe port to initialize
663 *
664 * Returns Zero on success
665 */
666static int cvmx_pcie_rc_initialize(int pcie_port)
667{
668 int i;
669 union cvmx_ciu_soft_prst ciu_soft_prst;
670 union cvmx_pescx_bist_status pescx_bist_status;
671 union cvmx_pescx_bist_status2 pescx_bist_status2;
672 union cvmx_npei_ctl_status npei_ctl_status;
673 union cvmx_npei_mem_access_ctl npei_mem_access_ctl;
674 union cvmx_npei_mem_access_subidx mem_access_subid;
675 union cvmx_npei_dbg_data npei_dbg_data;
676 union cvmx_pescx_ctl_status2 pescx_ctl_status2;
677
678 /*
679 * Make sure we aren't trying to setup a target mode interface
680 * in host mode.
681 */
682 npei_ctl_status.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_CTL_STATUS);
683 if ((pcie_port == 0) && !npei_ctl_status.s.host_mode) {
684 cvmx_dprintf("PCIe: ERROR: cvmx_pcie_rc_initialize() called "
685 "on port0, but port0 is not in host mode\n");
686 return -1;
687 }
688
689 /*
690 * Make sure a CN52XX isn't trying to bring up port 1 when it
691 * is disabled.
692 */
693 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
694 npei_dbg_data.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_DBG_DATA);
695 if ((pcie_port == 1) && npei_dbg_data.cn52xx.qlm0_link_width) {
696 cvmx_dprintf("PCIe: ERROR: cvmx_pcie_rc_initialize() "
697 "called on port1, but port1 is "
698 "disabled\n");
699 return -1;
700 }
701 }
702
703 /*
704 * PCIe switch arbitration mode. '0' == fixed priority NPEI,
705 * PCIe0, then PCIe1. '1' == round robin.
706 */
707 npei_ctl_status.s.arb = 1;
708 /* Allow up to 0x20 config retries */
709 npei_ctl_status.s.cfg_rtry = 0x20;
710 /*
711 * CN52XX pass1.x has an errata where P0_NTAGS and P1_NTAGS
712 * don't reset.
713 */
714 if (OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X)) {
715 npei_ctl_status.s.p0_ntags = 0x20;
716 npei_ctl_status.s.p1_ntags = 0x20;
717 }
718 cvmx_write_csr(CVMX_PEXP_NPEI_CTL_STATUS, npei_ctl_status.u64);
719
720 /* Bring the PCIe out of reset */
721 if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_EBH5200) {
722 /*
723 * The EBH5200 board swapped the PCIe reset lines on
724 * the board. As a workaround for this bug, we bring
725 * both PCIe ports out of reset at the same time
726 * instead of on separate calls. So for port 0, we
727 * bring both out of reset and do nothing on port 1.
728 */
729 if (pcie_port == 0) {
730 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST);
731 /*
732 * After a chip reset the PCIe will also be in
733 * reset. If it isn't, most likely someone is
734 * trying to init it again without a proper
735 * PCIe reset.
736 */
737 if (ciu_soft_prst.s.soft_prst == 0) {
738 /* Reset the ports */
739 ciu_soft_prst.s.soft_prst = 1;
740 cvmx_write_csr(CVMX_CIU_SOFT_PRST,
741 ciu_soft_prst.u64);
742 ciu_soft_prst.u64 =
743 cvmx_read_csr(CVMX_CIU_SOFT_PRST1);
744 ciu_soft_prst.s.soft_prst = 1;
745 cvmx_write_csr(CVMX_CIU_SOFT_PRST1,
746 ciu_soft_prst.u64);
747 /* Wait until pcie resets the ports. */
748 udelay(2000);
749 }
750 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST1);
751 ciu_soft_prst.s.soft_prst = 0;
752 cvmx_write_csr(CVMX_CIU_SOFT_PRST1, ciu_soft_prst.u64);
753 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST);
754 ciu_soft_prst.s.soft_prst = 0;
755 cvmx_write_csr(CVMX_CIU_SOFT_PRST, ciu_soft_prst.u64);
756 }
757 } else {
758 /*
759 * The normal case: The PCIe ports are completely
760 * separate and can be brought out of reset
761 * independently.
762 */
763 if (pcie_port)
764 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST1);
765 else
766 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST);
767 /*
768 * After a chip reset the PCIe will also be in
769 * reset. If it isn't, most likely someone is trying
770 * to init it again without a proper PCIe reset.
771 */
772 if (ciu_soft_prst.s.soft_prst == 0) {
773 /* Reset the port */
774 ciu_soft_prst.s.soft_prst = 1;
775 if (pcie_port)
776 cvmx_write_csr(CVMX_CIU_SOFT_PRST1,
777 ciu_soft_prst.u64);
778 else
779 cvmx_write_csr(CVMX_CIU_SOFT_PRST,
780 ciu_soft_prst.u64);
781 /* Wait until pcie resets the ports. */
782 udelay(2000);
783 }
784 if (pcie_port) {
785 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST1);
786 ciu_soft_prst.s.soft_prst = 0;
787 cvmx_write_csr(CVMX_CIU_SOFT_PRST1, ciu_soft_prst.u64);
788 } else {
789 ciu_soft_prst.u64 = cvmx_read_csr(CVMX_CIU_SOFT_PRST);
790 ciu_soft_prst.s.soft_prst = 0;
791 cvmx_write_csr(CVMX_CIU_SOFT_PRST, ciu_soft_prst.u64);
792 }
793 }
794
795 /*
796 * Wait for PCIe reset to complete. Due to errata PCIE-700, we
797 * don't poll PESCX_CTL_STATUS2[PCIERST], but simply wait a
798 * fixed number of cycles.
799 */
800 cvmx_wait(400000);
801
802 /* PESCX_BIST_STATUS2[PCLK_RUN] was missing on pass 1 of CN56XX and
803 CN52XX, so we only probe it on newer chips */
804 if (!OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X)
805 && !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X)) {
806 /* Clear PCLK_RUN so we can check if the clock is running */
807 pescx_ctl_status2.u64 =
808 cvmx_read_csr(CVMX_PESCX_CTL_STATUS2(pcie_port));
809 pescx_ctl_status2.s.pclk_run = 1;
810 cvmx_write_csr(CVMX_PESCX_CTL_STATUS2(pcie_port),
811 pescx_ctl_status2.u64);
812 /*
813 * Now that we cleared PCLK_RUN, wait for it to be set
814 * again telling us the clock is running.
815 */
816 if (CVMX_WAIT_FOR_FIELD64(CVMX_PESCX_CTL_STATUS2(pcie_port),
817 union cvmx_pescx_ctl_status2,
818 pclk_run, ==, 1, 10000)) {
819 cvmx_dprintf("PCIe: Port %d isn't clocked, skipping.\n",
820 pcie_port);
821 return -1;
822 }
823 }
824
825 /*
826 * Check and make sure PCIe came out of reset. If it doesn't
827 * the board probably hasn't wired the clocks up and the
828 * interface should be skipped.
829 */
830 pescx_ctl_status2.u64 =
831 cvmx_read_csr(CVMX_PESCX_CTL_STATUS2(pcie_port));
832 if (pescx_ctl_status2.s.pcierst) {
833 cvmx_dprintf("PCIe: Port %d stuck in reset, skipping.\n",
834 pcie_port);
835 return -1;
836 }
837
838 /*
839 * Check BIST2 status. If any bits are set skip this interface. This
840 * is an attempt to catch PCIE-813 on pass 1 parts.
841 */
842 pescx_bist_status2.u64 =
843 cvmx_read_csr(CVMX_PESCX_BIST_STATUS2(pcie_port));
844 if (pescx_bist_status2.u64) {
845 cvmx_dprintf("PCIe: Port %d BIST2 failed. Most likely this "
846 "port isn't hooked up, skipping.\n",
847 pcie_port);
848 return -1;
849 }
850
851 /* Check BIST status */
852 pescx_bist_status.u64 =
853 cvmx_read_csr(CVMX_PESCX_BIST_STATUS(pcie_port));
854 if (pescx_bist_status.u64)
855 cvmx_dprintf("PCIe: BIST FAILED for port %d (0x%016llx)\n",
856 pcie_port, CAST64(pescx_bist_status.u64));
857
858 /* Initialize the config space CSRs */
859 __cvmx_pcie_rc_initialize_config_space(pcie_port);
860
861 /* Bring the link up */
862 if (__cvmx_pcie_rc_initialize_link(pcie_port)) {
863 cvmx_dprintf
864 ("PCIe: ERROR: cvmx_pcie_rc_initialize_link() failed\n");
865 return -1;
866 }
867
868 /* Store merge control (NPEI_MEM_ACCESS_CTL[TIMER,MAX_WORD]) */
869 npei_mem_access_ctl.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_MEM_ACCESS_CTL);
870 /* Allow 16 words to combine */
871 npei_mem_access_ctl.s.max_word = 0;
872 /* Wait up to 127 cycles for more data */
873 npei_mem_access_ctl.s.timer = 127;
874 cvmx_write_csr(CVMX_PEXP_NPEI_MEM_ACCESS_CTL, npei_mem_access_ctl.u64);
875
876 /* Setup Mem access SubDIDs */
877 mem_access_subid.u64 = 0;
878 /* Port the request is sent to. */
879 mem_access_subid.s.port = pcie_port;
880 /* Due to an errata on pass 1 chips, no merging is allowed. */
881 mem_access_subid.s.nmerge = 1;
882 /* Endian-swap for Reads. */
883 mem_access_subid.s.esr = 1;
884 /* Endian-swap for Writes. */
885 mem_access_subid.s.esw = 1;
886 /* No Snoop for Reads. */
887 mem_access_subid.s.nsr = 1;
888 /* No Snoop for Writes. */
889 mem_access_subid.s.nsw = 1;
890 /* Disable Relaxed Ordering for Reads. */
891 mem_access_subid.s.ror = 0;
892 /* Disable Relaxed Ordering for Writes. */
893 mem_access_subid.s.row = 0;
894 /* PCIe Adddress Bits <63:34>. */
895 mem_access_subid.s.ba = 0;
896
897 /*
898 * Setup mem access 12-15 for port 0, 16-19 for port 1,
899 * supplying 36 bits of address space.
900 */
901 for (i = 12 + pcie_port * 4; i < 16 + pcie_port * 4; i++) {
902 cvmx_write_csr(CVMX_PEXP_NPEI_MEM_ACCESS_SUBIDX(i),
903 mem_access_subid.u64);
904 /* Set each SUBID to extend the addressable range */
905 mem_access_subid.s.ba += 1;
906 }
907
908 /*
909 * Disable the peer to peer forwarding register. This must be
910 * setup by the OS after it enumerates the bus and assigns
911 * addresses to the PCIe busses.
912 */
913 for (i = 0; i < 4; i++) {
914 cvmx_write_csr(CVMX_PESCX_P2P_BARX_START(i, pcie_port), -1);
915 cvmx_write_csr(CVMX_PESCX_P2P_BARX_END(i, pcie_port), -1);
916 }
917
918 /* Set Octeon's BAR0 to decode 0-16KB. It overlaps with Bar2 */
919 cvmx_write_csr(CVMX_PESCX_P2N_BAR0_START(pcie_port), 0);
920
921 /*
922 * Disable Octeon's BAR1. It isn't needed in RC mode since
923 * BAR2 maps all of memory. BAR2 also maps 256MB-512MB into
924 * the 2nd 256MB of memory.
925 */
926 cvmx_write_csr(CVMX_PESCX_P2N_BAR1_START(pcie_port), -1);
927
928 /*
929 * Set Octeon's BAR2 to decode 0-2^39. Bar0 and Bar1 take
930 * precedence where they overlap. It also overlaps with the
931 * device addresses, so make sure the peer to peer forwarding
932 * is set right.
933 */
934 cvmx_write_csr(CVMX_PESCX_P2N_BAR2_START(pcie_port), 0);
935
936 /*
937 * Setup BAR2 attributes
938 *
939 * Relaxed Ordering (NPEI_CTL_PORTn[PTLP_RO,CTLP_RO, WAIT_COM])
940 * - PTLP_RO,CTLP_RO should normally be set (except for debug).
941 * - WAIT_COM=0 will likely work for all applications.
942 *
943 * Load completion relaxed ordering (NPEI_CTL_PORTn[WAITL_COM]).
944 */
945 if (pcie_port) {
946 union cvmx_npei_ctl_port1 npei_ctl_port;
947 npei_ctl_port.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_CTL_PORT1);
948 npei_ctl_port.s.bar2_enb = 1;
949 npei_ctl_port.s.bar2_esx = 1;
950 npei_ctl_port.s.bar2_cax = 0;
951 npei_ctl_port.s.ptlp_ro = 1;
952 npei_ctl_port.s.ctlp_ro = 1;
953 npei_ctl_port.s.wait_com = 0;
954 npei_ctl_port.s.waitl_com = 0;
955 cvmx_write_csr(CVMX_PEXP_NPEI_CTL_PORT1, npei_ctl_port.u64);
956 } else {
957 union cvmx_npei_ctl_port0 npei_ctl_port;
958 npei_ctl_port.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_CTL_PORT0);
959 npei_ctl_port.s.bar2_enb = 1;
960 npei_ctl_port.s.bar2_esx = 1;
961 npei_ctl_port.s.bar2_cax = 0;
962 npei_ctl_port.s.ptlp_ro = 1;
963 npei_ctl_port.s.ctlp_ro = 1;
964 npei_ctl_port.s.wait_com = 0;
965 npei_ctl_port.s.waitl_com = 0;
966 cvmx_write_csr(CVMX_PEXP_NPEI_CTL_PORT0, npei_ctl_port.u64);
967 }
968 return 0;
969}
970
971
972/* Above was cvmx-pcie.c, below original pcie.c */
973
974
975/**
976 * Map a PCI device to the appropriate interrupt line
977 *
978 * @dev: The Linux PCI device structure for the device to map
979 * @slot: The slot number for this device on __BUS 0__. Linux
980 * enumerates through all the bridges and figures out the
981 * slot on Bus 0 where this device eventually hooks to.
982 * @pin: The PCI interrupt pin read from the device, then swizzled
983 * as it goes through each bridge.
984 * Returns Interrupt number for the device
985 */
986int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev,
987 u8 slot, u8 pin)
988{
989 /*
990 * The EBH5600 board with the PCI to PCIe bridge mistakenly
991 * wires the first slot for both device id 2 and interrupt
992 * A. According to the PCI spec, device id 2 should be C. The
993 * following kludge attempts to fix this.
994 */
995 if (strstr(octeon_board_type_string(), "EBH5600") &&
996 dev->bus && dev->bus->parent) {
997 /*
998 * Iterate all the way up the device chain and find
999 * the root bus.
1000 */
1001 while (dev->bus && dev->bus->parent)
1002 dev = to_pci_dev(dev->bus->bridge);
1003 /* If the root bus is number 0 and the PEX 8114 is the
1004 * root, assume we are behind the miswired bus. We
1005 * need to correct the swizzle level by two. Yuck.
1006 */
1007 if ((dev->bus->number == 0) &&
1008 (dev->vendor == 0x10b5) && (dev->device == 0x8114)) {
1009 /*
1010 * The pin field is one based, not zero. We
1011 * need to swizzle it by minus two.
1012 */
1013 pin = ((pin - 3) & 3) + 1;
1014 }
1015 }
1016 /*
1017 * The -1 is because pin starts with one, not zero. It might
1018 * be that this equation needs to include the slot number, but
1019 * I don't have hardware to check that against.
1020 */
1021 return pin - 1 + OCTEON_IRQ_PCI_INT0;
1022}
1023
1024/**
1025 * Read a value from configuration space
1026 *
1027 * @bus:
1028 * @devfn:
1029 * @reg:
1030 * @size:
1031 * @val:
1032 * Returns
1033 */
1034static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus,
1035 unsigned int devfn, int reg, int size,
1036 u32 *val)
1037{
1038 union octeon_cvmemctl cvmmemctl;
1039 union octeon_cvmemctl cvmmemctl_save;
1040 int bus_number = bus->number;
1041
1042 /*
1043 * For the top level bus make sure our hardware bus number
1044 * matches the software one.
1045 */
1046 if (bus->parent == NULL) {
1047 union cvmx_pciercx_cfg006 pciercx_cfg006;
1048 pciercx_cfg006.u32 = cvmx_pcie_cfgx_read(pcie_port,
1049 CVMX_PCIERCX_CFG006(pcie_port));
1050 if (pciercx_cfg006.s.pbnum != bus_number) {
1051 pciercx_cfg006.s.pbnum = bus_number;
1052 pciercx_cfg006.s.sbnum = bus_number;
1053 pciercx_cfg006.s.subbnum = bus_number;
1054 cvmx_pcie_cfgx_write(pcie_port,
1055 CVMX_PCIERCX_CFG006(pcie_port),
1056 pciercx_cfg006.u32);
1057 }
1058 }
1059
1060 /*
1061 * PCIe only has a single device connected to Octeon. It is
1062 * always device ID 0. Don't bother doing reads for other
1063 * device IDs on the first segment.
1064 */
1065 if ((bus->parent == NULL) && (devfn >> 3 != 0))
1066 return PCIBIOS_FUNC_NOT_SUPPORTED;
1067
1068 /*
1069 * The following is a workaround for the CN57XX, CN56XX,
1070 * CN55XX, and CN54XX errata with PCIe config reads from non
1071 * existent devices. These chips will hang the PCIe link if a
1072 * config read is performed that causes a UR response.
1073 */
1074 if (OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1) ||
1075 OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_1)) {
1076 /*
1077 * For our EBH5600 board, port 0 has a bridge with two
1078 * PCI-X slots. We need a new special checks to make
1079 * sure we only probe valid stuff. The PCIe->PCI-X
1080 * bridge only respondes to device ID 0, function
1081 * 0-1
1082 */
1083 if ((bus->parent == NULL) && (devfn >= 2))
1084 return PCIBIOS_FUNC_NOT_SUPPORTED;
1085 /*
1086 * The PCI-X slots are device ID 2,3. Choose one of
1087 * the below "if" blocks based on what is plugged into
1088 * the board.
1089 */
1090#if 1
1091 /* Use this option if you aren't using either slot */
1092 if (bus_number == 1)
1093 return PCIBIOS_FUNC_NOT_SUPPORTED;
1094#elif 0
1095 /*
1096 * Use this option if you are using the first slot but
1097 * not the second.
1098 */
1099 if ((bus_number == 1) && (devfn >> 3 != 2))
1100 return PCIBIOS_FUNC_NOT_SUPPORTED;
1101#elif 0
1102 /*
1103 * Use this option if you are using the second slot
1104 * but not the first.
1105 */
1106 if ((bus_number == 1) && (devfn >> 3 != 3))
1107 return PCIBIOS_FUNC_NOT_SUPPORTED;
1108#elif 0
1109 /* Use this opion if you are using both slots */
1110 if ((bus_number == 1) &&
1111 !((devfn == (2 << 3)) || (devfn == (3 << 3))))
1112 return PCIBIOS_FUNC_NOT_SUPPORTED;
1113#endif
1114
1115 /*
1116 * Shorten the DID timeout so bus errors for PCIe
1117 * config reads from non existent devices happen
1118 * faster. This allows us to continue booting even if
1119 * the above "if" checks are wrong. Once one of these
1120 * errors happens, the PCIe port is dead.
1121 */
1122 cvmmemctl_save.u64 = __read_64bit_c0_register($11, 7);
1123 cvmmemctl.u64 = cvmmemctl_save.u64;
1124 cvmmemctl.s.didtto = 2;
1125 __write_64bit_c0_register($11, 7, cvmmemctl.u64);
1126 }
1127
1128 switch (size) {
1129 case 4:
1130 *val = cvmx_pcie_config_read32(pcie_port, bus_number,
1131 devfn >> 3, devfn & 0x7, reg);
1132 break;
1133 case 2:
1134 *val = cvmx_pcie_config_read16(pcie_port, bus_number,
1135 devfn >> 3, devfn & 0x7, reg);
1136 break;
1137 case 1:
1138 *val = cvmx_pcie_config_read8(pcie_port, bus_number, devfn >> 3,
1139 devfn & 0x7, reg);
1140 break;
1141 default:
1142 return PCIBIOS_FUNC_NOT_SUPPORTED;
1143 }
1144
1145 if (OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1) ||
1146 OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_1))
1147 __write_64bit_c0_register($11, 7, cvmmemctl_save.u64);
1148 return PCIBIOS_SUCCESSFUL;
1149}
1150
1151static int octeon_pcie0_read_config(struct pci_bus *bus, unsigned int devfn,
1152 int reg, int size, u32 *val)
1153{
1154 return octeon_pcie_read_config(0, bus, devfn, reg, size, val);
1155}
1156
1157static int octeon_pcie1_read_config(struct pci_bus *bus, unsigned int devfn,
1158 int reg, int size, u32 *val)
1159{
1160 return octeon_pcie_read_config(1, bus, devfn, reg, size, val);
1161}
1162
1163
1164
1165/**
1166 * Write a value to PCI configuration space
1167 *
1168 * @bus:
1169 * @devfn:
1170 * @reg:
1171 * @size:
1172 * @val:
1173 * Returns
1174 */
1175static inline int octeon_pcie_write_config(int pcie_port, struct pci_bus *bus,
1176 unsigned int devfn, int reg,
1177 int size, u32 val)
1178{
1179 int bus_number = bus->number;
1180
1181 switch (size) {
1182 case 4:
1183 cvmx_pcie_config_write32(pcie_port, bus_number, devfn >> 3,
1184 devfn & 0x7, reg, val);
1185 return PCIBIOS_SUCCESSFUL;
1186 case 2:
1187 cvmx_pcie_config_write16(pcie_port, bus_number, devfn >> 3,
1188 devfn & 0x7, reg, val);
1189 return PCIBIOS_SUCCESSFUL;
1190 case 1:
1191 cvmx_pcie_config_write8(pcie_port, bus_number, devfn >> 3,
1192 devfn & 0x7, reg, val);
1193 return PCIBIOS_SUCCESSFUL;
1194 }
1195#if PCI_CONFIG_SPACE_DELAY
1196 udelay(PCI_CONFIG_SPACE_DELAY);
1197#endif
1198 return PCIBIOS_FUNC_NOT_SUPPORTED;
1199}
1200
1201static int octeon_pcie0_write_config(struct pci_bus *bus, unsigned int devfn,
1202 int reg, int size, u32 val)
1203{
1204 return octeon_pcie_write_config(0, bus, devfn, reg, size, val);
1205}
1206
1207static int octeon_pcie1_write_config(struct pci_bus *bus, unsigned int devfn,
1208 int reg, int size, u32 val)
1209{
1210 return octeon_pcie_write_config(1, bus, devfn, reg, size, val);
1211}
1212
1213static struct pci_ops octeon_pcie0_ops = {
1214 octeon_pcie0_read_config,
1215 octeon_pcie0_write_config,
1216};
1217
1218static struct resource octeon_pcie0_mem_resource = {
1219 .name = "Octeon PCIe0 MEM",
1220 .flags = IORESOURCE_MEM,
1221};
1222
1223static struct resource octeon_pcie0_io_resource = {
1224 .name = "Octeon PCIe0 IO",
1225 .flags = IORESOURCE_IO,
1226};
1227
1228static struct pci_controller octeon_pcie0_controller = {
1229 .pci_ops = &octeon_pcie0_ops,
1230 .mem_resource = &octeon_pcie0_mem_resource,
1231 .io_resource = &octeon_pcie0_io_resource,
1232};
1233
1234static struct pci_ops octeon_pcie1_ops = {
1235 octeon_pcie1_read_config,
1236 octeon_pcie1_write_config,
1237};
1238
1239static struct resource octeon_pcie1_mem_resource = {
1240 .name = "Octeon PCIe1 MEM",
1241 .flags = IORESOURCE_MEM,
1242};
1243
1244static struct resource octeon_pcie1_io_resource = {
1245 .name = "Octeon PCIe1 IO",
1246 .flags = IORESOURCE_IO,
1247};
1248
1249static struct pci_controller octeon_pcie1_controller = {
1250 .pci_ops = &octeon_pcie1_ops,
1251 .mem_resource = &octeon_pcie1_mem_resource,
1252 .io_resource = &octeon_pcie1_io_resource,
1253};
1254
1255
1256/**
1257 * Initialize the Octeon PCIe controllers
1258 *
1259 * Returns
1260 */
1261static int __init octeon_pcie_setup(void)
1262{
1263 union cvmx_npei_ctl_status npei_ctl_status;
1264 int result;
1265
1266 /* These chips don't have PCIe */
1267 if (!octeon_has_feature(OCTEON_FEATURE_PCIE))
1268 return 0;
1269
1270 /* Point pcibios_map_irq() to the PCIe version of it */
1271 octeon_pcibios_map_irq = octeon_pcie_pcibios_map_irq;
1272
1273 /* Use the PCIe based DMA mappings */
1274 octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_PCIE;
1275
1276 /*
1277 * PCIe I/O range. It is based on port 0 but includes up until
1278 * port 1's end.
1279 */
1280 set_io_port_base(CVMX_ADD_IO_SEG(cvmx_pcie_get_io_base_address(0)));
1281 ioport_resource.start = 0;
1282 ioport_resource.end =
1283 cvmx_pcie_get_io_base_address(1) -
1284 cvmx_pcie_get_io_base_address(0) + cvmx_pcie_get_io_size(1) - 1;
1285
1286 npei_ctl_status.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_CTL_STATUS);
1287 if (npei_ctl_status.s.host_mode) {
1288 pr_notice("PCIe: Initializing port 0\n");
1289 result = cvmx_pcie_rc_initialize(0);
1290 if (result == 0) {
1291 /* Memory offsets are physical addresses */
1292 octeon_pcie0_controller.mem_offset =
1293 cvmx_pcie_get_mem_base_address(0);
1294 /* IO offsets are Mips virtual addresses */
1295 octeon_pcie0_controller.io_map_base =
1296 CVMX_ADD_IO_SEG(cvmx_pcie_get_io_base_address
1297 (0));
1298 octeon_pcie0_controller.io_offset = 0;
1299 /*
1300 * To keep things similar to PCI, we start
1301 * device addresses at the same place as PCI
1302 * uisng big bar support. This normally
1303 * translates to 4GB-256MB, which is the same
1304 * as most x86 PCs.
1305 */
1306 octeon_pcie0_controller.mem_resource->start =
1307 cvmx_pcie_get_mem_base_address(0) +
1308 (4ul << 30) - (OCTEON_PCI_BAR1_HOLE_SIZE << 20);
1309 octeon_pcie0_controller.mem_resource->end =
1310 cvmx_pcie_get_mem_base_address(0) +
1311 cvmx_pcie_get_mem_size(0) - 1;
1312 /*
1313 * Ports must be above 16KB for the ISA bus
1314 * filtering in the PCI-X to PCI bridge.
1315 */
1316 octeon_pcie0_controller.io_resource->start = 4 << 10;
1317 octeon_pcie0_controller.io_resource->end =
1318 cvmx_pcie_get_io_size(0) - 1;
1319 register_pci_controller(&octeon_pcie0_controller);
1320 }
1321 } else {
1322 pr_notice("PCIe: Port 0 in endpoint mode, skipping.\n");
1323 }
1324
1325 /* Skip the 2nd port on CN52XX if port 0 is in 4 lane mode */
1326 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
1327 union cvmx_npei_dbg_data npei_dbg_data;
1328 npei_dbg_data.u64 = cvmx_read_csr(CVMX_PEXP_NPEI_DBG_DATA);
1329 if (npei_dbg_data.cn52xx.qlm0_link_width)
1330 return 0;
1331 }
1332
1333 pr_notice("PCIe: Initializing port 1\n");
1334 result = cvmx_pcie_rc_initialize(1);
1335 if (result == 0) {
1336 /* Memory offsets are physical addresses */
1337 octeon_pcie1_controller.mem_offset =
1338 cvmx_pcie_get_mem_base_address(1);
1339 /* IO offsets are Mips virtual addresses */
1340 octeon_pcie1_controller.io_map_base =
1341 CVMX_ADD_IO_SEG(cvmx_pcie_get_io_base_address(1));
1342 octeon_pcie1_controller.io_offset =
1343 cvmx_pcie_get_io_base_address(1) -
1344 cvmx_pcie_get_io_base_address(0);
1345 /*
1346 * To keep things similar to PCI, we start device
1347 * addresses at the same place as PCI uisng big bar
1348 * support. This normally translates to 4GB-256MB,
1349 * which is the same as most x86 PCs.
1350 */
1351 octeon_pcie1_controller.mem_resource->start =
1352 cvmx_pcie_get_mem_base_address(1) + (4ul << 30) -
1353 (OCTEON_PCI_BAR1_HOLE_SIZE << 20);
1354 octeon_pcie1_controller.mem_resource->end =
1355 cvmx_pcie_get_mem_base_address(1) +
1356 cvmx_pcie_get_mem_size(1) - 1;
1357 /*
1358 * Ports must be above 16KB for the ISA bus filtering
1359 * in the PCI-X to PCI bridge.
1360 */
1361 octeon_pcie1_controller.io_resource->start =
1362 cvmx_pcie_get_io_base_address(1) -
1363 cvmx_pcie_get_io_base_address(0);
1364 octeon_pcie1_controller.io_resource->end =
1365 octeon_pcie1_controller.io_resource->start +
1366 cvmx_pcie_get_io_size(1) - 1;
1367 register_pci_controller(&octeon_pcie1_controller);
1368 }
1369 return 0;
1370}
1371
1372arch_initcall(octeon_pcie_setup);
diff --git a/arch/mips/pmc-sierra/msp71xx/gpio.c b/arch/mips/pmc-sierra/msp71xx/gpio.c
index 69848c5813e2..aaccbe524386 100644
--- a/arch/mips/pmc-sierra/msp71xx/gpio.c
+++ b/arch/mips/pmc-sierra/msp71xx/gpio.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * @file /arch/mips/pmc-sierra/msp71xx/gpio.c
3 *
4 * Generic PMC MSP71xx GPIO handling. These base gpio are controlled by two 2 * Generic PMC MSP71xx GPIO handling. These base gpio are controlled by two
5 * types of registers. The data register sets the output level when in output 3 * types of registers. The data register sets the output level when in output
6 * mode and when in input mode will contain the value at the input. The config 4 * mode and when in input mode will contain the value at the input. The config
diff --git a/arch/mips/pmc-sierra/msp71xx/gpio_extended.c b/arch/mips/pmc-sierra/msp71xx/gpio_extended.c
index fc6dbc6cf1c0..2a99f360fae4 100644
--- a/arch/mips/pmc-sierra/msp71xx/gpio_extended.c
+++ b/arch/mips/pmc-sierra/msp71xx/gpio_extended.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * @file /arch/mips/pmc-sierra/msp71xx/gpio_extended.c
3 *
4 * Generic PMC MSP71xx EXTENDED (EXD) GPIO handling. The extended gpio is 2 * Generic PMC MSP71xx EXTENDED (EXD) GPIO handling. The extended gpio is
5 * a set of hardware registers that have no need for explicit locking as 3 * a set of hardware registers that have no need for explicit locking as
6 * it is handled by unique method of writing individual set/clr bits. 4 * it is handled by unique method of writing individual set/clr bits.
diff --git a/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c b/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
index f5f1b8d2bb9a..61f390232346 100644
--- a/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
+++ b/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
@@ -45,13 +45,6 @@ static inline void mask_msp_slp_irq(unsigned int irq)
45 */ 45 */
46static inline void ack_msp_slp_irq(unsigned int irq) 46static inline void ack_msp_slp_irq(unsigned int irq)
47{ 47{
48 mask_slp_irq(irq);
49
50 /*
51 * only really necessary for 18, 16-14 and sometimes 3:0 (since
52 * these can be edge sensitive) but it doesn't hurt for the others.
53 */
54
55 /* check for PER interrupt range */ 48 /* check for PER interrupt range */
56 if (irq < MSP_PER_INTBASE) 49 if (irq < MSP_PER_INTBASE)
57 *SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE)); 50 *SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE));
@@ -62,8 +55,7 @@ static inline void ack_msp_slp_irq(unsigned int irq)
62static struct irq_chip msp_slp_irq_controller = { 55static struct irq_chip msp_slp_irq_controller = {
63 .name = "MSP_SLP", 56 .name = "MSP_SLP",
64 .ack = ack_msp_slp_irq, 57 .ack = ack_msp_slp_irq,
65 .mask = ack_msp_slp_irq, 58 .mask = mask_msp_slp_irq,
66 .mask_ack = ack_msp_slp_irq,
67 .unmask = unmask_msp_slp_irq, 59 .unmask = unmask_msp_slp_irq,
68}; 60};
69 61
@@ -79,7 +71,7 @@ void __init msp_slp_irq_init(void)
79 71
80 /* initialize all the IRQ descriptors */ 72 /* initialize all the IRQ descriptors */
81 for (i = MSP_SLP_INTBASE; i < MSP_PER_INTBASE + 32; i++) 73 for (i = MSP_SLP_INTBASE; i < MSP_PER_INTBASE + 32; i++)
82 set_irq_chip_and_handler(i, &msp_slp_irq_controller 74 set_irq_chip_and_handler(i, &msp_slp_irq_controller,
83 handle_level_irq); 75 handle_level_irq);
84} 76}
85 77
diff --git a/arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c b/arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c
index caf5e9a0acc7..fc990cb31941 100644
--- a/arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c
+++ b/arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c
3 *
4 * Copyright (C) 2003 PMC-Sierra Inc. 2 * Copyright (C) 2003 PMC-Sierra Inc.
5 * Author: Manish Lachwani (lachwani@pmc-sierra.com) 3 * Author: Manish Lachwani (lachwani@pmc-sierra.com)
6 * 4 *
diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c
index f78c29b68d77..8ace27716232 100644
--- a/arch/mips/pmc-sierra/yosemite/smp.c
+++ b/arch/mips/pmc-sierra/yosemite/smp.c
@@ -1,5 +1,6 @@
1#include <linux/linkage.h> 1#include <linux/linkage.h>
2#include <linux/sched.h> 2#include <linux/sched.h>
3#include <linux/smp.h>
3 4
4#include <asm/pmon.h> 5#include <asm/pmon.h>
5#include <asm/titan_dep.h> 6#include <asm/titan_dep.h>
diff --git a/arch/mips/power/Makefile b/arch/mips/power/Makefile
new file mode 100644
index 000000000000..73d56b87cb9b
--- /dev/null
+++ b/arch/mips/power/Makefile
@@ -0,0 +1 @@
obj-$(CONFIG_HIBERNATION) += cpu.o hibernate.o
diff --git a/arch/mips/power/cpu.c b/arch/mips/power/cpu.c
new file mode 100644
index 000000000000..7995df45dc8d
--- /dev/null
+++ b/arch/mips/power/cpu.c
@@ -0,0 +1,43 @@
1/*
2 * Suspend support specific for mips.
3 *
4 * Licensed under the GPLv2
5 *
6 * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
7 * Author: Hu Hongbing <huhb@lemote.com>
8 * Wu Zhangjin <wuzj@lemote.com>
9 */
10#include <asm/suspend.h>
11#include <asm/fpu.h>
12#include <asm/dsp.h>
13
14static u32 saved_status;
15struct pt_regs saved_regs;
16
17void save_processor_state(void)
18{
19 saved_status = read_c0_status();
20
21 if (is_fpu_owner())
22 save_fp(current);
23 if (cpu_has_dsp)
24 save_dsp(current);
25}
26
27void restore_processor_state(void)
28{
29 write_c0_status(saved_status);
30
31 if (is_fpu_owner())
32 restore_fp(current);
33 if (cpu_has_dsp)
34 restore_dsp(current);
35}
36
37int pfn_is_nosave(unsigned long pfn)
38{
39 unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
40 unsigned long nosave_end_pfn = PFN_UP(__pa(&__nosave_end));
41
42 return (pfn >= nosave_begin_pfn) && (pfn < nosave_end_pfn);
43}
diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S
new file mode 100644
index 000000000000..4b8174b382d7
--- /dev/null
+++ b/arch/mips/power/hibernate.S
@@ -0,0 +1,61 @@
1/*
2 * Hibernation support specific for mips - temporary page tables
3 *
4 * Licensed under the GPLv2
5 *
6 * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
7 * Author: Hu Hongbing <huhb@lemote.com>
8 * Wu Zhangjin <wuzj@lemote.com>
9 */
10#include <asm/asm-offsets.h>
11#include <asm/regdef.h>
12#include <asm/asm.h>
13
14.text
15LEAF(swsusp_arch_suspend)
16 PTR_LA t0, saved_regs
17 PTR_S ra, PT_R31(t0)
18 PTR_S sp, PT_R29(t0)
19 PTR_S fp, PT_R30(t0)
20 PTR_S gp, PT_R28(t0)
21 PTR_S s0, PT_R16(t0)
22 PTR_S s1, PT_R17(t0)
23 PTR_S s2, PT_R18(t0)
24 PTR_S s3, PT_R19(t0)
25 PTR_S s4, PT_R20(t0)
26 PTR_S s5, PT_R21(t0)
27 PTR_S s6, PT_R22(t0)
28 PTR_S s7, PT_R23(t0)
29 j swsusp_save
30END(swsusp_arch_suspend)
31
32LEAF(swsusp_arch_resume)
33 PTR_L t0, restore_pblist
340:
35 PTR_L t1, PBE_ADDRESS(t0) /* source */
36 PTR_L t2, PBE_ORIG_ADDRESS(t0) /* destination */
37 PTR_ADDIU t3, t1, _PAGE_SIZE
381:
39 REG_L t8, (t1)
40 REG_S t8, (t2)
41 PTR_ADDIU t1, t1, SZREG
42 PTR_ADDIU t2, t2, SZREG
43 bne t1, t3, 1b
44 PTR_L t0, PBE_NEXT(t0)
45 bnez t0, 0b
46 PTR_LA t0, saved_regs
47 PTR_L ra, PT_R31(t0)
48 PTR_L sp, PT_R29(t0)
49 PTR_L fp, PT_R30(t0)
50 PTR_L gp, PT_R28(t0)
51 PTR_L s0, PT_R16(t0)
52 PTR_L s1, PT_R17(t0)
53 PTR_L s2, PT_R18(t0)
54 PTR_L s3, PT_R19(t0)
55 PTR_L s4, PT_R20(t0)
56 PTR_L s5, PT_R21(t0)
57 PTR_L s6, PT_R22(t0)
58 PTR_L s7, PT_R23(t0)
59 PTR_LI v0, 0x0
60 jr ra
61END(swsusp_arch_resume)
diff --git a/arch/mips/rb532/irq.c b/arch/mips/rb532/irq.c
index 53eeb5e7bc5b..f07882029a90 100644
--- a/arch/mips/rb532/irq.c
+++ b/arch/mips/rb532/irq.c
@@ -151,7 +151,8 @@ static void rb532_disable_irq(unsigned int irq_nr)
151 mask |= intr_bit; 151 mask |= intr_bit;
152 WRITE_MASK(addr, mask); 152 WRITE_MASK(addr, mask);
153 153
154 if (group == GPIO_MAPPED_IRQ_GROUP) 154 /* There is a maximum of 14 GPIO interrupts */
155 if (group == GPIO_MAPPED_IRQ_GROUP && irq_nr <= (GROUP4_IRQ_BASE + 13))
155 rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE); 156 rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE);
156 157
157 /* 158 /*
@@ -174,7 +175,7 @@ static int rb532_set_type(unsigned int irq_nr, unsigned type)
174 int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE; 175 int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE;
175 int group = irq_to_group(irq_nr); 176 int group = irq_to_group(irq_nr);
176 177
177 if (group != GPIO_MAPPED_IRQ_GROUP) 178 if (group != GPIO_MAPPED_IRQ_GROUP || irq_nr > (GROUP4_IRQ_BASE + 13))
178 return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL; 179 return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL;
179 180
180 switch (type) { 181 switch (type) {
diff --git a/arch/mips/sgi-ip27/ip27-init.c b/arch/mips/sgi-ip27/ip27-init.c
index 4a500e8cd3cc..51d3a4f2d7e1 100644
--- a/arch/mips/sgi-ip27/ip27-init.c
+++ b/arch/mips/sgi-ip27/ip27-init.c
@@ -9,6 +9,7 @@
9#include <linux/kernel.h> 9#include <linux/kernel.h>
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/sched.h> 11#include <linux/sched.h>
12#include <linux/smp.h>
12#include <linux/mm.h> 13#include <linux/mm.h>
13#include <linux/module.h> 14#include <linux/module.h>
14#include <linux/cpumask.h> 15#include <linux/cpumask.h>
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c
index 1bb692a3b319..c1c8e40d65d6 100644
--- a/arch/mips/sgi-ip27/ip27-irq.c
+++ b/arch/mips/sgi-ip27/ip27-irq.c
@@ -18,6 +18,7 @@
18#include <linux/ioport.h> 18#include <linux/ioport.h>
19#include <linux/timex.h> 19#include <linux/timex.h>
20#include <linux/slab.h> 20#include <linux/slab.h>
21#include <linux/smp.h>
21#include <linux/random.h> 22#include <linux/random.h>
22#include <linux/kernel.h> 23#include <linux/kernel.h>
23#include <linux/kernel_stat.h> 24#include <linux/kernel_stat.h>
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c
index f10a7cd64f7e..6d0e59ffba2e 100644
--- a/arch/mips/sgi-ip27/ip27-timer.c
+++ b/arch/mips/sgi-ip27/ip27-timer.c
@@ -10,6 +10,7 @@
10#include <linux/interrupt.h> 10#include <linux/interrupt.h>
11#include <linux/kernel_stat.h> 11#include <linux/kernel_stat.h>
12#include <linux/param.h> 12#include <linux/param.h>
13#include <linux/smp.h>
13#include <linux/time.h> 14#include <linux/time.h>
14#include <linux/timex.h> 15#include <linux/timex.h>
15#include <linux/mm.h> 16#include <linux/mm.h>
diff --git a/arch/mips/sgi-ip27/ip27-xtalk.c b/arch/mips/sgi-ip27/ip27-xtalk.c
index 6ae64e8dfc40..5e871e75a8d9 100644
--- a/arch/mips/sgi-ip27/ip27-xtalk.c
+++ b/arch/mips/sgi-ip27/ip27-xtalk.c
@@ -9,6 +9,7 @@
9 9
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/smp.h>
12#include <asm/sn/types.h> 13#include <asm/sn/types.h>
13#include <asm/sn/klconfig.h> 14#include <asm/sn/klconfig.h>
14#include <asm/sn/hub.h> 15#include <asm/sn/hub.h>
diff --git a/arch/mips/sibyte/Kconfig b/arch/mips/sibyte/Kconfig
index 366b19d33f77..3e639bda43f7 100644
--- a/arch/mips/sibyte/Kconfig
+++ b/arch/mips/sibyte/Kconfig
@@ -75,6 +75,8 @@ config SIBYTE_SB1xxx_SOC
75 select SWAP_IO_SPACE 75 select SWAP_IO_SPACE
76 select SYS_SUPPORTS_32BIT_KERNEL 76 select SYS_SUPPORTS_32BIT_KERNEL
77 select SYS_SUPPORTS_64BIT_KERNEL 77 select SYS_SUPPORTS_64BIT_KERNEL
78 select CFE
79 select SYS_HAS_EARLY_PRINTK
78 80
79choice 81choice
80 prompt "SiByte SOC Stepping" 82 prompt "SiByte SOC Stepping"
@@ -128,13 +130,6 @@ config SIBYTE_ENABLE_LDT_IF_PCI
128 bool 130 bool
129 select SIBYTE_HAS_LDT if PCI 131 select SIBYTE_HAS_LDT if PCI
130 132
131config SIMULATION
132 bool "Running under simulation"
133 depends on SIBYTE_SB1xxx_SOC
134 help
135 Build a kernel suitable for running under the GDB simulator.
136 Primarily adjusts the kernel's notion of time.
137
138config SB1_CEX_ALWAYS_FATAL 133config SB1_CEX_ALWAYS_FATAL
139 bool "All cache exceptions considered fatal (no recovery attempted)" 134 bool "All cache exceptions considered fatal (no recovery attempted)"
140 depends on SIBYTE_SB1xxx_SOC 135 depends on SIBYTE_SB1xxx_SOC
@@ -143,34 +138,14 @@ config SB1_CERR_STALL
143 bool "Stall (rather than panic) on fatal cache error" 138 bool "Stall (rather than panic) on fatal cache error"
144 depends on SIBYTE_SB1xxx_SOC 139 depends on SIBYTE_SB1xxx_SOC
145 140
146config SIBYTE_CFE
147 bool "Booting from CFE"
148 depends on SIBYTE_SB1xxx_SOC
149 select CFE
150 select SYS_HAS_EARLY_PRINTK
151 help
152 Make use of the CFE API for enumerating available memory,
153 controlling secondary CPUs, and possibly console output.
154
155config SIBYTE_CFE_CONSOLE 141config SIBYTE_CFE_CONSOLE
156 bool "Use firmware console" 142 bool "Use firmware console"
157 depends on SIBYTE_CFE 143 depends on SIBYTE_SB1xxx_SOC
158 help 144 help
159 Use the CFE API's console write routines during boot. Other console 145 Use the CFE API's console write routines during boot. Other console
160 options (VT console, sb1250 duart console, etc.) should not be 146 options (VT console, sb1250 duart console, etc.) should not be
161 configured. 147 configured.
162 148
163config SIBYTE_STANDALONE
164 bool
165 depends on SIBYTE_SB1xxx_SOC && !SIBYTE_CFE
166 select SYS_HAS_EARLY_PRINTK
167 default y
168
169config SIBYTE_STANDALONE_RAM_SIZE
170 int "Memory size (in megabytes)"
171 depends on SIBYTE_STANDALONE
172 default "32"
173
174config SIBYTE_BUS_WATCHER 149config SIBYTE_BUS_WATCHER
175 bool "Support for Bus Watcher statistics" 150 bool "Support for Bus Watcher statistics"
176 depends on SIBYTE_SB1xxx_SOC 151 depends on SIBYTE_SB1xxx_SOC
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c
index 690de06bde90..ba59839a021e 100644
--- a/arch/mips/sibyte/bcm1480/irq.c
+++ b/arch/mips/sibyte/bcm1480/irq.c
@@ -19,6 +19,7 @@
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/linkage.h> 20#include <linux/linkage.h>
21#include <linux/interrupt.h> 21#include <linux/interrupt.h>
22#include <linux/smp.h>
22#include <linux/spinlock.h> 23#include <linux/spinlock.h>
23#include <linux/mm.h> 24#include <linux/mm.h>
24#include <linux/slab.h> 25#include <linux/slab.h>
diff --git a/arch/mips/sibyte/cfe/Makefile b/arch/mips/sibyte/cfe/Makefile
deleted file mode 100644
index 02b32e142adf..000000000000
--- a/arch/mips/sibyte/cfe/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
1lib-y = setup.o
2lib-$(CONFIG_SIBYTE_CFE_CONSOLE) += console.o
diff --git a/arch/mips/sibyte/common/Makefile b/arch/mips/sibyte/common/Makefile
index 48a91b9e5870..4f659837c7c6 100644
--- a/arch/mips/sibyte/common/Makefile
+++ b/arch/mips/sibyte/common/Makefile
@@ -1,5 +1,5 @@
1obj-y := 1obj-y := cfe.o
2 2obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o
3obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o 3obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o
4 4
5EXTRA_CFLAGS += -Werror 5EXTRA_CFLAGS += -Werror
diff --git a/arch/mips/sibyte/cfe/setup.c b/arch/mips/sibyte/common/cfe.c
index eb5396cf81bb..eb5396cf81bb 100644
--- a/arch/mips/sibyte/cfe/setup.c
+++ b/arch/mips/sibyte/common/cfe.c
diff --git a/arch/mips/sibyte/cfe/console.c b/arch/mips/sibyte/common/cfe_console.c
index 81e3d54376e9..1ad2da103fe9 100644
--- a/arch/mips/sibyte/cfe/console.c
+++ b/arch/mips/sibyte/common/cfe_console.c
@@ -51,12 +51,13 @@ static int cfe_console_setup(struct console *cons, char *str)
51 setleds("u0cn"); 51 setleds("u0cn");
52 } else if (!strcmp(consdev, "uart1")) { 52 } else if (!strcmp(consdev, "uart1")) {
53 setleds("u1cn"); 53 setleds("u1cn");
54 } else
54#endif 55#endif
55#ifdef CONFIG_VGA_CONSOLE 56#ifdef CONFIG_VGA_CONSOLE
56 } else if (!strcmp(consdev, "pcconsole0")) { 57 if (!strcmp(consdev, "pcconsole0")) {
57 setleds("pccn"); 58 setleds("pccn");
58#endif
59 } else 59 } else
60#endif
60 return -ENODEV; 61 return -ENODEV;
61 } 62 }
62 return 0; 63 return 0;
diff --git a/arch/mips/sibyte/sb1250/Makefile b/arch/mips/sibyte/sb1250/Makefile
index 697793783a25..1896f4e77a30 100644
--- a/arch/mips/sibyte/sb1250/Makefile
+++ b/arch/mips/sibyte/sb1250/Makefile
@@ -1,7 +1,6 @@
1obj-y := setup.o irq.o time.o 1obj-y := setup.o irq.o time.o
2 2
3obj-$(CONFIG_SMP) += smp.o 3obj-$(CONFIG_SMP) += smp.o
4obj-$(CONFIG_SIBYTE_STANDALONE) += prom.o
5obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o 4obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o
6 5
7EXTRA_CFLAGS += -Werror 6EXTRA_CFLAGS += -Werror
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c
index 409dec798863..5e7f2016cceb 100644
--- a/arch/mips/sibyte/sb1250/irq.c
+++ b/arch/mips/sibyte/sb1250/irq.c
@@ -111,11 +111,6 @@ static int sb1250_set_affinity(unsigned int irq, const struct cpumask *mask)
111 111
112 i = cpumask_first(mask); 112 i = cpumask_first(mask);
113 113
114 if (cpumask_weight(mask) > 1) {
115 printk("attempted to set irq affinity for irq %d to multiple CPUs\n", irq);
116 return -1;
117 }
118
119 /* Convert logical CPU to physical CPU */ 114 /* Convert logical CPU to physical CPU */
120 cpu = cpu_logical_map(i); 115 cpu = cpu_logical_map(i);
121 116
diff --git a/arch/mips/sibyte/sb1250/prom.c b/arch/mips/sibyte/sb1250/prom.c
deleted file mode 100644
index 65b1af66b674..000000000000
--- a/arch/mips/sibyte/sb1250/prom.c
+++ /dev/null
@@ -1,96 +0,0 @@
1/*
2 * Copyright (C) 2000, 2001 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#include <linux/init.h>
20#include <linux/kernel.h>
21#include <linux/mm.h>
22#include <linux/blkdev.h>
23#include <linux/bootmem.h>
24#include <linux/smp.h>
25#include <linux/initrd.h>
26#include <linux/pm.h>
27
28#include <asm/bootinfo.h>
29#include <asm/reboot.h>
30
31#define MAX_RAM_SIZE ((CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024) - 1)
32
33static __init void prom_meminit(void)
34{
35#ifdef CONFIG_BLK_DEV_INITRD
36 unsigned long initrd_pstart;
37 unsigned long initrd_pend;
38
39 initrd_pstart = __pa(initrd_start);
40 initrd_pend = __pa(initrd_end);
41 if (initrd_start &&
42 ((initrd_pstart > MAX_RAM_SIZE)
43 || (initrd_pend > MAX_RAM_SIZE))) {
44 panic("initrd out of addressable memory");
45 }
46
47 add_memory_region(0, initrd_pstart,
48 BOOT_MEM_RAM);
49 add_memory_region(initrd_pstart, initrd_pend - initrd_pstart,
50 BOOT_MEM_RESERVED);
51 add_memory_region(initrd_pend,
52 (CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024) - initrd_pend,
53 BOOT_MEM_RAM);
54#else
55 add_memory_region(0, CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024,
56 BOOT_MEM_RAM);
57#endif
58}
59
60void prom_cpu0_exit(void *unused)
61{
62 while (1) ;
63}
64
65static void prom_linux_exit(void)
66{
67#ifdef CONFIG_SMP
68 if (smp_processor_id()) {
69 smp_call_function(prom_cpu0_exit, NULL, 1);
70 }
71#endif
72 while(1);
73}
74
75/*
76 * prom_init is called just after the cpu type is determined, from setup_arch()
77 */
78void __init prom_init(void)
79{
80 _machine_restart = (void (*)(char *))prom_linux_exit;
81 _machine_halt = prom_linux_exit;
82 pm_power_off = prom_linux_exit;
83
84 strcpy(arcs_cmdline, "root=/dev/ram0 ");
85
86 prom_meminit();
87}
88
89void __init prom_free_prom_memory(void)
90{
91 /* Not sure what I'm supposed to do here. Nothing, I think */
92}
93
94void prom_putchar(char c)
95{
96}
diff --git a/arch/mips/sibyte/swarm/setup.c b/arch/mips/sibyte/swarm/setup.c
index 080c966263b7..672e45d495a9 100644
--- a/arch/mips/sibyte/swarm/setup.c
+++ b/arch/mips/sibyte/swarm/setup.c
@@ -136,20 +136,6 @@ void __init plat_mem_setup(void)
136 if (m41t81_probe()) 136 if (m41t81_probe())
137 swarm_rtc_type = RTC_M4LT81; 137 swarm_rtc_type = RTC_M4LT81;
138 138
139 printk("This kernel optimized for "
140#ifdef CONFIG_SIMULATION
141 "simulation"
142#else
143 "board"
144#endif
145 " runs "
146#ifdef CONFIG_SIBYTE_CFE
147 "with"
148#else
149 "without"
150#endif
151 " CFE\n");
152
153#ifdef CONFIG_VT 139#ifdef CONFIG_VT
154 screen_info = (struct screen_info) { 140 screen_info = (struct screen_info) {
155 0, 0, /* orig-x, orig-y */ 141 0, 0, /* orig-x, orig-y */
diff --git a/arch/mips/sibyte/swarm/swarm-i2c.c b/arch/mips/sibyte/swarm/swarm-i2c.c
index 4282ac9d01d2..062505054d42 100644
--- a/arch/mips/sibyte/swarm/swarm-i2c.c
+++ b/arch/mips/sibyte/swarm/swarm-i2c.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/mips/sibyte/swarm/swarm-i2c.c
3 *
4 * Broadcom BCM91250A (SWARM), etc. I2C platform setup. 2 * Broadcom BCM91250A (SWARM), etc. I2C platform setup.
5 * 3 *
6 * Copyright (c) 2008 Maciej W. Rozycki 4 * Copyright (c) 2008 Maciej W. Rozycki
diff --git a/arch/mips/sni/time.c b/arch/mips/sni/time.c
index 69f5f88711cc..0d9ec1a5c24a 100644
--- a/arch/mips/sni/time.c
+++ b/arch/mips/sni/time.c
@@ -1,5 +1,6 @@
1#include <linux/types.h> 1#include <linux/types.h>
2#include <linux/interrupt.h> 2#include <linux/interrupt.h>
3#include <linux/smp.h>
3#include <linux/time.h> 4#include <linux/time.h>
4#include <linux/clockchips.h> 5#include <linux/clockchips.h>
5 6
diff --git a/arch/mips/txx9/Kconfig b/arch/mips/txx9/Kconfig
index 0db7cf38ed8b..852ae4bb7a85 100644
--- a/arch/mips/txx9/Kconfig
+++ b/arch/mips/txx9/Kconfig
@@ -69,6 +69,7 @@ config SOC_TX4927
69 select IRQ_TXX9 69 select IRQ_TXX9
70 select PCI_TX4927 70 select PCI_TX4927
71 select GPIO_TXX9 71 select GPIO_TXX9
72 select HAS_TXX9_ACLC
72 73
73config SOC_TX4938 74config SOC_TX4938
74 bool 75 bool
@@ -78,6 +79,7 @@ config SOC_TX4938
78 select IRQ_TXX9 79 select IRQ_TXX9
79 select PCI_TX4927 80 select PCI_TX4927
80 select GPIO_TXX9 81 select GPIO_TXX9
82 select HAS_TXX9_ACLC
81 83
82config SOC_TX4939 84config SOC_TX4939
83 bool 85 bool
@@ -85,6 +87,7 @@ config SOC_TX4939
85 select HAS_TXX9_SERIAL 87 select HAS_TXX9_SERIAL
86 select HW_HAS_PCI 88 select HW_HAS_PCI
87 select PCI_TX4927 89 select PCI_TX4927
90 select HAS_TXX9_ACLC
88 91
89config TXX9_7SEGLED 92config TXX9_7SEGLED
90 bool 93 bool
diff --git a/arch/mips/txx9/generic/mem_tx4927.c b/arch/mips/txx9/generic/mem_tx4927.c
index ef6ea6e97873..70f9626f8227 100644
--- a/arch/mips/txx9/generic/mem_tx4927.c
+++ b/arch/mips/txx9/generic/mem_tx4927.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/txx9/generic/mem_tx4927.c
3 *
4 * common tx4927 memory interface 2 * common tx4927 memory interface
5 * 3 *
6 * Author: MontaVista Software, Inc. 4 * Author: MontaVista Software, Inc.
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c
index 8a266c6a3f58..a205e2ba8e7b 100644
--- a/arch/mips/txx9/generic/setup.c
+++ b/arch/mips/txx9/generic/setup.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/mips/txx9/generic/setup.c
3 *
4 * Based on linux/arch/mips/txx9/rbtx4938/setup.c, 2 * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
5 * and RBTX49xx patch from CELF patch archive. 3 * and RBTX49xx patch from CELF patch archive.
6 * 4 *
@@ -24,6 +22,7 @@
24#include <linux/serial_core.h> 22#include <linux/serial_core.h>
25#include <linux/mtd/physmap.h> 23#include <linux/mtd/physmap.h>
26#include <linux/leds.h> 24#include <linux/leds.h>
25#include <linux/sysdev.h>
27#include <asm/bootinfo.h> 26#include <asm/bootinfo.h>
28#include <asm/time.h> 27#include <asm/time.h>
29#include <asm/reboot.h> 28#include <asm/reboot.h>
@@ -33,6 +32,7 @@
33#include <asm/txx9/pci.h> 32#include <asm/txx9/pci.h>
34#include <asm/txx9tmr.h> 33#include <asm/txx9tmr.h>
35#include <asm/txx9/ndfmc.h> 34#include <asm/txx9/ndfmc.h>
35#include <asm/txx9/dmac.h>
36#ifdef CONFIG_CPU_TX49XX 36#ifdef CONFIG_CPU_TX49XX
37#include <asm/txx9/tx4938.h> 37#include <asm/txx9/tx4938.h>
38#endif 38#endif
@@ -821,3 +821,176 @@ void __init txx9_iocled_init(unsigned long baseaddr,
821{ 821{
822} 822}
823#endif /* CONFIG_LEDS_GPIO */ 823#endif /* CONFIG_LEDS_GPIO */
824
825void __init txx9_dmac_init(int id, unsigned long baseaddr, int irq,
826 const struct txx9dmac_platform_data *pdata)
827{
828#if defined(CONFIG_TXX9_DMAC) || defined(CONFIG_TXX9_DMAC_MODULE)
829 struct resource res[] = {
830 {
831 .start = baseaddr,
832 .end = baseaddr + 0x800 - 1,
833 .flags = IORESOURCE_MEM,
834#ifndef CONFIG_MACH_TX49XX
835 }, {
836 .start = irq,
837 .flags = IORESOURCE_IRQ,
838#endif
839 }
840 };
841#ifdef CONFIG_MACH_TX49XX
842 struct resource chan_res[] = {
843 {
844 .flags = IORESOURCE_IRQ,
845 }
846 };
847#endif
848 struct platform_device *pdev = platform_device_alloc("txx9dmac", id);
849 struct txx9dmac_chan_platform_data cpdata;
850 int i;
851
852 if (!pdev ||
853 platform_device_add_resources(pdev, res, ARRAY_SIZE(res)) ||
854 platform_device_add_data(pdev, pdata, sizeof(*pdata)) ||
855 platform_device_add(pdev)) {
856 platform_device_put(pdev);
857 return;
858 }
859 memset(&cpdata, 0, sizeof(cpdata));
860 cpdata.dmac_dev = pdev;
861 for (i = 0; i < TXX9_DMA_MAX_NR_CHANNELS; i++) {
862#ifdef CONFIG_MACH_TX49XX
863 chan_res[0].start = irq + i;
864#endif
865 pdev = platform_device_alloc("txx9dmac-chan",
866 id * TXX9_DMA_MAX_NR_CHANNELS + i);
867 if (!pdev ||
868#ifdef CONFIG_MACH_TX49XX
869 platform_device_add_resources(pdev, chan_res,
870 ARRAY_SIZE(chan_res)) ||
871#endif
872 platform_device_add_data(pdev, &cpdata, sizeof(cpdata)) ||
873 platform_device_add(pdev))
874 platform_device_put(pdev);
875 }
876#endif
877}
878
879void __init txx9_aclc_init(unsigned long baseaddr, int irq,
880 unsigned int dmac_id,
881 unsigned int dma_chan_out,
882 unsigned int dma_chan_in)
883{
884#if defined(CONFIG_SND_SOC_TXX9ACLC) || \
885 defined(CONFIG_SND_SOC_TXX9ACLC_MODULE)
886 unsigned int dma_base = dmac_id * TXX9_DMA_MAX_NR_CHANNELS;
887 struct resource res[] = {
888 {
889 .start = baseaddr,
890 .end = baseaddr + 0x100 - 1,
891 .flags = IORESOURCE_MEM,
892 }, {
893 .start = irq,
894 .flags = IORESOURCE_IRQ,
895 }, {
896 .name = "txx9dmac-chan",
897 .start = dma_base + dma_chan_out,
898 .flags = IORESOURCE_DMA,
899 }, {
900 .name = "txx9dmac-chan",
901 .start = dma_base + dma_chan_in,
902 .flags = IORESOURCE_DMA,
903 }
904 };
905 struct platform_device *pdev =
906 platform_device_alloc("txx9aclc-ac97", -1);
907
908 if (!pdev ||
909 platform_device_add_resources(pdev, res, ARRAY_SIZE(res)) ||
910 platform_device_add(pdev))
911 platform_device_put(pdev);
912#endif
913}
914
915static struct sysdev_class txx9_sramc_sysdev_class;
916
917struct txx9_sramc_sysdev {
918 struct sys_device dev;
919 struct bin_attribute bindata_attr;
920 void __iomem *base;
921};
922
923static ssize_t txx9_sram_read(struct kobject *kobj,
924 struct bin_attribute *bin_attr,
925 char *buf, loff_t pos, size_t size)
926{
927 struct txx9_sramc_sysdev *dev = bin_attr->private;
928 size_t ramsize = bin_attr->size;
929
930 if (pos >= ramsize)
931 return 0;
932 if (pos + size > ramsize)
933 size = ramsize - pos;
934 memcpy_fromio(buf, dev->base + pos, size);
935 return size;
936}
937
938static ssize_t txx9_sram_write(struct kobject *kobj,
939 struct bin_attribute *bin_attr,
940 char *buf, loff_t pos, size_t size)
941{
942 struct txx9_sramc_sysdev *dev = bin_attr->private;
943 size_t ramsize = bin_attr->size;
944
945 if (pos >= ramsize)
946 return 0;
947 if (pos + size > ramsize)
948 size = ramsize - pos;
949 memcpy_toio(dev->base + pos, buf, size);
950 return size;
951}
952
953void __init txx9_sramc_init(struct resource *r)
954{
955 struct txx9_sramc_sysdev *dev;
956 size_t size;
957 int err;
958
959 if (!txx9_sramc_sysdev_class.name) {
960 txx9_sramc_sysdev_class.name = "txx9_sram";
961 err = sysdev_class_register(&txx9_sramc_sysdev_class);
962 if (err) {
963 txx9_sramc_sysdev_class.name = NULL;
964 return;
965 }
966 }
967 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
968 if (!dev)
969 return;
970 size = resource_size(r);
971 dev->base = ioremap(r->start, size);
972 if (!dev->base)
973 goto exit;
974 dev->dev.cls = &txx9_sramc_sysdev_class;
975 dev->bindata_attr.attr.name = "bindata";
976 dev->bindata_attr.attr.mode = S_IRUSR | S_IWUSR;
977 dev->bindata_attr.read = txx9_sram_read;
978 dev->bindata_attr.write = txx9_sram_write;
979 dev->bindata_attr.size = size;
980 dev->bindata_attr.private = dev;
981 err = sysdev_register(&dev->dev);
982 if (err)
983 goto exit;
984 err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
985 if (err) {
986 sysdev_unregister(&dev->dev);
987 goto exit;
988 }
989 return;
990exit:
991 if (dev) {
992 if (dev->base)
993 iounmap(dev->base);
994 kfree(dev);
995 }
996}
diff --git a/arch/mips/txx9/generic/setup_tx4927.c b/arch/mips/txx9/generic/setup_tx4927.c
index 1093549df1a8..3418b2a90f7e 100644
--- a/arch/mips/txx9/generic/setup_tx4927.c
+++ b/arch/mips/txx9/generic/setup_tx4927.c
@@ -22,6 +22,7 @@
22#include <asm/txx9tmr.h> 22#include <asm/txx9tmr.h>
23#include <asm/txx9pio.h> 23#include <asm/txx9pio.h>
24#include <asm/txx9/generic.h> 24#include <asm/txx9/generic.h>
25#include <asm/txx9/dmac.h>
25#include <asm/txx9/tx4927.h> 26#include <asm/txx9/tx4927.h>
26 27
27static void __init tx4927_wdr_init(void) 28static void __init tx4927_wdr_init(void)
@@ -253,6 +254,60 @@ void __init tx4927_mtd_init(int ch)
253 txx9_physmap_flash_init(ch, start, size, &pdata); 254 txx9_physmap_flash_init(ch, start, size, &pdata);
254} 255}
255 256
257void __init tx4927_dmac_init(int memcpy_chan)
258{
259 struct txx9dmac_platform_data plat_data = {
260 .memcpy_chan = memcpy_chan,
261 .have_64bit_regs = true,
262 };
263
264 txx9_dmac_init(0, TX4927_DMA_REG & 0xfffffffffULL,
265 TXX9_IRQ_BASE + TX4927_IR_DMA(0), &plat_data);
266}
267
268void __init tx4927_aclc_init(unsigned int dma_chan_out,
269 unsigned int dma_chan_in)
270{
271 u64 pcfg = __raw_readq(&tx4927_ccfgptr->pcfg);
272 __u64 dmasel_mask = 0, dmasel = 0;
273 unsigned long flags;
274
275 if (!(pcfg & TX4927_PCFG_SEL2))
276 return;
277 /* setup DMASEL (playback:ACLC ch0, capture:ACLC ch1) */
278 switch (dma_chan_out) {
279 case 0:
280 dmasel_mask |= TX4927_PCFG_DMASEL0_MASK;
281 dmasel |= TX4927_PCFG_DMASEL0_ACL0;
282 break;
283 case 2:
284 dmasel_mask |= TX4927_PCFG_DMASEL2_MASK;
285 dmasel |= TX4927_PCFG_DMASEL2_ACL0;
286 break;
287 default:
288 return;
289 }
290 switch (dma_chan_in) {
291 case 1:
292 dmasel_mask |= TX4927_PCFG_DMASEL1_MASK;
293 dmasel |= TX4927_PCFG_DMASEL1_ACL1;
294 break;
295 case 3:
296 dmasel_mask |= TX4927_PCFG_DMASEL3_MASK;
297 dmasel |= TX4927_PCFG_DMASEL3_ACL1;
298 break;
299 default:
300 return;
301 }
302 local_irq_save(flags);
303 txx9_clear64(&tx4927_ccfgptr->pcfg, dmasel_mask);
304 txx9_set64(&tx4927_ccfgptr->pcfg, dmasel);
305 local_irq_restore(flags);
306 txx9_aclc_init(TX4927_ACLC_REG & 0xfffffffffULL,
307 TXX9_IRQ_BASE + TX4927_IR_ACLC,
308 0, dma_chan_out, dma_chan_in);
309}
310
256static void __init tx4927_stop_unused_modules(void) 311static void __init tx4927_stop_unused_modules(void)
257{ 312{
258 __u64 pcfg, rst = 0, ckd = 0; 313 __u64 pcfg, rst = 0, ckd = 0;
diff --git a/arch/mips/txx9/generic/setup_tx4938.c b/arch/mips/txx9/generic/setup_tx4938.c
index 3925219b8973..eb2080110239 100644
--- a/arch/mips/txx9/generic/setup_tx4938.c
+++ b/arch/mips/txx9/generic/setup_tx4938.c
@@ -24,6 +24,7 @@
24#include <asm/txx9pio.h> 24#include <asm/txx9pio.h>
25#include <asm/txx9/generic.h> 25#include <asm/txx9/generic.h>
26#include <asm/txx9/ndfmc.h> 26#include <asm/txx9/ndfmc.h>
27#include <asm/txx9/dmac.h>
27#include <asm/txx9/tx4938.h> 28#include <asm/txx9/tx4938.h>
28 29
29static void __init tx4938_wdr_init(void) 30static void __init tx4938_wdr_init(void)
@@ -239,11 +240,6 @@ void __init tx4938_setup(void)
239 for (i = 0; i < TX4938_NR_TMR; i++) 240 for (i = 0; i < TX4938_NR_TMR; i++)
240 txx9_tmr_init(TX4938_TMR_REG(i) & 0xfffffffffULL); 241 txx9_tmr_init(TX4938_TMR_REG(i) & 0xfffffffffULL);
241 242
242 /* DMA */
243 for (i = 0; i < 2; i++)
244 ____raw_writeq(TX4938_DMA_MCR_MSTEN,
245 (void __iomem *)(TX4938_DMA_REG(i) + 0x50));
246
247 /* PIO */ 243 /* PIO */
248 txx9_gpio_init(TX4938_PIO_REG & 0xfffffffffULL, 0, TX4938_NUM_PIO); 244 txx9_gpio_init(TX4938_PIO_REG & 0xfffffffffULL, 0, TX4938_NUM_PIO);
249 __raw_writel(0, &tx4938_pioptr->maskcpu); 245 __raw_writel(0, &tx4938_pioptr->maskcpu);
@@ -403,6 +399,38 @@ void __init tx4938_ndfmc_init(unsigned int hold, unsigned int spw)
403 txx9_ndfmc_init(baseaddr, &plat_data); 399 txx9_ndfmc_init(baseaddr, &plat_data);
404} 400}
405 401
402void __init tx4938_dmac_init(int memcpy_chan0, int memcpy_chan1)
403{
404 struct txx9dmac_platform_data plat_data = {
405 .have_64bit_regs = true,
406 };
407 int i;
408
409 for (i = 0; i < 2; i++) {
410 plat_data.memcpy_chan = i ? memcpy_chan1 : memcpy_chan0;
411 txx9_dmac_init(i, TX4938_DMA_REG(i) & 0xfffffffffULL,
412 TXX9_IRQ_BASE + TX4938_IR_DMA(i, 0),
413 &plat_data);
414 }
415}
416
417void __init tx4938_aclc_init(void)
418{
419 u64 pcfg = __raw_readq(&tx4938_ccfgptr->pcfg);
420
421 if ((pcfg & TX4938_PCFG_SEL2) &&
422 !(pcfg & TX4938_PCFG_ETH0_SEL))
423 txx9_aclc_init(TX4938_ACLC_REG & 0xfffffffffULL,
424 TXX9_IRQ_BASE + TX4938_IR_ACLC,
425 1, 0, 1);
426}
427
428void __init tx4938_sramc_init(void)
429{
430 if (tx4938_sram_resource.start)
431 txx9_sramc_init(&tx4938_sram_resource);
432}
433
406static void __init tx4938_stop_unused_modules(void) 434static void __init tx4938_stop_unused_modules(void)
407{ 435{
408 __u64 pcfg, rst = 0, ckd = 0; 436 __u64 pcfg, rst = 0, ckd = 0;
diff --git a/arch/mips/txx9/generic/setup_tx4939.c b/arch/mips/txx9/generic/setup_tx4939.c
index c2bf150c8838..3dc19f482959 100644
--- a/arch/mips/txx9/generic/setup_tx4939.c
+++ b/arch/mips/txx9/generic/setup_tx4939.c
@@ -28,6 +28,7 @@
28#include <asm/txx9tmr.h> 28#include <asm/txx9tmr.h>
29#include <asm/txx9/generic.h> 29#include <asm/txx9/generic.h>
30#include <asm/txx9/ndfmc.h> 30#include <asm/txx9/ndfmc.h>
31#include <asm/txx9/dmac.h>
31#include <asm/txx9/tx4939.h> 32#include <asm/txx9/tx4939.h>
32 33
33static void __init tx4939_wdr_init(void) 34static void __init tx4939_wdr_init(void)
@@ -259,11 +260,6 @@ void __init tx4939_setup(void)
259 for (i = 0; i < TX4939_NR_TMR; i++) 260 for (i = 0; i < TX4939_NR_TMR; i++)
260 txx9_tmr_init(TX4939_TMR_REG(i) & 0xfffffffffULL); 261 txx9_tmr_init(TX4939_TMR_REG(i) & 0xfffffffffULL);
261 262
262 /* DMA */
263 for (i = 0; i < 2; i++)
264 ____raw_writeq(TX4938_DMA_MCR_MSTEN,
265 (void __iomem *)(TX4939_DMA_REG(i) + 0x50));
266
267 /* set PCIC1 reset (required to prevent hangup on BIST) */ 263 /* set PCIC1 reset (required to prevent hangup on BIST) */
268 txx9_set64(&tx4939_ccfgptr->clkctr, TX4939_CLKCTR_PCI1RST); 264 txx9_set64(&tx4939_ccfgptr->clkctr, TX4939_CLKCTR_PCI1RST);
269 pcfg = ____raw_readq(&tx4939_ccfgptr->pcfg); 265 pcfg = ____raw_readq(&tx4939_ccfgptr->pcfg);
@@ -474,6 +470,53 @@ void __init tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
474 txx9_ndfmc_init(TX4939_NDFMC_REG & 0xfffffffffULL, &plat_data); 470 txx9_ndfmc_init(TX4939_NDFMC_REG & 0xfffffffffULL, &plat_data);
475} 471}
476 472
473void __init tx4939_dmac_init(int memcpy_chan0, int memcpy_chan1)
474{
475 struct txx9dmac_platform_data plat_data = {
476 .have_64bit_regs = true,
477 };
478 int i;
479
480 for (i = 0; i < 2; i++) {
481 plat_data.memcpy_chan = i ? memcpy_chan1 : memcpy_chan0;
482 txx9_dmac_init(i, TX4939_DMA_REG(i) & 0xfffffffffULL,
483 TXX9_IRQ_BASE + TX4939_IR_DMA(i, 0),
484 &plat_data);
485 }
486}
487
488void __init tx4939_aclc_init(void)
489{
490 u64 pcfg = __raw_readq(&tx4939_ccfgptr->pcfg);
491
492 if ((pcfg & TX4939_PCFG_I2SMODE_MASK) == TX4939_PCFG_I2SMODE_ACLC)
493 txx9_aclc_init(TX4939_ACLC_REG & 0xfffffffffULL,
494 TXX9_IRQ_BASE + TX4939_IR_ACLC, 1, 0, 1);
495}
496
497void __init tx4939_sramc_init(void)
498{
499 if (tx4939_sram_resource.start)
500 txx9_sramc_init(&tx4939_sram_resource);
501}
502
503void __init tx4939_rng_init(void)
504{
505 static struct resource res = {
506 .start = TX4939_RNG_REG & 0xfffffffffULL,
507 .end = (TX4939_RNG_REG & 0xfffffffffULL) + 0x30 - 1,
508 .flags = IORESOURCE_MEM,
509 };
510 static struct platform_device pdev = {
511 .name = "tx4939-rng",
512 .id = -1,
513 .num_resources = 1,
514 .resource = &res,
515 };
516
517 platform_device_register(&pdev);
518}
519
477static void __init tx4939_stop_unused_modules(void) 520static void __init tx4939_stop_unused_modules(void)
478{ 521{
479 __u64 pcfg, rst = 0, ckd = 0; 522 __u64 pcfg, rst = 0, ckd = 0;
diff --git a/arch/mips/txx9/rbtx4927/setup.c b/arch/mips/txx9/rbtx4927/setup.c
index 01129a9d50fa..ee468eaee4f7 100644
--- a/arch/mips/txx9/rbtx4927/setup.c
+++ b/arch/mips/txx9/rbtx4927/setup.c
@@ -337,6 +337,14 @@ static void __init rbtx4927_device_init(void)
337 rbtx4927_ne_init(); 337 rbtx4927_ne_init();
338 tx4927_wdt_init(); 338 tx4927_wdt_init();
339 rbtx4927_mtd_init(); 339 rbtx4927_mtd_init();
340 if (TX4927_REV_PCODE() == 0x4927) {
341 tx4927_dmac_init(2);
342 tx4927_aclc_init(0, 1);
343 } else {
344 tx4938_dmac_init(0, 2);
345 tx4938_aclc_init();
346 }
347 platform_device_register_simple("txx9aclc-generic", -1, NULL, 0);
340 txx9_iocled_init(RBTX4927_LED_ADDR - IO_BASE, -1, 3, 1, "green", NULL); 348 txx9_iocled_init(RBTX4927_LED_ADDR - IO_BASE, -1, 3, 1, "green", NULL);
341 rbtx4927_gpioled_init(); 349 rbtx4927_gpioled_init();
342} 350}
diff --git a/arch/mips/txx9/rbtx4938/setup.c b/arch/mips/txx9/rbtx4938/setup.c
index 65d13df8878a..d66509b14284 100644
--- a/arch/mips/txx9/rbtx4938/setup.c
+++ b/arch/mips/txx9/rbtx4938/setup.c
@@ -355,6 +355,10 @@ static void __init rbtx4938_device_init(void)
355 /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */ 355 /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */
356 tx4938_ndfmc_init(10, 35); 356 tx4938_ndfmc_init(10, 35);
357 tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1); 357 tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1);
358 tx4938_dmac_init(0, 2);
359 tx4938_aclc_init();
360 platform_device_register_simple("txx9aclc-generic", -1, NULL, 0);
361 tx4938_sramc_init();
358 txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL); 362 txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL);
359} 363}
360 364
diff --git a/arch/mips/txx9/rbtx4939/setup.c b/arch/mips/txx9/rbtx4939/setup.c
index 4199c6fd4d1d..b0c241ecf603 100644
--- a/arch/mips/txx9/rbtx4939/setup.c
+++ b/arch/mips/txx9/rbtx4939/setup.c
@@ -498,6 +498,11 @@ static void __init rbtx4939_device_init(void)
498 tx4939_wdt_init(); 498 tx4939_wdt_init();
499 tx4939_ata_init(); 499 tx4939_ata_init();
500 tx4939_rtc_init(); 500 tx4939_rtc_init();
501 tx4939_dmac_init(0, 2);
502 tx4939_aclc_init();
503 platform_device_register_simple("txx9aclc-generic", -1, NULL, 0);
504 tx4939_sramc_init();
505 tx4939_rng_init();
501} 506}
502 507
503static void __init rbtx4939_setup(void) 508static void __init rbtx4939_setup(void)
@@ -507,10 +512,10 @@ static void __init rbtx4939_setup(void)
507 rbtx4939_ebusc_setup(); 512 rbtx4939_ebusc_setup();
508 /* always enable ATA0 */ 513 /* always enable ATA0 */
509 txx9_set64(&tx4939_ccfgptr->pcfg, TX4939_PCFG_ATA0MODE); 514 txx9_set64(&tx4939_ccfgptr->pcfg, TX4939_PCFG_ATA0MODE);
510 rbtx4939_update_ioc_pen();
511 if (txx9_master_clock == 0) 515 if (txx9_master_clock == 0)
512 txx9_master_clock = 20000000; 516 txx9_master_clock = 20000000;
513 tx4939_setup(); 517 tx4939_setup();
518 rbtx4939_update_ioc_pen();
514#ifdef HAVE_RBTX4939_IOSWAB 519#ifdef HAVE_RBTX4939_IOSWAB
515 ioswabw = rbtx4939_ioswabw; 520 ioswabw = rbtx4939_ioswabw;
516 __mem_ioswabw = rbtx4939_mem_ioswabw; 521 __mem_ioswabw = rbtx4939_mem_ioswabw;
diff --git a/arch/mips/vr41xx/casio-e55/setup.c b/arch/mips/vr41xx/casio-e55/setup.c
index 6d9bab890587..719f4a5b9844 100644
--- a/arch/mips/vr41xx/casio-e55/setup.c
+++ b/arch/mips/vr41xx/casio-e55/setup.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * setup.c, Setup for the CASIO CASSIOPEIA E-11/15/55/65. 2 * setup.c, Setup for the CASIO CASSIOPEIA E-11/15/55/65.
3 * 3 *
4 * Copyright (C) 2002-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2006 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/bcu.c b/arch/mips/vr41xx/common/bcu.c
index d77c330a0d59..6346c59c9f9d 100644
--- a/arch/mips/vr41xx/common/bcu.c
+++ b/arch/mips/vr41xx/common/bcu.c
@@ -2,8 +2,8 @@
2 * bcu.c, Bus Control Unit routines for the NEC VR4100 series. 2 * bcu.c, Bus Control Unit routines for the NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2002 MontaVista Software Inc. 4 * Copyright (C) 2002 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@linux-mips.org>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
@@ -21,11 +21,11 @@
21 */ 21 */
22/* 22/*
23 * Changes: 23 * Changes:
24 * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> 24 * MontaVista Software Inc. <source@mvista.com>
25 * - New creation, NEC VR4122 and VR4131 are supported. 25 * - New creation, NEC VR4122 and VR4131 are supported.
26 * - Added support for NEC VR4111 and VR4121. 26 * - Added support for NEC VR4111 and VR4121.
27 * 27 *
28 * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 28 * Yoichi Yuasa <yuasa@linux-mips.org>
29 * - Added support for NEC VR4133. 29 * - Added support for NEC VR4133.
30 */ 30 */
31#include <linux/kernel.h> 31#include <linux/kernel.h>
diff --git a/arch/mips/vr41xx/common/cmu.c b/arch/mips/vr41xx/common/cmu.c
index ad0e8e3409d9..8ba7d04a5ec5 100644
--- a/arch/mips/vr41xx/common/cmu.c
+++ b/arch/mips/vr41xx/common/cmu.c
@@ -2,8 +2,8 @@
2 * cmu.c, Clock Mask Unit routines for the NEC VR4100 series. 2 * cmu.c, Clock Mask Unit routines for the NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2001-2002 MontaVista Software Inc. 4 * Copyright (C) 2001-2002 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copuright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copuright (C) 2003-2005 Yoichi Yuasa <yuasa@linux-mips.org>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
@@ -21,11 +21,11 @@
21 */ 21 */
22/* 22/*
23 * Changes: 23 * Changes:
24 * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> 24 * MontaVista Software Inc. <source@mvista.com>
25 * - New creation, NEC VR4122 and VR4131 are supported. 25 * - New creation, NEC VR4122 and VR4131 are supported.
26 * - Added support for NEC VR4111 and VR4121. 26 * - Added support for NEC VR4111 and VR4121.
27 * 27 *
28 * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 28 * Yoichi Yuasa <yuasa@linux-mips.org>
29 * - Added support for NEC VR4133. 29 * - Added support for NEC VR4133.
30 */ 30 */
31#include <linux/init.h> 31#include <linux/init.h>
diff --git a/arch/mips/vr41xx/common/giu.c b/arch/mips/vr41xx/common/giu.c
index 2b272f1496fe..22cc6f2100a1 100644
--- a/arch/mips/vr41xx/common/giu.c
+++ b/arch/mips/vr41xx/common/giu.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * NEC VR4100 series GIU platform device. 2 * NEC VR4100 series GIU platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c
index 3f23d9fda662..6d39e222b170 100644
--- a/arch/mips/vr41xx/common/icu.c
+++ b/arch/mips/vr41xx/common/icu.c
@@ -2,8 +2,8 @@
2 * icu.c, Interrupt Control Unit routines for the NEC VR4100 series. 2 * icu.c, Interrupt Control Unit routines for the NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2001-2002 MontaVista Software Inc. 4 * Copyright (C) 2001-2002 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> 5 * Author: Yoichi Yuasa <source@mvista.com>
6 * Copyright (C) 2003-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 6 * Copyright (C) 2003-2006 Yoichi Yuasa <yuasa@linux-mips.org>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
@@ -21,11 +21,11 @@
21 */ 21 */
22/* 22/*
23 * Changes: 23 * Changes:
24 * MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com> 24 * MontaVista Software Inc. <source@mvista.com>
25 * - New creation, NEC VR4122 and VR4131 are supported. 25 * - New creation, NEC VR4122 and VR4131 are supported.
26 * - Added support for NEC VR4111 and VR4121. 26 * - Added support for NEC VR4111 and VR4121.
27 * 27 *
28 * Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 28 * Yoichi Yuasa <yuasa@linux-mips.org>
29 * - Coped with INTASSIGN of NEC VR4133. 29 * - Coped with INTASSIGN of NEC VR4133.
30 */ 30 */
31#include <linux/errno.h> 31#include <linux/errno.h>
diff --git a/arch/mips/vr41xx/common/init.c b/arch/mips/vr41xx/common/init.c
index c64995342ba8..1386e6f081c8 100644
--- a/arch/mips/vr41xx/common/init.c
+++ b/arch/mips/vr41xx/common/init.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * init.c, Common initialization routines for NEC VR4100 series. 2 * init.c, Common initialization routines for NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c
index 9cc389109b19..bef06872f012 100644
--- a/arch/mips/vr41xx/common/irq.c
+++ b/arch/mips/vr41xx/common/irq.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Interrupt handing routines for NEC VR4100 series. 2 * Interrupt handing routines for NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2005-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2005-2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/pmu.c b/arch/mips/vr41xx/common/pmu.c
index 028aaf75eb21..692b4e85b7fc 100644
--- a/arch/mips/vr41xx/common/pmu.c
+++ b/arch/mips/vr41xx/common/pmu.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * pmu.c, Power Management Unit routines for NEC VR4100 series. 2 * pmu.c, Power Management Unit routines for NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2003-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2003-2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/rtc.c b/arch/mips/vr41xx/common/rtc.c
index 9f26c14edcac..ebc5dcf0ed8e 100644
--- a/arch/mips/vr41xx/common/rtc.c
+++ b/arch/mips/vr41xx/common/rtc.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * NEC VR4100 series RTC platform device. 2 * NEC VR4100 series RTC platform device.
3 * 3 *
4 * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/siu.c b/arch/mips/vr41xx/common/siu.c
index 654dee6208be..54eae56108fb 100644
--- a/arch/mips/vr41xx/common/siu.c
+++ b/arch/mips/vr41xx/common/siu.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * NEC VR4100 series SIU platform device. 2 * NEC VR4100 series SIU platform device.
3 * 3 *
4 * Copyright (C) 2007-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2007-2008 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/common/type.c b/arch/mips/vr41xx/common/type.c
index e0c1ac5e988e..ff841422b638 100644
--- a/arch/mips/vr41xx/common/type.c
+++ b/arch/mips/vr41xx/common/type.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * type.c, System type for NEC VR4100 series. 2 * type.c, System type for NEC VR4100 series.
3 * 3 *
4 * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2005 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
diff --git a/arch/mips/vr41xx/ibm-workpad/setup.c b/arch/mips/vr41xx/ibm-workpad/setup.c
index 9eef297eca1a..3982f378a3e6 100644
--- a/arch/mips/vr41xx/ibm-workpad/setup.c
+++ b/arch/mips/vr41xx/ibm-workpad/setup.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * setup.c, Setup for the IBM WorkPad z50. 2 * setup.c, Setup for the IBM WorkPad z50.
3 * 3 *
4 * Copyright (C) 2002-2006 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> 4 * Copyright (C) 2002-2006 Yoichi Yuasa <yuasa@linux-mips.org>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by