ICP DAS calls LP-8x4x 'programmable automation controller'. It is an industrial computer based on PXA270 SoC. They ship it with a 2.6.19 kernel and proprietary kernel module and userspace library to access its industrial IO. This patch allows to boot a modern kernel with device tree on the device. It adds support for: * MMC card interface on PXA270 * USB 1.1 port on PXA270 * 2 NOR flash devices * 2 onboard ethernet Davicom DM9000 devices * 3 serial UART ports on PXA270 * front panel red LED * 64bit 1-wire system ID chip * 16 kiB EEPROM (reading) Support for these devices will be added in separate patches, since they are not currently supported by the kernel: * DS1302 RTC * 512kiB SRAM * FPGA irq chip * 3 built-in 16550A serial UART ports * industrial IO parallel bus * 10 position rotary switch * 8 pin DIP switch * 16 kiB EEPROM (writing) * serial interface for digital and analog industrial IO modules on parallel bus (all I-87xxx modules) * digital and analog industrial IO modules for parallel bus: ** I-8024 4 port analog output ** I-8041 32 port digital output ** I-8042 16 port digital output/16 port digital input Not supported for now: * VGA interface on PXA270 for lack of dts binding * the rest of parallel bus (I-8xxx) modules for lack of hardware * GPIO reset for lack of relevance (watchdog reset is working) Newer LP-8x4x devices have twice as much flash and a different partition structure otherwise being the same. When each device is provided with a correct device tree, all of them can be booted using the same kernel. Signed-off-by: Sergei Ianovich <ynvich@xxxxxxxxx> CC: Daniel Mack <zonque@xxxxxxxxx> CC: Robert Jarzmik <robert.jarzmik@xxxxxxx> CC: Arnd Bergmann <arnd@xxxxxxxx> --- v3..v4 * support for newer flavor w/ 96Mb flash memory * use 'partitions' subnodes * move device-specific tweaking to device .dts file and drop patches to pxa27x.dtsi v2..v3 * added extbus which maps synchronous, static, and variable-latency I/O (VLIO) interfaces of PXA27x SoC as suggested by Arnd Bergmann * map is placed into platform include * configured existing kernel drivers to support: - front panel LED using gpio-leds - 64bit 1-wire system ID chip using w1-gpio - 16 kiB EEPROM using at24 over i2c-gpio * number change (06/16 -> 08/21) v1..v2 * drop left-over extern declaration * use of_have_populated_dt() instead of a static variable * drop wildcards in compatible * drop machine-special machine description * number changed from 9 to 6 (dropped patches) .../devicetree/bindings/vendor-prefixes.txt | 1 + arch/arm/boot/dts/Makefile | 3 + arch/arm/boot/dts/pxa27x-lp8x4x-i105.dts | 50 ++++ arch/arm/boot/dts/pxa27x-lp8x4x.dts | 260 +++++++++++++++++++++ arch/arm/configs/lp8x4x_defconfig | 176 ++++++++++++++ 5 files changed, 490 insertions(+) create mode 100644 arch/arm/boot/dts/pxa27x-lp8x4x-i105.dts create mode 100644 arch/arm/boot/dts/pxa27x-lp8x4x.dts create mode 100644 arch/arm/configs/lp8x4x_defconfig diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 55df1d4..2f1b078 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -109,6 +109,7 @@ honeywell Honeywell hp Hewlett Packard i2se I2SE GmbH ibm International Business Machines (IBM) +icpdas ICP DAS CO., LTD. idt Integrated Device Technologies, Inc. iom Iomega Corporation img Imagination Technologies Ltd. diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 30bbc37..ed182ea 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -499,6 +499,9 @@ dtb-$(CONFIG_ARCH_ORION5X) += \ orion5x-rd88f5182-nas.dtb dtb-$(CONFIG_ARCH_PRIMA2) += \ prima2-evb.dtb +dtb-$(CONFIG_MACH_PXA27X_DT) += \ + pxa27x-lp8x4x.dtb \ + pxa27x-lp8x4x-i105.dtb dtb-$(CONFIG_ARCH_QCOM) += \ qcom-apq8064-cm-qs600.dtb \ qcom-apq8064-ifc6410.dtb \ diff --git a/arch/arm/boot/dts/pxa27x-lp8x4x-i105.dts b/arch/arm/boot/dts/pxa27x-lp8x4x-i105.dts new file mode 100644 index 0000000..903f5c7 --- /dev/null +++ b/arch/arm/boot/dts/pxa27x-lp8x4x-i105.dts @@ -0,0 +1,50 @@ +/* Device tree for ICP DAS LP-8x4x i105 flavor */ + +#include "pxa27x-lp8x4x.dts" + +/ { + extbus { + flash@0 { + compatible = "cfi-flash"; + reg = <0 0 0x04000000>; + bank-width = <4>; + device-width = <2>; + + partitions { + #address-cells = <1>; + #size-cells = <1>; + fs@0 { + label = "u-boot"; + reg = <0 0x40000>; + }; + fs@40000 { + label = "settings"; + reg = <0x40000 0x40000>; + }; + fs@80000 { + label = "device_tree"; + reg = <0x80000 0x40000>; + }; + fs@c0000 { + label = "kernel"; + reg = <0xc0000 0x2c0000>; + }; + fs@300000 { + label = "root_fs"; + reg = <0x380000 0x3c80000>; + }; + }; + }; + + flash@1 { + compatible = "cfi-flash"; + reg = <1 0x0 0x02000000>; + bank-width = <2>; + device-width = <1>; + partitions { + #address-cells = <1>; + #size-cells = <1>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/pxa27x-lp8x4x.dts b/arch/arm/boot/dts/pxa27x-lp8x4x.dts new file mode 100644 index 0000000..bbb5b75 --- /dev/null +++ b/arch/arm/boot/dts/pxa27x-lp8x4x.dts @@ -0,0 +1,260 @@ +/* Device tree for ICP DAS LP-8x4x */ +/dts-v1/; + +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include "pxa27x.dtsi" + +/ { + model = "ICP DAS LP-8x4x programmable automation controller"; + compatible = "marvell,pxa270"; + + aliases { + ethernet0 = ð0; + ethernet1 = ð1; + }; + + memory { + reg = <0xa0000000 0x08000000>; + }; + + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + vmmc: regulator@0 { + compatible = "regulator-fixed"; + reg = <0>; + regulator-name = "vmmc"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + }; + + pxabus { + pxairq: interrupt-controller@40d00000 { + marvell,intc-priority; + marvell,intc-nr-irqs = <34>; + }; + + gpio: gpio@40e00000 { + interrupts = <8>, <9>, <10>; + interrupt-names = "gpio0", "gpio1", "gpio_mux"; + }; + + uart@40100000 { + status = "okay"; + }; + + uart@40200000 { + status = "okay"; + }; + + uart@40700000 { + status = "okay"; + }; + + mmc0: mmc@41100000 { + vmmc-supply = <&vmmc>; + status = "okay"; + }; + + usb0: ohci@4c000000 { + marvell,port-mode = <3>; + marvell,oc-mode-perport; + marvell,enable-port1; + status = "okay"; + }; + + leds { + compatible = "gpio-leds"; + + status { + gpios = <&gpio 84 1>; + linux,default-trigger = "heartbeat"; + }; + }; + + i2c: i2c-gpio { + compatible = "i2c-gpio"; + gpios = <&gpio 22 0 /* sda */ + &gpio 12 0 /* scl */>; + i2c-gpio,delay-us = <1>; + i2c-gpio,timeout-ms = <1>; + #address-cells = <1>; + #size-cells = <0>; + + eeprom@50 { + compatible = "atmel,24c128"; + reg = <0x50>; + pagesize = <64>; + }; + }; + + w1: w1-gpio { + compatible = "w1-gpio"; + gpios = <&gpio 83 0>; + }; + }; + + extbus { + /* + * PXA27x synchrous, static and + * variable-latency IO interfaces + */ + compatible = "simple-bus"; + + #address-cells = <2>; /* first cell is nCS, second is address */ + #size-cells = <1>; + ranges = <0 0 0 0x04000000 + 1 0 0x04000000 0x04000000 + 2 0 0x08000000 0x04000000 + 3 0 0x0c000000 0x04000000 + 4 0 0x10000000 0x04000000 + 5 0 0x14000000 0x04000000>; + + flash@0 { + compatible = "cfi-flash"; + reg = <0 0 0x02000000>; + bank-width = <4>; + device-width = <2>; + + partitions { + #address-cells = <1>; + #size-cells = <1>; + fs@0 { + label = "u-boot"; + reg = <0 0x40000>; + }; + fs@40000 { + label = "settings"; + reg = <0x40000 0x40000>; + }; + fs@80000 { + label = "device_tree"; + reg = <0x80000 0x40000>; + }; + fs@c0000 { + label = "kernel"; + reg = <0xc0000 0x240000>; + }; + fs@300000 { + label = "root_fs"; + reg = <0x300000 0x1d00000>; + }; + }; + }; + + flash@1 { + compatible = "cfi-flash"; + reg = <1 0x0 0x01000000>; + bank-width = <2>; + device-width = <1>; + partitions { + #address-cells = <1>; + #size-cells = <1>; + }; + }; + + netio@3 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 3 0 0x02000000>; + interrupt-parent = <&gpio>; + + eth0: eth@0 { + compatible = "davicom,dm9000"; + reg = <0x0 0x2 + 0x4000 0x2>; + interrupts = <9 IRQ_TYPE_EDGE_RISING>; + status = "okay"; + }; + + eth1: eth@1000000 { + compatible = "davicom,dm9000"; + reg = <0x1000000 0x2 + 0x1004000 0x2>; + interrupts = <82 IRQ_TYPE_EDGE_RISING>; + status = "okay"; + }; + }; + + fpga@5 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 5 0x3000000 0x10000>; + interrupt-parent = <&fpgairq>; + + rtc@901c { + compatible = "dallas,rtc-ds1302"; + reg = <0x901c 0x1>; + status = "okay"; + }; + + sram@a000 { + compatible = "icpdas,sram-lp8x4x"; + reg = <0xa000 0x1000 + 0x901e 0x1>; + + partitions { + #address-cells = <1>; + #size-cells = <1>; + }; + }; + + fpgairq: irq@9006 { + compatible = "icpdas,irq-lp8x4x"; + reg = <0x9006 0x16>; + interrupt-parent = <&gpio>; + interrupts = <3 IRQ_TYPE_EDGE_FALLING>; + #interrupt-cells = <1>; + interrupt-controller; + status = "okay"; + }; + + uart@9050 { + compatible = "icpdas,uart-lp8x4x"; + reg = <0x9050 0x10 + 0x9030 0x02>; + interrupts = <13>; + status = "okay"; + }; + + uart@9060 { + compatible = "icpdas,uart-lp8x4x"; + reg = <0x9060 0x10 + 0x9032 0x02>; + interrupts = <14>; + status = "okay"; + }; + + uart@9070 { + compatible = "icpdas,uart-lp8x4x"; + reg = <0x9070 0x10 + 0x9034 0x02>; + interrupts = <15>; + status = "okay"; + }; + + backplane { + compatible = "icpdas,backplane-lp8x4x"; + reg = <0x0 0x2 + 0x1000 0x10 + 0x2000 0x10 + 0x3000 0x10 + 0x4000 0x10 + 0x5000 0x10 + 0x6000 0x10 + 0x7000 0x10 + 0x8000 0x10 + 0x9002 0x2 + 0x9004 0x2 + 0x9046 0x2>; + eeprom-gpios = <&gpio 4 0>; + }; + }; + }; +}; diff --git a/arch/arm/configs/lp8x4x_defconfig b/arch/arm/configs/lp8x4x_defconfig new file mode 100644 index 0000000..0eb87df --- /dev/null +++ b/arch/arm/configs/lp8x4x_defconfig @@ -0,0 +1,176 @@ +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_RCU_BOOST=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_UID16 is not set +# CONFIG_SHMEM is not set +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLOB=y +CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_LBDAF is not set +CONFIG_BLK_CMDLINE_PARSER=y +CONFIG_PARTITION_ADVANCED=y +# CONFIG_EFI_PARTITION is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_ARCH_PXA=y +CONFIG_MACH_PXA27X_DT=y +# CONFIG_ARM_THUMB is not set +CONFIG_PREEMPT=y +CONFIG_AEABI=y +# CONFIG_COMPACTION is not set +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="init=/sbin/init root=/dev/mmcblk0p1 rw rootfstype=ext4 console=ttyS0,115200 mem=128M rootwait" +# CONFIG_SUSPEND is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_BRIDGE=m +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +# CONFIG_WIRELESS is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_FW_LOADER is not set +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_SRAM_LP8X4X=y +CONFIG_PROC_DEVICETREE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=2 +CONFIG_EEPROM_AT24=m +CONFIG_LP8X4X_BUS=m +CONFIG_SCSI=y +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +CONFIG_BONDING=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_TUN=m +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_CADENCE is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +CONFIG_DM9000=y +CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL=y +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_PPP=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPPOE=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +# CONFIG_WLAN is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=800 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=600 +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +# CONFIG_DEVKMEM is not set +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=40 +CONFIG_SERIAL_8250_RUNTIME_UARTS=40 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_PXA=y +CONFIG_SERIAL_8250_LP8X4X=m +CONFIG_HW_RANDOM=y +CONFIG_I2C=m +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_GPIO=m +CONFIG_W1=m +CONFIG_W1_MASTER_GPIO=m +CONFIG_W1_SLAVE_SMEM=m +# CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +CONFIG_SA1100_WATCHDOG=m +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_FB=y +CONFIG_FB_PXA=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LOGO=y +CONFIG_USB=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_STORAGE=m +CONFIG_USB_SERIAL=m +CONFIG_MMC=y +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1302=y +CONFIG_RTC_DRV_PXA=m +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y +CONFIG_PXA_DMA=y +CONFIG_EXT2_FS=m +CONFIG_EXT3_FS=y +CONFIG_EXT4_FS=y +CONFIG_REISERFS_FS=m +CONFIG_ISO9660_FS=m +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=m +CONFIG_NTFS_RW=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +CONFIG_CODA_FS=m +CONFIG_NLS_DEFAULT="cp855" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_855=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +CONFIG_PRINTK_TIME=y -- 2.6.2 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html