From ef93053696509cfcc984f94a197526c40c264503 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 14 Mar 2013 18:43:23 +0000 Subject: [PATCH] add vdsl mei driver Signed-off-by: John Crispin SVN-Revision: 36024 --- package/platform/lantiq/ltq-vdsl-mei/Makefile | 60 ++++ .../ltq-vdsl-mei/patches/100-compat.patch | 298 ++++++++++++++++++ 2 files changed, 358 insertions(+) create mode 100644 package/platform/lantiq/ltq-vdsl-mei/Makefile create mode 100644 package/platform/lantiq/ltq-vdsl-mei/patches/100-compat.patch diff --git a/package/platform/lantiq/ltq-vdsl-mei/Makefile b/package/platform/lantiq/ltq-vdsl-mei/Makefile new file mode 100644 index 0000000000..8561573f7d --- /dev/null +++ b/package/platform/lantiq/ltq-vdsl-mei/Makefile @@ -0,0 +1,60 @@ +# Copyright (C) 2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=ltq-vdsl-vr9-mei +PKG_VERSION:=1.2.0 +PKG_RELEASE:=1 + +PKG_BASE_NAME:=drv_mei_cpe +PKG_SOURCE:=$(PKG_BASE_NAME)-$(PKG_VERSION).tar.gz +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_BASE_NAME)-$(PKG_VERSION) +PKG_MD5SUM:=cf2fccc1bc72390b2aec46650abf2f20 +PKG_FIXUP:=autoreconf +PKG_MAINTAINER:=John Crispin + +include $(INCLUDE_DIR)/package.mk + +define KernelPackage/ltq-vdsl-vr9-mei + TITLE:=mei driver for vdsl + SECTION:=sys + SUBMENU:=Network Devices + DEPENDS:=@TARGET_lantiq_xway +kmod-ltq-ifxos + FILES:=$(PKG_BUILD_DIR)/src/drv_mei_cpe.ko + AUTOLOAD:=$(call AutoLoad,50,drv_mei_cpe) +endef + +define KernelPackage/ltq-vdsl-vr9-mei/description + Lantiq MEI CPE Kernel Module Driver +endef + +#DEBUG=-DDEBUG_PRINT=1 + +CONFIGURE_ARGS += \ + --enable-kernelincl="$(LINUX_DIR)/include" \ + --enable-device=vr9 \ + --with-max-device=1 \ + --with-lines-per-device=1 \ + --enable-debug \ + --enable-error_print \ + --enable-ifxos-include="-I$(STAGING_DIR)/usr/include/ifxos/" \ + --enable-ifxos-library="-L$(STAGING_DIR)/usr/lib" \ + --enable-add_drv_cflags="$(DEBUG) -DMEI_DRV_ATM_PTM_INTERFACE_ENABLE=1 -fno-pic -mno-abicalls -mlong-calls -O2 -g0" \ + --enable-linux-26 \ + --enable-kernelbuild="$(LINUX_DIR)" \ + ARCH=$(LINUX_KARCH) + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/vdsl + $(CP) $(PKG_BUILD_DIR)/src/drv_mei_cpe_api_intern.h $(1)/usr/include/vdsl/ + $(CP) $(PKG_BUILD_DIR)/src/drv_mei_cpe_api_atm_ptm_intern.h $(1)/usr/include/vdsl/ + $(CP) $(PKG_BUILD_DIR)/src/drv_mei_cpe_interface.h $(1)/usr/include/vdsl + $(CP) $(PKG_BUILD_DIR)/src/drv_mei_cpe_config.h $(1)/usr/include/vdsl/ + $(CP) $(PKG_BUILD_DIR)/src/cmv_message_format.h $(1)/usr/include/vdsl/ +endef + +$(eval $(call KernelPackage,ltq-vdsl-vr9-mei)) diff --git a/package/platform/lantiq/ltq-vdsl-mei/patches/100-compat.patch b/package/platform/lantiq/ltq-vdsl-mei/patches/100-compat.patch new file mode 100644 index 0000000000..5822e74a75 --- /dev/null +++ b/package/platform/lantiq/ltq-vdsl-mei/patches/100-compat.patch @@ -0,0 +1,298 @@ +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_common.c +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_common.c 2011-10-26 00:49:51.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_common.c 2012-11-28 15:14:10.421633418 +0100 +@@ -20,7 +20,6 @@ + /* get at first the driver configuration */ + #include "drv_mei_cpe_config.h" + +-#include "ifx_types.h" + #include "drv_mei_cpe_os.h" + #include "drv_mei_cpe_dbg.h" + +Index: drv_mei_cpe-1.2.0/configure.in +=================================================================== +--- drv_mei_cpe-1.2.0.orig/configure.in 2012-01-20 17:41:07.000000000 +0100 ++++ drv_mei_cpe-1.2.0/configure.in 2012-11-28 15:14:10.421633418 +0100 +@@ -140,7 +140,7 @@ + AC_ARG_ENABLE(kernelbuild, + AC_HELP_STRING([--enable-kernelbuild=x],[Set the target kernel build path]), + [ +- if test -e $enableval/include/linux/autoconf.h; then ++ if test -e $enableval/include/generated/autoconf.h; then + AC_SUBST([KERNEL_BUILD_PATH],[$enableval]) + else + AC_MSG_ERROR([The kernel build directory is not valid or not configured!]) +Index: drv_mei_cpe-1.2.0/configure +=================================================================== +--- drv_mei_cpe-1.2.0.orig/configure 2012-01-20 17:50:02.000000000 +0100 ++++ drv_mei_cpe-1.2.0/configure 2012-11-28 15:14:56.637634577 +0100 +@@ -617,6 +617,7 @@ + am__fastdepCC_FALSE + am__fastdepCC_TRUE + CCDEPMODE ++am__nodep + AMDEPBACKSLASH + AMDEP_FALSE + AMDEP_TRUE +@@ -2367,11 +2368,11 @@ + + # We need awk for the "check" target. The system "awk" is bad on + # some platforms. +-# Always define AMTAR for backward compatibility. ++# Always define AMTAR for backward compatibility. Yes, it's still used ++# in the wild :-( We should find a proper way to deprecate it ... ++AMTAR='$${TAR-tar}' + +-AMTAR=${AMTAR-"${am_missing_run}tar"} +- +-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ++am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + +@@ -3219,6 +3220,7 @@ + if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' ++ am__nodep='_no' + fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= +@@ -3243,6 +3245,7 @@ + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. ++ rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. +@@ -3302,7 +3305,7 @@ + break + fi + ;; +- msvisualcpp | msvcmsys) ++ msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. +@@ -3656,7 +3659,7 @@ + # Check whether --enable-kernelbuild was given. + if test "${enable_kernelbuild+set}" = set; then : + enableval=$enable_kernelbuild; +- if test -e $enableval/include/linux/autoconf.h; then ++ if test -e $enableval/include/generated/autoconf.h; then + KERNEL_BUILD_PATH=$enableval + + else +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_linux.h +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_linux.h 2011-07-25 20:41:02.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_linux.h 2012-11-28 15:14:10.429633419 +0100 +@@ -34,8 +34,6 @@ + #include + #include + +-#include +- + #if (MEI_DRV_IFXOS_ENABLE == 0) + + #include +@@ -44,8 +42,6 @@ + #include + #include + +-#include +- + #endif /* #if (MEI_DRV_IFXOS_ENABLE == 0)*/ + + /* ============================================================================ +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_mei_vr9.h +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_mei_vr9.h 2011-07-25 20:41:02.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_mei_vr9.h 2012-11-28 15:14:10.429633419 +0100 +@@ -40,12 +40,6 @@ + #endif + #endif + +-#ifdef LINUX +- #include +-#else +- #error "Please check PMU driver path!" +-#endif +- + /* ============================================================================ + Module : RCU register address and bits + ========================================================================= */ +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_api_atm_ptm_intern.c +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_api_atm_ptm_intern.c 2011-07-25 20:41:02.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_api_atm_ptm_intern.c 2012-11-28 15:14:10.429633419 +0100 +@@ -25,11 +25,7 @@ + #include "ifx_types.h" + #include "drv_mei_cpe_os.h" + +-#ifdef LINUX +- #include +-#else +- #error "ATM/PTM internal interface is only supported for Linux!" +-#endif ++#include + + /** get interface and configuration */ + #include "drv_mei_cpe_interface.h" +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_linux.c +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_linux.c 2011-07-25 20:41:02.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_linux.c 2012-11-28 15:24:56.269649609 +0100 +@@ -32,11 +32,9 @@ + #include + #include + +-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)) +-#include +-#endif +-#include ++#include + ++#include + #include + #include + #include +@@ -87,6 +85,8 @@ + #include "drv_mei_cpe_device_cntrl.h" + #endif + ++#define INT_NUM_IM4_IRL30 (INT_NUM_IM4_IRL0 + 30) ++ + /* =================================== + extern function declarations + =================================== */ +@@ -122,7 +122,7 @@ + size_t length, + loff_t * ppos); + +-static int MEI_Ioctl( struct inode *inode, struct file *filp, ++static long MEI_Ioctl(struct file *filp, + unsigned int nCmd, unsigned long nArgument); + + static unsigned int MEI_Poll (struct file *filp, poll_table *table); +@@ -137,7 +137,7 @@ + + static void MEI_IfxFreeIrq(unsigned int usedIrq, void *pUsedDevId); + +-static irqreturn_t MEI_InterruptLinux(int irq, void *dev_id, struct pt_regs *regs); ++static irqreturn_t MEI_InterruptLinux(int irq, void *dev_id); + #endif + + #if CONFIG_PROC_FS +@@ -194,7 +194,9 @@ + /* =================================== */ + /* Local variables (LINUX) */ + /* =================================== */ +-static IFX_uint8_t major_number = 0; ++#define MEI_MAJOR 105 ++ ++static IFX_uint8_t major_number = MEI_MAJOR; + #ifdef MODULE + #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) + MODULE_PARM(major_number, "b"); +@@ -242,7 +244,7 @@ + MEI_Write, + poll: + MEI_Poll, +- ioctl: ++ unlocked_ioctl: + MEI_Ioctl, + open: + MEI_OpenOS, +@@ -457,7 +459,7 @@ + 0 and positive values - success, + negative value - ioctl failed + */ +-static int MEI_Ioctl( struct inode *inode, struct file *filp, ++static long MEI_Ioctl(struct file *filp, + unsigned int nCmd, unsigned long nArgument) + { + int ret = 0, retSize = sizeof(IOCTL_MEI_ioctl_t); +@@ -1242,7 +1246,7 @@ + \remark + None. + */ +-static irqreturn_t MEI_InterruptLinux(int irq, void *dev_id, struct pt_regs *regs) ++static irqreturn_t MEI_InterruptLinux(int irq, void *dev_id) + { + IFX_int32_t meiIntCnt = 0; + MEIX_CNTRL_T *pMeiXCntrlList = (MEIX_CNTRL_T*)dev_id; +@@ -1691,6 +1695,7 @@ + static int __init MEI_module_init (void) + { + int result; ++ static struct class *dsl_class; + + printk(KERN_INFO "%s" MEI_DRV_CRLF, &MEI_WHATVERSION[4]); + printk(KERN_INFO "(c) Copyright 2009, Infineon Technologies AG" MEI_DRV_CRLF); +@@ -1730,6 +1735,8 @@ + return (result); + } + ++ dsl_class = class_create(THIS_MODULE, "ifx_mei"); ++ device_create(dsl_class, NULL, MKDEV(MEI_MAJOR, 0), NULL, "ifx_mei"); + return 0; + } + +Index: drv_mei_cpe-1.2.0/src/drv_mei_cpe_mei_access_vr9.c +=================================================================== +--- drv_mei_cpe-1.2.0.orig/src/drv_mei_cpe_mei_access_vr9.c 2011-07-25 20:41:02.000000000 +0200 ++++ drv_mei_cpe-1.2.0/src/drv_mei_cpe_mei_access_vr9.c 2012-11-28 15:14:10.433633419 +0100 +@@ -37,6 +37,7 @@ + + #include "cmv_message_format.h" + ++#include + + /* ============================================================================ + Local macro definition +@@ -1527,32 +1528,35 @@ + return IFX_ERROR; + } + ++#define PMU_DFE BIT(9) ++ + IFX_int32_t MEI_BasicChipInit(IFX_void_t) + { + /* Power up MEI */ +- DSL_DFE_PMU_SETUP(IFX_PMU_ENABLE); +- +- if (ifx_pmu_pg_dsl_dfe_enable() != 0) ++// DSL_DFE_PMU_SETUP(IFX_PMU_ENABLE); ++ltq_pmu_enable(PMU_DFE); ++ /* if (ifx_pmu_pg_dsl_dfe_enable() != 0) + { + PRN_ERR_USR_NL( MEI_MEI_ACCESS, MEI_DRV_PRN_LEVEL_ERR, + ("MEI: ERROR - DSL DFE PG enable failed!" MEI_DRV_CRLF)); + return IFX_ERROR; +- } ++ }*/ + + return IFX_SUCCESS; + } + + IFX_int32_t MEI_BasicChipExit(IFX_void_t) + { +- if (ifx_pmu_pg_dsl_dfe_disable() != 0) ++/* if (ifx_pmu_pg_dsl_dfe_disable() != 0) + { + PRN_ERR_USR_NL( MEI_MEI_ACCESS, MEI_DRV_PRN_LEVEL_ERR, + ("MEI: ERROR - DSL DFE PG disable failed!" MEI_DRV_CRLF)); + return IFX_ERROR; + } +- ++*/ + /* Power down MEI */ +- DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); ++// DSL_DFE_PMU_SETUP(IFX_PMU_DISABLE); ++ltq_pmu_disable(PMU_DFE); + + return IFX_SUCCESS; + }