Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/85xx: Board support for GE IMP3A

Initial board support for the GE IMP3A, a 3U compactPCI card with a p2020
processor.

Signed-off-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

authored by

Martyn Welch and committed by
Kumar Gala
e041013a 44b24b74

+802
+255
arch/powerpc/boot/dts/ge_imp3a.dts
··· 1 + /* 2 + * GE IMP3A Device Tree Source 3 + * 4 + * Copyright 2010-2011 GE Intelligent Platforms Embedded Systems, Inc. 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of the GNU General Public License as published by the 8 + * Free Software Foundation; either version 2 of the License, or (at your 9 + * option) any later version. 10 + * 11 + * Based on: P2020 DS Device Tree Source 12 + * Copyright 2009 Freescale Semiconductor Inc. 13 + */ 14 + 15 + /include/ "fsl/p2020si-pre.dtsi" 16 + 17 + / { 18 + model = "GE_IMP3A"; 19 + compatible = "ge,imp3a"; 20 + 21 + memory { 22 + device_type = "memory"; 23 + }; 24 + 25 + lbc: localbus@fef05000 { 26 + reg = <0 0xfef05000 0 0x1000>; 27 + 28 + ranges = <0x0 0x0 0x0 0xff000000 0x01000000 29 + 0x1 0x0 0x0 0xe0000000 0x08000000 30 + 0x2 0x0 0x0 0xe8000000 0x08000000 31 + 0x3 0x0 0x0 0xfc100000 0x00020000 32 + 0x4 0x0 0x0 0xfc000000 0x00008000 33 + 0x5 0x0 0x0 0xfc008000 0x00008000 34 + 0x6 0x0 0x0 0xfee00000 0x00040000 35 + 0x7 0x0 0x0 0xfee80000 0x00040000>; 36 + 37 + /* nor@0,0 is a mirror of part of the memory in nor@1,0 38 + nor@0,0 { 39 + #address-cells = <1>; 40 + #size-cells = <1>; 41 + compatible = "ge,imp3a-firmware-mirror", "cfi-flash"; 42 + reg = <0x0 0x0 0x1000000>; 43 + bank-width = <2>; 44 + device-width = <1>; 45 + 46 + partition@0 { 47 + label = "firmware"; 48 + reg = <0x0 0x1000000>; 49 + read-only; 50 + }; 51 + }; 52 + */ 53 + 54 + nor@1,0 { 55 + #address-cells = <1>; 56 + #size-cells = <1>; 57 + compatible = "ge,imp3a-paged-flash", "cfi-flash"; 58 + reg = <0x1 0x0 0x8000000>; 59 + bank-width = <2>; 60 + device-width = <1>; 61 + 62 + partition@0 { 63 + label = "user"; 64 + reg = <0x0 0x7800000>; 65 + }; 66 + 67 + partition@7800000 { 68 + label = "firmware"; 69 + reg = <0x7800000 0x800000>; 70 + read-only; 71 + }; 72 + }; 73 + 74 + nvram@3,0 { 75 + device_type = "nvram"; 76 + compatible = "simtek,stk14ca8"; 77 + reg = <0x3 0x0 0x20000>; 78 + }; 79 + 80 + fpga@4,0 { 81 + compatible = "ge,imp3a-fpga-regs"; 82 + reg = <0x4 0x0 0x20>; 83 + }; 84 + 85 + gef_pic: pic@4,20 { 86 + #interrupt-cells = <1>; 87 + interrupt-controller; 88 + device_type = "interrupt-controller"; 89 + compatible = "ge,imp3a-fpga-pic", "gef,fpga-pic-1.00"; 90 + reg = <0x4 0x20 0x20>; 91 + interrupts = <6 7 0 0>; 92 + }; 93 + 94 + gef_gpio: gpio@4,400 { 95 + #gpio-cells = <2>; 96 + compatible = "ge,imp3a-gpio"; 97 + reg = <0x4 0x400 0x24>; 98 + gpio-controller; 99 + }; 100 + 101 + wdt@4,800 { 102 + compatible = "ge,imp3a-fpga-wdt", "gef,fpga-wdt-1.00", 103 + "gef,fpga-wdt"; 104 + reg = <0x4 0x800 0x8>; 105 + interrupts = <10 4>; 106 + interrupt-parent = <&gef_pic>; 107 + }; 108 + 109 + /* Second watchdog available, driver currently supports one. 110 + wdt@4,808 { 111 + compatible = "gef,imp3a-fpga-wdt", "gef,fpga-wdt-1.00", 112 + "gef,fpga-wdt"; 113 + reg = <0x4 0x808 0x8>; 114 + interrupts = <9 4>; 115 + interrupt-parent = <&gef_pic>; 116 + }; 117 + */ 118 + 119 + nand@6,0 { 120 + compatible = "fsl,elbc-fcm-nand"; 121 + reg = <0x6 0x0 0x40000>; 122 + }; 123 + 124 + nand@7,0 { 125 + compatible = "fsl,elbc-fcm-nand"; 126 + reg = <0x7 0x0 0x40000>; 127 + }; 128 + }; 129 + 130 + soc: soc@fef00000 { 131 + ranges = <0x0 0 0xfef00000 0x100000>; 132 + 133 + i2c@3000 { 134 + hwmon@48 { 135 + compatible = "national,lm92"; 136 + reg = <0x48>; 137 + }; 138 + 139 + hwmon@4c { 140 + compatible = "adi,adt7461"; 141 + reg = <0x4c>; 142 + }; 143 + 144 + rtc@51 { 145 + compatible = "epson,rx8581"; 146 + reg = <0x51>; 147 + }; 148 + 149 + eti@6b { 150 + compatible = "dallas,ds1682"; 151 + reg = <0x6b>; 152 + }; 153 + }; 154 + 155 + usb@22000 { 156 + phy_type = "ulpi"; 157 + dr_mode = "host"; 158 + }; 159 + 160 + mdio@24520 { 161 + phy0: ethernet-phy@0 { 162 + interrupt-parent = <&gef_pic>; 163 + interrupts = <0xc 0x4>; 164 + reg = <0x1>; 165 + }; 166 + phy1: ethernet-phy@1 { 167 + interrupt-parent = <&gef_pic>; 168 + interrupts = <0xb 0x4>; 169 + reg = <0x2>; 170 + }; 171 + tbi0: tbi-phy@11 { 172 + reg = <0x11>; 173 + device_type = "tbi-phy"; 174 + }; 175 + }; 176 + 177 + mdio@25520 { 178 + tbi1: tbi-phy@11 { 179 + reg = <0x11>; 180 + device_type = "tbi-phy"; 181 + }; 182 + }; 183 + 184 + mdio@26520 { 185 + status = "disabled"; 186 + }; 187 + 188 + enet0: ethernet@24000 { 189 + tbi-handle = <&tbi0>; 190 + phy-handle = <&phy0>; 191 + phy-connection-type = "gmii"; 192 + }; 193 + 194 + enet1: ethernet@25000 { 195 + tbi-handle = <&tbi1>; 196 + phy-handle = <&phy1>; 197 + phy-connection-type = "gmii"; 198 + }; 199 + 200 + enet2: ethernet@26000 { 201 + status = "disabled"; 202 + }; 203 + }; 204 + 205 + pci0: pcie@fef08000 { 206 + ranges = <0x2000000 0x0 0xc0000000 0 0xc0000000 0x0 0x20000000 207 + 0x1000000 0x0 0x00000000 0 0xfe020000 0x0 0x10000>; 208 + reg = <0 0xfef08000 0 0x1000>; 209 + 210 + pcie@0 { 211 + ranges = <0x2000000 0x0 0xc0000000 212 + 0x2000000 0x0 0xc0000000 213 + 0x0 0x20000000 214 + 215 + 0x1000000 0x0 0x0 216 + 0x1000000 0x0 0x0 217 + 0x0 0x10000>; 218 + }; 219 + }; 220 + 221 + pci1: pcie@fef09000 { 222 + reg = <0 0xfef09000 0 0x1000>; 223 + ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 224 + 0x1000000 0x0 0x00000000 0 0xfe010000 0x0 0x10000>; 225 + 226 + pcie@0 { 227 + ranges = <0x2000000 0x0 0xa0000000 228 + 0x2000000 0x0 0xa0000000 229 + 0x0 0x20000000 230 + 231 + 0x1000000 0x0 0x0 232 + 0x1000000 0x0 0x0 233 + 0x0 0x10000>; 234 + }; 235 + 236 + }; 237 + 238 + pci2: pcie@fef0a000 { 239 + reg = <0 0xfef0a000 0 0x1000>; 240 + ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000 241 + 0x1000000 0x0 0x00000000 0 0xfe000000 0x0 0x10000>; 242 + 243 + pcie@0 { 244 + ranges = <0x2000000 0x0 0x80000000 245 + 0x2000000 0x0 0x80000000 246 + 0x0 0x20000000 247 + 248 + 0x1000000 0x0 0x0 249 + 0x1000000 0x0 0x0 250 + 0x0 0x10000>; 251 + }; 252 + }; 253 + }; 254 + 255 + /include/ "fsl/p2020si-post.dtsi"
+257
arch/powerpc/configs/85xx/ge_imp3a_defconfig
··· 1 + CONFIG_PPC_85xx=y 2 + CONFIG_SMP=y 3 + CONFIG_NR_CPUS=2 4 + CONFIG_EXPERIMENTAL=y 5 + CONFIG_SYSVIPC=y 6 + CONFIG_POSIX_MQUEUE=y 7 + CONFIG_BSD_PROCESS_ACCT=y 8 + CONFIG_BSD_PROCESS_ACCT_V3=y 9 + CONFIG_SPARSE_IRQ=y 10 + CONFIG_IKCONFIG=y 11 + CONFIG_IKCONFIG_PROC=y 12 + # CONFIG_UTS_NS is not set 13 + # CONFIG_IPC_NS is not set 14 + # CONFIG_USER_NS is not set 15 + # CONFIG_PID_NS is not set 16 + # CONFIG_NET_NS is not set 17 + CONFIG_SYSFS_DEPRECATED=y 18 + CONFIG_SYSFS_DEPRECATED_V2=y 19 + CONFIG_RELAY=y 20 + CONFIG_BLK_DEV_INITRD=y 21 + CONFIG_PERF_EVENTS=y 22 + CONFIG_SLAB=y 23 + CONFIG_MODULES=y 24 + CONFIG_MODULE_UNLOAD=y 25 + # CONFIG_BLK_DEV_BSG is not set 26 + CONFIG_GE_IMP3A=y 27 + CONFIG_QUICC_ENGINE=y 28 + CONFIG_QE_GPIO=y 29 + CONFIG_CPM2=y 30 + CONFIG_HIGHMEM=y 31 + CONFIG_HIGH_RES_TIMERS=y 32 + CONFIG_HZ_1000=y 33 + CONFIG_PREEMPT=y 34 + # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 35 + CONFIG_BINFMT_MISC=m 36 + CONFIG_MATH_EMULATION=y 37 + CONFIG_IRQ_ALL_CPUS=y 38 + CONFIG_FORCE_MAX_ZONEORDER=17 39 + CONFIG_PCI=y 40 + CONFIG_PCIEPORTBUS=y 41 + CONFIG_PCI_MSI=y 42 + CONFIG_PCCARD=y 43 + # CONFIG_PCMCIA_LOAD_CIS is not set 44 + CONFIG_YENTA=y 45 + CONFIG_NET=y 46 + CONFIG_PACKET=y 47 + CONFIG_UNIX=y 48 + CONFIG_XFRM_USER=m 49 + CONFIG_NET_KEY=y 50 + CONFIG_INET=y 51 + CONFIG_IP_MULTICAST=y 52 + CONFIG_IP_ADVANCED_ROUTER=y 53 + CONFIG_IP_MULTIPLE_TABLES=y 54 + CONFIG_IP_ROUTE_MULTIPATH=y 55 + CONFIG_IP_ROUTE_VERBOSE=y 56 + CONFIG_IP_PNP=y 57 + CONFIG_IP_PNP_DHCP=y 58 + CONFIG_IP_PNP_BOOTP=y 59 + CONFIG_IP_PNP_RARP=y 60 + CONFIG_NET_IPIP=m 61 + CONFIG_IP_MROUTE=y 62 + CONFIG_IP_PIMSM_V1=y 63 + CONFIG_IP_PIMSM_V2=y 64 + CONFIG_SYN_COOKIES=y 65 + CONFIG_INET_AH=m 66 + CONFIG_INET_ESP=m 67 + CONFIG_INET_IPCOMP=m 68 + # CONFIG_INET_XFRM_MODE_BEET is not set 69 + CONFIG_INET6_AH=m 70 + CONFIG_INET6_IPCOMP=m 71 + CONFIG_IPV6_TUNNEL=m 72 + CONFIG_NET_PKTGEN=m 73 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 74 + CONFIG_MTD=y 75 + CONFIG_MTD_OF_PARTS=y 76 + CONFIG_MTD_CHAR=y 77 + CONFIG_MTD_BLOCK=y 78 + CONFIG_MTD_CFI=y 79 + CONFIG_MTD_JEDECPROBE=y 80 + CONFIG_MTD_CFI_INTELEXT=y 81 + CONFIG_MTD_CFI_AMDSTD=y 82 + CONFIG_MTD_PHYSMAP_OF=y 83 + CONFIG_MTD_NAND=y 84 + CONFIG_MTD_NAND_FSL_ELBC=y 85 + CONFIG_PROC_DEVICETREE=y 86 + CONFIG_BLK_DEV_LOOP=m 87 + CONFIG_BLK_DEV_CRYPTOLOOP=m 88 + CONFIG_BLK_DEV_NBD=m 89 + CONFIG_BLK_DEV_RAM=y 90 + CONFIG_BLK_DEV_RAM_SIZE=131072 91 + CONFIG_MISC_DEVICES=y 92 + CONFIG_DS1682=y 93 + CONFIG_BLK_DEV_SD=y 94 + CONFIG_CHR_DEV_ST=y 95 + CONFIG_BLK_DEV_SR=y 96 + CONFIG_ATA=y 97 + CONFIG_SATA_AHCI=y 98 + CONFIG_SATA_SIL24=y 99 + # CONFIG_ATA_SFF is not set 100 + CONFIG_NETDEVICES=y 101 + CONFIG_BONDING=m 102 + CONFIG_DUMMY=m 103 + CONFIG_NETCONSOLE=y 104 + CONFIG_NETPOLL_TRAP=y 105 + CONFIG_TUN=m 106 + # CONFIG_NET_VENDOR_3COM is not set 107 + CONFIG_FS_ENET=y 108 + CONFIG_UCC_GETH=y 109 + CONFIG_GIANFAR=y 110 + CONFIG_PPP=m 111 + CONFIG_PPP_BSDCOMP=m 112 + CONFIG_PPP_DEFLATE=m 113 + CONFIG_PPP_FILTER=y 114 + CONFIG_PPP_MULTILINK=y 115 + CONFIG_PPPOE=m 116 + CONFIG_PPP_ASYNC=m 117 + CONFIG_PPP_SYNC_TTY=m 118 + CONFIG_SLIP=m 119 + CONFIG_SLIP_COMPRESSED=y 120 + CONFIG_SLIP_SMART=y 121 + CONFIG_SLIP_MODE_SLIP6=y 122 + # CONFIG_INPUT_KEYBOARD is not set 123 + # CONFIG_INPUT_MOUSE is not set 124 + # CONFIG_SERIO is not set 125 + # CONFIG_LEGACY_PTYS is not set 126 + CONFIG_SERIAL_8250=y 127 + CONFIG_SERIAL_8250_CONSOLE=y 128 + CONFIG_SERIAL_8250_NR_UARTS=2 129 + CONFIG_SERIAL_8250_RUNTIME_UARTS=2 130 + CONFIG_SERIAL_8250_EXTENDED=y 131 + CONFIG_SERIAL_8250_MANY_PORTS=y 132 + CONFIG_SERIAL_8250_DETECT_IRQ=y 133 + CONFIG_SERIAL_8250_RSA=y 134 + CONFIG_SERIAL_QE=m 135 + CONFIG_NVRAM=y 136 + CONFIG_I2C=y 137 + CONFIG_I2C_CHARDEV=y 138 + CONFIG_I2C_CPM=m 139 + CONFIG_I2C_MPC=y 140 + CONFIG_GPIO_SYSFS=y 141 + CONFIG_GPIO_GE_FPGA=y 142 + CONFIG_SENSORS_LM90=y 143 + CONFIG_SENSORS_LM92=y 144 + CONFIG_WATCHDOG=y 145 + CONFIG_GEF_WDT=y 146 + CONFIG_VIDEO_OUTPUT_CONTROL=m 147 + CONFIG_HID_DRAGONRISE=y 148 + CONFIG_HID_GYRATION=y 149 + CONFIG_HID_TWINHAN=y 150 + CONFIG_HID_ORTEK=y 151 + CONFIG_HID_PANTHERLORD=y 152 + CONFIG_HID_PETALYNX=y 153 + CONFIG_HID_SAMSUNG=y 154 + CONFIG_HID_SONY=y 155 + CONFIG_HID_SUNPLUS=y 156 + CONFIG_HID_GREENASIA=y 157 + CONFIG_HID_SMARTJOYPLUS=y 158 + CONFIG_HID_TOPSEED=y 159 + CONFIG_HID_THRUSTMASTER=y 160 + CONFIG_HID_ZEROPLUS=y 161 + CONFIG_USB=y 162 + CONFIG_USB_DEVICEFS=y 163 + CONFIG_USB_EHCI_HCD=y 164 + # CONFIG_USB_EHCI_TT_NEWSCHED is not set 165 + CONFIG_USB_EHCI_FSL=y 166 + CONFIG_USB_OHCI_HCD=y 167 + CONFIG_USB_OHCI_HCD_PPC_OF_BE=y 168 + CONFIG_USB_OHCI_HCD_PPC_OF_LE=y 169 + CONFIG_USB_STORAGE=y 170 + CONFIG_EDAC=y 171 + CONFIG_EDAC_MM_EDAC=y 172 + CONFIG_EDAC_MPC85XX=y 173 + CONFIG_RTC_CLASS=y 174 + # CONFIG_RTC_INTF_PROC is not set 175 + CONFIG_RTC_DRV_RX8581=y 176 + CONFIG_DMADEVICES=y 177 + CONFIG_FSL_DMA=y 178 + # CONFIG_NET_DMA is not set 179 + CONFIG_EXT2_FS=y 180 + CONFIG_EXT2_FS_XATTR=y 181 + CONFIG_EXT2_FS_POSIX_ACL=y 182 + CONFIG_EXT3_FS=y 183 + # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 184 + CONFIG_EXT3_FS_POSIX_ACL=y 185 + CONFIG_EXT4_FS=y 186 + CONFIG_FUSE_FS=y 187 + CONFIG_ISO9660_FS=y 188 + CONFIG_JOLIET=y 189 + CONFIG_ZISOFS=y 190 + CONFIG_UDF_FS=y 191 + CONFIG_MSDOS_FS=y 192 + CONFIG_VFAT_FS=y 193 + CONFIG_FAT_DEFAULT_CODEPAGE=850 194 + CONFIG_FAT_DEFAULT_IOCHARSET="ascii" 195 + CONFIG_NTFS_FS=y 196 + CONFIG_PROC_KCORE=y 197 + CONFIG_TMPFS=y 198 + CONFIG_JFFS2_FS=y 199 + CONFIG_NFS_FS=y 200 + CONFIG_NFS_V3=y 201 + CONFIG_NFS_V4=y 202 + CONFIG_ROOT_NFS=y 203 + CONFIG_NFSD=y 204 + CONFIG_NFSD_V4=y 205 + CONFIG_CIFS=m 206 + CONFIG_CIFS_XATTR=y 207 + CONFIG_CIFS_POSIX=y 208 + CONFIG_NLS_CODEPAGE_437=y 209 + CONFIG_NLS_CODEPAGE_737=m 210 + CONFIG_NLS_CODEPAGE_775=m 211 + CONFIG_NLS_CODEPAGE_850=y 212 + CONFIG_NLS_CODEPAGE_852=m 213 + CONFIG_NLS_CODEPAGE_855=m 214 + CONFIG_NLS_CODEPAGE_857=m 215 + CONFIG_NLS_CODEPAGE_860=m 216 + CONFIG_NLS_CODEPAGE_861=m 217 + CONFIG_NLS_CODEPAGE_862=m 218 + CONFIG_NLS_CODEPAGE_863=m 219 + CONFIG_NLS_CODEPAGE_864=m 220 + CONFIG_NLS_CODEPAGE_865=m 221 + CONFIG_NLS_CODEPAGE_866=m 222 + CONFIG_NLS_CODEPAGE_869=m 223 + CONFIG_NLS_CODEPAGE_936=m 224 + CONFIG_NLS_CODEPAGE_950=m 225 + CONFIG_NLS_CODEPAGE_932=m 226 + CONFIG_NLS_CODEPAGE_949=m 227 + CONFIG_NLS_CODEPAGE_874=m 228 + CONFIG_NLS_ISO8859_8=m 229 + CONFIG_NLS_CODEPAGE_1250=m 230 + CONFIG_NLS_CODEPAGE_1251=m 231 + CONFIG_NLS_ASCII=y 232 + CONFIG_NLS_ISO8859_1=y 233 + CONFIG_NLS_ISO8859_2=m 234 + CONFIG_NLS_ISO8859_3=m 235 + CONFIG_NLS_ISO8859_4=m 236 + CONFIG_NLS_ISO8859_5=m 237 + CONFIG_NLS_ISO8859_6=m 238 + CONFIG_NLS_ISO8859_7=m 239 + CONFIG_NLS_ISO8859_9=m 240 + CONFIG_NLS_ISO8859_13=m 241 + CONFIG_NLS_ISO8859_14=m 242 + CONFIG_NLS_ISO8859_15=y 243 + CONFIG_NLS_KOI8_R=m 244 + CONFIG_NLS_KOI8_U=m 245 + CONFIG_NLS_UTF8=y 246 + CONFIG_CRC_CCITT=y 247 + CONFIG_CRC_T10DIF=y 248 + CONFIG_LIBCRC32C=y 249 + CONFIG_MAGIC_SYSRQ=y 250 + CONFIG_SYSCTL_SYSCALL_CHECK=y 251 + CONFIG_CRYPTO_CBC=y 252 + CONFIG_CRYPTO_MD5=y 253 + CONFIG_CRYPTO_SHA256=m 254 + CONFIG_CRYPTO_SHA512=m 255 + CONFIG_CRYPTO_DES=y 256 + # CONFIG_CRYPTO_ANSI_CPRNG is not set 257 + CONFIG_CRYPTO_DEV_TALITOS=y
+15
arch/powerpc/platforms/85xx/Kconfig
··· 172 172 help 173 173 This option enables support for the Wind River SBC8560 board 174 174 175 + config GE_IMP3A 176 + bool "GE Intelligent Platforms IMP3A" 177 + select DEFAULT_UIMAGE 178 + select SWIOTLB 179 + select MMIO_NVRAM 180 + select GENERIC_GPIO 181 + select ARCH_REQUIRE_GPIOLIB 182 + select GE_FPGA 183 + help 184 + This option enables support for the GE Intelligent Platforms IMP3A 185 + board. 186 + 187 + This board is a 3U CompactPCI Single Board Computer with a Freescale 188 + P2020 processor. 189 + 175 190 config P2041_RDB 176 191 bool "Freescale P2041 RDB" 177 192 select DEFAULT_UIMAGE
+1
arch/powerpc/platforms/85xx/Makefile
··· 27 27 obj-$(CONFIG_SOCRATES) += socrates.o socrates_fpga_pic.o 28 28 obj-$(CONFIG_KSI8560) += ksi8560.o 29 29 obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o 30 + obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o
+246
arch/powerpc/platforms/85xx/ge_imp3a.c
··· 1 + /* 2 + * GE IMP3A Board Setup 3 + * 4 + * Author Martyn Welch <martyn.welch@ge.com> 5 + * 6 + * Copyright 2010 GE Intelligent Platforms Embedded Systems, Inc. 7 + * 8 + * This program is free software; you can redistribute it and/or modify it 9 + * under the terms of the GNU General Public License as published by the 10 + * Free Software Foundation; either version 2 of the License, or (at your 11 + * option) any later version. 12 + * 13 + * Based on: mpc85xx_ds.c (MPC85xx DS Board Setup) 14 + * Copyright 2007 Freescale Semiconductor Inc. 15 + */ 16 + 17 + #include <linux/stddef.h> 18 + #include <linux/kernel.h> 19 + #include <linux/pci.h> 20 + #include <linux/kdev_t.h> 21 + #include <linux/delay.h> 22 + #include <linux/seq_file.h> 23 + #include <linux/interrupt.h> 24 + #include <linux/of_platform.h> 25 + #include <linux/memblock.h> 26 + 27 + #include <asm/system.h> 28 + #include <asm/time.h> 29 + #include <asm/machdep.h> 30 + #include <asm/pci-bridge.h> 31 + #include <mm/mmu_decl.h> 32 + #include <asm/prom.h> 33 + #include <asm/udbg.h> 34 + #include <asm/mpic.h> 35 + #include <asm/swiotlb.h> 36 + #include <asm/nvram.h> 37 + 38 + #include <sysdev/fsl_soc.h> 39 + #include <sysdev/fsl_pci.h> 40 + #include "smp.h" 41 + 42 + #include "mpc85xx.h" 43 + #include <sysdev/ge/ge_pic.h> 44 + 45 + void __iomem *imp3a_regs; 46 + 47 + void __init ge_imp3a_pic_init(void) 48 + { 49 + struct mpic *mpic; 50 + struct device_node *np; 51 + struct device_node *cascade_node = NULL; 52 + unsigned long root = of_get_flat_dt_root(); 53 + 54 + if (of_flat_dt_is_compatible(root, "fsl,MPC8572DS-CAMP")) { 55 + mpic = mpic_alloc(NULL, 0, 56 + MPIC_NO_RESET | 57 + MPIC_BIG_ENDIAN | 58 + MPIC_SINGLE_DEST_CPU, 59 + 0, 256, " OpenPIC "); 60 + } else { 61 + mpic = mpic_alloc(NULL, 0, 62 + MPIC_BIG_ENDIAN | 63 + MPIC_SINGLE_DEST_CPU, 64 + 0, 256, " OpenPIC "); 65 + } 66 + 67 + BUG_ON(mpic == NULL); 68 + mpic_init(mpic); 69 + /* 70 + * There is a simple interrupt handler in the main FPGA, this needs 71 + * to be cascaded into the MPIC 72 + */ 73 + for_each_node_by_type(np, "interrupt-controller") 74 + if (of_device_is_compatible(np, "gef,fpga-pic-1.00")) { 75 + cascade_node = np; 76 + break; 77 + } 78 + 79 + if (cascade_node == NULL) { 80 + printk(KERN_WARNING "IMP3A: No FPGA PIC\n"); 81 + return; 82 + } 83 + 84 + gef_pic_init(cascade_node); 85 + of_node_put(cascade_node); 86 + } 87 + 88 + #ifdef CONFIG_PCI 89 + static int primary_phb_addr; 90 + #endif /* CONFIG_PCI */ 91 + 92 + /* 93 + * Setup the architecture 94 + */ 95 + static void __init ge_imp3a_setup_arch(void) 96 + { 97 + struct device_node *regs; 98 + #ifdef CONFIG_PCI 99 + struct device_node *np; 100 + struct pci_controller *hose; 101 + #endif 102 + dma_addr_t max = 0xffffffff; 103 + 104 + if (ppc_md.progress) 105 + ppc_md.progress("ge_imp3a_setup_arch()", 0); 106 + 107 + #ifdef CONFIG_PCI 108 + for_each_node_by_type(np, "pci") { 109 + if (of_device_is_compatible(np, "fsl,mpc8540-pci") || 110 + of_device_is_compatible(np, "fsl,mpc8548-pcie") || 111 + of_device_is_compatible(np, "fsl,p2020-pcie")) { 112 + struct resource rsrc; 113 + of_address_to_resource(np, 0, &rsrc); 114 + if ((rsrc.start & 0xfffff) == primary_phb_addr) 115 + fsl_add_bridge(np, 1); 116 + else 117 + fsl_add_bridge(np, 0); 118 + 119 + hose = pci_find_hose_for_OF_device(np); 120 + max = min(max, hose->dma_window_base_cur + 121 + hose->dma_window_size); 122 + } 123 + } 124 + #endif 125 + 126 + mpc85xx_smp_init(); 127 + 128 + #ifdef CONFIG_SWIOTLB 129 + if (memblock_end_of_DRAM() > max) { 130 + ppc_swiotlb_enable = 1; 131 + set_pci_dma_ops(&swiotlb_dma_ops); 132 + ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; 133 + } 134 + #endif 135 + 136 + /* Remap basic board registers */ 137 + regs = of_find_compatible_node(NULL, NULL, "ge,imp3a-fpga-regs"); 138 + if (regs) { 139 + imp3a_regs = of_iomap(regs, 0); 140 + if (imp3a_regs == NULL) 141 + printk(KERN_WARNING "Unable to map board registers\n"); 142 + of_node_put(regs); 143 + } 144 + 145 + #if defined(CONFIG_MMIO_NVRAM) 146 + mmio_nvram_init(); 147 + #endif 148 + 149 + printk(KERN_INFO "GE Intelligent Platforms IMP3A 3U cPCI SBC\n"); 150 + } 151 + 152 + /* Return the PCB revision */ 153 + static unsigned int ge_imp3a_get_pcb_rev(void) 154 + { 155 + unsigned int reg; 156 + 157 + reg = ioread16(imp3a_regs); 158 + return (reg >> 8) & 0xff; 159 + } 160 + 161 + /* Return the board (software) revision */ 162 + static unsigned int ge_imp3a_get_board_rev(void) 163 + { 164 + unsigned int reg; 165 + 166 + reg = ioread16(imp3a_regs + 0x2); 167 + return reg & 0xff; 168 + } 169 + 170 + /* Return the FPGA revision */ 171 + static unsigned int ge_imp3a_get_fpga_rev(void) 172 + { 173 + unsigned int reg; 174 + 175 + reg = ioread16(imp3a_regs + 0x2); 176 + return (reg >> 8) & 0xff; 177 + } 178 + 179 + /* Return compactPCI Geographical Address */ 180 + static unsigned int ge_imp3a_get_cpci_geo_addr(void) 181 + { 182 + unsigned int reg; 183 + 184 + reg = ioread16(imp3a_regs + 0x6); 185 + return (reg & 0x0f00) >> 8; 186 + } 187 + 188 + /* Return compactPCI System Controller Status */ 189 + static unsigned int ge_imp3a_get_cpci_is_syscon(void) 190 + { 191 + unsigned int reg; 192 + 193 + reg = ioread16(imp3a_regs + 0x6); 194 + return reg & (1 << 12); 195 + } 196 + 197 + static void ge_imp3a_show_cpuinfo(struct seq_file *m) 198 + { 199 + seq_printf(m, "Vendor\t\t: GE Intelligent Platforms\n"); 200 + 201 + seq_printf(m, "Revision\t: %u%c\n", ge_imp3a_get_pcb_rev(), 202 + ('A' + ge_imp3a_get_board_rev() - 1)); 203 + 204 + seq_printf(m, "FPGA Revision\t: %u\n", ge_imp3a_get_fpga_rev()); 205 + 206 + seq_printf(m, "cPCI geo. addr\t: %u\n", ge_imp3a_get_cpci_geo_addr()); 207 + 208 + seq_printf(m, "cPCI syscon\t: %s\n", 209 + ge_imp3a_get_cpci_is_syscon() ? "yes" : "no"); 210 + } 211 + 212 + /* 213 + * Called very early, device-tree isn't unflattened 214 + */ 215 + static int __init ge_imp3a_probe(void) 216 + { 217 + unsigned long root = of_get_flat_dt_root(); 218 + 219 + if (of_flat_dt_is_compatible(root, "ge,IMP3A")) { 220 + #ifdef CONFIG_PCI 221 + primary_phb_addr = 0x9000; 222 + #endif 223 + return 1; 224 + } 225 + 226 + return 0; 227 + } 228 + 229 + machine_device_initcall(ge_imp3a, mpc85xx_common_publish_devices); 230 + 231 + machine_arch_initcall(ge_imp3a, swiotlb_setup_bus_notifier); 232 + 233 + define_machine(ge_imp3a) { 234 + .name = "GE_IMP3A", 235 + .probe = ge_imp3a_probe, 236 + .setup_arch = ge_imp3a_setup_arch, 237 + .init_IRQ = ge_imp3a_pic_init, 238 + .show_cpuinfo = ge_imp3a_show_cpuinfo, 239 + #ifdef CONFIG_PCI 240 + .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 241 + #endif 242 + .get_irq = mpic_get_irq, 243 + .restart = fsl_rstcr_restart, 244 + .calibrate_decr = generic_calibrate_decr, 245 + .progress = udbg_progress, 246 + };
+28
drivers/gpio/gpio-ge.c
··· 162 162 } 163 163 } 164 164 165 + for_each_compatible_node(np, NULL, "ge,imp3a-gpio") { 166 + 167 + pr_debug("%s: Initialising GE GPIO\n", np->full_name); 168 + 169 + /* Allocate chip structure */ 170 + gef_gpio_chip = kzalloc(sizeof(*gef_gpio_chip), GFP_KERNEL); 171 + if (!gef_gpio_chip) { 172 + pr_err("%s: Unable to allocate structure\n", 173 + np->full_name); 174 + continue; 175 + } 176 + 177 + /* Setup pointers to chip functions */ 178 + gef_gpio_chip->gc.of_gpio_n_cells = 2; 179 + gef_gpio_chip->gc.ngpio = 16; 180 + gef_gpio_chip->gc.direction_input = gef_gpio_dir_in; 181 + gef_gpio_chip->gc.direction_output = gef_gpio_dir_out; 182 + gef_gpio_chip->gc.get = gef_gpio_get; 183 + gef_gpio_chip->gc.set = gef_gpio_set; 184 + 185 + /* This function adds a memory mapped GPIO chip */ 186 + retval = of_mm_gpiochip_add(np, gef_gpio_chip); 187 + if (retval) { 188 + kfree(gef_gpio_chip); 189 + pr_err("%s: Unable to add GPIO\n", np->full_name); 190 + } 191 + } 192 + 165 193 return 0; 166 194 }; 167 195 arch_initcall(gef_gpio_init);