davinci: Add MityDSP-L138/MityARM-1808 SOM support
Subsystems (3)
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.
---
Changes since v2 patch was submitted:
- Fixed compiler warnings inserted by pr_* statement cleanup attempt in v2. Also simplify pr_* statements per advice provided.
- Updated comment block to indicate proper regulator device support.
- removed mityomapl138_defconfig file
- updated da8xx_omapl_defconfig file to support mityomapl138 machine.
* Needed to add JFFS2, MTD, and NAND support as default boot configuration uses NAND mounted root filesystem.
* Added TPS65023 regulator support.
* process of rerunning make menuconfig altered defconfig a bunch due to migration from 2.32 kernel to 2.35 kernel. I don't believe I altered any other required features, but it might be wise if someone with a da850 or da830 could verify no issues.
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)
arch/arm/configs/da8xx_omapl_defconfig +248 -43
@@ -1,13 +1,15 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.32-rc5 -# Thu Oct 22 12:19:19 2009 +# Linux kernel version: 2.6.35-rc3 +# Tue Jul 20 08:30:23 2010 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_GENERIC_GPIO=y CONFIG_GENERIC_TIME=y +# CONFIG_ARCH_USES_GETTIMEOFFSET is not set CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_HAVE_PROC_CPU=y CONFIG_GENERIC_HARDIRQS=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -20,6 +22,7 @@ CONFIG_ARCH_HAS_CPUFREQ=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ZONE_DMA=y +CONFIG_NEED_DMA_MAP_STATE=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -32,8 +35,16 @@ CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set # CONFIG_SWAP is not set CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y
@@ -48,6 +59,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y # CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=32 # CONFIG_RCU_FANOUT_EXACT is not set
@@ -55,11 +67,6 @@ CONFIG_RCU_FANOUT=32 CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=14 -CONFIG_GROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_USER_SCHED=y -# CONFIG_CGROUP_SCHED is not set # CONFIG_CGROUPS is not set # CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_RELAY is not set
@@ -69,6 +76,7 @@ CONFIG_INITRAMFS_SOURCE="" CONFIG_RD_GZIP=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y
@@ -90,10 +98,14 @@ CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y # # Kernel Performance Events And Counters # +# CONFIG_PERF_EVENTS is not set +# CONFIG_PERF_COUNTERS is not set CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLUB_DEBUG=y CONFIG_COMPAT_BRK=y
@@ -131,14 +143,41 @@ CONFIG_LBDAF=y # IO Schedulers # CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y # CONFIG_IOSCHED_DEADLINE is not set # CONFIG_IOSCHED_CFQ is not set -CONFIG_DEFAULT_AS=y # CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +# CONFIG_INLINE_SPIN_UNLOCK is not set +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +# CONFIG_INLINE_READ_UNLOCK is not set +# CONFIG_INLINE_READ_UNLOCK_BH is not set +# CONFIG_INLINE_READ_UNLOCK_IRQ is not set +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +# CONFIG_INLINE_WRITE_UNLOCK is not set +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set # CONFIG_FREEZER is not set #
@@ -149,8 +188,11 @@ CONFIG_MMU=y # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_REALVIEW is not set # CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_VEXPRESS is not set # CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_BCMRING is not set # CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CNS3XXX is not set # CONFIG_ARCH_GEMINI is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_EP93XX is not set
@@ -159,7 +201,6 @@ CONFIG_MMU=y # CONFIG_ARCH_STMP3XXX is not set # CONFIG_ARCH_NETX is not set # CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_NOMADIK is not set # CONFIG_ARCH_IOP13XX is not set # CONFIG_ARCH_IOP32X is not set # CONFIG_ARCH_IOP33X is not set
@@ -167,6 +208,7 @@ CONFIG_MMU=y # CONFIG_ARCH_IXP2000 is not set # CONFIG_ARCH_IXP4XX is not set # CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_DOVE is not set # CONFIG_ARCH_KIRKWOOD is not set # CONFIG_ARCH_LOKI is not set # CONFIG_ARCH_MV78XX0 is not set
@@ -175,20 +217,27 @@ CONFIG_MMU=y # CONFIG_ARCH_KS8695 is not set # CONFIG_ARCH_NS9XXX is not set # CONFIG_ARCH_W90X900 is not set +# CONFIG_ARCH_NUC93X is not set # CONFIG_ARCH_PNX4008 is not set # CONFIG_ARCH_PXA is not set # CONFIG_ARCH_MSM is not set +# CONFIG_ARCH_SHMOBILE is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C2410 is not set # CONFIG_ARCH_S3C64XX is not set -# CONFIG_ARCH_S5PC1XX is not set +# CONFIG_ARCH_S5P6440 is not set +# CONFIG_ARCH_S5P6442 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_LH7A40X is not set # CONFIG_ARCH_U300 is not set +# CONFIG_ARCH_U8500 is not set +# CONFIG_ARCH_NOMADIK is not set CONFIG_ARCH_DAVINCI=y # CONFIG_ARCH_OMAP is not set -# CONFIG_ARCH_BCMRING is not set +# CONFIG_PLAT_SPEAR is not set CONFIG_CP_INTC=y #
@@ -205,18 +254,18 @@ CONFIG_ARCH_DAVINCI_DA830=y CONFIG_ARCH_DAVINCI_DA850=y CONFIG_ARCH_DAVINCI_DA8XX=y # CONFIG_ARCH_DAVINCI_DM365 is not set +# CONFIG_ARCH_DAVINCI_TNETV107X is not set # # DaVinci Board Type # CONFIG_MACH_DAVINCI_DA830_EVM=y -CONFIG_DA830_UI=y CONFIG_DA830_UI_LCD=y # CONFIG_DA830_UI_NAND is not set CONFIG_MACH_DAVINCI_DA850_EVM=y -CONFIG_DA850_UI_EXP=y CONFIG_DA850_UI_NONE=y # CONFIG_DA850_UI_RMII is not set +CONFIG_MACH_MITYOMAPL138=y CONFIG_DAVINCI_MUX=y # CONFIG_DAVINCI_MUX_DEBUG is not set # CONFIG_DAVINCI_MUX_WARNINGS is not set
@@ -270,6 +319,7 @@ CONFIG_PREEMPT=y CONFIG_HZ=100 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set # CONFIG_HIGHMEM is not set
@@ -280,13 +330,11 @@ CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_PAGEFLAGS_EXTENDED=y -CONFIG_SPLIT_PTLOCK_CPUS=4096 +CONFIG_SPLIT_PTLOCK_CPUS=999999 # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y -CONFIG_HAVE_MLOCK=y -CONFIG_HAVE_MLOCKED_PAGE_BIT=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_LEDS=y
@@ -354,7 +402,6 @@ CONFIG_NET=y # Networking options # CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y CONFIG_XFRM=y # CONFIG_XFRM_USER is not set
@@ -404,6 +451,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SIT_6RD is not set CONFIG_IPV6_NDISC_NODETYPE=y # CONFIG_IPV6_TUNNEL is not set # CONFIG_IPV6_MULTIPLE_TABLES is not set
@@ -440,6 +488,7 @@ CONFIG_NETFILTER_ADVANCED=y # CONFIG_RDS is not set # CONFIG_TIPC is not set # CONFIG_ATM is not set +# CONFIG_L2TP is not set # CONFIG_BRIDGE is not set # CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set
@@ -465,10 +514,21 @@ CONFIG_NETFILTER_ADVANCED=y # CONFIG_IRDA is not set # CONFIG_BT is not set # CONFIG_AF_RXRPC is not set -# CONFIG_WIRELESS is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_LIB80211 is not set + +# +# CFG80211 needs to be enabled for MAC80211 +# + +# +# Some wireless drivers require a rate control algorithm +# # CONFIG_WIMAX is not set # CONFIG_RFKILL is not set # CONFIG_NET_9P is not set +# CONFIG_CAIF is not set # # Device Drivers
@@ -486,12 +546,110 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set # CONFIG_CONNECTOR is not set -# CONFIG_MTD is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=y +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_CFI_INTELEXT is not set +# CONFIG_MTD_CFI_AMDSTD is not set +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND_ECC=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018 +# CONFIG_MTD_NAND_GPIO is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +CONFIG_MTD_NAND_DAVINCI=y +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_CRYPTOLOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# # CONFIG_BLK_DEV_NBD is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=1
@@ -501,9 +659,12 @@ CONFIG_BLK_DEV_RAM_SIZE=32768 # CONFIG_ATA_OVER_ETH is not set # CONFIG_MG_DISK is not set CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set # CONFIG_ICS932S401 is not set # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_ISL29003 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_DS1682 is not set # CONFIG_C2PORT is not set #
@@ -519,6 +680,7 @@ CONFIG_HAVE_IDE=y # # SCSI device support # +CONFIG_SCSI_MOD=m # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=m CONFIG_SCSI_DMA=y
@@ -583,6 +745,7 @@ CONFIG_LXT_PHY=y # CONFIG_NATIONAL_PHY is not set # CONFIG_STE10XP is not set CONFIG_LSI_ET1011C_PHY=y +# CONFIG_MICREL_PHY is not set # CONFIG_FIXED_PHY is not set # CONFIG_MDIO_BITBANG is not set CONFIG_NET_ETHERNET=y
@@ -608,8 +771,7 @@ CONFIG_TI_DAVINCI_EMAC=y # CONFIG_NETDEV_1000 is not set # CONFIG_NETDEV_10000 is not set CONFIG_WLAN=y -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +# CONFIG_HOSTAP is not set # # Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -631,6 +793,7 @@ CONFIG_NET_POLL_CONTROLLER=y CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set # # Userland interfaces
@@ -652,6 +815,7 @@ CONFIG_KEYBOARD_ATKBD=m # CONFIG_QT2160 is not set # CONFIG_KEYBOARD_LKKBD is not set CONFIG_KEYBOARD_GPIO=y +# CONFIG_KEYBOARD_TCA6416 is not set # CONFIG_KEYBOARD_MATRIX is not set # CONFIG_KEYBOARD_MAX7359 is not set # CONFIG_KEYBOARD_NEWTON is not set
@@ -665,6 +829,8 @@ CONFIG_KEYBOARD_XTKBD=m CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_AD7879_I2C is not set # CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set # CONFIG_TOUCHSCREEN_EETI is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set # CONFIG_TOUCHSCREEN_GUNZE is not set
@@ -680,6 +846,7 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set # CONFIG_TOUCHSCREEN_TSC2007 is not set # CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_INPUT_MISC is not set #
@@ -689,6 +856,7 @@ CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set # CONFIG_GAMEPORT is not set #
@@ -701,6 +869,7 @@ CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set CONFIG_DEVKMEM=y # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # # Serial drivers
@@ -716,6 +885,9 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=3 # CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set CONFIG_UNIX98_PTYS=y # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set CONFIG_LEGACY_PTYS=y
@@ -726,6 +898,7 @@ CONFIG_HW_RANDOM=m # CONFIG_R3964 is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set +# CONFIG_RAMOOPS is not set CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y
@@ -743,7 +916,9 @@ CONFIG_I2C_DAVINCI=y # CONFIG_I2C_DESIGNWARE is not set # CONFIG_I2C_GPIO is not set # CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set # # External I2C/SMBus adapter drivers
@@ -754,18 +929,10 @@ CONFIG_I2C_DAVINCI=y # # Other I2C/SMBus bus drivers # -# CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_STUB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_TSL2550 is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set # CONFIG_SPI is not set #
@@ -780,13 +947,17 @@ CONFIG_GPIOLIB=y # # Memory mapped GPIO expanders: # +# CONFIG_GPIO_IT8761E is not set # # I2C GPIO expanders: # +# CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX732X is not set CONFIG_GPIO_PCA953X=y +# CONFIG_GPIO_PCA953X_IRQ is not set CONFIG_GPIO_PCF857X=y +# CONFIG_GPIO_ADP5588 is not set # # PCI GPIO expanders:
@@ -799,6 +970,10 @@ CONFIG_GPIO_PCF857X=y # # AC97 GPIO expanders: # + +# +# MODULbus GPIO expanders: +# # CONFIG_W1 is not set # CONFIG_POWER_SUPPLY is not set # CONFIG_HWMON is not set
@@ -811,42 +986,50 @@ CONFIG_WATCHDOG=y # # CONFIG_SOFT_WATCHDOG is not set # CONFIG_DAVINCI_WATCHDOG is not set +# CONFIG_MAX63XX_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y # # Sonics Silicon Backplane # # CONFIG_SSB is not set - -# -# Multifunction device drivers -# +CONFIG_MFD_SUPPORT=y # CONFIG_MFD_CORE is not set +# CONFIG_MFD_88PM860X is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_ASIC3 is not set # CONFIG_HTC_EGPIO is not set # CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set # CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set # CONFIG_TWL4030_CORE is not set +# CONFIG_MFD_TC35892 is not set # CONFIG_MFD_TMIO is not set # CONFIG_MFD_T7L66XB is not set # CONFIG_MFD_TC6387XB is not set # CONFIG_MFD_TC6393XB is not set # CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM831X is not set # CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set # CONFIG_MFD_PCF50633 is not set -# CONFIG_AB3100_CORE is not set +# CONFIG_ABX500_CORE is not set CONFIG_REGULATOR=y # CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_DUMMY is not set # CONFIG_REGULATOR_FIXED_VOLTAGE is not set # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set # CONFIG_REGULATOR_BQ24022 is not set # CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_TPS65023 is not set +CONFIG_REGULATOR_TPS65023=y CONFIG_REGULATOR_TPS6507X=y # CONFIG_MEDIA_SUPPORT is not set
@@ -950,10 +1133,6 @@ CONFIG_RTC_LIB=y # CONFIG_DMADEVICES is not set # CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set - -# -# TI VLYNQ -# # CONFIG_STAGING is not set #
@@ -1033,6 +1212,22 @@ CONFIG_MISC_FILESYSTEMS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +# CONFIG_LOGFS is not set CONFIG_CRAMFS=y # CONFIG_SQUASHFS is not set # CONFIG_VXFS_FS is not set
@@ -1062,6 +1257,7 @@ CONFIG_SUNRPC=y # CONFIG_RPCSEC_GSS_SPKM3 is not set CONFIG_SMB_FS=m # CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set
@@ -1184,6 +1380,7 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set # CONFIG_FAULT_INJECTION is not set # CONFIG_LATENCYTOP is not set # CONFIG_SYSCTL_SYSCALL_CHECK is not set
@@ -1205,6 +1402,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_WORKQUEUE_TRACER is not set # CONFIG_BLK_DEV_IO_TRACE is not set # CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set
@@ -1213,6 +1411,7 @@ CONFIG_DEBUG_USER=y CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_OC_ETM is not set # # Security options
@@ -1220,7 +1419,11 @@ CONFIG_DEBUG_ERRORS=y # CONFIG_KEYS is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" CONFIG_CRYPTO=y #
@@ -1323,9 +1526,11 @@ CONFIG_CRC32=y # CONFIG_CRC7 is not set # CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y CONFIG_DECOMPRESS_GZIP=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y CONFIG_NLATTR=y +CONFIG_GENERIC_ATOMIC64=y
arch/arm/include/asm/setup.h +5 -0
@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; }; +/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101 +struct tag {struct tag_header hdr;union {
arch/arm/mach-davinci/Kconfig +7 -0
@@ -178,6 +178,13 @@ config DA850_UI_RMII endchoice +config MACH_MITYOMAPL138 + bool "Critical Link MityOMAPL138 SoM" + depends on ARCH_DAVINCI_DA850 + select GPIO_PCA953X + help + Say Y here to select the Critical Link MityOMAP-L138 System on Module. + config MACH_TNETV107X bool "TI TNETV107X Reference Platform" default ARCH_DAVINCI_TNETV107X
arch/arm/mach-davinci/Makefile +1 -0
@@ -32,6 +32,7 @@ obj-$(CONFIG_MACH_DAVINCI_DM6467_EVM) += board-dm646x-evm.o cdce949.o obj-$(CONFIG_MACH_DAVINCI_DM365_EVM) += board-dm365-evm.o obj-$(CONFIG_MACH_DAVINCI_DA830_EVM) += board-da830-evm.o obj-$(CONFIG_MACH_DAVINCI_DA850_EVM) += board-da850-evm.o +obj-$(CONFIG_MACH_MITYOMAPL138) += board-mityomapl138.o obj-$(CONFIG_MACH_TNETV107X) += board-tnetv107x-evm.o # Power Management
arch/arm/mach-davinci/board-mityomapl138.c new file +793 -0
793 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +125 -0
125 lines not on this page · raw message
arch/arm/mach-davinci/include/mach/da8xx.h +1 -0
@@ -41,6 +41,7 @@ extern void __iomem *da8xx_syscfg1_base;#define DA8XX_SYSCFG0_BASE (IO_PHYS + 0x14000)#define DA8XX_SYSCFG0_VIRT (x) (da8xx_syscfg0_base + (x))#define DA8XX_JTAG_ID_REG 0x18 +#define DA8XX_MSTPRI2_REG 0x118#define DA8XX_CFGCHIP0_REG 0x17c#define DA8XX_CFGCHIP2_REG 0x184#define DA8XX_CFGCHIP3_REG 0x188
arch/arm/mach-davinci/include/mach/uncompress.h +1 -0
@@ -88,6 +88,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* DA8xx boards */ DEBUG_LL_DA8XX (davinci_da830_evm,2 );DEBUG_LL_DA8XX (davinci_da850_evm,2 ); +DEBUG_LL_DA8XX (mityomapl138,1 );/* TNETV107x boards */ DEBUG_LL_TNETV107X (tnetv107x,1 );
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)
[...]
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 12 lines
arch/arm/include/asm/setup.h +4
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; }; +/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101
Instead of naming this so generic, can you call this ATAG_MITYDSPL138 or something like that?
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Quoted 9 lines
arch/arm/include/asm/setup.h +1
-0+struct tag {struct tag_header hdr;union {arch/arm/mach-davinci/Kconfig +0
-0
arch/arm/mach-davinci/Kconfig config DA850_UI_RMII · line 186
Quoted 9 lines
arch/arm/mach-davinci/Kconfig +6
-0@@ -178,6 +178,13 @@ config DA850_UI_RMII endchoice +config MACH_MITYOMAPL138 + bool "Critical Link MityOMAPL138 SoM" + depends on ARCH_DAVINCI_DA850 + select GPIO_PCA953X + help + Say Y here to select the Critical Link MityOMAP-L138 System on Module.
Here you can include some pointers on where more information about the board can be found.
Quoted 39 lines
arch/arm/mach-davinci/Kconfig +1
-0+ config MACH_TNETV107X bool "TI TNETV107X Reference Platform" default ARCH_DAVINCI_TNETV107Xarch/arm/mach-davinci/Makefile +1
-0@@ -32,6 +32,7 @@ obj-$(CONFIG_MACH_DAVINCI_DM6467_EVM) += board-dm646x-evm.o cdce949.o obj-$(CONFIG_MACH_DAVINCI_DM365_EVM) += board-dm365-evm.o obj-$(CONFIG_MACH_DAVINCI_DA830_EVM) += board-da830-evm.o obj-$(CONFIG_MACH_DAVINCI_DA850_EVM) += board-da850-evm.o +obj-$(CONFIG_MACH_MITYOMAPL138) += board-mityomapl138.o obj-$(CONFIG_MACH_TNETV107X) += board-tnetv107x-evm.o # Power Managementarch/arm/mach-davinci/board-mityomapl138.c new file +17
-0@@ -0,0 +1,793 @@ +/* +* Critical Link MityOMAP-L138 SoM +* +* Copyright (C) 2010 Critical Link Incorporated - http://www.criticallink.com +* +* Derived from board-da850-evm.c +* Original Copyrights follow: +* +* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ +* +* Derived from: arch/arm/mach-davinci/board-da830-evm.c +* Original Copyrights follow: +* +* 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under +* the terms of the GNU General Public License version 2. This program +* is licensed "as is" without any warranty of any kind, whether express +* or implied.
arch/arm/mach-davinci/board-mityomapl138.c line 27
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+*/ + +#define pr_fmt (fmt) "%s: " fmt, __func__ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/console.h> +#include <linux/i2c.h> +#include <linux/i2c/at24.h> +#include <linux/i2c/pca953x.h>
You do not seem to have defined platform data for pca953.
I guess the include here and the config select above are copy-paste errors?
arch/arm/mach-davinci/board-mityomapl138.c line 33
Quoted 6 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+#include <linux/gpio.h> +#include <linux/platform_device.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/nand.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/physmap.h>
I didn't see any NOR devices registered?
Quoted 44 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +44
-0+#include <linux/regulator/machine.h> +#include <linux/spi/spi.h> +#include <linux/spi/flash.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/setup.h> +#include <mach/cp_intc.h> +#include <mach/da8xx.h> +#include <mach/nand.h> +#include <mach/mux.h> +#include <mach/cb-mityomapl138.h> +#include <mach/spi.h> +#include <mach/irqs.h> + +static struct tag_peripherals peripheral_config = { + .Version =PERIPHERALS_VERSION , + .Manufacturer ="Critical Link" , + .ENETConfig.EnetConfig =ENET_CONFIG_MII , + .ENETConfig.MACAddr = {0x00 ,0x50 ,0xC2 ,0x49 ,0xDF ,0xFF }, + .UARTConfig[0 ] = { + .Enable =0 , + .IsConsole =0 , + .Baud =115200 , + }, + .UARTConfig[1 ] = { + .Enable =1 , + .IsConsole =1 , + .Baud =115200 , + }, + .UARTConfig[2 ] = { + .Enable =0 , + .IsConsole =0 , + .Baud =115200 , + }, + .SPIConfig[0 ] = { + .Enable =0 , + .CLKOut =0 , + .CSEnable = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, + .ENAEnable =0 , + .CLKRate =0 , + }, + .SPIConfig[1 ] = { + .Enable =1 ,
arch/arm/mach-davinci/board-mityomapl138.c line 87
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+ .CLKOut = 1, + .CSEnable = { 1, 0, 0, 0, 0, 0, 0, 0}, + .ENAEnable = 0, + .CLKRate = 30000000, + }, + .LCDConfig = { + .Enable =0 , + .PanelName = "", + } +};
Do we really need the camel case naming?
[...]
arch/arm/mach-davinci/board-mityomapl138.c line 153
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +4
-0+ +static __init void mityomapl138_setup_nand (void ) +{ +
Extra line here..
Quoted 30 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +30
-0+platform_add_devices (mityomapl138_devices, +ARRAY_SIZE (mityomapl138_devices)); +} + +static int mityomapl138_mmc_get_ro (int index) +{ +return gpio_get_value (DA850_MMCSD_WP_PIN ); +} + +static int mityomapl138_mmc_get_cd (int index) +{ +return !gpio_get_value (DA850_MMCSD_CD_PIN ); +} + +static struct davinci_mmc_config da850_mmc_config = { + .get_ro = mityomapl138_mmc_get_ro, + .get_cd = mityomapl138_mmc_get_cd, + .wires =4 , + .max_freq =50000000 , + .caps =MMC_CAP_MMC_HIGHSPEED |MMC_CAP_SD_HIGHSPEED , + .version =MMC_CTLR_VERSION_2 , +}; + +static __init void mityomapl138_setup_mmc (void ) +{ +int ret; + + ret =davinci_cfg_reg_list (da850_mmcsd0_pins); +if (ret) +pr_warning ("mmcsd0 mux setup failed: %d\n" ,ret);
arch/arm/mach-davinci/board-mityomapl138.c line 193
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+ + ret =gpio_request (DA850_MMCSD_CD_PIN ,"MMC CD\n" ); +if (ret) +pr_warning ("can not open GPIO %d\n" ,DA850_MMCSD_CD_PIN ); +gpio_direction_input (DA850_MMCSD_CD_PIN ); + + ret =gpio_request (DA850_MMCSD_WP_PIN ,"MMC WP\n" ); +if (ret) +pr_warning ("can not open GPIO %d\n" ,DA850_MMCSD_WP_PIN ); +gpio_direction_input (DA850_MMCSD_WP_PIN );
Its not nice to go ahead and operate on the GPIO even though the request call fails. I can see the EVM code does it this way, but that code needs fixing too.
arch/arm/mach-davinci/board-mityomapl138.c line 200
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +7
-0+ + ret =da8xx_register_mmcsd0 (&da850_mmc_config); +if (ret) +pr_warning ("mmcsd0 registration failed: %d\n" , ret); +} + +
Extra line here..
Quoted 52 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +52
-0+static struct davinci_uart_config mityomapl138_uart_config__initdata = { + .enabled_uarts =0x7 , +}; + +static int __init mityomapl138_config_emac (void ) +{ +void __iomem *cfg_chip3_base; +int ret; +u32 val; +struct davinci_soc_info *soc_info = &davinci_soc_info; +u8 rmii_en =0 ; + +switch (peripheral_config.ENETConfig.EnetConfig) { +case ENET_CONFIG_RMII : + soc_info->emac_pdata->rmii_en =1 ; + rmii_en =1 ; +break ; +case ENET_CONFIG_MII : + soc_info->emac_pdata->rmii_en =0 ; + rmii_en =0 ; +break ; +case ENET_CONFIG_NONE : +default : +pr_info ("No Ethernet PHY Selected, EMAC disabled\n" ); +return 0 ;/* no enet... */ +break ; + } +memcpy (&soc_info->emac_pdata->mac_addr[0 ], + &peripheral_config.ENETConfig.MACAddr[0 ],6 ); + + cfg_chip3_base =DA8XX_SYSCFG0_VIRT (DA8XX_CFGCHIP3_REG ); + + val =__raw_readl (cfg_chip3_base); + +if (rmii_en) { + val |=BIT (8 ); + ret =davinci_cfg_reg_list (da850_rmii_pins); +pr_info ("RMII PHY configured, MII PHY will not be functional\n" ); + }else { + val &= ~BIT (8 ); + ret =davinci_cfg_reg_list (da850_cpgmac_pins); +pr_info ("MII PHY configured, RMII PHY will not be functional\n" ); + } + +if (ret) +pr_warning ("cpgmac/rmii mux setup failed: %d\n" , ret); + +/* configure the CFGCHIP3 register for RMII or MII */ +__raw_writel (val, cfg_chip3_base); + + soc_info->emac_pdata->phy_mask = peripheral_config.ENETConfig.PHYMask ? + peripheral_config.ENETConfig.PHYMask :1 ;
arch/arm/mach-davinci/board-mityomapl138.c line 262
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+pr_info ("setting phy_mask to %x\n" , soc_info->emac_pdata->phy_mask); + soc_info->emac_pdata->mdio_max_freq =MITYOMAPL138_MDIO_FREQUENCY ; + + ret =da8xx_register_emac (); +if (ret) +pr_warning ("emac registration failed: %d\n" , ret); + +return 0 ; +} +device_initcall (mityomapl138_config_emac);
Using device_initcall here is not good. It will get called on other boards as well just because support for this board is built into the kernel. So, at a minimum, there should be check to bail out if machine != mityomapl138.
Better still, please re-evaluate whether you really need a device_initcall() here. On the EVM this method was chosen since the Ethernet init was tied to UI card detection. You should aim to eliminate it on this board.
arch/arm/mach-davinci/board-mityomapl138.c line 267
Quoted 5 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +5
-0+ +static struct davinci_i2c_platform_data mityomap_i2c_0_pdata = { + .bus_freq =100 ,/* kHz */ + .bus_delay =0 ,/* usec */ +};
This is exactly the pdata that davinci I2C driver uses by default, so you can save a few bytes and a few lines of code by passing NULL pdata.
[...]
Quoted 118 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +118
-0+ +static struct davinci_spi_platform_data mityomap_spi1_pdata = { + .version =SPI_VERSION_2 , + .num_chipselect =1 , + .wdelay =0 , + .odd_parity =0 , + .parity_enable =0 , + .wait_enable =0 , + .timer_disable =0 , + .clk_internal =1 , + .cs_hold =1 , + .intr_level =0 , + .poll_mode =1 , + .use_dma =0 , + .c2tdelay =8 , + .t2cdelay =8 , +}; + +static struct resource mityomap_spi1_resources[] = { + [0 ] = { + .start =0x01F0E000 , + .end =0x01F0EFFF , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =IRQ_DA8XX_SPINT1 , + .start =IRQ_DA8XX_SPINT1 , + .flags =IORESOURCE_IRQ , + }, + [2 ] = { + .start =EDMA_CTLR_CHAN (0 ,18 ), + .end =EDMA_CTLR_CHAN (0 ,18 ), + .flags =IORESOURCE_DMA , + }, + [3 ] = { + .start =EDMA_CTLR_CHAN (0 ,19 ), + .end =EDMA_CTLR_CHAN (0 ,19 ), + .flags =IORESOURCE_DMA , + }, + [4 ] = { + .start =1 , + .end =1 , + .flags =IORESOURCE_DMA , + }, +}; + +static struct platform_device mityomap_spi1_device = { + .name ="spi_davinci" , + .id =1 , + .dev = { + .platform_data = &mityomap_spi1_pdata, + }, + .num_resources =ARRAY_SIZE (mityomap_spi1_resources), + .resource = mityomap_spi1_resources, +}; + +/***************************************************************************** +* SPI Devices: +* SPI1_CS0: 8M Flash ST-M25P64-VME6G +****************************************************************************/ +static struct mtd_partition spi_flash_partitions[] = { + [0 ] = { + .name ="UBL" , + .offset =0 , + .size =SZ_64K , + .mask_flags =MTD_WRITEABLE + }, + [1 ] = { + .name ="U-Boot" , + .offset =MTDPART_OFS_APPEND , + .size =SZ_512K , + .mask_flags =0 , + }, + [2 ] = { + .name ="Spare" , + .offset =MTDPART_OFS_APPEND , + .size =MTDPART_SIZ_FULL , + .mask_flags =0 , + }, +}; + +static struct flash_platform_data mityomap_spi_flash_data = { + .name ="m25p80" , + .parts = spi_flash_partitions, + .nr_parts =ARRAY_SIZE (spi_flash_partitions), + .type ="m25p64" , +}; + +static struct spi_board_info mityomap_spi_flash_info[] = { + { + .modalias ="m25p80" , + .platform_data = &mityomap_spi_flash_data, + .mode =SPI_MODE_0 , + .max_speed_hz =30000000 , + .bus_num =1 , + .chip_select =0 , + }, +}; + +void __init mityomap_init_spi1 (unsigned chipselect_mask, +struct spi_board_info *info,unsigned len) +{ +int ret; + ret =platform_device_register (&mityomap_spi1_device); +if (ret) +pr_warning ("failed to register spi device : %d\n" , ret); + + ret =spi_register_board_info (info, len); +if (ret) +pr_warning ("failed to register board info : %d\n" , ret); +} + +/* davinci da850 evm audio machine driver */ +static u8 da850_iis_serializer_direction[] = { +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,
arch/arm/mach-davinci/board-mityomapl138.c line 535
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+}; + +static struct snd_platform_data mityomapl138_snd_data = { + .tx_dma_offset =0x2000 , + .rx_dma_offset =0x2000 , + .op_mode =DAVINCI_MCASP_IIS_MODE , + .num_serializer =ARRAY_SIZE (da850_iis_serializer_direction), + .tdm_slots =0 , + .serial_dir = da850_iis_serializer_direction, + .eventq_no =EVENTQ_1 ,
This field was recently changed in a patch[1] which is already queued for ASoC merge for 2.6.36. You will need to base this on that change. When you do that please note the dependency below the '---' in the patch so maintainer knows the order in which to commit patches.
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +4
-0+ .version = MCASP_VERSION_2, + .txnumevt = 0, + .rxnumevt = 0, +};
arch/arm/mach-davinci/board-mityomapl138.c line 549
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+ +short mityomapl138_mcasp_pins[24 ]__initdata = { +DA850_AHCLKX ,DA850_ACLKX ,DA850_AFSX , +DA850_AHCLKR ,DA850_ACLKR ,DA850_AFSR , +DA850_AMUTE , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1
Do we really need all these -1s?
arch/arm/mach-davinci/board-mityomapl138.c line 557
Quoted 8 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +8
-0+}; + +static __init int mityomapl138_setup_mcasp (void ) +{ +int ret; + + mityomapl138_mcasp_pins[7 +0 ] =DA850_AXR_13 ; + da850_iis_serializer_direction[12 ] =TX_MODE ;
Why not stick these into the static initialization?
arch/arm/mach-davinci/board-mityomapl138.c line 564
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +7
-0+ + ret =davinci_cfg_reg_list (mityomapl138_mcasp_pins); +if (ret) +pr_warning ("mcasp mux setup failed: %d\n" , ret); + + mityomapl138_snd_data.tdm_slots =2 ; + mityomapl138_snd_data.txnumevt =1 ;
And the same for these?
Quoted 59 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +59
-0+ +da8xx_register_mcasp (0 , &mityomapl138_snd_data); + +return ret; +} + +static const struct display_panel disp_panel = { +QVGA , +16 , +16 , +COLOR_ACTIVE , +}; + +static struct lcd_ctrl_config lcd_cfg = { + &disp_panel, + .ac_bias =255 , + .ac_bias_intrpt =0 , + .dma_burst_sz =16 , + .bpp =16 , + .fdd =255 , + .tft_alt_mode =0 , + .stn_565_mode =0 , + .mono_8bit_mode =0 , + .invert_line_clock =0 , + .invert_frm_clock =0 , + .sync_edge =0 , + .sync_ctrl =1 , + .raster_order =0 , +}; + +static struct da8xx_lcdc_platform_data sharp_lq035q7dh06_pdata = { + .manu_name ="sharp" , + .controller_data = &lcd_cfg, + .type ="Sharp_LQ035Q7DH06" , +}; + +static struct da8xx_lcdc_platform_data chimei_p0430wqlb_pdata = { + .manu_name ="ChiMei" , + .controller_data = &lcd_cfg, + .type ="ChiMei_P0430WQLB" , +}; + +static struct da8xx_lcdc_platform_data vga_640x480_pdata = { + .manu_name ="VGA" , + .controller_data = &lcd_cfg, + .type ="vga_640x480" , +}; + +static struct resource da8xx_lcdc_resources[] = { + [0 ] = {/* registers */ + .start =DA8XX_LCD_CNTRL_BASE , + .end =DA8XX_LCD_CNTRL_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + [1 ] = {/* interrupt */ + .start =IRQ_DA8XX_LCDINT , + .end =IRQ_DA8XX_LCDINT , + .flags =IORESOURCE_IRQ , + },
arch/arm/mach-davinci/board-mityomapl138.c line 633
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+}; + +static struct platform_device da8xx_lcdc_device = { + .name ="da8xx_lcdc" , + .id =0 , + .num_resources =ARRAY_SIZE (da8xx_lcdc_resources), + .resource = da8xx_lcdc_resources, + .dev = { + .platform_data = &sharp_lq035q7dh06_pdata, + }
Should have ',' on the last member as well.
arch/arm/mach-davinci/board-mityomapl138.c line 646
Quoted 13 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +13
-0+}; + +static __init void mityomapl138_setup_lcd (void ) +{ +int ret; + +if (peripheral_config.LCDConfig.Enable) { +u32 prio; + +/* set peripheral master priority up to 1 */ + prio =__raw_readl (DA8XX_SYSCFG0_VIRT (DA8XX_MSTPRI2_REG )); + prio &= ~MSTPRI2_LCD_MASK ; + prio |=1 <<MSTPRI2_LCD_SHIFT ;
Spaces around binary '<<'
arch/arm/mach-davinci/board-mityomapl138.c line 652
Quoted 6 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+__raw_writel (prio,DA8XX_SYSCFG0_VIRT (DA8XX_MSTPRI2_REG )); + +if (0 ==strncmp ("Sharp_LQ035Q7DH06" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config. + LCDConfig.PanelName))) {
Why strncmp instead of just strcmp?
Quoted 103 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +103
-0+ da8xx_lcdc_device.dev.platform_data = + &sharp_lq035q7dh06_pdata; + }else if (0 ==strncmp ("ChiMei_P0430WQLB" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config.LCDConfig.PanelName))) { + da8xx_lcdc_device.dev.platform_data = + &chimei_p0430wqlb_pdata; + }else if (0 ==strncmp ("vga_640x480" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config. + LCDConfig.PanelName))) { + da8xx_lcdc_device.dev.platform_data = + &vga_640x480_pdata; + }else { +pr_warning ("unknown LCD type : %s\n" , + peripheral_config.LCDConfig.PanelName); +return ; + } + + ret =davinci_cfg_reg_list (da850_lcdcntl_pins); +if (ret) { +pr_warning ("lcd pinmux failed : %d\n" , ret); +return ; + } + + ret =platform_device_register (&da8xx_lcdc_device); + }else { +pr_warning ("no LCD device enabled\n" ); + } +} + +static __init void mityomapl138_init (void ) +{ +int ret; + + ret =pmic_tps65023_init (); +if (ret) +pr_warning ("TPS65023 PMIC init failed: %d\n" , ret); + + ret =da8xx_register_edma (); +if (ret) +pr_warning ("edma registration failed: %d\n" , ret); + + ret =da8xx_register_i2c (0 , &mityomap_i2c_0_pdata); +if (ret) +pr_warning ("i2c0 registration failed: %d\n" , ret); + + ret =da8xx_register_watchdog (); +if (ret) +pr_warning ("watchdog registration failed: %d\n" , ret); + +davinci_serial_init (&mityomapl138_uart_config); + + ret =da8xx_register_rtc (); +if (ret) +pr_warning ("rtc setup failed: %d\n" , ret); + + ret =da850_register_cpufreq (); +if (ret) +pr_warning ("cpufreq registration failed: %d\n" , ret); + + ret =da8xx_register_cpuidle (); +if (ret) +pr_warning ("cpuidle registration failed: %d\n" , ret); + +mityomapl138_setup_nand (); + +mityomap_init_spi1 (1 , mityomap_spi_flash_info, +ARRAY_SIZE (mityomap_spi_flash_info)); + +mityomapl138_setup_lcd (); + +mityomapl138_setup_mmc (); + +mityomapl138_setup_mcasp (); +} + +#ifdef CONFIG_SERIAL_8250_CONSOLE +static int __init mityomapl138_console_init (void ) +{ +return add_preferred_console ("ttyS" ,1 ,"115200" ); +} +console_initcall (mityomapl138_console_init); +#endif + +static void __init mityomapl138_map_io (void ) +{ +da850_init (); +} + +static int __init parse_tag_peripherals (const struct tag *tag) +{ +struct tag_peripherals *ptag; +int i, j; + + ptag = (struct tag_peripherals *)&tag->u.cmdline.cmdline[0 ]; +memcpy (&peripheral_config, ptag,sizeof (peripheral_config)); +pr_info ("Peripheral Config Block Found\n" ); +pr_info ("Enet_Config = %d\n" , peripheral_config.ENETConfig.EnetConfig); +pr_info ("EMAC = %pM\n" , peripheral_config.ENETConfig.MACAddr); +pr_info ("PHYMask = 0x%x\n" , peripheral_config.ENETConfig.PHYMask); +if (peripheral_config.LCDConfig.Enable) + pr_info("LCD Configured : %s\n",
arch/arm/mach-davinci/board-mityomapl138.c line 765
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+ peripheral_config.LCDConfig.PanelName); + else + pr_info("No LCD Configured\n"); + +for (i =0 ; i <3 ; i++) { +pr_info ("UART[%d] = %d, %d, %d, %d\n" , i, + peripheral_config.UARTConfig[i].Enable, + peripheral_config.UARTConfig[i].IsConsole, + peripheral_config.UARTConfig[i].EnableHWFlowCtrl, + peripheral_config.UARTConfig[i].Baud);
Without explaining what you are printing, this wont be of much info. You intended this to be debug instead? Even then it is better to include some information on what is being dumped.
arch/arm/mach-davinci/board-mityomapl138.c line 778
Quoted 13 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +13
-0+ } +for (i =0 ; i <2 ; i++) { +int mask =0 ; +for (j =0 ; j <8 ; j++) + mask |= ((peripheral_config.SPIConfig[i].CSEnable[j]) ? + (1 <<j) :0 ); + +pr_info ("SPI[%d] = %d, %d, %02X, %d, %d\n" , i, + peripheral_config.SPIConfig[i].Enable, + peripheral_config.SPIConfig[i].CLKOut, + mask, + peripheral_config.SPIConfig[i].ENAEnable, + peripheral_config.SPIConfig[i].CLKRate);
Same here..
Quoted 22 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +15
-0+ } +return 0 ; +} +__tagtable (ATAG_PERIPHERALS , parse_tag_peripherals); + + +MACHINE_START (MITYOMAPL138 ,"MityDSP-L138" ) + .phys_io = IO_PHYS, + .io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc, + .boot_params = (DA8XX_DDR_BASE + 0x100), + .map_io = mityomapl138_map_io, + .init_irq = cp_intc_init, + .timer = &davinci_timer, + .init_machine = mityomapl138_init, +MACHINE_END arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +1
-0@@ -0,0 +1,125 @@ +/**
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h line 11
Quoted 10 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +10
-0+* Factory / Peripheral Configuration Data as provided by ATAG_PERIPHERAL +* for the MityDSP-L138 SOMs. (mityomapl138 machines) +* +* Copyright (C) 2010 Critical Link LLC. This file is licensed under +* the terms of the GNU General Public License version 2. This program +* is licensed "as is" without any warranty of any kind, whether express +* or implied. +*/ +#ifndef CONFIG_BLOCK_H_ +#define CONFIG_BLOCK_H_
Copy paste error?
Quoted 102 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +102
-0+ +#define CONFIG_MAGIC_WORD 0x00BD0138 +#define CONFIG_VERSION 0x00010000 + +#define ENET_CONFIG_NONE 1 +#define ENET_CONFIG_MII 2 +#define ENET_CONFIG_RMII 3 + +#define CONFIG_I2C_MAGIC_WORD 0x012C0138 +#define CONFIG_I2C_VERSION 0x00010001 + +/** +* Peripherals Version History +* 1.00 Baseline +* 1.01 Added McASP Configuration +* 1.02 Added ethernet phy mask +*/ +#define PERIPHERALS_VERSION 0x00010002 + +#ifndef CONFIG_MITYDSP_ENV_SIZE +#define CONFIG_MITYDSP_ENV_SIZE (64 << 10) +#endif + +#define FPGATYPE_NONE 0 +#define FPGATYPE_XC6SLX9 1 +#define FPGATYPE_XC6SLX16 2 +#define FPGATYPE_XC6SLX25 3 +#define FPGATYPE_XC6SLX45 4 +#define FPGATYPE_UNKNOWN 10000 + +struct I2CFactoryConfig { +u32 ConfigMagicWord;/** CONFIG_I2C_MAGIC_WORD */ +u32 ConfigVersion;/** CONFIG_I2C_VERSION */ +u8 MACADDR[6 ];/** mac address assigned to part */ +u32 FpgaType;/** fpga installed, see above */ +u32 Spare;/** Not Used */ +u32 SerialNumber;/** serial number of part */ +char PartNumber[32 ];/** board part number */ +}; + +struct UARTConfig { +u8 Enable;/** enable Tx/Rx */ +u8 IsConsole;/** cfg as the console */ +u8 EnableHWFlowCtrl;/** cfg CTS/RTS */ +u32 Baud;/** default baud rate */ +}; + +struct SPIConfig { +u8 Enable;/** cfg dev+CLK, SIMO, SOMI pins */ +u8 CLKOut;/** drive the CLK */ +u8 CSEnable[8 ];/** cfg the associated CS as output */ +u8 ENAEnable;/** cfg the ENA pin for SPI function */ +u32 CLKRate;/** default clock rate */ +u8 Spare[8 ]; +}; + +struct LCDConfig { +u8 Enable; +u8 PanelName[32 ]; +}; + +struct ENETConfig { +u32 EnetConfig; +u8 MACAddr[6 ]; +u32 PHYMask; +u8 Spare[8 ]; +}; + +#define MCASP_PINMODE_INACTIVE 0 +#define MCASP_PINMODE_TX 1 +#define MCASP_PINMODE_RX 2 + +struct MCASPConfig { +u8 Enable; +u8 Mode; +u8 PinMode[16 ]; +}; +/** +* struct tag_peripherals is passed in via kernel ATAG_PERIPHERALS +*/ +struct tag_peripherals { +u32 Version;/** == PERIPHERALS_VERSION */ +u8 Manufacturer[64 ];/** null terminated string indicating manufacturer */ +struct ENETConfig ENETConfig;/** Enable on-board ethernet */ +struct UARTConfig UARTConfig[3 ];/** default UART 0,1,2 Configuration */ +struct SPIConfig SPIConfig[2 ]; +struct LCDConfig LCDConfig; +struct MCASPConfig MCASPConfig; +}; + +/** +* This structure can only be grown. You cannot make it smaller... +*/ +struct MityDSPL138Config { +u32 ConfigMagicWord;/** == CONFIG_MAGIC_WORD */ +u32 ConfigVersion;/** version of the configuration block */ +u32 ConfigSizeBytes;/** configuration size, in bytes */ +struct tag_peripherals Peripherals; +}; + +struct MityDSPL138ConfigBlock { + union {
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h line 123
Quoted 10 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +10
-0+struct MityDSPL138Config config; +u8 space[CONFIG_MITYDSP_ENV_SIZE -sizeof (int )]; + } Data; +unsigned int CheckSum;/** summed bytes of ConfigSizeBytes */ +}; + +extern struct MityDSPL138Config config_block; +extern struct I2CFactoryConfig factory_config_block; +extern int get_config_block (void ); +extern int get_factory_config_block (void );
These are not defined in this patch.
Quoted 19 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +2
-0+ +#endif arch/arm/mach-davinci/include/mach/da8xx.h +1
-0@@ -41,6 +41,7 @@ extern void __iomem *da8xx_syscfg1_base;#define DA8XX_SYSCFG0_BASE (IO_PHYS + 0x14000)#define DA8XX_SYSCFG0_VIRT (x) (da8xx_syscfg0_base + (x))#define DA8XX_JTAG_ID_REG 0x18 +#define DA8XX_MSTPRI2_REG 0x118#define DA8XX_CFGCHIP0_REG 0x17c#define DA8XX_CFGCHIP2_REG 0x184#define DA8XX_CFGCHIP3_REG 0x188arch/arm/mach-davinci/include/mach/uncompress.h +0
-0
arch/arm/mach-davinci/include/mach/uncompress.h static inline void __arch_decomp_setup(unsigned long arch_id) · line 91
Quoted 4 lines
arch/arm/mach-davinci/include/mach/uncompress.h +1
-0@@ -88,6 +88,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* DA8xx boards */ DEBUG_LL_DA8XX (davinci_da830_evm,2 );DEBUG_LL_DA8XX (davinci_da850_evm,2 ); +DEBUG_LL_DA8XX (mityomapl138,1 );
Need to thank Cyril here for making this so simple.
Thanks,
Sekhar
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };
Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?
Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
The approach I'm proposing does have the downside of some additional platform code that parses the peripheral configuration at runtime, but from a supportability perspective that's a trade I think users of this module are willing to make. And, it only happens during init. So, if I do it right, I can at least release the memory for the code once it's been run.
Are there other approaches than an ATAG? It seems like that's what it was there for. I'll be glad to rework if there is a way to
pass up configuration options to allow a single kernel image to at least instantiate the right devices and configure the pins correctly at runtime. I can move the pin configuration to the bootloader, but not the device instantiation. Right?
I'd really like to avoid proliferating initialization code (multiple board files) and specific kernel images for this SoM. To be honest, I wanted to just add patches to the 850 EVM code, but as I started into that I immediately ran into piles of #ifdefs that made the code unreadable. Seems like some other architectures have found ways to deal with this. Maybe I am missing something?
Quoted 12 lines
Quoted 12 lines
arch/arm/include/asm/setup.h +1
-0+struct tag {struct tag_header hdr;union {arch/arm/mach-davinci/Kconfig +0
-0@@ -178,6 +178,13 @@ config DA850_UI_RMII endchoice
Quoted 9 lines
arch/arm/mach-davinci/Kconfig config DA850_UI_RMII · line 186
Quoted 6 lines
arch/arm/mach-davinci/Kconfig +6
-0+config MACH_MITYOMAPL138 + bool "Critical Link MityOMAPL138 SoM" + depends on ARCH_DAVINCI_DA850 + select GPIO_PCA953X + help + Say Y here to select the Critical Link MityOMAP-L138 System on Module.Here you can include some pointers on where more information about the board can be found.
OK. Thanks.
Quoted 53 lines
Quoted 40 lines
arch/arm/mach-davinci/Kconfig +1
-0+ config MACH_TNETV107X bool "TI TNETV107X Reference Platform" default ARCH_DAVINCI_TNETV107Xarch/arm/mach-davinci/Makefile +1
-0@@ -32,6 +32,7 @@ obj-$(CONFIG_MACH_DAVINCI_DM6467_EVM) += board-dm646x-evm.o cdce949.o obj-$(CONFIG_MACH_DAVINCI_DM365_EVM) += board-dm365-evm.o obj-$(CONFIG_MACH_DAVINCI_DA830_EVM) += board-da830-evm.o obj-$(CONFIG_MACH_DAVINCI_DA850_EVM) += board-da850-evm.o +obj-$(CONFIG_MACH_MITYOMAPL138) += board-mityomapl138.o obj-$(CONFIG_MACH_TNETV107X) += board-tnetv107x-evm.o # Power Managementarch/arm/mach-davinci/board-mityomapl138.c new file +17
-0@@ -0,0 +1,793 @@ +/* +* Critical Link MityOMAP-L138 SoM +* +* Copyright (C) 2010 Critical Link Incorporated - http://www.criticallink.com +* +* Derived from board-da850-evm.c +* Original Copyrights follow: +* +* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ +* +* Derived from: arch/arm/mach-davinci/board-da830-evm.c +* Original Copyrights follow: +* +* 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under +* the terms of the GNU General Public License version 2. This program +* is licensed "as is" without any warranty of any kind, whether express +* or implied. arch/arm/mach-davinci/board-mityomapl138.c line 27
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+*/ + +#define pr_fmt (fmt) "%s: " fmt, __func__ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/console.h> +#include <linux/i2c.h> +#include <linux/i2c/at24.h> +#include <linux/i2c/pca953x.h> You do not seem to have defined platform data for pca953.
Quoted 2 lines
I guess the include here and the config select above are copy-paste errors?
Yes. I will go through the includes and strip out anything not required. Thank you.
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c line 33
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+#include <linux/gpio.h> +#include <linux/platform_device.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/nand.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/physmap.h> I didn't see any NOR devices registered?
No Parallel NOR, just NAND should be initialized below. If there are extra includes I'll clean them up. Thanks.
Quoted 49 lines
Quoted 49 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +48
-0+#include <linux/regulator/machine.h> +#include <linux/spi/spi.h> +#include <linux/spi/flash.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/setup.h> +#include <mach/cp_intc.h> +#include <mach/da8xx.h> +#include <mach/nand.h> +#include <mach/mux.h> +#include <mach/cb-mityomapl138.h> +#include <mach/spi.h> +#include <mach/irqs.h> + +static struct tag_peripherals peripheral_config = { + .Version =PERIPHERALS_VERSION , + .Manufacturer ="Critical Link" , + .ENETConfig.EnetConfig =ENET_CONFIG_MII , + .ENETConfig.MACAddr = {0x00 ,0x50 ,0xC2 ,0x49 ,0xDF ,0xFF }, + .UARTConfig[0 ] = { + .Enable =0 , + .IsConsole =0 , + .Baud =115200 , + }, + .UARTConfig[1 ] = { + .Enable =1 , + .IsConsole =1 , + .Baud =115200 , + }, + .UARTConfig[2 ] = { + .Enable =0 , + .IsConsole =0 , + .Baud =115200 , + }, + .SPIConfig[0 ] = { + .Enable =0 , + .CLKOut =0 , + .CSEnable = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, + .ENAEnable =0 , + .CLKRate =0 , + }, + .SPIConfig[1 ] = { + .Enable =1 , + .CLKOut =1 , + .CSEnable = {1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, + .ENAEnable =0 , + .CLKRate =30000000 ,
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c line 87
Quoted 6 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+ }, + .LCDConfig = { + .Enable = 0, + .PanelName = "", + } +};Do we really need the camel case naming?
Sorry that was company code policy that crept in. I can replace with all lowercase and underscores, correct?
Quoted 8 lines
[...]
arch/arm/mach-davinci/board-mityomapl138.c line 153
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +4
-0+ +static __init void mityomapl138_setup_nand (void ) +{ +Extra line here..
OK.
Quoted 37 lines
Quoted 37 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +36
-0+platform_add_devices (mityomapl138_devices, +ARRAY_SIZE (mityomapl138_devices)); +} + +static int mityomapl138_mmc_get_ro (int index) +{ +return gpio_get_value (DA850_MMCSD_WP_PIN ); +} + +static int mityomapl138_mmc_get_cd (int index) +{ +return !gpio_get_value (DA850_MMCSD_CD_PIN ); +} + +static struct davinci_mmc_config da850_mmc_config = { + .get_ro = mityomapl138_mmc_get_ro, + .get_cd = mityomapl138_mmc_get_cd, + .wires =4 , + .max_freq =50000000 , + .caps =MMC_CAP_MMC_HIGHSPEED |MMC_CAP_SD_HIGHSPEED , + .version =MMC_CTLR_VERSION_2 , +}; + +static __init void mityomapl138_setup_mmc (void ) +{ +int ret; + + ret =davinci_cfg_reg_list (da850_mmcsd0_pins); +if (ret) +pr_warning ("mmcsd0 mux setup failed: %d\n" ,ret); + + ret =gpio_request (DA850_MMCSD_CD_PIN ,"MMC CD\n" ); +if (ret) +pr_warning ("can not open GPIO %d\n" ,DA850_MMCSD_CD_PIN ); +gpio_direction_input (DA850_MMCSD_CD_PIN ); +
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c line 193
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +4
-0+ ret =gpio_request (DA850_MMCSD_WP_PIN ,"MMC WP\n" ); +if (ret) +pr_warning ("can not open GPIO %d\n" ,DA850_MMCSD_WP_PIN ); +gpio_direction_input (DA850_MMCSD_WP_PIN );Its not nice to go ahead and operate on the GPIO even though the request call fails. I can see the EVM code does it this way, but that code needs fixing too.
OK. I will rework not to mess with the IO if I don't get the resource.
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c line 200
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +7
-0+ + ret =da8xx_register_mmcsd0 (&da850_mmc_config); +if (ret) +pr_warning ("mmcsd0 registration failed: %d\n" , ret); +} + +Extra line here..
OK
Quoted 69 lines
Quoted 53 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +52
-0+static struct davinci_uart_config mityomapl138_uart_config__initdata = { + .enabled_uarts =0x7 , +}; + +static int __init mityomapl138_config_emac (void ) +{ +void __iomem *cfg_chip3_base; +int ret; +u32 val; +struct davinci_soc_info *soc_info = &davinci_soc_info; +u8 rmii_en =0 ; + +switch (peripheral_config.ENETConfig.EnetConfig) { +case ENET_CONFIG_RMII : + soc_info->emac_pdata->rmii_en =1 ; + rmii_en =1 ; +break ; +case ENET_CONFIG_MII : + soc_info->emac_pdata->rmii_en =0 ; + rmii_en =0 ; +break ; +case ENET_CONFIG_NONE : +default : +pr_info ("No Ethernet PHY Selected, EMAC disabled\n" ); +return 0 ;/* no enet... */ +break ; + } +memcpy (&soc_info->emac_pdata->mac_addr[0 ], + &peripheral_config.ENETConfig.MACAddr[0 ],6 ); + + cfg_chip3_base =DA8XX_SYSCFG0_VIRT (DA8XX_CFGCHIP3_REG ); + + val =__raw_readl (cfg_chip3_base); + +if (rmii_en) { + val |=BIT (8 ); + ret =davinci_cfg_reg_list (da850_rmii_pins); +pr_info ("RMII PHY configured, MII PHY will not be functional\n" ); + }else { + val &= ~BIT (8 ); + ret =davinci_cfg_reg_list (da850_cpgmac_pins); +pr_info ("MII PHY configured, RMII PHY will not be functional\n" ); + } + +if (ret) +pr_warning ("cpgmac/rmii mux setup failed: %d\n" , ret); + +/* configure the CFGCHIP3 register for RMII or MII */ +__raw_writel (val, cfg_chip3_base); + + soc_info->emac_pdata->phy_mask = peripheral_config.ENETConfig.PHYMask ? + peripheral_config.ENETConfig.PHYMask :1 ;arch/arm/mach-davinci/board-mityomapl138.c line 262
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+pr_info ("setting phy_mask to %x\n" , soc_info->emac_pdata->phy_mask); + soc_info->emac_pdata->mdio_max_freq =MITYOMAPL138_MDIO_FREQUENCY ; + + ret =da8xx_register_emac (); +if (ret) +pr_warning ("emac registration failed: %d\n" , ret); + +return 0 ; +} +device_initcall (mityomapl138_config_emac);Using
device_initcallhere is not good. It will get called on other boards as well just because support for this board is built into the kernel. So, at a minimum, there should be check to bail out if machine != mityomapl138.
Quoted 4 lines
Better still, please re-evaluate whether you really need a
device_initcall()here. On the EVM this method was chosen since the Ethernet init was tied to UI card detection. You should aim to eliminate it on this board.
OK. I will sort this out on the next submission. Thanks.
Quoted 11 lines
arch/arm/mach-davinci/board-mityomapl138.c line 267
Quoted 6 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +5
-0+ +static struct davinci_i2c_platform_data mityomap_i2c_0_pdata = { + .bus_freq =100 ,/* kHz */ + .bus_delay =0 ,/* usec */ +};This is exactly the pdata that davinci I2C driver uses by default, so you can save a few bytes and a few lines of code by passing NULL pdata.
Quoted 1 line
[...]
OK. Thanks.
Quoted 135 lines
Quoted 119 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +118
-0+ +static struct davinci_spi_platform_data mityomap_spi1_pdata = { + .version =SPI_VERSION_2 , + .num_chipselect =1 , + .wdelay =0 , + .odd_parity =0 , + .parity_enable =0 , + .wait_enable =0 , + .timer_disable =0 , + .clk_internal =1 , + .cs_hold =1 , + .intr_level =0 , + .poll_mode =1 , + .use_dma =0 , + .c2tdelay =8 , + .t2cdelay =8 , +}; + +static struct resource mityomap_spi1_resources[] = { + [0 ] = { + .start =0x01F0E000 , + .end =0x01F0EFFF , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =IRQ_DA8XX_SPINT1 , + .start =IRQ_DA8XX_SPINT1 , + .flags =IORESOURCE_IRQ , + }, + [2 ] = { + .start =EDMA_CTLR_CHAN (0 ,18 ), + .end =EDMA_CTLR_CHAN (0 ,18 ), + .flags =IORESOURCE_DMA , + }, + [3 ] = { + .start =EDMA_CTLR_CHAN (0 ,19 ), + .end =EDMA_CTLR_CHAN (0 ,19 ), + .flags =IORESOURCE_DMA , + }, + [4 ] = { + .start =1 , + .end =1 , + .flags =IORESOURCE_DMA , + }, +}; + +static struct platform_device mityomap_spi1_device = { + .name ="spi_davinci" , + .id =1 , + .dev = { + .platform_data = &mityomap_spi1_pdata, + }, + .num_resources =ARRAY_SIZE (mityomap_spi1_resources), + .resource = mityomap_spi1_resources, +}; + +/***************************************************************************** +* SPI Devices: +* SPI1_CS0: 8M Flash ST-M25P64-VME6G +****************************************************************************/ +static struct mtd_partition spi_flash_partitions[] = { + [0 ] = { + .name ="UBL" , + .offset =0 , + .size =SZ_64K , + .mask_flags =MTD_WRITEABLE + }, + [1 ] = { + .name ="U-Boot" , + .offset =MTDPART_OFS_APPEND , + .size =SZ_512K , + .mask_flags =0 , + }, + [2 ] = { + .name ="Spare" , + .offset =MTDPART_OFS_APPEND , + .size =MTDPART_SIZ_FULL , + .mask_flags =0 , + }, +}; + +static struct flash_platform_data mityomap_spi_flash_data = { + .name ="m25p80" , + .parts = spi_flash_partitions, + .nr_parts =ARRAY_SIZE (spi_flash_partitions), + .type ="m25p64" , +}; + +static struct spi_board_info mityomap_spi_flash_info[] = { + { + .modalias ="m25p80" , + .platform_data = &mityomap_spi_flash_data, + .mode =SPI_MODE_0 , + .max_speed_hz =30000000 , + .bus_num =1 , + .chip_select =0 , + }, +}; + +void __init mityomap_init_spi1 (unsigned chipselect_mask, +struct spi_board_info *info,unsigned len) +{ +int ret; + ret =platform_device_register (&mityomap_spi1_device); +if (ret) +pr_warning ("failed to register spi device : %d\n" , ret); + + ret =spi_register_board_info (info, len); +if (ret) +pr_warning ("failed to register board info : %d\n" , ret); +} + +/* davinci da850 evm audio machine driver */ +static u8 da850_iis_serializer_direction[] = { +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE , +INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,INACTIVE_MODE ,arch/arm/mach-davinci/board-mityomapl138.c line 535
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+}; + +static struct snd_platform_data mityomapl138_snd_data = { + .tx_dma_offset =0x2000 , + .rx_dma_offset =0x2000 , + .op_mode =DAVINCI_MCASP_IIS_MODE , + .num_serializer =ARRAY_SIZE (da850_iis_serializer_direction), + .tdm_slots =0 , + .serial_dir = da850_iis_serializer_direction, + .eventq_no =EVENTQ_1 ,This field was recently changed in a patch[1] which is already queued for ASoC merge for 2.6.36. You will need to base this on that change. When you do that please note the dependency below the '---' in the patch so maintainer knows the order in which to commit patches.
Quoted 1 line
OK. Thanks.
Quoted 17 lines
Quoted 5 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +4
-0+ .version = MCASP_VERSION_2, + .txnumevt = 0, + .rxnumevt = 0, +};arch/arm/mach-davinci/board-mityomapl138.c line 549
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+ +short mityomapl138_mcasp_pins[24 ]__initdata = { +DA850_AHCLKX ,DA850_ACLKX ,DA850_AFSX , +DA850_AHCLKR ,DA850_ACLKR ,DA850_AFSR , +DA850_AMUTE , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1 ,-1 ,-1 ,-1 , +-1 Do we really need all these -1s?
I think so, because 0 is valid, see next response...
Quoted 11 lines
arch/arm/mach-davinci/board-mityomapl138.c line 557
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +8
-0+}; + +static __init int mityomapl138_setup_mcasp (void ) +{ +int ret; + + mityomapl138_mcasp_pins[7 +0 ] =DA850_AXR_13 ; + da850_iis_serializer_direction[12 ] =TX_MODE ;Why not stick these into the static initialization?
The intent is to use the peripheral configuration block
to set these up. I know it's not in there yet, but I felt that I'd better get that concept approved before I went much further with the code. If the peripheral config design is not acceptable, then all of this code needs to be reworked. We'd like to be able to specify which pins the McASP can use during boot time.
I can tear out this init code if it will hold up the patch, but at the moment it is OK with the configurations that use this SoM.
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c line 564
Quoted 8 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +7
-0+ + ret =davinci_cfg_reg_list (mityomapl138_mcasp_pins); +if (ret) +pr_warning ("mcasp mux setup failed: %d\n" , ret); + + mityomapl138_snd_data.tdm_slots =2 ; + mityomapl138_snd_data.txnumevt =1 ;And the same for these?
Same as above. These should be set up based on peripheral config, but I wanted to get concept approved before pushing that in.
Quoted 64 lines
Quoted 64 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +63
-0+ +da8xx_register_mcasp (0 , &mityomapl138_snd_data); + +return ret; +} + +static const struct display_panel disp_panel = { +QVGA , +16 , +16 , +COLOR_ACTIVE , +}; + +static struct lcd_ctrl_config lcd_cfg = { + &disp_panel, + .ac_bias =255 , + .ac_bias_intrpt =0 , + .dma_burst_sz =16 , + .bpp =16 , + .fdd =255 , + .tft_alt_mode =0 , + .stn_565_mode =0 , + .mono_8bit_mode =0 , + .invert_line_clock =0 , + .invert_frm_clock =0 , + .sync_edge =0 , + .sync_ctrl =1 , + .raster_order =0 , +}; + +static struct da8xx_lcdc_platform_data sharp_lq035q7dh06_pdata = { + .manu_name ="sharp" , + .controller_data = &lcd_cfg, + .type ="Sharp_LQ035Q7DH06" , +}; + +static struct da8xx_lcdc_platform_data chimei_p0430wqlb_pdata = { + .manu_name ="ChiMei" , + .controller_data = &lcd_cfg, + .type ="ChiMei_P0430WQLB" , +}; + +static struct da8xx_lcdc_platform_data vga_640x480_pdata = { + .manu_name ="VGA" , + .controller_data = &lcd_cfg, + .type ="vga_640x480" , +}; + +static struct resource da8xx_lcdc_resources[] = { + [0 ] = {/* registers */ + .start =DA8XX_LCD_CNTRL_BASE , + .end =DA8XX_LCD_CNTRL_BASE +SZ_4K -1 , + .flags =IORESOURCE_MEM , + }, + [1 ] = {/* interrupt */ + .start =IRQ_DA8XX_LCDINT , + .end =IRQ_DA8XX_LCDINT , + .flags =IORESOURCE_IRQ , + }, +}; + +static struct platform_device da8xx_lcdc_device = { + .name ="da8xx_lcdc" ,
Quoted 8 lines
arch/arm/mach-davinci/board-mityomapl138.c line 633
Quoted 6 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+ .id = 0, + .num_resources = ARRAY_SIZE(da8xx_lcdc_resources), + .resource = da8xx_lcdc_resources, + .dev = { + .platform_data = &sharp_lq035q7dh06_pdata, + }Should have ',' on the last member as well.
OK. Thanks.
Quoted 16 lines
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +3
-0+}; + +static __init void mityomapl138_setup_lcd (void )arch/arm/mach-davinci/board-mityomapl138.c line 646
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+{ +int ret; + +if (peripheral_config.LCDConfig.Enable) { +u32 prio; + +/* set peripheral master priority up to 1 */ + prio =__raw_readl (DA8XX_SYSCFG0_VIRT (DA8XX_MSTPRI2_REG )); + prio &= ~MSTPRI2_LCD_MASK ; + prio |=1 <<MSTPRI2_LCD_SHIFT ;Spaces around binary '<<'
OK. Thanks.
Quoted 9 lines
arch/arm/mach-davinci/board-mityomapl138.c line 652
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +6
-0+__raw_writel (prio,DA8XX_SYSCFG0_VIRT (DA8XX_MSTPRI2_REG )); + +if (0 ==strncmp ("Sharp_LQ035Q7DH06" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config. + LCDConfig.PanelName))) {Why strncmp instead of just strcmp?
Good catch. Was trying to avoid matches to "Sharp" or some other substring. strncmp doesn't really help there. I'll correct.
Quoted 111 lines
Quoted 111 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +110
-0+ da8xx_lcdc_device.dev.platform_data = + &sharp_lq035q7dh06_pdata; + }else if (0 ==strncmp ("ChiMei_P0430WQLB" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config.LCDConfig.PanelName))) { + da8xx_lcdc_device.dev.platform_data = + &chimei_p0430wqlb_pdata; + }else if (0 ==strncmp ("vga_640x480" , + peripheral_config.LCDConfig.PanelName, +sizeof (peripheral_config. + LCDConfig.PanelName))) { + da8xx_lcdc_device.dev.platform_data = + &vga_640x480_pdata; + }else { +pr_warning ("unknown LCD type : %s\n" , + peripheral_config.LCDConfig.PanelName); +return ; + } + + ret =davinci_cfg_reg_list (da850_lcdcntl_pins); +if (ret) { +pr_warning ("lcd pinmux failed : %d\n" , ret); +return ; + } + + ret =platform_device_register (&da8xx_lcdc_device); + }else { +pr_warning ("no LCD device enabled\n" ); + } +} + +static __init void mityomapl138_init (void ) +{ +int ret; + + ret =pmic_tps65023_init (); +if (ret) +pr_warning ("TPS65023 PMIC init failed: %d\n" , ret); + + ret =da8xx_register_edma (); +if (ret) +pr_warning ("edma registration failed: %d\n" , ret); + + ret =da8xx_register_i2c (0 , &mityomap_i2c_0_pdata); +if (ret) +pr_warning ("i2c0 registration failed: %d\n" , ret); + + ret =da8xx_register_watchdog (); +if (ret) +pr_warning ("watchdog registration failed: %d\n" , ret); + +davinci_serial_init (&mityomapl138_uart_config); + + ret =da8xx_register_rtc (); +if (ret) +pr_warning ("rtc setup failed: %d\n" , ret); + + ret =da850_register_cpufreq (); +if (ret) +pr_warning ("cpufreq registration failed: %d\n" , ret); + + ret =da8xx_register_cpuidle (); +if (ret) +pr_warning ("cpuidle registration failed: %d\n" , ret); + +mityomapl138_setup_nand (); + +mityomap_init_spi1 (1 , mityomap_spi_flash_info, +ARRAY_SIZE (mityomap_spi_flash_info)); + +mityomapl138_setup_lcd (); + +mityomapl138_setup_mmc (); + +mityomapl138_setup_mcasp (); +} + +#ifdef CONFIG_SERIAL_8250_CONSOLE +static int __init mityomapl138_console_init (void ) +{ +return add_preferred_console ("ttyS" ,1 ,"115200" ); +} +console_initcall (mityomapl138_console_init); +#endif + +static void __init mityomapl138_map_io (void ) +{ +da850_init (); +} + +static int __init parse_tag_peripherals (const struct tag *tag) +{ +struct tag_peripherals *ptag; +int i, j; + + ptag = (struct tag_peripherals *)&tag->u.cmdline.cmdline[0 ]; +memcpy (&peripheral_config, ptag,sizeof (peripheral_config)); +pr_info ("Peripheral Config Block Found\n" ); +pr_info ("Enet_Config = %d\n" , peripheral_config.ENETConfig.EnetConfig); +pr_info ("EMAC = %pM\n" , peripheral_config.ENETConfig.MACAddr); +pr_info ("PHYMask = 0x%x\n" , peripheral_config.ENETConfig.PHYMask); +if (peripheral_config.LCDConfig.Enable) +pr_info ("LCD Configured : %s\n" , + peripheral_config.LCDConfig.PanelName); +else +pr_info ("No LCD Configured\n" ); + +for (i =0 ; i <3 ; i++) { + pr_info("UART[%d] = %d, %d, %d, %d\n", i, + peripheral_config.UARTConfig[i].Enable,
Quoted 8 lines
arch/arm/mach-davinci/board-mityomapl138.c line 765
Quoted 3 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +3
-0+ peripheral_config.UARTConfig[i].IsConsole, + peripheral_config.UARTConfig[i].EnableHWFlowCtrl, + peripheral_config.UARTConfig[i].Baud);Without explaining what you are printing, this wont be of much info. You intended this to be debug instead? Even then it is better to include some information on what is being dumped.
OK. These statements could be assigned to debug level, and I can add more text when they are printed out. Thanks.
Quoted 15 lines
Quoted 4 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +3
-0+ } +for (i =0 ; i <2 ; i++) { +int mask =0 ;arch/arm/mach-davinci/board-mityomapl138.c line 778
Quoted 10 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +10
-0+for (j =0 ; j <8 ; j++) + mask |= ((peripheral_config.SPIConfig[i].CSEnable[j]) ? + (1 <<j) :0 ); + +pr_info ("SPI[%d] = %d, %d, %02X, %d, %d\n" , i, + peripheral_config.SPIConfig[i].Enable, + peripheral_config.SPIConfig[i].CLKOut, + mask, + peripheral_config.SPIConfig[i].ENAEnable, + peripheral_config.SPIConfig[i].CLKRate);
Quoted 1 line
Same here..
Right.
Quoted 27 lines
Quoted 27 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +15
-0+ } +return 0 ; +} +__tagtable (ATAG_PERIPHERALS , parse_tag_peripherals); + + +MACHINE_START (MITYOMAPL138 ,"MityDSP-L138" ) + .phys_io = IO_PHYS, + .io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc, + .boot_params = (DA8XX_DDR_BASE + 0x100), + .map_io = mityomapl138_map_io, + .init_irq = cp_intc_init, + .timer = &davinci_timer, + .init_machine = mityomapl138_init, +MACHINE_END arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +5
-0@@ -0,0 +1,125 @@ +/** +* Factory / Peripheral Configuration Data as provided by ATAG_PERIPHERAL +* for the MityDSP-L138 SOMs. (mityomapl138 machines) +* +* Copyright (C) 2010 Critical Link LLC. This file is licensed under
Quoted 8 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h line 11
Quoted 6 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +6
-0+* the terms of the GNU General Public License version 2. This program +* is licensed "as is" without any warranty of any kind, whether express +* or implied. +*/ +#ifndef CONFIG_BLOCK_H_ +#define CONFIG_BLOCK_H_ Copy paste error?
This file was originally named "config_block.h" but I renamed it prior to submission to make it specific to the SoM. Missed these. I will correct. Thank you.
Quoted 107 lines
Quoted 107 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +106
-0+ +#define CONFIG_MAGIC_WORD 0x00BD0138 +#define CONFIG_VERSION 0x00010000 + +#define ENET_CONFIG_NONE 1 +#define ENET_CONFIG_MII 2 +#define ENET_CONFIG_RMII 3 + +#define CONFIG_I2C_MAGIC_WORD 0x012C0138 +#define CONFIG_I2C_VERSION 0x00010001 + +/** +* Peripherals Version History +* 1.00 Baseline +* 1.01 Added McASP Configuration +* 1.02 Added ethernet phy mask +*/ +#define PERIPHERALS_VERSION 0x00010002 + +#ifndef CONFIG_MITYDSP_ENV_SIZE +#define CONFIG_MITYDSP_ENV_SIZE (64 << 10) +#endif + +#define FPGATYPE_NONE 0 +#define FPGATYPE_XC6SLX9 1 +#define FPGATYPE_XC6SLX16 2 +#define FPGATYPE_XC6SLX25 3 +#define FPGATYPE_XC6SLX45 4 +#define FPGATYPE_UNKNOWN 10000 + +struct I2CFactoryConfig { +u32 ConfigMagicWord;/** CONFIG_I2C_MAGIC_WORD */ +u32 ConfigVersion;/** CONFIG_I2C_VERSION */ +u8 MACADDR[6 ];/** mac address assigned to part */ +u32 FpgaType;/** fpga installed, see above */ +u32 Spare;/** Not Used */ +u32 SerialNumber;/** serial number of part */ +char PartNumber[32 ];/** board part number */ +}; + +struct UARTConfig { +u8 Enable;/** enable Tx/Rx */ +u8 IsConsole;/** cfg as the console */ +u8 EnableHWFlowCtrl;/** cfg CTS/RTS */ +u32 Baud;/** default baud rate */ +}; + +struct SPIConfig { +u8 Enable;/** cfg dev+CLK, SIMO, SOMI pins */ +u8 CLKOut;/** drive the CLK */ +u8 CSEnable[8 ];/** cfg the associated CS as output */ +u8 ENAEnable;/** cfg the ENA pin for SPI function */ +u32 CLKRate;/** default clock rate */ +u8 Spare[8 ]; +}; + +struct LCDConfig { +u8 Enable; +u8 PanelName[32 ]; +}; + +struct ENETConfig { +u32 EnetConfig; +u8 MACAddr[6 ]; +u32 PHYMask; +u8 Spare[8 ]; +}; + +#define MCASP_PINMODE_INACTIVE 0 +#define MCASP_PINMODE_TX 1 +#define MCASP_PINMODE_RX 2 + +struct MCASPConfig { +u8 Enable; +u8 Mode; +u8 PinMode[16 ]; +}; +/** +* struct tag_peripherals is passed in via kernel ATAG_PERIPHERALS +*/ +struct tag_peripherals { +u32 Version;/** == PERIPHERALS_VERSION */ +u8 Manufacturer[64 ];/** null terminated string indicating manufacturer */ +struct ENETConfig ENETConfig;/** Enable on-board ethernet */ +struct UARTConfig UARTConfig[3 ];/** default UART 0,1,2 Configuration */ +struct SPIConfig SPIConfig[2 ]; +struct LCDConfig LCDConfig; +struct MCASPConfig MCASPConfig; +}; + +/** +* This structure can only be grown. You cannot make it smaller... +*/ +struct MityDSPL138Config { +u32 ConfigMagicWord;/** == CONFIG_MAGIC_WORD */ +u32 ConfigVersion;/** version of the configuration block */ +u32 ConfigSizeBytes;/** configuration size, in bytes */ +struct tag_peripherals Peripherals; +}; + +struct MityDSPL138ConfigBlock { +union { +struct MityDSPL138Config config; +u8 space[CONFIG_MITYDSP_ENV_SIZE -sizeof (int )]; + } Data; +unsigned int CheckSum;/** summed bytes of ConfigSizeBytes */
Quoted 8 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h line 123
Quoted 6 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +6
-0+}; + +extern struct MityDSPL138Config config_block; +extern struct I2CFactoryConfig factory_config_block; +extern int get_config_block (void ); +extern int get_factory_config_block (void );These are not defined in this patch.
Right. This file is common with our bootloader port, which needs these functions. They should be removed. Good catch. I don't get any warnings on them as no functions in the kernel are looking for them...
Quoted 27 lines
Quoted 20 lines
arch/arm/mach-davinci/include/mach/cb-mityomapl138.h new file +2
-0+ +#endif arch/arm/mach-davinci/include/mach/da8xx.h +1
-0@@ -41,6 +41,7 @@ extern void __iomem *da8xx_syscfg1_base;#define DA8XX_SYSCFG0_BASE (IO_PHYS + 0x14000)#define DA8XX_SYSCFG0_VIRT (x) (da8xx_syscfg0_base + (x))#define DA8XX_JTAG_ID_REG 0x18 +#define DA8XX_MSTPRI2_REG 0x118#define DA8XX_CFGCHIP0_REG 0x17c#define DA8XX_CFGCHIP2_REG 0x184#define DA8XX_CFGCHIP3_REG 0x188arch/arm/mach-davinci/include/mach/uncompress.h +0
-0arch/arm/mach-davinci/include/mach/uncompress.h static inline void __arch_decomp_setup(unsigned long arch_id) · line 91
Quoted 4 lines
arch/arm/mach-davinci/include/mach/uncompress.h +1
-0@@ -88,6 +88,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)/* DA8xx boards */ DEBUG_LL_DA8XX (davinci_da830_evm,2 );DEBUG_LL_DA8XX (davinci_da850_evm,2 ); +DEBUG_LL_DA8XX (mityomapl138,1 );Need to thank Cyril here for making this so simple.
Quoted 3 lines
Thanks,
Sekhar
Thanks for the comments.
-Mike
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
d) use ATAG_REVISION and a single board file
There is currently a tag called ATAG_REVISION which sets a global variable 'system_rev' based on this tagq. This tag was intended for exactly this purpose.
You can then have a single machine type, a single board file and the boot loader can change ATAG_REVISION based on the board specifics. The board file can then check 'system_rev' and handle specifics that way.
This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
Kevin
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 113 lines · Kevin Hilman
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
d) use
ATAG_REVISIONand a single board fileThere is currently a tag called
ATAG_REVISIONwhich sets a global variable 'system_rev' based on this tagq. This tag was intended for exactly this purpose.
Quoted 7 lines
You can then have a single machine type, a single board file and the boot loader can change
ATAG_REVISIONbased on the board specifics. The board file can then check 'system_rev' and handle specifics that way.This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
So, if for example, we have 3 boards that use this SOM, and they vary by desired peripheral:
Host Board 1 Peripherals = UARTS 0 and 1, SPI0 CS2, RMII, etc. Host Board 2 Peripherals = UARTS 1 and 2, SPI1 CS1, MII, etc. Host Board 3 Peripherals = UARTS 0, 1 and 2, SPI1 CS1, MII, etc.
Then by this approach we would have:
mityomapl138_init()
{
/* Common NAND/NOR Init */
switch (system_rev) {
case 1:
/* setup uarts 0 & 1, SPI0 CS2, RMII */
case 2:
/* setup uarts 1 & 2, SPI1 CS1, MII */
case 3:
default:
/* setup uarts 0 & 1 & 2, SPI1 CS1, MII */
/* and so forth.... */
} /* Common Peripheral Init */
}
Each time a new board is developed to use the SOM, you then grow the init code accordingly? I was hoping not to have to continuously drop patches for new boards using this SOM. I was really trying to have one binary kernel that would be flexible enough to support the peripherals that need to be handed to the device framework for any host board using this SOM (properly configured via bootloader). Is this not possible?
Thanks for the insight.
-Mike
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 152 lines · Michael Williamson
Quoted 113 lines · Kevin Hilman
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
?This patch adds support for the MityDSP-L138 and MityARM-1808 system on module (SOM) under the registered machine "mityomapl138". ?These SOMs are based on the da850 davinci CPU architecture. ?Information on these SOMs may be found at http://www.mitydsp.com.
Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
?arch/arm/configs/da8xx_omapl_defconfig ? ? ? ? ? ? | ?291 ++++++-- ?arch/arm/include/asm/setup.h ? ? ? ? ? ? ? ? ? ? ? | ? ?5 + ?arch/arm/mach-davinci/Kconfig ? ? ? ? ? ? ? ? ? ? ?| ? ?7 + ?arch/arm/mach-davinci/Makefile ? ? ? ? ? ? ? ? ? ? | ? ?1 + ?arch/arm/mach-davinci/board-mityomapl138.c ? ? ? ? | ?793 ++++++++++++++++++++ ?.../mach-davinci/include/mach/cb-mityomapl138.h ? ?| ?125 +++ ?arch/arm/mach-davinci/include/mach/da8xx.h ? ? ? ? | ? ?1 + ?arch/arm/mach-davinci/include/mach/uncompress.h ? ?| ? ?1 +?8 files changed, 1181 insertions(+), 43 deletions(-)
[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk { ? ? ?__u32 fmemclk; ?};Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +?* ?see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +?*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. ?I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. ?There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). ?We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. ?E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. ?The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. ?It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. ?That means supporting many variants of kernels for the different host boards, not just an EVM. ?I'd like to avoid that if I could, as the regression testing for new options might get out of hand. ?And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. ?There are a lot of threads about why letting drivers mess with the pins is bad. ?So this is a non-starter.
d) use
ATAG_REVISIONand a single board fileThere is currently a tag called
ATAG_REVISIONwhich sets a global variable 'system_rev' based on this tagq. ?This tag was intended for exactly this purpose.Quoted 7 lines
You can then have a single machine type, a single board file and the boot loader can change
ATAG_REVISIONbased on the board specifics. ?The board file can then check 'system_rev' and handle specifics that way.This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
So, if for example, we have 3 boards that use this SOM, and they vary by desired peripheral:
Host Board 1 Peripherals = UARTS 0 and 1, SPI0 CS2, RMII, etc. Host Board 2 Peripherals = UARTS 1 and 2, SPI1 CS1, MII, etc. Host Board 3 Peripherals = UARTS 0, 1 and 2, SPI1 CS1, MII, etc.
Then by this approach we would have:
mityomapl138_init()
{
? /* Common NAND/NOR Init */? switch (
system_rev) {
? ? ?case 1:
? ? ? ? ?/* setup uarts 0 & 1, SPI0 CS2, RMII */ ? ? ?case 2:
? ? ? ? ?/* setup uarts 1 & 2, SPI1 CS1, MII */ ? ? ?case 3:
? ? ?default:
? ? ? ? ?/* setup uarts 0 & 1 & 2, SPI1 CS1, MII */ ? ? ? ? ?/* and so forth.... */
? }? /* Common Peripheral Init */
}
Quoted 6 lines
Each time a new board is developed to use the SOM, you then grow the init code accordingly? ?I was hoping not to have to continuously drop patches for new boards using this SOM. ?I was really trying to have one binary kernel that would be flexible enough to support the peripherals that need to be handed to the device framework for any host board using this SOM (properly configured via bootloader). ?Is this not possible?
Michael, could you pack the available peripherals into the bits of ATAG_REVISION?
#define MIGHTYDSP_UART0 BIT(0)
#define MIGHTYDSP_UART1 BIT(1)
#define MIGHTYDSP_UART2 BIT(2)
#define MIGHTYDSP_SPI1 BIT(3)
mityomapl138_init()
{
/* Common NAND/NOR Init */
if(system_rev & MIGHTYDSP_UART0) { /* setup uart0 */ }
if(system_rev & MIGHTYDSP_SPI1) { /*setup spi1*/ }
/* Common Peripheral Init */
}
Kevin, is that legal use of ATAG_REVISION?
Best Regards,
Ben Gardiner
---
Nanometrics Inc.
http://www.nanometrics.ca
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 173 lines · Ben Gardiner
Quoted 152 lines · Michael Williamson
Quoted 113 lines · Kevin Hilman
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
d) use
ATAG_REVISIONand a single board fileThere is currently a tag called
ATAG_REVISIONwhich sets a global variable 'system_rev' based on this tagq. This tag was intended for exactly this purpose.Quoted 7 lines
You can then have a single machine type, a single board file and the boot loader can change
ATAG_REVISIONbased on the board specifics. The board file can then check 'system_rev' and handle specifics that way.This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
So, if for example, we have 3 boards that use this SOM, and they vary by desired peripheral:
Host Board 1 Peripherals = UARTS 0 and 1, SPI0 CS2, RMII, etc. Host Board 2 Peripherals = UARTS 1 and 2, SPI1 CS1, MII, etc. Host Board 3 Peripherals = UARTS 0, 1 and 2, SPI1 CS1, MII, etc.
Then by this approach we would have:
mityomapl138_init()
{
/* Common NAND/NOR Init */switch (system_rev) { case 1: /* setup uarts 0 & 1, SPI0 CS2, RMII */ case 2: /* setup uarts 1 & 2, SPI1 CS1, MII */ case 3: default: /* setup uarts 0 & 1 & 2, SPI1 CS1, MII */ /* and so forth.... */ }/* Common Peripheral Init */
}Quoted 6 lines
Each time a new board is developed to use the SOM, you then grow the init code accordingly? I was hoping not to have to continuously drop patches for new boards using this SOM. I was really trying to have one binary kernel that would be flexible enough to support the peripherals that need to be handed to the device framework for any host board using this SOM (properly configured via bootloader). Is this not possible?
Michael, could you pack the available peripherals into the bits of
ATAG_REVISION?#define
MIGHTYDSP_UART0BIT(0)
#defineMIGHTYDSP_UART1BIT(1)
#defineMIGHTYDSP_UART2BIT(2)
#defineMIGHTYDSP_SPI1BIT(3)
mityomapl138_init()
{
/* Common NAND/NOR Init */
Quoted 9 lines
if(system_rev & MIGHTYDSP_UART0){ /* setup uart0 */ }
if(system_rev & MIGHTYDSP_SPI1){ /*setup spi1*/ }/* Common Peripheral Init */
}Kevin, is that legal use of
ATAG_REVISION?
It's unlikely. There are strings to pass to the framebuffer device for the da850, multiple CS pin assignments as well as multiple McASP channel configurations. I'll look into it. Thanks.
-Mike
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 182 lines · Michael Williamson
Quoted 180 lines · Ben Gardiner
Quoted 152 lines · Michael Williamson
Quoted 113 lines · Kevin Hilman
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
d) use
ATAG_REVISIONand a single board fileThere is currently a tag called
ATAG_REVISIONwhich sets a global variable 'system_rev' based on this tagq. This tag was intended for exactly this purpose.Quoted 7 lines
You can then have a single machine type, a single board file and the boot loader can change
ATAG_REVISIONbased on the board specifics. The board file can then check 'system_rev' and handle specifics that way.This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
So, if for example, we have 3 boards that use this SOM, and they vary by desired peripheral:
Host Board 1 Peripherals = UARTS 0 and 1, SPI0 CS2, RMII, etc. Host Board 2 Peripherals = UARTS 1 and 2, SPI1 CS1, MII, etc. Host Board 3 Peripherals = UARTS 0, 1 and 2, SPI1 CS1, MII, etc.
Then by this approach we would have:
mityomapl138_init()
{
/* Common NAND/NOR Init */switch (system_rev) { case 1: /* setup uarts 0 & 1, SPI0 CS2, RMII */ case 2: /* setup uarts 1 & 2, SPI1 CS1, MII */ case 3: default: /* setup uarts 0 & 1 & 2, SPI1 CS1, MII */ /* and so forth.... */ }/* Common Peripheral Init */
}Quoted 6 lines
Each time a new board is developed to use the SOM, you then grow the init code accordingly? I was hoping not to have to continuously drop patches for new boards using this SOM. I was really trying to have one binary kernel that would be flexible enough to support the peripherals that need to be handed to the device framework for any host board using this SOM (properly configured via bootloader). Is this not possible?
Michael, could you pack the available peripherals into the bits of
ATAG_REVISION?#define
MIGHTYDSP_UART0BIT(0)
#defineMIGHTYDSP_UART1BIT(1)
#defineMIGHTYDSP_UART2BIT(2)
#defineMIGHTYDSP_SPI1BIT(3)
mityomapl138_init()
{
/* Common NAND/NOR Init */
if(system_rev & MIGHTYDSP_UART0){ /* setup uart0 */ }
if(system_rev & MIGHTYDSP_SPI1){ /*setup spi1*/ }/* Common Peripheral Init */
}
Quoted 6 lines
Quoted 1 line
Kevin, is that legal use of
ATAG_REVISION?It's unlikely. There are strings to pass to the framebuffer device for the da850,
For the framebuffer, there are existing command-line options to be used and/or expanded.
Quoted 2 lines
multiple CS pin assignments as well as multiple McASP channel configurations. I'll look into it. Thanks.
I would advise using the ATAG_REVISION for basic setup, but consider using/expanding the command-line options for specific drivers.
Kevin
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 194 lines · Kevin Hilman
Quoted 182 lines · Michael Williamson
Quoted 180 lines · Ben Gardiner
Quoted 152 lines · Michael Williamson
Quoted 113 lines · Kevin Hilman
Quoted 100 lines · Michael Williamson
Quoted 36 lines · Sekhar
Hi Michael,
Quoted 7 lines · Michael Williamson
This patch adds support for the MityDSP-L138 and MityARM-1808 system on
module (SOM) under the registered machine "mityomapl138". These SOMs are based on the da850 davinci CPU architecture. Information on these SOMs may be found at http://www.mitydsp.com.Signed-off-by Michael Williamson <[email protected]>---
[...]
Quoted 11 lines
arch/arm/configs/da8xx_omapl_defconfig | 291 ++++++-- arch/arm/include/asm/setup.h | 5 + arch/arm/mach-davinci/Kconfig | 7 + arch/arm/mach-davinci/Makefile | 1 + arch/arm/mach-davinci/board-mityomapl138.c | 793 ++++++++++++++++++++ .../mach-davinci/include/mach/cb-mityomapl138.h | 125 +++ arch/arm/mach-davinci/include/mach/da8xx.h | 1 + arch/arm/mach-davinci/include/mach/uncompress.h | 1 + 8 files changed, 1181 insertions(+), 43 deletions(-)[...]
Quoted 8 lines
arch/arm/include/asm/setup.h +0
-0@@ -143,6 +143,11 @@ struct tag_memclk {__u32 fmemclk; };Quoted 7 lines
arch/arm/include/asm/setup.h struct tag_memclk { · line 149
Quoted 4 lines
arch/arm/include/asm/setup.h +4
-0+/** MityDSP-L138 peripheral configuration info, +* see arch/arm/mach-davinci/include/mach/cb-mityomapl138.h +*/ +#define ATAG_PERIPHERALS 0x42000101Instead of naming this so generic, can you call this
ATAG_MITYDSPL138or something like that?Yes. I would be glad to rename it, assuming some other approach is not used instead.
Quoted 5 lines
Since passing peripheral configuration from bootloader is a first for DaVinci, can you please explain why this is the best suited method for this board and why methods used on other boards wont work?
Well, the problem we are struggling with is that we'd like to avoid generating a pile of separate machine types for the different boards that are needed to support for this common SOM part with regards to the peripheral selection. There are already have 4 different boards with slightly different peripherals already being used with this SOM, and it's a challenge enough just to try to get one configuration through this cycle (which I am new to). We are expecting many more (10's per year).
In general, the only real difference on any of these boards will be in regards to peripheral selection/configuration. E.G., using RMII vs. MII, or using different McASP pins or different numbers of channels, or adding a couple of SPI devices on different chip selects, LCD settings, etc. Seems like we shouldn't need to make a whole new machine up to support these kinds of things.
This came up in a thread on this mailing list, see
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg17042.html
The approach here was pretty much what Kevin suggested as an alternate to trying to port a flat device tree implementation like the powerpc folks use. The only difference was that I didn't think I could jam everything I wanted onto the kernel command line without it getting out of hand, so I am proposing a separate ATAG to provide the peripheral configuration. It's not perfect, but I wanted to get something out there as if it's rejected then we only have a few boards to rewrite code for.
Other than device trees, the only other approaches I've seen so far to sort out altering peripheral configuration is:
a) Make a new board (a new board file, etc., KConfig option, etc.)
b) Start in with a pile of #ifdefs, etc., and add a lot of peripheral on/off options to the KConfig/Make system. That means supporting many variants of kernels for the different host boards, not just an EVM. I'd like to avoid that if I could, as the regression testing for new options might get out of hand. And it didn't seem consistent with making a flexible kernel.
Quoted 4 lines
c) Allow peripheral drivers to probe and initialize pins, etc. in the modules, then load the right drivers up for your board. There are a lot of threads about why letting drivers mess with the pins is bad. So this is a non-starter.
d) use
ATAG_REVISIONand a single board fileThere is currently a tag called
ATAG_REVISIONwhich sets a global variable 'system_rev' based on this tagq. This tag was intended for exactly this purpose.Quoted 7 lines
You can then have a single machine type, a single board file and the boot loader can change
ATAG_REVISIONbased on the board specifics. The board file can then check 'system_rev' and handle specifics that way.This is also much clearer as all the things that are unique to that board will be contained in the board file and not hidden away in the bootloader.
So, if for example, we have 3 boards that use this SOM, and they vary by desired peripheral:
Host Board 1 Peripherals = UARTS 0 and 1, SPI0 CS2, RMII, etc. Host Board 2 Peripherals = UARTS 1 and 2, SPI1 CS1, MII, etc. Host Board 3 Peripherals = UARTS 0, 1 and 2, SPI1 CS1, MII, etc.
Then by this approach we would have:
mityomapl138_init()
{
/* Common NAND/NOR Init */switch (system_rev) { case 1: /* setup uarts 0 & 1, SPI0 CS2, RMII */ case 2: /* setup uarts 1 & 2, SPI1 CS1, MII */ case 3: default: /* setup uarts 0 & 1 & 2, SPI1 CS1, MII */ /* and so forth.... */ }/* Common Peripheral Init */
}Quoted 6 lines
Each time a new board is developed to use the SOM, you then grow the init code accordingly? I was hoping not to have to continuously drop patches for new boards using this SOM. I was really trying to have one binary kernel that would be flexible enough to support the peripherals that need to be handed to the device framework for any host board using this SOM (properly configured via bootloader). Is this not possible?
Michael, could you pack the available peripherals into the bits of
ATAG_REVISION?#define
MIGHTYDSP_UART0BIT(0)
#defineMIGHTYDSP_UART1BIT(1)
#defineMIGHTYDSP_UART2BIT(2)
#defineMIGHTYDSP_SPI1BIT(3)
mityomapl138_init()
{
/* Common NAND/NOR Init */
if(system_rev & MIGHTYDSP_UART0){ /* setup uart0 */ }
if(system_rev & MIGHTYDSP_SPI1){ /*setup spi1*/ }/* Common Peripheral Init */
}Quoted 6 lines
Quoted 1 line
Kevin, is that legal use of
ATAG_REVISION?It's unlikely. There are strings to pass to the framebuffer device for the da850,
For the framebuffer, there are existing command-line options to be used and/or expanded.
Quoted 9 lines
Quoted 2 lines
multiple CS pin assignments as well as multiple McASP channel configurations. I'll look into it. Thanks.
I would advise using the
ATAG_REVISIONfor basic setup, but consider using/expanding the command-line options for specific drivers.Kevin
Looks like ATAG_REVISION is going to be (at least partially) consumed by the patch Sekhar is working on here:
https://patchwork.kernel.org/patch/110577/
I think the problem I have is that we need to support multiple boards using the developed SOM. The SOM in and of itself does not define a "board". It has to be paired with a host board.
I had thought there would be a way to avoid generation of multiple board files that only differed in the chip peripheral instantiation / configuration. With the powerpc architecture, the device tree allowed instantiation and configuration of SOC peripherals at load/runtime. I don't see anything like that capability in the ARM architecture. The command line options might work, but I expect that they would rapidly devolve into hacks.
The patch that has been put forth to read additional board information (MAC address, etc.) from a SPI NOR device during the MTD probe phase (link below) might work, but it requires that the SPI and the MTD drivers are working well enough to read this data out. Not helpful if you want to be able to configure the SPI at startup (add additional chip selects, etc.)
https://patchwork.kernel.org/patch/118530/
I think I need to withdraw this submission. We can't afford to maintain the board files for the number of host boards that are already being developed, and there's no way we could get them all issued to the mainline.
There don't appear to be any instances of non-EVM type boards in mach-davinci (at least for the da850), so my guess is other users of this SOC have come to the same conclusion.
Thanks for all the comments.
-Mike
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
Quoted 2 lines · Michael Williamson
On 8/10/2010 10:29 AM, Kevin Hilman wrote:
[...]
Quoted 14 lines
Quoted 4 lines
I would advise using the
ATAG_REVISIONfor basic setup, but consider using/expanding the command-line options for specific drivers.Looks like
ATAG_REVISIONis going to be (at least partially) consumed by the patch Sekhar is working on here:https://patchwork.kernel.org/patch/110577/
I think the problem I have is that we need to support multiple boards using the developed SOM. The SOM in and of itself does not define a "board". It has to be paired with a host board.
Quoted 5 lines
I had thought there would be a way to avoid generation of multiple board files that only differed in the chip peripheral instantiation / configuration. With the powerpc architecture, the device tree allowed instantiation and configuration of SOC peripherals at load/runtime. I don't see anything like that capability in the ARM architecture.
The good news is that there is active work for device tree support for ARM. The bad news is that it is still a ways from being ready.
Quoted 9 lines
The command line options might work, but I expect that they would rapidly devolve into hacks.
The patch that has been put forth to read additional board information (MAC
address, etc.) from a SPI NOR device during the MTD probe phase (link below) might work, but it requires that the SPI and the MTD drivers are working well enough to read this data out. Not helpful if you want to be able to configure the SPI at startup (add additional chip selects, etc.)
Another possible option is to use ATAG_REVISION to do the absolute minimal setup so you can get to from non-volatile storage. In your case, the minimum is probably SPI chipselect (and UART for debug.) After that, the config for all the other peripherals could be flashed.
Quoted 6 lines
https://patchwork.kernel.org/patch/118530/
I think I need to withdraw this submission. We can't afford to maintain the board files for the number of host boards that are already being developed, and there's no way we could get them all issued to the mainline.
I agree, having to maintain a large number of minimally different board files is not a good solution either.
Quoted 3 lines
There don't appear to be any instances of non-EVM type boards in mach-davinci (at least for the da850), so my guess is other users of this SOC have come to the same conclusion.
Possibly, but from what I see and hear, it's more likely that most other users have not been as interested in getting support for their boards upstream. Thanks for putting in the extra effort to try.
If you're willing to give it another spin, I still think it's possible to get what you would need with the "hybrid" solution of using ATAG_REVISION for minimal setup, and getting the rest from flash.
Kevin
PATCH v3 1/1 davinci: Add MityDSP-L138/MityARM-1808 SOM support
In reply to Nori, SekharQuoted 11 lines · Sekhar
arch/arm/mach-davinci/board-mityomapl138.c line 267
Quoted 7 lines
arch/arm/mach-davinci/board-mityomapl138.c new file +5
-0+ +static struct davinci_i2c_platform_data mityomap_i2c_0_pdata = { + .bus_freq =100 ,/* kHz */ + .bus_delay =0 ,/* usec */ +};This is exactly the pdata that davinci I2C driver uses by default, so you can save a few bytes and a few lines of code by passing NULL pdata.
Quoted 2 lines
[...]
So I tried your suggestion and passed NULL as the pdata argument, e.g.,
...
ret = da8xx_register_i2c(0, NULL);
...
and the kernel locks up during initialization. Did I not understand what you were suggesting? I will back this suggestion out until I get a chance to hunt down the problem. I see no other boards initialize the i2c this way (they explicitly provide a structure).
Thanks.
-Mike