mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
1700424553
Some users noticed repeated resyncs at random intervals, which go away when the MEI driver is configured to use polling instead of interrupts. Debugging shows that this seems to be caused by concurrent calls to MEI_ReadMailbox (in the interrupt handler) and MEI_WriteMailbox. This appears to be mostly triggered when there is an interrupt for vectoring error reports. In polling mode, calls to MEI_ReadMailbox are protected by the same semaphore as is used in MEI_WriteMailbox. When interrupts are used, MEI_WriteMailbox appears to rely on MEI_DisableDeviceInt and MEI_EnableDeviceInt to provide mutual exclusion with the interrupt handler. These functions mask/unmask interrupts, and there is an additional check of the mask in the interrupt handler itself. However, this is not sufficient on systems with SMP, as the interrupt handler may be running in parallel, and could already be past the interrupt mask check at this point. This adds a lock to the interrupt handler, and also acquires this lock in MEI_DisableDeviceInt. This should make sure that after a call to MEI_DisableDeviceInt the interrupt is masked, and the interrupt handler is either not running, has alread finished its work, or is still before the interrupt mask check, and is thus going to detect the change. Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Signed-off-by: Jan Hoffmann <jan@3e8.eu>
100 lines
3.0 KiB
Makefile
100 lines
3.0 KiB
Makefile
# Copyright (C) 2012 OpenWrt.org
|
|
# Copyright (C) 2015-2016 Lantiq Beteiligungs GmbH & Co KG.
|
|
#
|
|
# 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.5.17.6
|
|
PKG_RELEASE:=6
|
|
|
|
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_SOURCE_URL:=@OPENWRT
|
|
PKG_HASH:=94f6904364348b7f74087e721968abc28b2564fb9bd8899aa930d36490387662
|
|
PKG_FIXUP:=autoreconf
|
|
PKG_FLAGS:=nonshared
|
|
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
|
PKG_LICENSE:=GPL-2.0 BSD-2-Clause
|
|
PKG_LICENSE_FILES:=LICENSE
|
|
PKG_EXTMOD_SUBDIRS:=src
|
|
|
|
include $(INCLUDE_DIR)/package.mk
|
|
|
|
define KernelPackage/ltq-vdsl-vr9-mei
|
|
TITLE:=mei driver for vdsl
|
|
SECTION:=sys
|
|
SUBMENU:=Network Devices
|
|
DEPENDS:=@TARGET_lantiq_xrx200 +kmod-ltq-ifxos +kmod-ltq-vectoring
|
|
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
|
|
|
|
|
|
define Package/ltq-vdsl-mei-test
|
|
SECTION:=net
|
|
CATEGORY:=Network
|
|
TITLE:=Lantiq mei driver test tool
|
|
URL:=http://www.lantiq.com/
|
|
DEPENDS:=@TARGET_lantiq_xrx200
|
|
endef
|
|
|
|
define Package/ltq-vdsl-mei-test/description
|
|
Userland tool to directly control the mei driver, this is only needed
|
|
for test and development purposes.
|
|
endef
|
|
|
|
MAKE_FLAGS += \
|
|
$(KERNEL_MAKE_FLAGS) \
|
|
SHELL="$(BASH)"
|
|
|
|
# ltq-vdsl-app uses a header provided by the MEI driver which has some
|
|
# conditionals.
|
|
# Define the conditionals here to have the same view on both sides. If you
|
|
# change them, you need to change them for the ltq-vdsl-app as well
|
|
MEI_DRV_CFLAGS = \
|
|
-DMEI_DRV_ATM_PTM_INTERFACE_ENABLE=1 \
|
|
-DMEI_SUPPORT_DEBUG_STREAMS=1 \
|
|
-DMEI_SUPPORT_OPTIMIZED_FW_DL=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="$(MEI_DRV_CFLAGS)" \
|
|
--enable-linux-26 \
|
|
--enable-kernelbuild="$(LINUX_DIR)" \
|
|
--enable-drv_test_appl=yes \
|
|
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))
|
|
|
|
define Package/ltq-vdsl-mei-test/install
|
|
$(INSTALL_DIR) $(1)/bin
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mei_cpe_drv_test $(1)/bin
|
|
endef
|
|
|
|
$(eval $(call BuildPackage,ltq-vdsl-mei-test))
|