Compare commits
50 Commits
kernel5.10
...
v17.01.0-r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68a04dbb42 | ||
|
|
ec095b5bf3 | ||
|
|
b8fcbbf31d | ||
|
|
70a6bbd53d | ||
|
|
f5e8c908bd | ||
|
|
69f773daa3 | ||
|
|
d46ce9498c | ||
|
|
c170848254 | ||
|
|
2ee7bc0a5e | ||
|
|
f5ab082243 | ||
|
|
66211d0781 | ||
|
|
36db143690 | ||
|
|
ecc362ed04 | ||
|
|
a1f918cd92 | ||
|
|
04a5085127 | ||
|
|
dfe77be01f | ||
|
|
f9022964cf | ||
|
|
acd1795a60 | ||
|
|
a6f3ea5e84 | ||
|
|
6b68635047 | ||
|
|
e9ecb228c9 | ||
|
|
e9d2173921 | ||
|
|
81f2196bb1 | ||
|
|
86b4b027cf | ||
|
|
806d3cc2c3 | ||
|
|
f6de4a5025 | ||
|
|
fc366fde07 | ||
|
|
b630d525c8 | ||
|
|
c2ecf9c37a | ||
|
|
4d73b6b8d0 | ||
|
|
0a4d20fa9c | ||
|
|
392cccb7f4 | ||
|
|
e775adead8 | ||
|
|
6193e3cdee | ||
|
|
b36e24f39e | ||
|
|
296772f939 | ||
|
|
b850218584 | ||
|
|
ef08595c3f | ||
|
|
3a9926e40f | ||
|
|
12392e5600 | ||
|
|
cfb3ef3a97 | ||
|
|
2c4d158d80 | ||
|
|
cf5f7aa0b6 | ||
|
|
4039b3eba1 | ||
|
|
6538961d6a | ||
|
|
c76da77573 | ||
|
|
29a4a17f55 | ||
|
|
c71e13a81a | ||
|
|
2ac776ac76 | ||
|
|
1e1e3ef2fb |
@@ -1,8 +1,4 @@
|
||||
src-git packages https://git.lede-project.org/feed/packages.git
|
||||
src-git luci https://git.lede-project.org/project/luci.git
|
||||
src-git routing https://git.lede-project.org/feed/routing.git
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git
|
||||
#src-git targets https://github.com/openwrt/targets.git
|
||||
#src-git management https://github.com/openwrt-management/packages.git
|
||||
#src-git oldpackages http://git.openwrt.org/packages.git
|
||||
#src-link custom /usr/src/openwrt/custom-feed
|
||||
src-git packages https://git.lede-project.org/feed/packages.git^31d89be9e69bac261bfe7440512cb4e0f3356255
|
||||
src-git luci https://git.lede-project.org/project/luci.git^472dc4b9e2ca71c114f5da70cb612c1089b8daa7
|
||||
src-git routing https://git.lede-project.org/feed/routing.git^a6c7413594a0e4b42dab42bb5fa68534e39b7d0c
|
||||
src-git telephony https://git.lede-project.org/feed/telephony.git^1f0fb2538ba6fc306198fe2a9a4b976d63adb304
|
||||
|
||||
@@ -60,7 +60,7 @@ define Download/git-kernel
|
||||
PROTO:=git
|
||||
VERSION:=$(CONFIG_KERNEL_GIT_BRANCH)
|
||||
FILE:=$(LINUX_SOURCE)
|
||||
SUBDIR:=linux-$(KERNEL_PATCHVER)
|
||||
SUBDIR:=linux-$(LINUX_VERSION)
|
||||
OPTS:=$(KERNEL_GIT_OPTS)
|
||||
endef
|
||||
|
||||
|
||||
@@ -47,6 +47,14 @@ opkg = \
|
||||
|
||||
TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
|
||||
|
||||
ifdef CONFIG_CLEAN_IPKG
|
||||
define clean_ipkg
|
||||
-find $(1)/usr/lib/opkg -type f -and -not -name '*.control' | $(XARGS) rm -rf
|
||||
-sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control
|
||||
-find $(1)/usr/lib/opkg -empty | $(XARGS) rm -rf
|
||||
endef
|
||||
endif
|
||||
|
||||
define prepare_rootfs
|
||||
@if [ -d $(TOPDIR)/files ]; then \
|
||||
$(call file_copy,$(TOPDIR)/files/.,$(1)); \
|
||||
@@ -75,6 +83,6 @@ define prepare_rootfs
|
||||
rm -f $(1)/usr/lib/opkg/lists/*
|
||||
rm -f $(1)/usr/lib/opkg/info/*.postinst*
|
||||
rm -f $(1)/usr/lib/opkg/info/*.prerm*
|
||||
$(if $(CONFIG_CLEAN_IPKG),rm -rf $(1)/usr/lib/opkg)
|
||||
$(call clean_ipkg,$(1))
|
||||
$(call mklibs,$(1))
|
||||
endef
|
||||
|
||||
@@ -164,17 +164,15 @@ ifeq ($(DUMP),1)
|
||||
endif
|
||||
CPU_CFLAGS += -mno-branch-likely
|
||||
CPU_CFLAGS_mips32 = -mips32 -mtune=mips32
|
||||
CPU_CFLAGS_mips32r2 = -mips32r2 -mtune=mips32r2
|
||||
CPU_CFLAGS_mips64 = -mips64 -mtune=mips64 -mabi=64
|
||||
CPU_CFLAGS_24kc = -mips32r2 -mtune=24kc
|
||||
CPU_CFLAGS_74kc = -mips32r2 -mtune=74kc
|
||||
CPU_CFLAGS_octeon = -march=octeon -mabi=64
|
||||
endif
|
||||
ifeq ($(ARCH),i386)
|
||||
CPU_TYPE ?= i486
|
||||
CPU_CFLAGS_i486 = -march=i486
|
||||
CPU_TYPE ?= pentium
|
||||
CPU_CFLAGS_pentium = -march=pentium-mmx
|
||||
CPU_CFLAGS_pentium4 = -march=pentium4
|
||||
CPU_CFLAGS_geode = -march=geode -mmmx -m3dnow
|
||||
endif
|
||||
ifneq ($(findstring arm,$(ARCH)),)
|
||||
CPU_TYPE ?= xscale
|
||||
@@ -259,6 +257,9 @@ ifeq ($(DUMP),1)
|
||||
ifneq ($(CONFIG_VIRTIO),)
|
||||
FEATURES += virtio
|
||||
endif
|
||||
ifneq ($(CONFIG_CPU_MIPS32_R2),)
|
||||
FEATURES += mips16
|
||||
endif
|
||||
FEATURES += $(foreach v,6 7,$(if $(CONFIG_CPU_V$(v)),arm_v$(v)))
|
||||
|
||||
# remove duplicates
|
||||
|
||||
@@ -31,16 +31,16 @@ qstrip_escape=$(subst ','\'',$(call qstrip,$(1)))
|
||||
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
|
||||
|
||||
VERSION_NUMBER:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT)
|
||||
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),17.01.0-rc1)
|
||||
|
||||
VERSION_CODE:=$(call qstrip_escape,$(CONFIG_VERSION_CODE))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION))
|
||||
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r3042-ec095b5)
|
||||
|
||||
VERSION_NICK:=$(call qstrip_escape,$(CONFIG_VERSION_NICK))
|
||||
VERSION_NICK:=$(if $(VERSION_NICK),$(VERSION_NICK),$(RELEASE))
|
||||
|
||||
VERSION_REPO:=$(call qstrip_escape,$(CONFIG_VERSION_REPO))
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/snapshots)
|
||||
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/releases/17.01.0-rc1)
|
||||
|
||||
VERSION_DIST:=$(call qstrip_escape,$(CONFIG_VERSION_DIST))
|
||||
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),LEDE)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
for file in `grep Require-User /usr/lib/opkg/info/*.control | cut -d: -f1`; do
|
||||
for file in `grep -sl Require-User /usr/lib/opkg/info/*.control`; do
|
||||
file="${file##*/}"
|
||||
file="${file%.control}"
|
||||
add_group_and_user "${file}"
|
||||
|
||||
@@ -190,7 +190,7 @@ if VERSIONOPT
|
||||
config VERSION_REPO
|
||||
string
|
||||
prompt "Release repository"
|
||||
default "http://downloads.lede-project.org/snapshots"
|
||||
default "http://downloads.lede-project.org/releases/17.01.0-rc1"
|
||||
help
|
||||
This is the repository address embedded in the image, it defaults
|
||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||
|
||||
@@ -25,6 +25,8 @@ PKG_BUILD_DEPENDS:=grub2/host
|
||||
|
||||
PKG_SSP:=0
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/rbcfg
|
||||
|
||||
@@ -17,6 +17,8 @@ PKG_HASH:=466eca9cdad2c15e957fb9ce7d0b6927ecd17d85c4cc2dff37e97a3e6b209c67
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/yamonenv
|
||||
|
||||
@@ -22,6 +22,8 @@ PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-$(BUILD_VARIANT)/$(PKG_NAM
|
||||
PKG_LICENSE:=GPL-2.0 GPL-2.0+
|
||||
PKG_LICENSE_FILES:=Licenses/README
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define fman/Default
|
||||
|
||||
@@ -20,6 +20,8 @@ PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-$(BUILD_VARIANT)/$(PKG_NAM
|
||||
PKG_LICENSE:=GPL-2.0 GPL-2.0+
|
||||
PKG_LICENSE_FILES:=Licenses/README
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define ppfe/Default
|
||||
|
||||
@@ -22,6 +22,8 @@ PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-$(BUILD_VARIANT)/$(PKG_NAM
|
||||
PKG_LICENSE:=GPL-2.0 GPL-2.0+
|
||||
PKG_LICENSE_FILES:=Licenses/README
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define rcw/Default
|
||||
|
||||
@@ -13,9 +13,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/kdarbyshirebryant/sch_cake.git
|
||||
PKG_SOURCE_DATE:=2016-12-19
|
||||
PKG_SOURCE_VERSION:=70c8eb766d5afcf3cf187594b7cd776da92bee3c
|
||||
PKG_MIRROR_HASH:=16174db5dad0a5b5ba522d4cfc058cff9851ed013a3a05166b04eb127bb12a24
|
||||
PKG_SOURCE_DATE:=2017-01-21
|
||||
PKG_SOURCE_VERSION:=69449f3c554e93bd9f7a9b708c808d11fe5dba74
|
||||
PKG_MIRROR_HASH:=51dcce8b78e3690296aff1fc22f939b4b73904b9c1d21a583d7d6af803926fac
|
||||
PKG_MAINTAINER:=Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@@ -736,7 +736,7 @@ $(eval $(call KernelPackage,mppe))
|
||||
|
||||
|
||||
SCHED_MODULES = $(patsubst $(LINUX_DIR)/net/sched/%.ko,%,$(wildcard $(LINUX_DIR)/net/sched/*.ko))
|
||||
SCHED_MODULES_CORE = sch_ingress sch_fq_codel sch_hfsc cls_fw cls_route cls_flow cls_tcindex cls_u32 em_u32 act_mirred act_skbedit
|
||||
SCHED_MODULES_CORE = sch_ingress sch_fq_codel sch_hfsc sch_htb sch_tbf cls_fw cls_route cls_flow cls_tcindex cls_u32 em_u32 act_mirred act_skbedit
|
||||
SCHED_MODULES_FILTER = $(SCHED_MODULES_CORE) act_connmark sch_netem
|
||||
SCHED_MODULES_EXTRA = $(filter-out $(SCHED_MODULES_FILTER),$(SCHED_MODULES))
|
||||
SCHED_FILES = $(patsubst %,$(LINUX_DIR)/net/sched/%.ko,$(filter $(SCHED_MODULES_CORE),$(SCHED_MODULES)))
|
||||
@@ -748,6 +748,8 @@ define KernelPackage/sched-core
|
||||
KCONFIG:= \
|
||||
CONFIG_NET_SCHED=y \
|
||||
CONFIG_NET_SCH_HFSC \
|
||||
CONFIG_NET_SCH_HTB \
|
||||
CONFIG_NET_SCH_TBF \
|
||||
CONFIG_NET_SCH_INGRESS \
|
||||
CONFIG_NET_SCH_FQ_CODEL \
|
||||
CONFIG_NET_CLS=y \
|
||||
@@ -789,12 +791,10 @@ define KernelPackage/sched
|
||||
KCONFIG:= \
|
||||
CONFIG_NET_SCH_CODEL \
|
||||
CONFIG_NET_SCH_DSMARK \
|
||||
CONFIG_NET_SCH_HTB \
|
||||
CONFIG_NET_SCH_FIFO \
|
||||
CONFIG_NET_SCH_GRED \
|
||||
CONFIG_NET_SCH_PRIO \
|
||||
CONFIG_NET_SCH_RED \
|
||||
CONFIG_NET_SCH_TBF \
|
||||
CONFIG_NET_SCH_SFQ \
|
||||
CONFIG_NET_SCH_TEQL \
|
||||
CONFIG_NET_SCH_FQ \
|
||||
|
||||
@@ -0,0 +1,651 @@
|
||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
|
||||
Date: Mon, 5 Dec 2016 13:27:37 +0200
|
||||
Subject: [PATCH] ath9k: Introduce airtime fairness scheduling between stations
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This reworks the ath9k driver to schedule transmissions to connected
|
||||
stations in a way that enforces airtime fairness between them. It
|
||||
accomplishes this by measuring the time spent transmitting to or
|
||||
receiving from a station at TX and RX completion, and accounting this to
|
||||
a per-station, per-QoS level airtime deficit. Then, an FQ-CoDel based
|
||||
deficit scheduler is employed at packet dequeue time, to control which
|
||||
station gets the next transmission opportunity.
|
||||
|
||||
Airtime fairness can significantly improve the efficiency of the network
|
||||
when station rates vary. The following throughput values are from a
|
||||
simple three-station test scenario, where two stations operate at the
|
||||
highest HT20 rate, and one station at the lowest, and the scheduler is
|
||||
employed at the access point:
|
||||
|
||||
Before / After
|
||||
Fast station 1: 19.17 / 25.09 Mbps
|
||||
Fast station 2: 19.83 / 25.21 Mbps
|
||||
Slow station: 2.58 / 1.77 Mbps
|
||||
Total: 41.58 / 52.07 Mbps
|
||||
|
||||
The benefit of airtime fairness goes up the more stations are present.
|
||||
In a 30-station test with one station artificially limited to 1 Mbps,
|
||||
we have seen aggregate throughput go from 2.14 to 17.76 Mbps.
|
||||
|
||||
Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -112,6 +112,8 @@ int ath_descdma_setup(struct ath_softc *
|
||||
#define ATH_TXFIFO_DEPTH 8
|
||||
#define ATH_TX_ERROR 0x01
|
||||
|
||||
+#define ATH_AIRTIME_QUANTUM 300 /* usec */
|
||||
+
|
||||
/* Stop tx traffic 1ms before the GO goes away */
|
||||
#define ATH_P2P_PS_STOP_TIME 1000
|
||||
|
||||
@@ -247,6 +249,9 @@ struct ath_atx_tid {
|
||||
bool has_queued;
|
||||
};
|
||||
|
||||
+void __ath_tx_queue_tid(struct ath_softc *sc, struct ath_atx_tid *tid);
|
||||
+void ath_tx_queue_tid(struct ath_softc *sc, struct ath_atx_tid *tid);
|
||||
+
|
||||
struct ath_node {
|
||||
struct ath_softc *sc;
|
||||
struct ieee80211_sta *sta; /* station struct we're part of */
|
||||
@@ -258,9 +263,12 @@ struct ath_node {
|
||||
|
||||
bool sleeping;
|
||||
bool no_ps_filter;
|
||||
+ s64 airtime_deficit[IEEE80211_NUM_ACS];
|
||||
+ u32 airtime_rx_start;
|
||||
|
||||
#ifdef CPTCFG_ATH9K_STATION_STATISTICS
|
||||
struct ath_rx_rate_stats rx_rate_stats;
|
||||
+ struct ath_airtime_stats airtime_stats;
|
||||
#endif
|
||||
u8 key_idx[4];
|
||||
|
||||
@@ -317,10 +325,16 @@ struct ath_rx {
|
||||
/* Channel Context */
|
||||
/*******************/
|
||||
|
||||
+struct ath_acq {
|
||||
+ struct list_head acq_new;
|
||||
+ struct list_head acq_old;
|
||||
+ spinlock_t lock;
|
||||
+};
|
||||
+
|
||||
struct ath_chanctx {
|
||||
struct cfg80211_chan_def chandef;
|
||||
struct list_head vifs;
|
||||
- struct list_head acq[IEEE80211_NUM_ACS];
|
||||
+ struct ath_acq acq[IEEE80211_NUM_ACS];
|
||||
int hw_queue_base;
|
||||
|
||||
/* do not dereference, use for comparison only */
|
||||
@@ -575,6 +589,8 @@ void ath_txq_schedule_all(struct ath_sof
|
||||
int ath_tx_init(struct ath_softc *sc, int nbufs);
|
||||
int ath_txq_update(struct ath_softc *sc, int qnum,
|
||||
struct ath9k_tx_queue_info *q);
|
||||
+u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, int pktlen,
|
||||
+ int width, int half_gi, bool shortPreamble);
|
||||
void ath_update_max_aggr_framelen(struct ath_softc *sc, int queue, int txop);
|
||||
void ath_assign_seq(struct ath_common *common, struct sk_buff *skb);
|
||||
int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||
@@ -963,6 +979,11 @@ void ath_ant_comb_scan(struct ath_softc
|
||||
|
||||
#define ATH9K_NUM_CHANCTX 2 /* supports 2 operating channels */
|
||||
|
||||
+#define AIRTIME_USE_TX BIT(0)
|
||||
+#define AIRTIME_USE_RX BIT(1)
|
||||
+#define AIRTIME_USE_NEW_QUEUES BIT(2)
|
||||
+#define AIRTIME_ACTIVE(flags) (!!(flags & (AIRTIME_USE_TX|AIRTIME_USE_RX)))
|
||||
+
|
||||
struct ath_softc {
|
||||
struct ieee80211_hw *hw;
|
||||
struct device *dev;
|
||||
@@ -1005,6 +1026,8 @@ struct ath_softc {
|
||||
short nbcnvifs;
|
||||
unsigned long ps_usecount;
|
||||
|
||||
+ u16 airtime_flags; /* AIRTIME_* */
|
||||
+
|
||||
struct ath_rx rx;
|
||||
struct ath_tx tx;
|
||||
struct ath_beacon beacon;
|
||||
--- a/drivers/net/wireless/ath/ath9k/channel.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/channel.c
|
||||
@@ -118,8 +118,11 @@ void ath_chanctx_init(struct ath_softc *
|
||||
INIT_LIST_HEAD(&ctx->vifs);
|
||||
ctx->txpower = ATH_TXPOWER_MAX;
|
||||
ctx->flush_timeout = HZ / 5; /* 200ms */
|
||||
- for (j = 0; j < ARRAY_SIZE(ctx->acq); j++)
|
||||
- INIT_LIST_HEAD(&ctx->acq[j]);
|
||||
+ for (j = 0; j < ARRAY_SIZE(ctx->acq); j++) {
|
||||
+ INIT_LIST_HEAD(&ctx->acq[j].acq_new);
|
||||
+ INIT_LIST_HEAD(&ctx->acq[j].acq_old);
|
||||
+ spin_lock_init(&ctx->acq[j].lock);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1345,8 +1348,11 @@ void ath9k_offchannel_init(struct ath_so
|
||||
ctx->txpower = ATH_TXPOWER_MAX;
|
||||
cfg80211_chandef_create(&ctx->chandef, chan, NL80211_CHAN_HT20);
|
||||
|
||||
- for (i = 0; i < ARRAY_SIZE(ctx->acq); i++)
|
||||
- INIT_LIST_HEAD(&ctx->acq[i]);
|
||||
+ for (i = 0; i < ARRAY_SIZE(ctx->acq); i++) {
|
||||
+ INIT_LIST_HEAD(&ctx->acq[i].acq_new);
|
||||
+ INIT_LIST_HEAD(&ctx->acq[i].acq_old);
|
||||
+ spin_lock_init(&ctx->acq[i].lock);
|
||||
+ }
|
||||
|
||||
sc->offchannel.chan.offchannel = true;
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1399,5 +1399,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
debugfs_create_file("tpc", S_IRUSR | S_IWUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_tpc);
|
||||
|
||||
+ debugfs_create_u16("airtime_flags", S_IRUSR | S_IWUSR,
|
||||
+ sc->debug.debugfs_phy, &sc->airtime_flags);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
@@ -221,6 +221,11 @@ struct ath_rx_rate_stats {
|
||||
} cck_stats[4];
|
||||
};
|
||||
|
||||
+struct ath_airtime_stats {
|
||||
+ u32 rx_airtime;
|
||||
+ u32 tx_airtime;
|
||||
+};
|
||||
+
|
||||
#define ANT_MAIN 0
|
||||
#define ANT_ALT 1
|
||||
|
||||
@@ -314,12 +319,20 @@ ath9k_debug_sync_cause(struct ath_softc
|
||||
void ath_debug_rate_stats(struct ath_softc *sc,
|
||||
struct ath_rx_status *rs,
|
||||
struct sk_buff *skb);
|
||||
+void ath_debug_airtime(struct ath_softc *sc,
|
||||
+ struct ath_node *an,
|
||||
+ u32 rx, u32 tx);
|
||||
#else
|
||||
static inline void ath_debug_rate_stats(struct ath_softc *sc,
|
||||
struct ath_rx_status *rs,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
}
|
||||
+static inline void ath_debug_airtime(struct ath_softc *sc,
|
||||
+ struct ath_node *an,
|
||||
+ u32 rx, u32 tx)
|
||||
+{
|
||||
+}
|
||||
#endif /* CPTCFG_ATH9K_STATION_STATISTICS */
|
||||
|
||||
#endif /* DEBUG_H */
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug_sta.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug_sta.c
|
||||
@@ -242,6 +242,59 @@ static const struct file_operations fops
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
+void ath_debug_airtime(struct ath_softc *sc,
|
||||
+ struct ath_node *an,
|
||||
+ u32 rx,
|
||||
+ u32 tx)
|
||||
+{
|
||||
+ struct ath_airtime_stats *astats = &an->airtime_stats;
|
||||
+
|
||||
+ astats->rx_airtime += rx;
|
||||
+ astats->tx_airtime += tx;
|
||||
+}
|
||||
+
|
||||
+static ssize_t read_airtime(struct file *file, char __user *user_buf,
|
||||
+ size_t count, loff_t *ppos)
|
||||
+{
|
||||
+ struct ath_node *an = file->private_data;
|
||||
+ struct ath_airtime_stats *astats;
|
||||
+ static const char *qname[4] = {
|
||||
+ "VO", "VI", "BE", "BK"
|
||||
+ };
|
||||
+ u32 len = 0, size = 256;
|
||||
+ char *buf;
|
||||
+ size_t retval;
|
||||
+ int i;
|
||||
+
|
||||
+ buf = kzalloc(size, GFP_KERNEL);
|
||||
+ if (buf == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ astats = &an->airtime_stats;
|
||||
+
|
||||
+ len += scnprintf(buf + len, size - len, "RX: %u us\n", astats->rx_airtime);
|
||||
+ len += scnprintf(buf + len, size - len, "TX: %u us\n", astats->tx_airtime);
|
||||
+ len += scnprintf(buf + len, size - len, "Deficit: ");
|
||||
+ for (i = 0; i < 4; i++)
|
||||
+ len += scnprintf(buf+len, size - len, "%s: %lld us ", qname[i], an->airtime_deficit[i]);
|
||||
+ if (len < size)
|
||||
+ buf[len++] = '\n';
|
||||
+
|
||||
+ retval = simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
+ kfree(buf);
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static const struct file_operations fops_airtime = {
|
||||
+ .read = read_airtime,
|
||||
+ .open = simple_open,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .llseek = default_llseek,
|
||||
+};
|
||||
+
|
||||
+
|
||||
void ath9k_sta_add_debugfs(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
@@ -251,4 +304,5 @@ void ath9k_sta_add_debugfs(struct ieee80
|
||||
|
||||
debugfs_create_file("node_aggr", S_IRUGO, dir, an, &fops_node_aggr);
|
||||
debugfs_create_file("node_recv", S_IRUGO, dir, an, &fops_node_recv);
|
||||
+ debugfs_create_file("airtime", S_IRUGO, dir, an, &fops_airtime);
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -620,6 +620,8 @@ static int ath9k_init_softc(u16 devid, s
|
||||
|
||||
/* Will be cleared in ath9k_start() */
|
||||
set_bit(ATH_OP_INVALID, &common->op_flags);
|
||||
+ sc->airtime_flags = (AIRTIME_USE_TX | AIRTIME_USE_RX |
|
||||
+ AIRTIME_USE_NEW_QUEUES);
|
||||
|
||||
sc->sc_ah = ah;
|
||||
sc->dfs_detector = dfs_pattern_detector_init(common, NL80211_DFS_UNSET);
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -70,10 +70,10 @@ static bool ath9k_has_pending_frames(str
|
||||
goto out;
|
||||
|
||||
if (txq->mac80211_qnum >= 0) {
|
||||
- struct list_head *list;
|
||||
+ struct ath_acq *acq;
|
||||
|
||||
- list = &sc->cur_chan->acq[txq->mac80211_qnum];
|
||||
- if (!list_empty(list))
|
||||
+ acq = &sc->cur_chan->acq[txq->mac80211_qnum];
|
||||
+ if (!list_empty(&acq->acq_new) || !list_empty(&acq->acq_old))
|
||||
pending = true;
|
||||
}
|
||||
out:
|
||||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -991,6 +991,70 @@ static void ath9k_apply_ampdu_details(st
|
||||
}
|
||||
}
|
||||
|
||||
+static void ath_rx_count_airtime(struct ath_softc *sc,
|
||||
+ struct ath_rx_status *rs,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ struct ath_node *an;
|
||||
+ struct ath_acq *acq;
|
||||
+ struct ath_vif *avp;
|
||||
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
|
||||
+ struct ath_hw *ah = sc->sc_ah;
|
||||
+ struct ath_common *common = ath9k_hw_common(ah);
|
||||
+ struct ieee80211_sta *sta;
|
||||
+ struct ieee80211_rx_status *rxs;
|
||||
+ const struct ieee80211_rate *rate;
|
||||
+ bool is_sgi, is_40, is_sp;
|
||||
+ int phy;
|
||||
+ u16 len = rs->rs_datalen;
|
||||
+ u32 airtime = 0;
|
||||
+ u8 tidno, acno;
|
||||
+
|
||||
+ if (!ieee80211_is_data(hdr->frame_control))
|
||||
+ return;
|
||||
+
|
||||
+ rcu_read_lock();
|
||||
+
|
||||
+ sta = ieee80211_find_sta_by_ifaddr(sc->hw, hdr->addr2, NULL);
|
||||
+ if (!sta)
|
||||
+ goto exit;
|
||||
+ an = (struct ath_node *) sta->drv_priv;
|
||||
+ avp = (struct ath_vif *) an->vif->drv_priv;
|
||||
+ tidno = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
|
||||
+ acno = TID_TO_WME_AC(tidno);
|
||||
+ acq = &avp->chanctx->acq[acno];
|
||||
+
|
||||
+ rxs = IEEE80211_SKB_RXCB(skb);
|
||||
+
|
||||
+ is_sgi = !!(rxs->flag & RX_FLAG_SHORT_GI);
|
||||
+ is_40 = !!(rxs->flag & RX_FLAG_40MHZ);
|
||||
+ is_sp = !!(rxs->flag & RX_FLAG_SHORTPRE);
|
||||
+
|
||||
+ if (!!(rxs->flag & RX_FLAG_HT)) {
|
||||
+ /* MCS rates */
|
||||
+
|
||||
+ airtime += ath_pkt_duration(sc, rxs->rate_idx, len,
|
||||
+ is_40, is_sgi, is_sp);
|
||||
+ } else {
|
||||
+
|
||||
+ phy = IS_CCK_RATE(rs->rs_rate) ? WLAN_RC_PHY_CCK : WLAN_RC_PHY_OFDM;
|
||||
+ rate = &common->sbands[rxs->band].bitrates[rxs->rate_idx];
|
||||
+ airtime += ath9k_hw_computetxtime(ah, phy, rate->bitrate * 100,
|
||||
+ len, rxs->rate_idx, is_sp);
|
||||
+ }
|
||||
+
|
||||
+ if (!!(sc->airtime_flags & AIRTIME_USE_RX)) {
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ an->airtime_deficit[acno] -= airtime;
|
||||
+ if (an->airtime_deficit[acno] <= 0)
|
||||
+ __ath_tx_queue_tid(sc, ATH_AN_2_TID(an, tidno));
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
+ }
|
||||
+ ath_debug_airtime(sc, an, airtime, 0);
|
||||
+exit:
|
||||
+ rcu_read_unlock();
|
||||
+}
|
||||
+
|
||||
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
|
||||
{
|
||||
struct ath_rxbuf *bf;
|
||||
@@ -1137,6 +1201,7 @@ int ath_rx_tasklet(struct ath_softc *sc,
|
||||
ath9k_antenna_check(sc, &rs);
|
||||
ath9k_apply_ampdu_details(sc, &rs, rxs);
|
||||
ath_debug_rate_stats(sc, &rs, skb);
|
||||
+ ath_rx_count_airtime(sc, &rs, skb);
|
||||
|
||||
hdr = (struct ieee80211_hdr *)skb->data;
|
||||
if (ieee80211_is_ack(hdr->frame_control))
|
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -125,21 +125,44 @@ void ath_txq_unlock_complete(struct ath_
|
||||
ath_tx_status(hw, skb);
|
||||
}
|
||||
|
||||
-static void ath_tx_queue_tid(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct ath_atx_tid *tid)
|
||||
+void __ath_tx_queue_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
|
||||
{
|
||||
- struct list_head *list;
|
||||
struct ath_vif *avp = (struct ath_vif *) tid->an->vif->drv_priv;
|
||||
struct ath_chanctx *ctx = avp->chanctx;
|
||||
+ struct ath_acq *acq;
|
||||
+ struct list_head *tid_list;
|
||||
+ u8 acno = TID_TO_WME_AC(tid->tidno);
|
||||
|
||||
- if (!ctx)
|
||||
+ if (!ctx || !list_empty(&tid->list))
|
||||
return;
|
||||
|
||||
- list = &ctx->acq[TID_TO_WME_AC(tid->tidno)];
|
||||
- if (list_empty(&tid->list))
|
||||
- list_add_tail(&tid->list, list);
|
||||
+
|
||||
+ acq = &ctx->acq[acno];
|
||||
+ if ((sc->airtime_flags & AIRTIME_USE_NEW_QUEUES) &&
|
||||
+ tid->an->airtime_deficit[acno] > 0)
|
||||
+ tid_list = &acq->acq_new;
|
||||
+ else
|
||||
+ tid_list = &acq->acq_old;
|
||||
+
|
||||
+ list_add_tail(&tid->list, tid_list);
|
||||
}
|
||||
|
||||
+void ath_tx_queue_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
|
||||
+{
|
||||
+ struct ath_vif *avp = (struct ath_vif *) tid->an->vif->drv_priv;
|
||||
+ struct ath_chanctx *ctx = avp->chanctx;
|
||||
+ struct ath_acq *acq;
|
||||
+
|
||||
+ if (!ctx || !list_empty(&tid->list))
|
||||
+ return;
|
||||
+
|
||||
+ acq = &ctx->acq[TID_TO_WME_AC(tid->tidno)];
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ __ath_tx_queue_tid(sc, tid);
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
+}
|
||||
+
|
||||
+
|
||||
void ath9k_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *queue)
|
||||
{
|
||||
struct ath_softc *sc = hw->priv;
|
||||
@@ -154,7 +177,7 @@ void ath9k_wake_tx_queue(struct ieee8021
|
||||
ath_txq_lock(sc, txq);
|
||||
|
||||
tid->has_queued = true;
|
||||
- ath_tx_queue_tid(sc, txq, tid);
|
||||
+ ath_tx_queue_tid(sc, tid);
|
||||
ath_txq_schedule(sc, txq);
|
||||
|
||||
ath_txq_unlock(sc, txq);
|
||||
@@ -684,7 +707,7 @@ static void ath_tx_complete_aggr(struct
|
||||
|
||||
skb_queue_splice_tail(&bf_pending, &tid->retry_q);
|
||||
if (!an->sleeping) {
|
||||
- ath_tx_queue_tid(sc, txq, tid);
|
||||
+ ath_tx_queue_tid(sc, tid);
|
||||
|
||||
if (ts->ts_status & (ATH9K_TXERR_FILT | ATH9K_TXERR_XRETRY))
|
||||
tid->clear_ps_filter = true;
|
||||
@@ -712,6 +735,53 @@ static bool bf_is_ampdu_not_probing(stru
|
||||
return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
|
||||
}
|
||||
|
||||
+static void ath_tx_count_airtime(struct ath_softc *sc, struct ath_txq *txq,
|
||||
+ struct ath_buf *bf, struct ath_tx_status *ts)
|
||||
+{
|
||||
+ struct ath_node *an;
|
||||
+ struct ath_acq *acq = &sc->cur_chan->acq[txq->mac80211_qnum];
|
||||
+ struct sk_buff *skb;
|
||||
+ struct ieee80211_hdr *hdr;
|
||||
+ struct ieee80211_hw *hw = sc->hw;
|
||||
+ struct ieee80211_tx_rate rates[4];
|
||||
+ struct ieee80211_sta *sta;
|
||||
+ int i;
|
||||
+ u32 airtime = 0;
|
||||
+
|
||||
+ skb = bf->bf_mpdu;
|
||||
+ if(!skb)
|
||||
+ return;
|
||||
+
|
||||
+ hdr = (struct ieee80211_hdr *)skb->data;
|
||||
+ memcpy(rates, bf->rates, sizeof(rates));
|
||||
+
|
||||
+ rcu_read_lock();
|
||||
+
|
||||
+ sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr1, hdr->addr2);
|
||||
+ if(!sta)
|
||||
+ goto exit;
|
||||
+
|
||||
+
|
||||
+ an = (struct ath_node *) sta->drv_priv;
|
||||
+
|
||||
+ airtime += ts->duration * (ts->ts_longretry + 1);
|
||||
+
|
||||
+ for(i=0; i < ts->ts_rateindex; i++)
|
||||
+ airtime += ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, i) * rates[i].count;
|
||||
+
|
||||
+ if (!!(sc->airtime_flags & AIRTIME_USE_TX)) {
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ an->airtime_deficit[txq->mac80211_qnum] -= airtime;
|
||||
+ if (an->airtime_deficit[txq->mac80211_qnum] <= 0)
|
||||
+ __ath_tx_queue_tid(sc, ath_get_skb_tid(sc, an, skb));
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
+ }
|
||||
+ ath_debug_airtime(sc, an, 0, airtime);
|
||||
+
|
||||
+exit:
|
||||
+ rcu_read_unlock();
|
||||
+}
|
||||
+
|
||||
static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
|
||||
struct ath_tx_status *ts, struct ath_buf *bf,
|
||||
struct list_head *bf_head)
|
||||
@@ -733,6 +803,7 @@ static void ath_tx_process_buffer(struct
|
||||
|
||||
ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc,
|
||||
ts->ts_rateindex);
|
||||
+ ath_tx_count_airtime(sc, txq, bf, ts);
|
||||
|
||||
hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data;
|
||||
sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr1, hdr->addr2);
|
||||
@@ -1094,8 +1165,8 @@ finish:
|
||||
* width - 0 for 20 MHz, 1 for 40 MHz
|
||||
* half_gi - to use 4us v/s 3.6 us for symbol time
|
||||
*/
|
||||
-static u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, int pktlen,
|
||||
- int width, int half_gi, bool shortPreamble)
|
||||
+u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, int pktlen,
|
||||
+ int width, int half_gi, bool shortPreamble)
|
||||
{
|
||||
u32 nbits, nsymbits, duration, nsymbols;
|
||||
int streams;
|
||||
@@ -1493,7 +1564,7 @@ ath_tx_form_burst(struct ath_softc *sc,
|
||||
}
|
||||
|
||||
static bool ath_tx_sched_aggr(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct ath_atx_tid *tid, bool *stop)
|
||||
+ struct ath_atx_tid *tid)
|
||||
{
|
||||
struct ath_buf *bf;
|
||||
struct ieee80211_tx_info *tx_info;
|
||||
@@ -1515,7 +1586,6 @@ static bool ath_tx_sched_aggr(struct ath
|
||||
if ((aggr && txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) ||
|
||||
(!aggr && txq->axq_depth >= ATH_NON_AGGR_MIN_QDEPTH)) {
|
||||
__skb_queue_tail(&tid->retry_q, bf->bf_mpdu);
|
||||
- *stop = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1639,7 +1709,7 @@ void ath_tx_aggr_wakeup(struct ath_softc
|
||||
ath_txq_lock(sc, txq);
|
||||
tid->clear_ps_filter = true;
|
||||
if (ath_tid_has_buffered(tid)) {
|
||||
- ath_tx_queue_tid(sc, txq, tid);
|
||||
+ ath_tx_queue_tid(sc, tid);
|
||||
ath_txq_schedule(sc, txq);
|
||||
}
|
||||
ath_txq_unlock_complete(sc, txq);
|
||||
@@ -1956,9 +2026,10 @@ void ath_tx_cleanupq(struct ath_softc *s
|
||||
void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
- struct ath_atx_tid *tid, *last_tid;
|
||||
+ struct ath_atx_tid *tid;
|
||||
struct list_head *tid_list;
|
||||
- bool sent = false;
|
||||
+ struct ath_acq *acq;
|
||||
+ bool active = AIRTIME_ACTIVE(sc->airtime_flags);
|
||||
|
||||
if (txq->mac80211_qnum < 0)
|
||||
return;
|
||||
@@ -1967,48 +2038,55 @@ void ath_txq_schedule(struct ath_softc *
|
||||
return;
|
||||
|
||||
spin_lock_bh(&sc->chan_lock);
|
||||
- tid_list = &sc->cur_chan->acq[txq->mac80211_qnum];
|
||||
-
|
||||
- if (list_empty(tid_list)) {
|
||||
- spin_unlock_bh(&sc->chan_lock);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
rcu_read_lock();
|
||||
+ acq = &sc->cur_chan->acq[txq->mac80211_qnum];
|
||||
|
||||
- last_tid = list_entry(tid_list->prev, struct ath_atx_tid, list);
|
||||
- while (!list_empty(tid_list)) {
|
||||
- bool stop = false;
|
||||
-
|
||||
- if (sc->cur_chan->stopped)
|
||||
- break;
|
||||
-
|
||||
- tid = list_first_entry(tid_list, struct ath_atx_tid, list);
|
||||
- list_del_init(&tid->list);
|
||||
+ if (sc->cur_chan->stopped)
|
||||
+ goto out;
|
||||
|
||||
- if (ath_tx_sched_aggr(sc, txq, tid, &stop))
|
||||
- sent = true;
|
||||
+begin:
|
||||
+ tid_list = &acq->acq_new;
|
||||
+ if (list_empty(tid_list)) {
|
||||
+ tid_list = &acq->acq_old;
|
||||
+ if (list_empty(tid_list))
|
||||
+ goto out;
|
||||
+ }
|
||||
+ tid = list_first_entry(tid_list, struct ath_atx_tid, list);
|
||||
|
||||
- /*
|
||||
- * add tid to round-robin queue if more frames
|
||||
- * are pending for the tid
|
||||
- */
|
||||
- if (ath_tid_has_buffered(tid))
|
||||
- ath_tx_queue_tid(sc, txq, tid);
|
||||
+ if (active && tid->an->airtime_deficit[txq->mac80211_qnum] <= 0) {
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ tid->an->airtime_deficit[txq->mac80211_qnum] += ATH_AIRTIME_QUANTUM;
|
||||
+ list_move_tail(&tid->list, &acq->acq_old);
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
+ goto begin;
|
||||
+ }
|
||||
|
||||
- if (stop)
|
||||
- break;
|
||||
+ if (!ath_tid_has_buffered(tid)) {
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ if ((tid_list == &acq->acq_new) && !list_empty(&acq->acq_old))
|
||||
+ list_move_tail(&tid->list, &acq->acq_old);
|
||||
+ else {
|
||||
+ list_del_init(&tid->list);
|
||||
+ }
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
+ goto begin;
|
||||
+ }
|
||||
|
||||
- if (tid == last_tid) {
|
||||
- if (!sent)
|
||||
- break;
|
||||
|
||||
- sent = false;
|
||||
- last_tid = list_entry(tid_list->prev,
|
||||
- struct ath_atx_tid, list);
|
||||
+ /*
|
||||
+ * If we succeed in scheduling something, immediately restart to make
|
||||
+ * sure we keep the HW busy.
|
||||
+ */
|
||||
+ if(ath_tx_sched_aggr(sc, txq, tid)) {
|
||||
+ if (!active) {
|
||||
+ spin_lock_bh(&acq->lock);
|
||||
+ list_move_tail(&tid->list, &acq->acq_old);
|
||||
+ spin_unlock_bh(&acq->lock);
|
||||
}
|
||||
+ goto begin;
|
||||
}
|
||||
|
||||
+out:
|
||||
rcu_read_unlock();
|
||||
spin_unlock_bh(&sc->chan_lock);
|
||||
}
|
||||
@@ -2862,6 +2940,9 @@ void ath_tx_node_init(struct ath_softc *
|
||||
struct ath_atx_tid *tid;
|
||||
int tidno, acno;
|
||||
|
||||
+ for (acno = 0; acno < IEEE80211_NUM_ACS; acno++)
|
||||
+ an->airtime_deficit[acno] = ATH_AIRTIME_QUANTUM;
|
||||
+
|
||||
for (tidno = 0; tidno < IEEE80211_NUM_TIDS; tidno++) {
|
||||
tid = ath_node_to_tid(an, tidno);
|
||||
tid->an = an;
|
||||
@@ -0,0 +1,62 @@
|
||||
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@toke.dk>
|
||||
Date: Mon, 5 Dec 2016 13:27:38 +0200
|
||||
Subject: [PATCH] ath9k: Turn ath_txq_lock/unlock() into static inlines.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
These are one-line functions that just call spin_lock/unlock_bh(); turn
|
||||
them into static inlines to avoid the function call overhead.
|
||||
|
||||
Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -569,6 +569,15 @@ static inline void ath_chanctx_check_act
|
||||
|
||||
#endif /* CPTCFG_ATH9K_CHANNEL_CONTEXT */
|
||||
|
||||
+static inline void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq)
|
||||
+{
|
||||
+ spin_lock_bh(&txq->axq_lock);
|
||||
+}
|
||||
+static inline void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq)
|
||||
+{
|
||||
+ spin_unlock_bh(&txq->axq_lock);
|
||||
+}
|
||||
+
|
||||
void ath_startrecv(struct ath_softc *sc);
|
||||
bool ath_stoprecv(struct ath_softc *sc);
|
||||
u32 ath_calcrxfilter(struct ath_softc *sc);
|
||||
@@ -576,8 +585,6 @@ int ath_rx_init(struct ath_softc *sc, in
|
||||
void ath_rx_cleanup(struct ath_softc *sc);
|
||||
int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp);
|
||||
struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype);
|
||||
-void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq);
|
||||
-void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq);
|
||||
void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq);
|
||||
void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq);
|
||||
bool ath_drain_all_txq(struct ath_softc *sc);
|
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -98,18 +98,6 @@ static void ath_tx_status(struct ieee802
|
||||
dev_kfree_skb(skb);
|
||||
}
|
||||
|
||||
-void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq)
|
||||
- __acquires(&txq->axq_lock)
|
||||
-{
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
-}
|
||||
-
|
||||
-void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq)
|
||||
- __releases(&txq->axq_lock)
|
||||
-{
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
-}
|
||||
-
|
||||
void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq)
|
||||
__releases(&txq->axq_lock)
|
||||
{
|
||||
@@ -23,6 +23,7 @@ it also avoids using channel[index] over and over.
|
||||
Fixes: 58de92d2f95e ("brcmfmac: use static superset of channels for wiphy bands")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -12,6 +12,7 @@ It will on the other hand allow more detailed runtime control over
|
||||
channels which is the main reason for this change.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -20,6 +20,7 @@ due to hardware setup (design).
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
||||
@@ -0,0 +1,175 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 25 Jan 2017 12:57:05 +0100
|
||||
Subject: [PATCH] ath9k: rename tx_complete_work to hw_check_work
|
||||
|
||||
Also include common MAC alive check. This should make the hang checks
|
||||
more reliable for modes where beacons are not sent and is used as a
|
||||
starting point for further hang check improvements
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -108,7 +108,7 @@ int ath_descdma_setup(struct ath_softc *
|
||||
#define ATH_AGGR_MIN_QDEPTH 2
|
||||
/* minimum h/w qdepth for non-aggregated traffic */
|
||||
#define ATH_NON_AGGR_MIN_QDEPTH 8
|
||||
-#define ATH_TX_COMPLETE_POLL_INT 1000
|
||||
+#define ATH_HW_CHECK_POLL_INT 1000
|
||||
#define ATH_TXFIFO_DEPTH 8
|
||||
#define ATH_TX_ERROR 0x01
|
||||
|
||||
@@ -745,7 +745,7 @@ void ath9k_csa_update(struct ath_softc *
|
||||
#define ATH_PAPRD_TIMEOUT 100 /* msecs */
|
||||
#define ATH_PLL_WORK_INTERVAL 100
|
||||
|
||||
-void ath_tx_complete_poll_work(struct work_struct *work);
|
||||
+void ath_hw_check_work(struct work_struct *work);
|
||||
void ath_reset_work(struct work_struct *work);
|
||||
bool ath_hw_check(struct ath_softc *sc);
|
||||
void ath_hw_pll_work(struct work_struct *work);
|
||||
@@ -1053,7 +1053,7 @@ struct ath_softc {
|
||||
#ifdef CPTCFG_ATH9K_DEBUGFS
|
||||
struct ath9k_debug debug;
|
||||
#endif
|
||||
- struct delayed_work tx_complete_work;
|
||||
+ struct delayed_work hw_check_work;
|
||||
struct delayed_work hw_pll_work;
|
||||
struct timer_list sleep_timer;
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -681,6 +681,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
INIT_WORK(&sc->hw_reset_work, ath_reset_work);
|
||||
INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
|
||||
INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
|
||||
+ INIT_DELAYED_WORK(&sc->hw_check_work, ath_hw_check_work);
|
||||
|
||||
ath9k_init_channel_context(sc);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/link.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/link.c
|
||||
@@ -20,20 +20,13 @@
|
||||
* TX polling - checks if the TX engine is stuck somewhere
|
||||
* and issues a chip reset if so.
|
||||
*/
|
||||
-void ath_tx_complete_poll_work(struct work_struct *work)
|
||||
+static bool ath_tx_complete_check(struct ath_softc *sc)
|
||||
{
|
||||
- struct ath_softc *sc = container_of(work, struct ath_softc,
|
||||
- tx_complete_work.work);
|
||||
struct ath_txq *txq;
|
||||
int i;
|
||||
- bool needreset = false;
|
||||
-
|
||||
|
||||
- if (sc->tx99_state) {
|
||||
- ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
||||
- "skip tx hung detection on tx99\n");
|
||||
- return;
|
||||
- }
|
||||
+ if (sc->tx99_state)
|
||||
+ return true;
|
||||
|
||||
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
|
||||
txq = sc->tx.txq_map[i];
|
||||
@@ -41,25 +34,36 @@ void ath_tx_complete_poll_work(struct wo
|
||||
ath_txq_lock(sc, txq);
|
||||
if (txq->axq_depth) {
|
||||
if (txq->axq_tx_inprogress) {
|
||||
- needreset = true;
|
||||
ath_txq_unlock(sc, txq);
|
||||
- break;
|
||||
- } else {
|
||||
- txq->axq_tx_inprogress = true;
|
||||
+ goto reset;
|
||||
}
|
||||
+
|
||||
+ txq->axq_tx_inprogress = true;
|
||||
}
|
||||
ath_txq_unlock(sc, txq);
|
||||
}
|
||||
|
||||
- if (needreset) {
|
||||
- ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
||||
- "tx hung, resetting the chip\n");
|
||||
- ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
|
||||
+ return true;
|
||||
+
|
||||
+reset:
|
||||
+ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
||||
+ "tx hung, resetting the chip\n");
|
||||
+ ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
|
||||
+ return false;
|
||||
+
|
||||
+}
|
||||
+
|
||||
+void ath_hw_check_work(struct work_struct *work)
|
||||
+{
|
||||
+ struct ath_softc *sc = container_of(work, struct ath_softc,
|
||||
+ hw_check_work.work);
|
||||
+
|
||||
+ if (!ath_hw_check(sc) ||
|
||||
+ !ath_tx_complete_check(sc))
|
||||
return;
|
||||
- }
|
||||
|
||||
- ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
|
||||
- msecs_to_jiffies(ATH_TX_COMPLETE_POLL_INT));
|
||||
+ ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work,
|
||||
+ msecs_to_jiffies(ATH_HW_CHECK_POLL_INT));
|
||||
}
|
||||
|
||||
/*
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -181,7 +181,7 @@ void ath9k_ps_restore(struct ath_softc *
|
||||
static void __ath_cancel_work(struct ath_softc *sc)
|
||||
{
|
||||
cancel_work_sync(&sc->paprd_work);
|
||||
- cancel_delayed_work_sync(&sc->tx_complete_work);
|
||||
+ cancel_delayed_work_sync(&sc->hw_check_work);
|
||||
cancel_delayed_work_sync(&sc->hw_pll_work);
|
||||
|
||||
#ifdef CPTCFG_ATH9K_BTCOEX_SUPPORT
|
||||
@@ -198,7 +198,8 @@ void ath_cancel_work(struct ath_softc *s
|
||||
|
||||
void ath_restart_work(struct ath_softc *sc)
|
||||
{
|
||||
- ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
|
||||
+ ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work,
|
||||
+ ATH_HW_CHECK_POLL_INT);
|
||||
|
||||
if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah))
|
||||
ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
|
||||
@@ -2091,7 +2092,7 @@ void __ath9k_flush(struct ieee80211_hw *
|
||||
int timeout;
|
||||
bool drain_txq;
|
||||
|
||||
- cancel_delayed_work_sync(&sc->tx_complete_work);
|
||||
+ cancel_delayed_work_sync(&sc->hw_check_work);
|
||||
|
||||
if (ah->ah_flags & AH_UNPLUGGED) {
|
||||
ath_dbg(common, ANY, "Device has been unplugged!\n");
|
||||
@@ -2129,7 +2130,8 @@ void __ath9k_flush(struct ieee80211_hw *
|
||||
ath9k_ps_restore(sc);
|
||||
}
|
||||
|
||||
- ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
|
||||
+ ieee80211_queue_delayed_work(hw, &sc->hw_check_work,
|
||||
+ ATH_HW_CHECK_POLL_INT);
|
||||
}
|
||||
|
||||
static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
|
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -2915,8 +2915,6 @@ int ath_tx_init(struct ath_softc *sc, in
|
||||
return error;
|
||||
}
|
||||
|
||||
- INIT_DELAYED_WORK(&sc->tx_complete_work, ath_tx_complete_poll_work);
|
||||
-
|
||||
if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
||||
error = ath_tx_edma_init(sc);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 25 Jan 2017 12:58:17 +0100
|
||||
Subject: [PATCH] ath9k_hw: check if the chip failed to wake up
|
||||
|
||||
In an RFC patch, Sven Eckelmann and Simon Wunderlich reported:
|
||||
|
||||
"QCA 802.11n chips (especially AR9330/AR9340) sometimes end up in a
|
||||
state in which a read of AR_CFG always returns 0xdeadbeef.
|
||||
This should not happen when when the power_mode of the device is
|
||||
ATH9K_PM_AWAKE."
|
||||
|
||||
Include the check for the default register state in the existing MAC
|
||||
hang check.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1624,6 +1624,10 @@ bool ath9k_hw_check_alive(struct ath_hw
|
||||
int count = 50;
|
||||
u32 reg, last_val;
|
||||
|
||||
+ /* Check if chip failed to wake up */
|
||||
+ if (REG_READ(ah, AR_CFG) == 0xdeadbeef)
|
||||
+ return false;
|
||||
+
|
||||
if (AR_SREV_9300(ah))
|
||||
return !ath9k_hw_detect_mac_hang(ah);
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 25 Jan 2017 13:00:58 +0100
|
||||
Subject: [PATCH] ath9k: check for deaf rx path state
|
||||
|
||||
Various chips occasionally run into a state where the tx path still
|
||||
appears to be working normally, but the rx path is deaf.
|
||||
|
||||
There is no known register signature to check for this state explicitly,
|
||||
so use the lack of rx interrupts as an indicator.
|
||||
|
||||
This detection is prone to false positives, since a device could also
|
||||
simply be in an environment where there are no frames on the air.
|
||||
However, in this case doing a reset should be harmless since it's
|
||||
obviously not interrupting any real activity. To avoid confusion, call
|
||||
the reset counters in this case "Rx path inactive" instead of something
|
||||
like "Rx path deaf", since it may not be an indication of a real
|
||||
hardware failure.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -1027,6 +1027,7 @@ struct ath_softc {
|
||||
|
||||
u8 gtt_cnt;
|
||||
u32 intrstatus;
|
||||
+ u32 rx_active;
|
||||
u16 ps_flags; /* PS_* */
|
||||
bool ps_enabled;
|
||||
bool ps_idle;
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -763,6 +763,7 @@ static int read_file_reset(struct seq_fi
|
||||
[RESET_TYPE_BEACON_STUCK] = "Stuck Beacon",
|
||||
[RESET_TYPE_MCI] = "MCI Reset",
|
||||
[RESET_TYPE_CALIBRATION] = "Calibration error",
|
||||
+ [RESET_TYPE_RX_INACTIVE] = "Rx path inactive",
|
||||
[RESET_TX_DMA_ERROR] = "Tx DMA stop error",
|
||||
[RESET_RX_DMA_ERROR] = "Rx DMA stop error",
|
||||
};
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
@@ -50,6 +50,7 @@ enum ath_reset_type {
|
||||
RESET_TYPE_BEACON_STUCK,
|
||||
RESET_TYPE_MCI,
|
||||
RESET_TYPE_CALIBRATION,
|
||||
+ RESET_TYPE_RX_INACTIVE,
|
||||
RESET_TX_DMA_ERROR,
|
||||
RESET_RX_DMA_ERROR,
|
||||
__RESET_TYPE_MAX
|
||||
--- a/drivers/net/wireless/ath/ath9k/link.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/link.c
|
||||
@@ -53,13 +53,27 @@ reset:
|
||||
|
||||
}
|
||||
|
||||
+static bool ath_rx_active_check(struct ath_softc *sc)
|
||||
+{
|
||||
+ if (sc->rx_active) {
|
||||
+ sc->rx_active = 0;
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
||||
+ "rx path inactive, resetting the chip\n");
|
||||
+ ath9k_queue_reset(sc, RESET_TYPE_RX_INACTIVE);
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
void ath_hw_check_work(struct work_struct *work)
|
||||
{
|
||||
struct ath_softc *sc = container_of(work, struct ath_softc,
|
||||
hw_check_work.work);
|
||||
|
||||
if (!ath_hw_check(sc) ||
|
||||
- !ath_tx_complete_check(sc))
|
||||
+ !ath_tx_complete_check(sc) ||
|
||||
+ !ath_rx_active_check(sc))
|
||||
return;
|
||||
|
||||
ieee80211_queue_delayed_work(sc->hw, &sc->hw_check_work,
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -269,6 +269,7 @@ static bool ath_complete_reset(struct at
|
||||
}
|
||||
|
||||
sc->gtt_cnt = 0;
|
||||
+ sc->rx_active = 1;
|
||||
|
||||
ath9k_hw_set_interrupts(ah);
|
||||
ath9k_hw_enable_interrupts(ah);
|
||||
@@ -452,6 +453,7 @@ void ath9k_tasklet(unsigned long data)
|
||||
ath_rx_tasklet(sc, 0, true);
|
||||
|
||||
ath_rx_tasklet(sc, 0, false);
|
||||
+ sc->rx_active = 1;
|
||||
}
|
||||
|
||||
if (status & ATH9K_INT_TX) {
|
||||
@@ -0,0 +1,197 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Wed, 25 Jan 2017 15:10:37 +0100
|
||||
Subject: [PATCH] ath9k: fix race condition in enabling/disabling IRQs
|
||||
|
||||
The code currently relies on refcounting to disable IRQs from within the
|
||||
IRQ handler and re-enabling them again after the tasklet has run.
|
||||
|
||||
However, due to race conditions sometimes the IRQ handler might be
|
||||
called twice, or the tasklet may not run at all (if interrupted in the
|
||||
middle of a reset).
|
||||
|
||||
This can cause nasty imbalances in the irq-disable refcount which will
|
||||
get the driver permanently stuck until the entire radio has been stopped
|
||||
and started again (ath_reset will not recover from this).
|
||||
|
||||
Instead of using this fragile logic, change the code to ensure that
|
||||
running the irq handler during tasklet processing is safe, and leave the
|
||||
refcount untouched.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -998,6 +998,7 @@ struct ath_softc {
|
||||
struct survey_info *cur_survey;
|
||||
struct survey_info survey[ATH9K_NUM_CHANNELS];
|
||||
|
||||
+ spinlock_t intr_lock;
|
||||
struct tasklet_struct intr_tq;
|
||||
struct tasklet_struct bcon_tasklet;
|
||||
struct ath_hw *sc_ah;
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -669,6 +669,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
common->bt_ant_diversity = 1;
|
||||
|
||||
spin_lock_init(&common->cc_lock);
|
||||
+ spin_lock_init(&sc->intr_lock);
|
||||
spin_lock_init(&sc->sc_serial_rw);
|
||||
spin_lock_init(&sc->sc_pm_lock);
|
||||
spin_lock_init(&sc->chan_lock);
|
||||
--- a/drivers/net/wireless/ath/ath9k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/mac.c
|
||||
@@ -810,21 +810,12 @@ void ath9k_hw_disable_interrupts(struct
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_hw_disable_interrupts);
|
||||
|
||||
-void ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
||||
+static void __ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
u32 sync_default = AR_INTR_SYNC_DEFAULT;
|
||||
u32 async_mask;
|
||||
|
||||
- if (!(ah->imask & ATH9K_INT_GLOBAL))
|
||||
- return;
|
||||
-
|
||||
- if (!atomic_inc_and_test(&ah->intr_ref_cnt)) {
|
||||
- ath_dbg(common, INTERRUPT, "Do not enable IER ref count %d\n",
|
||||
- atomic_read(&ah->intr_ref_cnt));
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (AR_SREV_9340(ah) || AR_SREV_9550(ah) || AR_SREV_9531(ah) ||
|
||||
AR_SREV_9561(ah))
|
||||
sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
|
||||
@@ -846,6 +837,39 @@ void ath9k_hw_enable_interrupts(struct a
|
||||
ath_dbg(common, INTERRUPT, "AR_IMR 0x%x IER 0x%x\n",
|
||||
REG_READ(ah, AR_IMR), REG_READ(ah, AR_IER));
|
||||
}
|
||||
+
|
||||
+void ath9k_hw_resume_interrupts(struct ath_hw *ah)
|
||||
+{
|
||||
+ struct ath_common *common = ath9k_hw_common(ah);
|
||||
+
|
||||
+ if (!(ah->imask & ATH9K_INT_GLOBAL))
|
||||
+ return;
|
||||
+
|
||||
+ if (atomic_read(&ah->intr_ref_cnt) != 0) {
|
||||
+ ath_dbg(common, INTERRUPT, "Do not enable IER ref count %d\n",
|
||||
+ atomic_read(&ah->intr_ref_cnt));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ __ath9k_hw_enable_interrupts(ah);
|
||||
+}
|
||||
+EXPORT_SYMBOL(ath9k_hw_resume_interrupts);
|
||||
+
|
||||
+void ath9k_hw_enable_interrupts(struct ath_hw *ah)
|
||||
+{
|
||||
+ struct ath_common *common = ath9k_hw_common(ah);
|
||||
+
|
||||
+ if (!(ah->imask & ATH9K_INT_GLOBAL))
|
||||
+ return;
|
||||
+
|
||||
+ if (!atomic_inc_and_test(&ah->intr_ref_cnt)) {
|
||||
+ ath_dbg(common, INTERRUPT, "Do not enable IER ref count %d\n",
|
||||
+ atomic_read(&ah->intr_ref_cnt));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ __ath9k_hw_enable_interrupts(ah);
|
||||
+}
|
||||
EXPORT_SYMBOL(ath9k_hw_enable_interrupts);
|
||||
|
||||
void ath9k_hw_set_interrupts(struct ath_hw *ah)
|
||||
--- a/drivers/net/wireless/ath/ath9k/mac.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/mac.h
|
||||
@@ -744,6 +744,7 @@ void ath9k_hw_set_interrupts(struct ath_
|
||||
void ath9k_hw_enable_interrupts(struct ath_hw *ah);
|
||||
void ath9k_hw_disable_interrupts(struct ath_hw *ah);
|
||||
void ath9k_hw_kill_interrupts(struct ath_hw *ah);
|
||||
+void ath9k_hw_resume_interrupts(struct ath_hw *ah);
|
||||
|
||||
void ar9002_hw_attach_mac_ops(struct ath_hw *ah);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -375,21 +375,20 @@ void ath9k_tasklet(unsigned long data)
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
enum ath_reset_type type;
|
||||
unsigned long flags;
|
||||
- u32 status = sc->intrstatus;
|
||||
+ u32 status;
|
||||
u32 rxmask;
|
||||
|
||||
+ spin_lock_irqsave(&sc->intr_lock, flags);
|
||||
+ status = sc->intrstatus;
|
||||
+ sc->intrstatus = 0;
|
||||
+ spin_unlock_irqrestore(&sc->intr_lock, flags);
|
||||
+
|
||||
ath9k_ps_wakeup(sc);
|
||||
spin_lock(&sc->sc_pcu_lock);
|
||||
|
||||
if (status & ATH9K_INT_FATAL) {
|
||||
type = RESET_TYPE_FATAL_INT;
|
||||
ath9k_queue_reset(sc, type);
|
||||
-
|
||||
- /*
|
||||
- * Increment the ref. counter here so that
|
||||
- * interrupts are enabled in the reset routine.
|
||||
- */
|
||||
- atomic_inc(&ah->intr_ref_cnt);
|
||||
ath_dbg(common, RESET, "FATAL: Skipping interrupts\n");
|
||||
goto out;
|
||||
}
|
||||
@@ -405,11 +404,6 @@ void ath9k_tasklet(unsigned long data)
|
||||
type = RESET_TYPE_BB_WATCHDOG;
|
||||
ath9k_queue_reset(sc, type);
|
||||
|
||||
- /*
|
||||
- * Increment the ref. counter here so that
|
||||
- * interrupts are enabled in the reset routine.
|
||||
- */
|
||||
- atomic_inc(&ah->intr_ref_cnt);
|
||||
ath_dbg(common, RESET,
|
||||
"BB_WATCHDOG: Skipping interrupts\n");
|
||||
goto out;
|
||||
@@ -422,7 +416,6 @@ void ath9k_tasklet(unsigned long data)
|
||||
if ((sc->gtt_cnt >= MAX_GTT_CNT) && !ath9k_hw_check_alive(ah)) {
|
||||
type = RESET_TYPE_TX_GTT;
|
||||
ath9k_queue_reset(sc, type);
|
||||
- atomic_inc(&ah->intr_ref_cnt);
|
||||
ath_dbg(common, RESET,
|
||||
"GTT: Skipping interrupts\n");
|
||||
goto out;
|
||||
@@ -480,7 +473,7 @@ void ath9k_tasklet(unsigned long data)
|
||||
ath9k_btcoex_handle_interrupt(sc, status);
|
||||
|
||||
/* re-enable hardware interrupt */
|
||||
- ath9k_hw_enable_interrupts(ah);
|
||||
+ ath9k_hw_resume_interrupts(ah);
|
||||
out:
|
||||
spin_unlock(&sc->sc_pcu_lock);
|
||||
ath9k_ps_restore(sc);
|
||||
@@ -544,7 +537,9 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||
return IRQ_NONE;
|
||||
|
||||
/* Cache the status */
|
||||
- sc->intrstatus = status;
|
||||
+ spin_lock(&sc->intr_lock);
|
||||
+ sc->intrstatus |= status;
|
||||
+ spin_unlock(&sc->intr_lock);
|
||||
|
||||
if (status & SCHED_INTR)
|
||||
sched = true;
|
||||
@@ -590,7 +585,7 @@ chip_reset:
|
||||
|
||||
if (sched) {
|
||||
/* turn off every interrupt */
|
||||
- ath9k_hw_disable_interrupts(ah);
|
||||
+ ath9k_hw_kill_interrupts(ah);
|
||||
tasklet_schedule(&sc->intr_tq);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -773,6 +773,7 @@ static const struct ieee80211_iface_limi
|
||||
@@ -777,6 +777,7 @@ static const struct ieee80211_iface_limi
|
||||
BIT(NL80211_IFTYPE_AP) },
|
||||
{ .max = 1, .types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO) },
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1315,6 +1315,53 @@ void ath9k_deinit_debug(struct ath_softc
|
||||
@@ -1316,6 +1316,53 @@ void ath9k_deinit_debug(struct ath_softc
|
||||
ath9k_cmn_spectral_deinit_debug(&sc->spec_priv);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1334,6 +1381,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1335,6 +1382,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
ath9k_tx99_init_debug(sc);
|
||||
ath9k_cmn_spectral_init_debug(&sc->spec_priv, sc->debug.debugfs_phy);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -1076,23 +1076,23 @@ static int __init ath9k_init(void)
|
||||
@@ -1080,23 +1080,23 @@ static int __init ath9k_init(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1362,6 +1362,52 @@ static const struct file_operations fops
|
||||
@@ -1363,6 +1363,52 @@ static const struct file_operations fops
|
||||
.owner = THIS_MODULE
|
||||
};
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1383,6 +1429,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1384,6 +1430,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
|
||||
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_eeprom);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -827,6 +827,9 @@ static inline int ath9k_dump_btcoex(stru
|
||||
@@ -850,6 +850,9 @@ static inline int ath9k_dump_btcoex(stru
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
void ath_init_leds(struct ath_softc *sc);
|
||||
void ath_deinit_leds(struct ath_softc *sc);
|
||||
@@ -10,9 +10,9 @@
|
||||
#else
|
||||
static inline void ath_init_leds(struct ath_softc *sc)
|
||||
{
|
||||
@@ -963,6 +966,13 @@ void ath_ant_comb_scan(struct ath_softc
|
||||
|
||||
#define ATH9K_NUM_CHANCTX 2 /* supports 2 operating channels */
|
||||
@@ -991,6 +994,13 @@ void ath_ant_comb_scan(struct ath_softc
|
||||
#define AIRTIME_USE_NEW_QUEUES BIT(2)
|
||||
#define AIRTIME_ACTIVE(flags) (!!(flags & (AIRTIME_USE_TX|AIRTIME_USE_RX)))
|
||||
|
||||
+struct ath_led {
|
||||
+ struct list_head list;
|
||||
@@ -24,7 +24,7 @@
|
||||
struct ath_softc {
|
||||
struct ieee80211_hw *hw;
|
||||
struct device *dev;
|
||||
@@ -1015,9 +1025,8 @@ struct ath_softc {
|
||||
@@ -1047,9 +1057,8 @@ struct ath_softc {
|
||||
spinlock_t chan_lock;
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
@@ -103,7 +103,8 @@
|
||||
+ GFP_KERNEL);
|
||||
+ if (!led)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
|
||||
- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val);
|
||||
+ led->gpio = gpio = (struct gpio_led *) (led + 1);
|
||||
+ _name = (char *) (led->gpio + 1);
|
||||
+
|
||||
@@ -116,8 +117,7 @@
|
||||
+ ret = ath_add_led(sc, led);
|
||||
+ if (unlikely(ret < 0))
|
||||
+ kfree(led);
|
||||
|
||||
- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
@@ -125,11 +125,11 @@
|
||||
{
|
||||
- if (!sc->led_registered)
|
||||
- return;
|
||||
+ struct ath_led *led;
|
||||
|
||||
-
|
||||
- ath_led_brightness(&sc->led_cdev, LED_OFF);
|
||||
- led_classdev_unregister(&sc->led_cdev);
|
||||
-
|
||||
+ struct ath_led *led;
|
||||
|
||||
- ath9k_hw_gpio_free(sc->sc_ah, sc->sc_ah->led_pin);
|
||||
+ while (!list_empty(&sc->leds)) {
|
||||
+ led = list_first_entry(&sc->leds, struct ath_led, list);
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -988,7 +988,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -992,7 +992,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
/* must be initialized before ieee80211_register_hw */
|
||||
@@ -192,7 +192,7 @@
|
||||
#endif
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1407,6 +1407,61 @@ static const struct file_operations fops
|
||||
@@ -1408,6 +1408,61 @@ static const struct file_operations fops
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
@@ -1431,6 +1486,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1432,6 +1487,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
&fops_eeprom);
|
||||
debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
sc, &fops_chanbw);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1463,6 +1463,50 @@ static const struct file_operations fops
|
||||
@@ -1464,6 +1464,50 @@ static const struct file_operations fops
|
||||
#endif
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1490,6 +1534,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1491,6 +1535,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
debugfs_create_file("gpio_led", S_IWUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_gpio_led);
|
||||
#endif
|
||||
@@ -94,7 +94,7 @@
|
||||
struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1838,6 +1838,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
|
||||
@@ -1842,6 +1842,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
|
||||
}
|
||||
EXPORT_SYMBOL(ath9k_hw_get_tsf_offset);
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
|
||||
struct ath9k_hw_cal_data *caldata, bool fastcc)
|
||||
{
|
||||
@@ -2046,6 +2060,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -2050,6 +2064,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
ar9003_hw_disable_phy_restart(ah);
|
||||
|
||||
ath9k_hw_apply_gpio_override(ah);
|
||||
@@ -125,7 +125,7 @@
|
||||
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -533,6 +533,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||
@@ -529,6 +529,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||
if (test_bit(ATH_OP_HW_RESET, &common->op_flags))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
ops->spectral_scan_config = ar9003_hw_spectral_scan_config;
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -761,7 +761,8 @@ static void ath9k_init_txpower_limits(st
|
||||
@@ -765,7 +765,8 @@ static void ath9k_init_txpower_limits(st
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
|
||||
ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
}
|
||||
|
||||
static const struct ieee80211_iface_limit if_limits[] = {
|
||||
@@ -948,6 +949,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -952,6 +953,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -993,6 +1006,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -997,6 +1010,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
ARRAY_SIZE(ath9k_tpt_blink));
|
||||
#endif
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1816,8 +1835,14 @@ static int ath9k_hw_do_fastcc(struct ath
|
||||
@@ -1820,8 +1839,14 @@ static int ath9k_hw_do_fastcc(struct ath
|
||||
if (AR_SREV_9271(ah))
|
||||
ar9002_hw_load_ani_reg(ah, chan);
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -2071,6 +2096,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -2075,6 +2100,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
ath9k_hw_set_radar_params(ah);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
#include "common.h"
|
||||
#include "debug.h"
|
||||
@@ -973,6 +974,14 @@ struct ath_led {
|
||||
@@ -1001,6 +1002,14 @@ struct ath_led {
|
||||
struct led_classdev cdev;
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct ath_softc {
|
||||
struct ieee80211_hw *hw;
|
||||
struct device *dev;
|
||||
@@ -1027,6 +1036,9 @@ struct ath_softc {
|
||||
@@ -1059,6 +1068,9 @@ struct ath_softc {
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
const char *led_default_trigger;
|
||||
struct list_head leds;
|
||||
|
||||
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -1038,6 +1038,7 @@ struct ath_softc {
|
||||
@@ -1070,6 +1070,7 @@ struct ath_softc {
|
||||
struct list_head leds;
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
struct ath9k_gpio_chip *gpiochip;
|
||||
|
||||
@@ -329,7 +329,7 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
&ratesArray[0], cfgCtl,
|
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -1177,8 +1177,9 @@ static u8 ath_get_rate_txpower(struct at
|
||||
@@ -1236,8 +1236,9 @@ static u8 ath_get_rate_txpower(struct at
|
||||
if (is_40) {
|
||||
u8 power_ht40delta;
|
||||
struct ar5416_eeprom_def *eep = &ah->eeprom.def;
|
||||
|
||||
@@ -349,16 +349,6 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
-
|
||||
- integer = swab32(eep->modalHeader.antCtrlCommon);
|
||||
- eep->modalHeader.antCtrlCommon = integer;
|
||||
-
|
||||
- for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++) {
|
||||
- integer = swab32(eep->modalHeader.antCtrlChain[i]);
|
||||
- eep->modalHeader.antCtrlChain[i] = integer;
|
||||
- }
|
||||
-
|
||||
- for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
|
||||
- word = swab16(eep->modalHeader.spurChans[i].spurChan);
|
||||
- eep->modalHeader.spurChans[i].spurChan = word;
|
||||
- }
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.length);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.checksum);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.version);
|
||||
@@ -368,10 +358,18 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.blueToothOptions);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.deviceCap);
|
||||
+ EEPROM_FIELD_SWAB32(eep->modalHeader.antCtrlCommon);
|
||||
+
|
||||
|
||||
- for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++) {
|
||||
- integer = swab32(eep->modalHeader.antCtrlChain[i]);
|
||||
- eep->modalHeader.antCtrlChain[i] = integer;
|
||||
- }
|
||||
+ for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++)
|
||||
+ EEPROM_FIELD_SWAB32(eep->modalHeader.antCtrlChain[i]);
|
||||
+
|
||||
|
||||
- for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
|
||||
- word = swab16(eep->modalHeader.spurChans[i].spurChan);
|
||||
- eep->modalHeader.spurChans[i].spurChan = word;
|
||||
- }
|
||||
+ for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++)
|
||||
+ EEPROM_FIELD_SWAB16(
|
||||
+ eep->modalHeader.spurChans[i].spurChan);
|
||||
@@ -542,16 +540,6 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
-
|
||||
- integer = swab32(eep->modalHeader.antCtrlCommon);
|
||||
- eep->modalHeader.antCtrlCommon = integer;
|
||||
-
|
||||
- for (i = 0; i < AR9287_MAX_CHAINS; i++) {
|
||||
- integer = swab32(eep->modalHeader.antCtrlChain[i]);
|
||||
- eep->modalHeader.antCtrlChain[i] = integer;
|
||||
- }
|
||||
-
|
||||
- for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
|
||||
- word = swab16(eep->modalHeader.spurChans[i].spurChan);
|
||||
- eep->modalHeader.spurChans[i].spurChan = word;
|
||||
- }
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.length);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.checksum);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.version);
|
||||
@@ -561,10 +549,18 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.blueToothOptions);
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.deviceCap);
|
||||
+ EEPROM_FIELD_SWAB32(eep->modalHeader.antCtrlCommon);
|
||||
+
|
||||
|
||||
- for (i = 0; i < AR9287_MAX_CHAINS; i++) {
|
||||
- integer = swab32(eep->modalHeader.antCtrlChain[i]);
|
||||
- eep->modalHeader.antCtrlChain[i] = integer;
|
||||
- }
|
||||
+ for (i = 0; i < AR9287_MAX_CHAINS; i++)
|
||||
+ EEPROM_FIELD_SWAB32(eep->modalHeader.antCtrlChain[i]);
|
||||
+
|
||||
|
||||
- for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
|
||||
- word = swab16(eep->modalHeader.spurChans[i].spurChan);
|
||||
- eep->modalHeader.spurChans[i].spurChan = word;
|
||||
- }
|
||||
+ for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++)
|
||||
+ EEPROM_FIELD_SWAB16(
|
||||
+ eep->modalHeader.spurChans[i].spurChan);
|
||||
@@ -716,8 +712,7 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
if (need_swap) {
|
||||
- u32 integer, j;
|
||||
- u16 word;
|
||||
+ u32 j;
|
||||
|
||||
-
|
||||
- word = swab16(eep->baseEepHeader.length);
|
||||
- eep->baseEepHeader.length = word;
|
||||
-
|
||||
@@ -738,7 +733,8 @@ Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
-
|
||||
- word = swab16(eep->baseEepHeader.blueToothOptions);
|
||||
- eep->baseEepHeader.blueToothOptions = word;
|
||||
-
|
||||
+ u32 j;
|
||||
|
||||
- word = swab16(eep->baseEepHeader.deviceCap);
|
||||
- eep->baseEepHeader.deviceCap = word;
|
||||
+ EEPROM_FIELD_SWAB16(eep->baseEepHeader.length);
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
|
||||
u8 ath9k_parse_mpdudensity(u8 mpdudensity)
|
||||
{
|
||||
@@ -652,6 +654,7 @@ void ath_reset_work(struct work_struct *
|
||||
@@ -650,6 +652,7 @@ void ath_reset_work(struct work_struct *
|
||||
static int ath9k_start(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct ath_softc *sc = hw->priv;
|
||||
@@ -351,7 +351,7 @@
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
|
||||
@@ -730,6 +733,11 @@ static int ath9k_start(struct ieee80211_
|
||||
@@ -728,6 +731,11 @@ static int ath9k_start(struct ieee80211_
|
||||
AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
+ { "JP", "JP", 78 },
|
||||
+ { "US", "Q2", 86 },
|
||||
+ };
|
||||
+ struct brcmfmac_pd_cc_entry *cc_ent;
|
||||
+ int table_size;
|
||||
+ struct brcmfmac_pd_cc_entry *cc_ent = NULL;
|
||||
+ int table_size = 0;
|
||||
+
|
||||
+ if (of_machine_is_compatible("netgear,r8000")) {
|
||||
+ cc_ent = netgear_r8000_cc_ent;
|
||||
|
||||
@@ -91,7 +91,8 @@
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_REGNUM_MT7620, word);
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_WRITE_MT7620, 1);
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_BUSY_MT7620, 1);
|
||||
+
|
||||
|
||||
- rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
|
||||
+ rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
|
||||
+ }
|
||||
+ break;
|
||||
@@ -103,8 +104,7 @@
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_REGNUM, word);
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_WRITE, 1);
|
||||
+ rt2x00_set_field32(®, RF_CSR_CFG_BUSY, 1);
|
||||
|
||||
- rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
|
||||
+
|
||||
+ rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
|
||||
+ }
|
||||
+ break;
|
||||
@@ -523,7 +523,7 @@
|
||||
static void rt2800_bbp_write_with_rx_chain(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int word,
|
||||
const u8 value)
|
||||
@@ -3459,7 +3838,7 @@ static void rt2800_config_channel(struct
|
||||
@@ -3459,7 +3844,7 @@ static void rt2800_config_channel(struct
|
||||
struct channel_info *info)
|
||||
{
|
||||
u32 reg;
|
||||
@@ -532,7 +532,7 @@
|
||||
u8 bbp, rfcsr;
|
||||
|
||||
info->default_power1 = rt2800_txpower_to_dev(rt2x00dev, rf->channel,
|
||||
@@ -3513,6 +3892,9 @@ static void rt2800_config_channel(struct
|
||||
@@ -3513,6 +3898,9 @@ static void rt2800_config_channel(struct
|
||||
case RF5592:
|
||||
rt2800_config_channel_rf55xx(rt2x00dev, conf, rf, info);
|
||||
break;
|
||||
@@ -542,7 +542,7 @@
|
||||
default:
|
||||
rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info);
|
||||
}
|
||||
@@ -3615,7 +3997,7 @@ static void rt2800_config_channel(struct
|
||||
@@ -3615,7 +4003,7 @@ static void rt2800_config_channel(struct
|
||||
else if (rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
rt2x00_rt(rt2x00dev, RT3883))
|
||||
rt2800_bbp_write(rt2x00dev, 82, 0x82);
|
||||
@@ -551,7 +551,7 @@
|
||||
rt2800_bbp_write(rt2x00dev, 82, 0xf2);
|
||||
|
||||
if (rt2x00_rt(rt2x00dev, RT3593) ||
|
||||
@@ -3637,7 +4019,7 @@ static void rt2800_config_channel(struct
|
||||
@@ -3637,7 +4025,7 @@ static void rt2800_config_channel(struct
|
||||
if (rt2x00_rt(rt2x00dev, RT3572))
|
||||
rt2800_rfcsr_write(rt2x00dev, 8, 0);
|
||||
|
||||
@@ -560,7 +560,7 @@
|
||||
|
||||
switch (rt2x00dev->default_ant.tx_chain_num) {
|
||||
case 3:
|
||||
@@ -3686,6 +4068,7 @@ static void rt2800_config_channel(struct
|
||||
@@ -3686,6 +4074,7 @@ static void rt2800_config_channel(struct
|
||||
|
||||
rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
|
||||
rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
|
||||
@@ -568,7 +568,7 @@
|
||||
|
||||
rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
|
||||
|
||||
@@ -4702,6 +5085,14 @@ void rt2800_vco_calibration(struct rt2x0
|
||||
@@ -4702,6 +5091,14 @@ void rt2800_vco_calibration(struct rt2x0
|
||||
rt2x00_set_field8(&rfcsr, RFCSR3_VCOCAL_EN, 1);
|
||||
rt2800_rfcsr_write(rt2x00dev, 3, rfcsr);
|
||||
break;
|
||||
@@ -583,7 +583,7 @@
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -5102,9 +5493,42 @@ static int rt2800_init_registers(struct
|
||||
@@ -5102,9 +5499,42 @@ static int rt2800_init_registers(struct
|
||||
} else if (rt2x00_rt(rt2x00dev, RT5390) ||
|
||||
rt2x00_rt(rt2x00dev, RT5392) ||
|
||||
rt2x00_rt(rt2x00dev, RT5592)) {
|
||||
@@ -629,7 +629,7 @@
|
||||
} else if (rt2x00_rt(rt2x00dev, RT5350)) {
|
||||
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404);
|
||||
} else {
|
||||
@@ -6136,6 +6560,225 @@ static void rt2800_init_bbp_5592(struct
|
||||
@@ -6136,6 +6566,225 @@ static void rt2800_init_bbp_5592(struct
|
||||
rt2800_bbp_write(rt2x00dev, 103, 0xc0);
|
||||
}
|
||||
|
||||
@@ -855,7 +855,7 @@
|
||||
static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@@ -6178,7 +6821,10 @@ static void rt2800_init_bbp(struct rt2x0
|
||||
@@ -6178,7 +6827,10 @@ static void rt2800_init_bbp(struct rt2x0
|
||||
return;
|
||||
case RT5390:
|
||||
case RT5392:
|
||||
@@ -867,7 +867,7 @@
|
||||
break;
|
||||
case RT5592:
|
||||
rt2800_init_bbp_5592(rt2x00dev);
|
||||
@@ -7392,6 +8038,296 @@ static void rt2800_init_rfcsr_5592(struc
|
||||
@@ -7392,6 +8044,296 @@ static void rt2800_init_rfcsr_5592(struc
|
||||
rt2800_led_open_drain_enable(rt2x00dev);
|
||||
}
|
||||
|
||||
@@ -1164,7 +1164,7 @@
|
||||
static void rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
if (rt2800_is_305x_soc(rt2x00dev)) {
|
||||
@@ -7427,7 +8363,10 @@ static void rt2800_init_rfcsr(struct rt2
|
||||
@@ -7427,7 +8369,10 @@ static void rt2800_init_rfcsr(struct rt2
|
||||
rt2800_init_rfcsr_5350(rt2x00dev);
|
||||
break;
|
||||
case RT5390:
|
||||
@@ -1176,7 +1176,7 @@
|
||||
break;
|
||||
case RT5392:
|
||||
rt2800_init_rfcsr_5392(rt2x00dev);
|
||||
@@ -7856,6 +8795,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||
@@ -7856,6 +8801,7 @@ static int rt2800_init_eeprom(struct rt2
|
||||
case RF5390:
|
||||
case RF5392:
|
||||
case RF5592:
|
||||
@@ -1184,7 +1184,7 @@
|
||||
break;
|
||||
default:
|
||||
rt2x00_err(rt2x00dev, "Invalid RF chipset 0x%04x detected\n",
|
||||
@@ -8424,6 +9364,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||
@@ -8424,6 +9370,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||
case RF5372:
|
||||
case RF5390:
|
||||
case RF5392:
|
||||
@@ -1192,7 +1192,7 @@
|
||||
spec->num_channels = 14;
|
||||
if (spec->clk_is_20mhz)
|
||||
spec->channels = rf_vals_xtal20mhz_3x;
|
||||
@@ -8564,6 +9505,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||
@@ -8564,6 +9511,7 @@ static int rt2800_probe_hw_mode(struct r
|
||||
case RF5372:
|
||||
case RF5390:
|
||||
case RF5392:
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=openssl
|
||||
PKG_BASE:=1.0.2
|
||||
PKG_BUGFIX:=j
|
||||
PKG_BUGFIX:=k
|
||||
PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX)
|
||||
PKG_RELEASE:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
@@ -23,7 +23,7 @@ PKG_SOURCE_URL:=http://www.openssl.org/source/ \
|
||||
http://www.openssl.org/source/old/$(PKG_BASE)/ \
|
||||
ftp://ftp.funet.fi/pub/crypt/mirrors/ftp.openssl.org/source \
|
||||
ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
|
||||
PKG_HASH:=e7aff292be21c259c6af26469c7a9b3ba26e9abaaffd325e3dccc9785256c431
|
||||
PKG_HASH:=6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
|
||||
|
||||
PKG_LICENSE:=OpenSSL
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Configure
|
||||
+++ b/Configure
|
||||
@@ -468,6 +468,12 @@ my %table=(
|
||||
@@ -470,6 +470,12 @@ my %table=(
|
||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
|
||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Configure
|
||||
+++ b/Configure
|
||||
@@ -2114,6 +2114,11 @@ EOF
|
||||
@@ -2128,6 +2128,11 @@ EOF
|
||||
close(OUT);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
WDIRS= windows
|
||||
LIBS= libcrypto.a libssl.a
|
||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
|
||||
@@ -275,7 +275,7 @@ reflect:
|
||||
@@ -276,7 +276,7 @@ reflect:
|
||||
|
||||
sub_all: build_all
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
build_libs: build_libcrypto build_libssl openssl.pc
|
||||
|
||||
@@ -533,7 +533,7 @@ dist:
|
||||
@@ -534,7 +534,7 @@ dist:
|
||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
|
||||
--- a/Makefile.org
|
||||
+++ b/Makefile.org
|
||||
@@ -531,7 +531,7 @@ dist:
|
||||
@@ -532,7 +532,7 @@ dist:
|
||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
# as we stick to -e, CLEARENV ensures that local variables in lower
|
||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
|
||||
@@ -403,11 +403,6 @@ openssl.pc: Makefile
|
||||
@@ -404,11 +404,6 @@ openssl.pc: Makefile
|
||||
echo 'Version: '$(VERSION); \
|
||||
echo 'Requires: libssl libcrypto' ) > openssl.pc
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/Makefile.org
|
||||
+++ b/Makefile.org
|
||||
@@ -281,17 +281,17 @@ build_libcrypto: build_crypto build_engi
|
||||
@@ -282,17 +282,17 @@ build_libcrypto: build_crypto build_engi
|
||||
build_libssl: build_ssl libssl.pc
|
||||
|
||||
build_crypto:
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
all_testapps: build_libs build_testapps
|
||||
build_testapps:
|
||||
@@ -464,7 +464,7 @@ update: errors stacks util/libeay.num ut
|
||||
@@ -465,7 +465,7 @@ update: errors stacks util/libeay.num ut
|
||||
@set -e; target=update; $(RECURSIVE_BUILD_CMD)
|
||||
|
||||
depend:
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
lint:
|
||||
@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
|
||||
@@ -526,9 +526,9 @@ dist:
|
||||
@@ -527,9 +527,9 @@ dist:
|
||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
|
||||
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
|
||||
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
|
||||
@@ -537,12 +537,19 @@ install_sw:
|
||||
@@ -538,12 +538,19 @@ install_sw:
|
||||
$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
|
||||
$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
|
||||
$(INSTALL_PREFIX)$(OPENSSLDIR)/private
|
||||
@@ -66,7 +66,7 @@
|
||||
@set -e; liblist="$(LIBS)"; for i in $$liblist ;\
|
||||
do \
|
||||
if [ -f "$$i" ]; then \
|
||||
@@ -626,12 +633,7 @@ install_html_docs:
|
||||
@@ -627,12 +634,7 @@ install_html_docs:
|
||||
done; \
|
||||
done
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zlib
|
||||
PKG_VERSION:=1.2.10
|
||||
PKG_VERSION:=1.2.11
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=http://www.zlib.net @SF/libpng
|
||||
PKG_HASH:=9612bf086047078ce3a1c154fc9052113fc1a2a97234a059da17a6299bd4dd32
|
||||
PKG_SOURCE_URL:=@SF/libpng http://www.zlib.net
|
||||
PKG_HASH:=4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066
|
||||
|
||||
PKG_LICENSE:=Zlib
|
||||
PKG_LICENSE_FILES:=README
|
||||
|
||||
@@ -26,6 +26,8 @@ PKG_CONFIG_DEPENDS:=\
|
||||
|
||||
PKG_BUILD_DEPENDS:=TARGET_lantiq_xway:kmod-ltq-adsl-danube TARGET_lantiq_xway_legacy:kmod-ltq-adsl-danube TARGET_lantiq_ase:kmod-ltq-adsl-ase
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/ltq-adsl-app
|
||||
|
||||
@@ -5,8 +5,8 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/netifd.git
|
||||
PKG_SOURCE_DATE:=2017-01-13
|
||||
PKG_SOURCE_VERSION:=52541140f8138e31958cdc3d7e42a4029fa6bbc9
|
||||
PKG_SOURCE_DATE:=2017-01-17
|
||||
PKG_SOURCE_VERSION:=a057f6e48f383c7e81cb22aa806216878d87947b
|
||||
PKG_MIRROR_HASH:=8b74721b3c3b2912df4271f0a60c2137642eeb7753d3e656f7a508d8cac013e9
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
@@ -40,8 +40,8 @@ hostapd_append_wpa_key_mgmt() {
|
||||
local auth_type="$(echo $auth_type | tr 'a-z' 'A-Z')"
|
||||
|
||||
append wpa_key_mgmt "WPA-$auth_type"
|
||||
[ "$ieee80211r" -gt 0 ] && append wpa_key_mgmt "FT-${auth_type}"
|
||||
[ "$ieee80211w" -gt 0 ] && append wpa_key_mgmt "WPA-${auth_type}-SHA256"
|
||||
[ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-${auth_type}"
|
||||
[ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-${auth_type}-SHA256"
|
||||
}
|
||||
|
||||
hostapd_add_log_config() {
|
||||
|
||||
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=openvpn
|
||||
|
||||
PKG_VERSION:=2.4.0
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_URL:=http://swupdate.openvpn.net/community/releases
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
@@ -34,6 +34,7 @@ define Package/openvpn/Default
|
||||
MENU:=1
|
||||
DEPENDS:=+kmod-tun +OPENVPN_$(1)_ENABLE_LZO:liblzo +OPENVPN_$(1)_ENABLE_IPROUTE2:ip $(3)
|
||||
VARIANT:=$(1)
|
||||
PROVIDES:=openvpn
|
||||
MAINTAINER:=Mirko Vogt <mirko@openwrt.org>
|
||||
endef
|
||||
|
||||
|
||||
@@ -95,38 +95,33 @@ start_instance() {
|
||||
|
||||
# append flags
|
||||
append_bools "$s" \
|
||||
auth_nocache auth_user_pass_optional bind ccd_exclusive client client_cert_not_required \
|
||||
client_to_client comp_noadapt disable \
|
||||
disable_occ down_pre duplicate_cn fast_io float http_proxy_retry \
|
||||
allow_recursive_routing auth_nocache auth_user_pass_optional bind ccd_exclusive client client_cert_not_required \
|
||||
client_to_client comp_noadapt disable disable_occ down_pre duplicate_cn fast_io float http_proxy_retry \
|
||||
ifconfig_noexec ifconfig_nowarn ifconfig_pool_linear management_forget_disconnect management_hold \
|
||||
management_query_passwords management_signal mktun mlock mtu_test multihome mute_replay_warnings \
|
||||
nobind no_iv no_name_remapping no_replay opt_verify passtos persist_key persist_local_ip \
|
||||
persist_remote_ip persist_tun ping_timer_rem pull push_reset \
|
||||
remote_random rmtun route_noexec route_nopull single_session socks_proxy_retry \
|
||||
suppress_timestamps tcp_nodelay test_crypto tls_client tls_exit tls_server \
|
||||
ncp_disable nobind no_iv no_name_remapping no_replay opt_verify passtos persist_key persist_local_ip \
|
||||
persist_remote_ip persist_tun ping_timer_rem pull push_reset remote_random rmtun route_noexec route_nopull \
|
||||
single_session socks_proxy_retry suppress_timestamps tcp_nodelay test_crypto tls_client tls_exit tls_server \
|
||||
tun_ipv6 up_delay up_restart username_as_common_name
|
||||
|
||||
# append params
|
||||
append_params "$s" \
|
||||
cd askpass auth auth_retry auth_user_pass auth_user_pass_verify bcast_buffers ca cert capath \
|
||||
chroot cipher client_config_dir client_connect client_disconnect comp_lzo connect_freq \
|
||||
chroot cipher client_config_dir client_connect client_disconnect comp_lzo compress connect_freq \
|
||||
connect_retry connect_timeout connect_retry_max crl_verify dev dev_node dev_type dh \
|
||||
echo engine explicit_exit_notify fragment group hand_window hash_size \
|
||||
http_proxy http_proxy_option http_proxy_timeout ifconfig ifconfig_pool \
|
||||
ifconfig_pool_persist ifconfig_push inactive ipchange iroute keepalive \
|
||||
key key_method keysize learn_address link_mtu lladdr local log log_append \
|
||||
lport management management_log_cache max_clients \
|
||||
max_routes_per_client mode mssfix mtu_disc mute nice ns_cert_type ping \
|
||||
ping_exit ping_restart pkcs12 plugin port port_share prng proto rcvbuf \
|
||||
redirect_gateway remap_usr1 remote remote_cert_eku remote_cert_ku remote_cert_tls \
|
||||
reneg_bytes reneg_pkts reneg_sec \
|
||||
replay_persist replay_window resolv_retry route route_delay route_gateway \
|
||||
route_metric route_pre_down route_up rport script_security secret server server_bridge setenv shaper sndbuf \
|
||||
socks_proxy status status_version syslog tcp_queue_limit tls_auth tls_version_min \
|
||||
tls_cipher tls_remote tls_timeout tls_verify tmp_dir topology tran_window \
|
||||
tun_mtu tun_mtu_extra txqueuelen user verb down push up \
|
||||
verify_x509_name x509_username_field \
|
||||
ifconfig_ipv6 route_ipv6 server_ipv6 ifconfig_ipv6_pool ifconfig_ipv6_push iroute_ipv6
|
||||
ecdh_curve echo engine explicit_exit_notify fragment group hand_window hash_size http_proxy \
|
||||
http_proxy_option http_proxy_timeout ifconfig ifconfig_pool ifconfig_pool_persist ifconfig_push \
|
||||
inactive ipchange iroute keepalive key key_method keysize learn_address link_mtu lladdr local \
|
||||
log log_append lport management management_log_cache max_clients max_routes_per_client mode \
|
||||
mssfix mtu_disc mute ncp_ciphers nice ns_cert_type ping ping_exit ping_restart pkcs12 plugin \
|
||||
port port_share prng proto pull_filter rcvbuf redirect_gateway remap_usr1 remote remote_cert_eku \
|
||||
remote_cert_ku remote_cert_tls reneg_bytes reneg_pkts reneg_sec replay_persist replay_window \
|
||||
resolv_retry route route_delay route_gateway route_metric route_pre_down route_up rport \
|
||||
script_security secret server server_bridge setenv shaper sndbuf socks_proxy status status_version \
|
||||
syslog tcp_queue_limit tls_auth tls_crypt tls_version_min tls_cipher tls_timeout \
|
||||
tls_verify tmp_dir topology tran_window tun_mtu tun_mtu_extra txqueuelen user verb \
|
||||
down push up verify_x509_name x509_username_field ifconfig_ipv6 route_ipv6 server_ipv6 \
|
||||
ifconfig_ipv6_pool ifconfig_ipv6_push iroute_ipv6
|
||||
|
||||
openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From a7b38c9dc98481e4a5fc37e51a8690337c674dfb Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stenberg <daniel@haxx.se>
|
||||
Date: Mon, 26 Dec 2016 00:06:33 +0100
|
||||
Subject: [PATCH] vtls: s/SSLEAY/OPENSSL
|
||||
|
||||
Fixed an old leftover use of the USE_SSLEAY define which would make a
|
||||
socket get removed from the applications sockets to monitor when the
|
||||
multi_socket API was used, leading to timeouts.
|
||||
|
||||
Bug: #1174
|
||||
---
|
||||
lib/vtls/vtls.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c
|
||||
index b808e1c..707f24b 100644
|
||||
--- a/lib/vtls/vtls.c
|
||||
+++ b/lib/vtls/vtls.c
|
||||
@@ -484,7 +484,7 @@ void Curl_ssl_close_all(struct Curl_easy *data)
|
||||
curlssl_close_all(data);
|
||||
}
|
||||
|
||||
-#if defined(USE_SSLEAY) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
|
||||
+#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
|
||||
defined(USE_DARWINSSL) || defined(USE_NSS)
|
||||
/* This function is for OpenSSL, GnuTLS, darwinssl, and schannel only. */
|
||||
int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks,
|
||||
@@ -518,7 +518,7 @@ int Curl_ssl_getsock(struct connectdata *conn,
|
||||
(void)numsocks;
|
||||
return GETSOCK_BLANK;
|
||||
}
|
||||
-/* USE_SSLEAY || USE_GNUTLS || USE_SCHANNEL || USE_DARWINSSL || USE_NSS */
|
||||
+/* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL || USE_DARWINSSL || USE_NSS */
|
||||
#endif
|
||||
|
||||
void Curl_ssl_close(struct connectdata *conn, int sockindex)
|
||||
@@ -7,9 +7,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/keyring.git
|
||||
PKG_SOURCE_DATE:=2016-04-30
|
||||
PKG_SOURCE_VERSION:=5c7857eed3fa06a9005f96b9b029388c7f316e83
|
||||
PKG_MIRROR_HASH:=6119196dad6c92df22617c5f4a923728a657b591c6a6901dda21acadc63da51d
|
||||
PKG_SOURCE_DATE:=2017-01-20
|
||||
PKG_SOURCE_VERSION:=a50b7529880988ca96e72dede0279ff139a8ab1a
|
||||
PKG_MIRROR_HASH:=811ba79ba71925e949d2c690db7d7b031ac1dd965aa831ca9b6d9d70f5657254
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
@@ -12,9 +12,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(LEDE_GIT)/project/procd.git
|
||||
PKG_SOURCE_DATE:=2017-01-10
|
||||
PKG_SOURCE_VERSION:=f7069032290a9720142b2ee2c6315d7e1f1a1bd3
|
||||
PKG_MIRROR_HASH:=3917269c1ed1f9b6d4a8f5559b2cdec6f91da3ad00ffe5375b5680f9e230b21d
|
||||
PKG_SOURCE_DATE:=2017-01-26
|
||||
PKG_SOURCE_VERSION:=0f5897760272307d671f4c4c11737241755e853d
|
||||
PKG_MIRROR_HASH:=6647f7b1c0a41ab14a02239816e4752303c4bc58f787b8c123d05b18b5cb41f3
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
@@ -10,6 +10,8 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=osafeloader
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_FLAGS:=nonshared
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/osafeloader
|
||||
|
||||
@@ -74,7 +74,7 @@ include $(INCLUDE_DIR)/target.mk
|
||||
|
||||
USER_PROFILE ?= $(firstword $(PROFILE_NAMES))
|
||||
PROFILE_LIST = $(foreach p,$(PROFILE_NAMES), \
|
||||
echo '$(patsubst DEVICE_%,%,$(p)):'; $(if $($(p)_NAME),echo ' $($(p)_NAME)'; ) echo ' Packages: $($(p)_PACKAGES)'; \
|
||||
echo '$(patsubst DEVICE_%,%,$(p)):'; $(if $($(p)_NAME),echo ' $(subst ','"'"',$($(p)_NAME))'; ) echo ' Packages: $($(p)_PACKAGES)'; \
|
||||
)
|
||||
|
||||
.profiles.mk: .targetinfo
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
ARCH:=mips
|
||||
BOARD:=ar71xx
|
||||
BOARDNAME:=Atheros AR7xxx/AR9xxx
|
||||
FEATURES:=mips16
|
||||
FEATURES:=
|
||||
CPU_TYPE:=24kc
|
||||
SUBTARGETS:=generic nand mikrotik
|
||||
|
||||
|
||||
@@ -722,6 +722,6 @@ define Device/bhr-4grv2
|
||||
MTDPARTS := spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,14528k(rootfs),1472k(kernel),64k(art)ro,16000k@0x50000(firmware)
|
||||
IMAGES := sysupgrade.bin factory.bin
|
||||
IMAGE/sysupgrade.bin = append-rootfs | pad-rootfs | pad-to $$$$(ROOTFS_SIZE) | append-kernel | check-size $$$$(IMAGE_SIZE)
|
||||
IMAGE/factory.bin = append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | mkbuffaloimg
|
||||
IMAGE/factory.bin = append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | mkbuffaloimg
|
||||
endef
|
||||
TARGET_DEVICES += bhr-4grv2
|
||||
|
||||
@@ -177,7 +177,8 @@ define Device/linksys-ea6300-v1
|
||||
DEVICE_TITLE := Linksys EA6300 V1
|
||||
DEVICE_PACKAGES := kmod-b43 $(USB3_PACKAGES)
|
||||
endef
|
||||
TARGET_DEVICES += linksys-ea6300-v1
|
||||
# Disabled due to problems with 2 TRX partitions
|
||||
# TARGET_DEVICES += linksys-ea6300-v1
|
||||
|
||||
define Device/netgear
|
||||
IMAGES := chk
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
BOARDNAME:=MIPS 74K
|
||||
CPU_TYPE:=74kc
|
||||
FEATURES+=mips16
|
||||
|
||||
define Target/Description
|
||||
Build firmware for Broadcom BCM47xx and BCM53xx devices with
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
From 36b3b702c20e67b18070159dfba80d2084836928 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Haab <dhaab@luxul.com>
|
||||
Date: Mon, 23 Jan 2017 12:50:38 -0700
|
||||
Subject: [PATCH] MIPS: BCM47XX: Add Luxul devices to the database
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
So far only Luxul XWR-1750 router was supported. This adds a set of
|
||||
other Luxul devices based on BCM47XX. It's a standard support for LEDs
|
||||
and buttons.
|
||||
|
||||
Signed-off-by: Dan Haab <dhaab@luxul.com>
|
||||
Cc: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Cc: Rafał Miłecki <zajec5@gmail.com>
|
||||
Cc: linux-mips@linux-mips.org
|
||||
Patchwork: https://patchwork.linux-mips.org/patch/15106/
|
||||
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
||||
---
|
||||
arch/mips/bcm47xx/board.c | 9 +++
|
||||
arch/mips/bcm47xx/buttons.c | 72 +++++++++++++++++++
|
||||
arch/mips/bcm47xx/leds.c | 81 ++++++++++++++++++++++
|
||||
arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h | 9 +++
|
||||
4 files changed, 171 insertions(+)
|
||||
|
||||
--- a/arch/mips/bcm47xx/board.c
|
||||
+++ b/arch/mips/bcm47xx/board.c
|
||||
@@ -149,6 +149,15 @@ struct bcm47xx_board_type_list2 bcm47xx_
|
||||
/* board_id */
|
||||
static const
|
||||
struct bcm47xx_board_type_list1 bcm47xx_board_list_board_id[] __initconst = {
|
||||
+ {{BCM47XX_BOARD_LUXUL_ABR_4400_V1, "Luxul ABR-4400 V1"}, "luxul_abr4400_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XAP_310_V1, "Luxul XAP-310 V1"}, "luxul_xap310_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XAP_1210_V1, "Luxul XAP-1210 V1"}, "luxul_xap1210_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XAP_1230_V1, "Luxul XAP-1230 V1"}, "luxul_xap1230_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XAP_1240_V1, "Luxul XAP-1240 V1"}, "luxul_xap1240_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XAP_1500_V1, "Luxul XAP-1500 V1"}, "luxul_xap1500_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XBR_4400_V1, "Luxul XBR-4400 V1"}, "luxul_xbr4400_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XVW_P30_V1, "Luxul XVW-P30 V1"}, "luxul_xvwp30_v1"},
|
||||
+ {{BCM47XX_BOARD_LUXUL_XWR_600_V1, "Luxul XWR-600 V1"}, "luxul_xwr600_v1"},
|
||||
{{BCM47XX_BOARD_LUXUL_XWR_1750_V1, "Luxul XWR-1750 V1"}, "luxul_xwr1750_v1"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614 V8"}, "U12H072T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WGR614V9, "Netgear WGR614 V9"}, "U12H094T00_NETGEAR"},
|
||||
--- a/arch/mips/bcm47xx/buttons.c
|
||||
+++ b/arch/mips/bcm47xx/buttons.c
|
||||
@@ -302,6 +302,51 @@ bcm47xx_buttons_linksys_wrtsl54gs[] __in
|
||||
/* Luxul */
|
||||
|
||||
static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_abr_4400_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(14, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xap_310_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(20, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xap_1210_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(8, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xap_1230_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(8, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xap_1240_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(8, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xap_1500_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(14, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xbr_4400_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(14, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xvw_p30_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(20, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
+bcm47xx_buttons_luxul_xwr_600_v1[] = {
|
||||
+ BCM47XX_GPIO_KEY(8, KEY_RESTART),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_keys_button
|
||||
bcm47xx_buttons_luxul_xwr_1750_v1[] = {
|
||||
BCM47XX_GPIO_KEY(14, BTN_TASK),
|
||||
};
|
||||
@@ -561,6 +606,33 @@ int __init bcm47xx_buttons_register(void
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrtsl54gs);
|
||||
break;
|
||||
|
||||
+ case BCM47XX_BOARD_LUXUL_ABR_4400_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_abr_4400_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_310_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_310_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1210_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1210_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1230_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1230_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1240_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1240_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1500_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xap_1500_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XBR_4400_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xbr_4400_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XVW_P30_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xvw_p30_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XWR_600_V1:
|
||||
+ err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_600_v1);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_luxul_xwr_1750_v1);
|
||||
break;
|
||||
--- a/arch/mips/bcm47xx/leds.c
|
||||
+++ b/arch/mips/bcm47xx/leds.c
|
||||
@@ -373,6 +373,60 @@ bcm47xx_leds_linksys_wrtsl54gs[] __initc
|
||||
/* Luxul */
|
||||
|
||||
static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_abr_4400_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(12, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(15, "green", "status", 0, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap_310_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(6, "green", "status", 1, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap_1210_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(6, "green", "status", 1, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap_1230_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(3, "blue", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED(4, "green", "bridge", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(6, "green", "status", 1, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap_1240_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(3, "blue", "2ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED(4, "green", "bridge", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(6, "green", "status", 1, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xap_1500_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(13, "green", "status", 1, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xbr_4400_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(12, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(15, "green", "status", 0, "timer"),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xvw_p30_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(0, "blue", "status", 1, "timer"),
|
||||
+ BCM47XX_GPIO_LED(1, "green", "link", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
+bcm47xx_leds_luxul_xwr_600_v1[] __initconst = {
|
||||
+ BCM47XX_GPIO_LED(3, "green", "wps", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+ BCM47XX_GPIO_LED_TRIGGER(6, "green", "status", 1, "timer"),
|
||||
+ BCM47XX_GPIO_LED(9, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
+};
|
||||
+
|
||||
+static const struct gpio_led
|
||||
bcm47xx_leds_luxul_xwr_1750_v1[] __initconst = {
|
||||
BCM47XX_GPIO_LED(5, "green", "5ghz", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED(12, "green", "usb", 0, LEDS_GPIO_DEFSTATE_OFF),
|
||||
@@ -633,6 +687,33 @@ void __init bcm47xx_leds_register(void)
|
||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrtsl54gs);
|
||||
break;
|
||||
|
||||
+ case BCM47XX_BOARD_LUXUL_ABR_4400_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_abr_4400_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_310_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_310_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1210_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1210_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1230_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1230_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1240_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1240_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XAP_1500_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xap_1500_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XBR_4400_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xbr_4400_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XVW_P30_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xvw_p30_v1);
|
||||
+ break;
|
||||
+ case BCM47XX_BOARD_LUXUL_XWR_600_V1:
|
||||
+ bcm47xx_set_pdata(bcm47xx_leds_luxul_xwr_600_v1);
|
||||
+ break;
|
||||
case BCM47XX_BOARD_LUXUL_XWR_1750_V1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_luxul_xwr_1750_v1);
|
||||
break;
|
||||
--- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
+++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h
|
||||
@@ -80,6 +80,15 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_LINKSYS_WRT610NV2,
|
||||
BCM47XX_BOARD_LINKSYS_WRTSL54GS,
|
||||
|
||||
+ BCM47XX_BOARD_LUXUL_ABR_4400_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XAP_310_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XAP_1210_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XAP_1230_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XAP_1240_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XAP_1500_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XBR_4400_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XVW_P30_V1,
|
||||
+ BCM47XX_BOARD_LUXUL_XWR_600_V1,
|
||||
BCM47XX_BOARD_LUXUL_XWR_1750_V1,
|
||||
|
||||
BCM47XX_BOARD_MICROSOFT_MN700,
|
||||
@@ -8,9 +8,9 @@
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT54G3GV2, "Linksys WRT54G3GV2-VF"}, "WRT54G3GV2-VF", "1.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT610NV1, "Linksys WRT610N V1"}, "WRT610N", "1.0"},
|
||||
{{BCM47XX_BOARD_LINKSYS_WRT610NV2, "Linksys WRT610N V2"}, "WRT610N", "2.0"},
|
||||
@@ -150,9 +151,12 @@ struct bcm47xx_board_type_list2 bcm47xx_
|
||||
static const
|
||||
struct bcm47xx_board_type_list1 bcm47xx_board_list_board_id[] __initconst = {
|
||||
@@ -159,9 +160,12 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||
{{BCM47XX_BOARD_LUXUL_XVW_P30_V1, "Luxul XVW-P30 V1"}, "luxul_xvwp30_v1"},
|
||||
{{BCM47XX_BOARD_LUXUL_XWR_600_V1, "Luxul XWR-600 V1"}, "luxul_xwr600_v1"},
|
||||
{{BCM47XX_BOARD_LUXUL_XWR_1750_V1, "Luxul XWR-1750 V1"}, "luxul_xwr1750_v1"},
|
||||
+ {{BCM47XX_BOARD_NETGEAR_R6300_V1, "Netgear R6300 V1"}, "U12H218T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WGR614V8, "Netgear WGR614 V8"}, "U12H072T00_NETGEAR"},
|
||||
@@ -21,7 +21,7 @@
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR3300, "Netgear WNDR3300"}, "U12H093T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V1, "Netgear WNDR3400 V1"}, "U12H155T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR3400V2, "Netgear WNDR3400 V2"}, "U12H187T00_NETGEAR"},
|
||||
@@ -162,6 +166,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||
@@ -171,6 +175,7 @@ struct bcm47xx_board_type_list1 bcm47xx_
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR4000, "Netgear WNDR4000"}, "U12H181T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V1, "Netgear WNDR4500 V1"}, "U12H189T00_NETGEAR"},
|
||||
{{BCM47XX_BOARD_NETGEAR_WNDR4500V2, "Netgear WNDR4500 V2"}, "U12H224T00_NETGEAR"},
|
||||
@@ -63,7 +63,7 @@
|
||||
bcm47xx_buttons_linksys_wrt54g3gv2[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(5, KEY_WIMAX),
|
||||
BCM47XX_GPIO_KEY(6, KEY_RESTART),
|
||||
@@ -333,6 +351,17 @@ bcm47xx_buttons_motorola_wr850gv2v3[] __
|
||||
@@ -378,6 +396,17 @@ bcm47xx_buttons_motorola_wr850gv2v3[] __
|
||||
/* Netgear */
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@@ -81,7 +81,7 @@
|
||||
bcm47xx_buttons_netgear_wndr3400v1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -360,6 +389,11 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
||||
@@ -405,6 +434,11 @@ bcm47xx_buttons_netgear_wndr4500v1[] __i
|
||||
};
|
||||
|
||||
static const struct gpio_keys_button
|
||||
@@ -93,7 +93,7 @@
|
||||
bcm47xx_buttons_netgear_wnr3500lv1[] __initconst = {
|
||||
BCM47XX_GPIO_KEY(4, KEY_RESTART),
|
||||
BCM47XX_GPIO_KEY(6, KEY_WPS_BUTTON),
|
||||
@@ -413,6 +447,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -458,6 +492,9 @@ int __init bcm47xx_buttons_register(void
|
||||
int err;
|
||||
|
||||
switch (board) {
|
||||
@@ -103,7 +103,7 @@
|
||||
case BCM47XX_BOARD_ASUS_RTN12:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_asus_rtn12);
|
||||
break;
|
||||
@@ -543,6 +580,12 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -588,6 +625,12 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt310nv1);
|
||||
break;
|
||||
@@ -116,7 +116,7 @@
|
||||
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_linksys_wrt54g3gv2);
|
||||
break;
|
||||
@@ -579,6 +622,12 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -651,6 +694,12 @@ int __init bcm47xx_buttons_register(void
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_motorola_wr850gv2v3);
|
||||
break;
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
case BCM47XX_BOARD_NETGEAR_WNDR3400V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr3400v1);
|
||||
break;
|
||||
@@ -591,6 +640,9 @@ int __init bcm47xx_buttons_register(void
|
||||
@@ -663,6 +712,9 @@ int __init bcm47xx_buttons_register(void
|
||||
case BCM47XX_BOARD_NETGEAR_WNDR4500V1:
|
||||
err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500v1);
|
||||
break;
|
||||
@@ -149,7 +149,7 @@
|
||||
BCM47XX_BOARD_LINKSYS_WRT54G3GV2,
|
||||
BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0101,
|
||||
BCM47XX_BOARD_LINKSYS_WRT54G_TYPE_0467,
|
||||
@@ -88,9 +89,12 @@ enum bcm47xx_board {
|
||||
@@ -97,9 +98,12 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_MOTOROLA_WR850GP,
|
||||
BCM47XX_BOARD_MOTOROLA_WR850GV2V3,
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
BCM47XX_BOARD_NETGEAR_WNDR3300,
|
||||
BCM47XX_BOARD_NETGEAR_WNDR3400V1,
|
||||
BCM47XX_BOARD_NETGEAR_WNDR3400V2,
|
||||
@@ -100,6 +104,7 @@ enum bcm47xx_board {
|
||||
@@ -109,6 +113,7 @@ enum bcm47xx_board {
|
||||
BCM47XX_BOARD_NETGEAR_WNDR4000,
|
||||
BCM47XX_BOARD_NETGEAR_WNDR4500V1,
|
||||
BCM47XX_BOARD_NETGEAR_WNDR4500V2,
|
||||
@@ -201,7 +201,7 @@
|
||||
bcm47xx_leds_linksys_wrt54g_generic[] __initconst = {
|
||||
BCM47XX_GPIO_LED(0, "unk", "dmz", 1, LEDS_GPIO_DEFSTATE_OFF),
|
||||
BCM47XX_GPIO_LED(1, "unk", "power", 0, LEDS_GPIO_DEFSTATE_ON),
|
||||
@@ -478,6 +493,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -532,6 +547,9 @@ void __init bcm47xx_leds_register(void)
|
||||
enum bcm47xx_board board = bcm47xx_board_get();
|
||||
|
||||
switch (board) {
|
||||
@@ -211,7 +211,7 @@
|
||||
case BCM47XX_BOARD_ASUS_RTN12:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_asus_rtn12);
|
||||
break;
|
||||
@@ -611,6 +629,9 @@ void __init bcm47xx_leds_register(void)
|
||||
@@ -665,6 +683,9 @@ void __init bcm47xx_leds_register(void)
|
||||
case BCM47XX_BOARD_LINKSYS_WRT310NV1:
|
||||
bcm47xx_set_pdata(bcm47xx_leds_linksys_wrt310nv1);
|
||||
break;
|
||||
|
||||
@@ -267,13 +267,13 @@ static int netdev_trig_notify(struct notifier_block *nb,
|
||||
if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER && evt != NETDEV_CHANGENAME)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (strcmp(dev->name, trigger_data->device_name))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
cancel_delayed_work_sync(&trigger_data->work);
|
||||
|
||||
spin_lock_bh(&trigger_data->lock);
|
||||
|
||||
if (strcmp(dev->name, trigger_data->device_name))
|
||||
goto done;
|
||||
|
||||
if (evt == NETDEV_REGISTER || evt == NETDEV_CHANGENAME) {
|
||||
if (trigger_data->net_dev != NULL)
|
||||
dev_put(trigger_data->net_dev);
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Subject: [PATCH 1/2] net: phy: cherry-pick Broadcom drivers updates from
|
||||
v4.10-rc1
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
|
||||
--- a/drivers/net/phy/broadcom.c
|
||||
+++ b/drivers/net/phy/broadcom.c
|
||||
@@ -18,7 +18,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/brcmphy.h>
|
||||
-
|
||||
+#include <linux/of.h>
|
||||
|
||||
#define BRCM_PHY_MODEL(phydev) \
|
||||
((phydev)->drv->phy_id & (phydev)->drv->phy_id_mask)
|
||||
@@ -30,9 +30,32 @@ MODULE_DESCRIPTION("Broadcom PHY driver"
|
||||
MODULE_AUTHOR("Maciej W. Rozycki");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
-static int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val)
|
||||
+static int bcm54810_config(struct phy_device *phydev)
|
||||
{
|
||||
- return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val);
|
||||
+ int rc, val;
|
||||
+
|
||||
+ val = bcm_phy_read_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL);
|
||||
+ val &= ~BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN;
|
||||
+ rc = bcm_phy_write_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL,
|
||||
+ val);
|
||||
+ if (rc < 0)
|
||||
+ return rc;
|
||||
+
|
||||
+ val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC);
|
||||
+ val &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN;
|
||||
+ val |= MII_BCM54XX_AUXCTL_MISC_WREN;
|
||||
+ rc = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC,
|
||||
+ val);
|
||||
+ if (rc < 0)
|
||||
+ return rc;
|
||||
+
|
||||
+ val = bcm_phy_read_shadow(phydev, BCM54810_SHD_CLK_CTL);
|
||||
+ val &= ~BCM54810_SHD_CLK_CTL_GTXCLK_EN;
|
||||
+ rc = bcm_phy_write_shadow(phydev, BCM54810_SHD_CLK_CTL, val);
|
||||
+ if (rc < 0)
|
||||
+ return rc;
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/* Needs SMDSP clock enabled via bcm54xx_phydsp_config() */
|
||||
@@ -207,6 +230,12 @@ static int bcm54xx_config_init(struct ph
|
||||
(phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE))
|
||||
bcm54xx_adjust_rxrefclk(phydev);
|
||||
|
||||
+ if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810) {
|
||||
+ err = bcm54810_config(phydev);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
bcm54xx_phydsp_config(phydev);
|
||||
|
||||
return 0;
|
||||
@@ -304,6 +333,7 @@ static int bcm5482_read_status(struct ph
|
||||
|
||||
static int bcm5481_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
+ struct device_node *np = phydev->dev.of_node;
|
||||
int ret;
|
||||
|
||||
/* Aneg firsly. */
|
||||
@@ -334,6 +364,49 @@ static int bcm5481_config_aneg(struct ph
|
||||
phy_write(phydev, 0x18, reg);
|
||||
}
|
||||
|
||||
+ if (of_property_read_bool(np, "enet-phy-lane-swap")) {
|
||||
+ /* Lane Swap - Undocumented register...magic! */
|
||||
+ ret = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_SEL_ER + 0x9,
|
||||
+ 0x11B);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int bcm54612e_config_aneg(struct phy_device *phydev)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* First, auto-negotiate. */
|
||||
+ ret = genphy_config_aneg(phydev);
|
||||
+
|
||||
+ /* Clear TX internal delay unless requested. */
|
||||
+ if ((phydev->interface != PHY_INTERFACE_MODE_RGMII_ID) &&
|
||||
+ (phydev->interface != PHY_INTERFACE_MODE_RGMII_TXID)) {
|
||||
+ /* Disable TXD to GTXCLK clock delay (default set) */
|
||||
+ /* Bit 9 is the only field in shadow register 00011 */
|
||||
+ bcm_phy_write_shadow(phydev, 0x03, 0);
|
||||
+ }
|
||||
+
|
||||
+ /* Clear RX internal delay unless requested. */
|
||||
+ if ((phydev->interface != PHY_INTERFACE_MODE_RGMII_ID) &&
|
||||
+ (phydev->interface != PHY_INTERFACE_MODE_RGMII_RXID)) {
|
||||
+ u16 reg;
|
||||
+
|
||||
+ /* Errata: reads require filling in the write selector field */
|
||||
+ bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC,
|
||||
+ MII_BCM54XX_AUXCTL_MISC_RDSEL_MISC);
|
||||
+ reg = phy_read(phydev, MII_BCM54XX_AUX_CTL);
|
||||
+ /* Disable RXD to RXC delay (default set) */
|
||||
+ reg &= ~MII_BCM54XX_AUXCTL_MISC_RXD_RXC_SKEW;
|
||||
+ /* Clear shadow selector field */
|
||||
+ reg &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MASK;
|
||||
+ bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC,
|
||||
+ MII_BCM54XX_AUXCTL_MISC_WREN | reg);
|
||||
+ }
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -488,6 +561,19 @@ static struct phy_driver broadcom_driver
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
}, {
|
||||
+ .phy_id = PHY_ID_BCM54612E,
|
||||
+ .phy_id_mask = 0xfffffff0,
|
||||
+ .name = "Broadcom BCM54612E",
|
||||
+ .features = PHY_GBIT_FEATURES |
|
||||
+ SUPPORTED_Pause | SUPPORTED_Asym_Pause,
|
||||
+ .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
+ .config_init = bcm54xx_config_init,
|
||||
+ .config_aneg = bcm54612e_config_aneg,
|
||||
+ .read_status = genphy_read_status,
|
||||
+ .ack_interrupt = bcm_phy_ack_intr,
|
||||
+ .config_intr = bcm_phy_config_intr,
|
||||
+ .driver = { .owner = THIS_MODULE },
|
||||
+}, {
|
||||
.phy_id = PHY_ID_BCM54616S,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM54616S",
|
||||
@@ -527,6 +613,19 @@ static struct phy_driver broadcom_driver
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
}, {
|
||||
+ .phy_id = PHY_ID_BCM54810,
|
||||
+ .phy_id_mask = 0xfffffff0,
|
||||
+ .name = "Broadcom BCM54810",
|
||||
+ .features = PHY_GBIT_FEATURES |
|
||||
+ SUPPORTED_Pause | SUPPORTED_Asym_Pause,
|
||||
+ .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
+ .config_init = bcm54xx_config_init,
|
||||
+ .config_aneg = bcm5481_config_aneg,
|
||||
+ .read_status = genphy_read_status,
|
||||
+ .ack_interrupt = bcm_phy_ack_intr,
|
||||
+ .config_intr = bcm_phy_config_intr,
|
||||
+ .driver = { .owner = THIS_MODULE },
|
||||
+}, {
|
||||
.phy_id = PHY_ID_BCM5482,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5482",
|
||||
@@ -612,9 +711,11 @@ static struct mdio_device_id __maybe_unu
|
||||
{ PHY_ID_BCM5411, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5421, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5461, 0xfffffff0 },
|
||||
+ { PHY_ID_BCM54612E, 0xfffffff0 },
|
||||
{ PHY_ID_BCM54616S, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5464, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5481, 0xfffffff0 },
|
||||
+ { PHY_ID_BCM54810, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5482, 0xfffffff0 },
|
||||
{ PHY_ID_BCM50610, 0xfffffff0 },
|
||||
{ PHY_ID_BCM50610M, 0xfffffff0 },
|
||||
--- a/include/linux/brcmphy.h
|
||||
+++ b/include/linux/brcmphy.h
|
||||
@@ -13,11 +13,13 @@
|
||||
#define PHY_ID_BCM5241 0x0143bc30
|
||||
#define PHY_ID_BCMAC131 0x0143bc70
|
||||
#define PHY_ID_BCM5481 0x0143bca0
|
||||
+#define PHY_ID_BCM54810 0x03625d00
|
||||
#define PHY_ID_BCM5482 0x0143bcb0
|
||||
#define PHY_ID_BCM5411 0x00206070
|
||||
#define PHY_ID_BCM5421 0x002060e0
|
||||
#define PHY_ID_BCM5464 0x002060b0
|
||||
#define PHY_ID_BCM5461 0x002060c0
|
||||
+#define PHY_ID_BCM54612E 0x03625e60
|
||||
#define PHY_ID_BCM54616S 0x03625d10
|
||||
#define PHY_ID_BCM57780 0x03625d90
|
||||
|
||||
@@ -52,6 +54,7 @@
|
||||
#define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00002000
|
||||
#define PHY_BRCM_CLEAR_RGMII_MODE 0x00004000
|
||||
#define PHY_BRCM_DIS_TXCRXC_NOENRGY 0x00008000
|
||||
+
|
||||
/* Broadcom BCM7xxx specific workarounds */
|
||||
#define PHY_BRCM_7XXX_REV(x) (((x) >> 8) & 0xff)
|
||||
#define PHY_BRCM_7XXX_PATCH(x) ((x) & 0xff)
|
||||
@@ -102,11 +105,14 @@
|
||||
#define MII_BCM54XX_AUXCTL_ACTL_SMDSP_ENA 0x0800
|
||||
|
||||
#define MII_BCM54XX_AUXCTL_MISC_WREN 0x8000
|
||||
+#define MII_BCM54XX_AUXCTL_MISC_RXD_RXC_SKEW 0x0100
|
||||
#define MII_BCM54XX_AUXCTL_MISC_FORCE_AMDIX 0x0200
|
||||
#define MII_BCM54XX_AUXCTL_MISC_RDSEL_MISC 0x7000
|
||||
#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC 0x0007
|
||||
+#define MII_BCM54XX_AUXCTL_SHDWSEL_READ_SHIFT 12
|
||||
+#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN (1 << 8)
|
||||
|
||||
-#define MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL 0x0000
|
||||
+#define MII_BCM54XX_AUXCTL_SHDWSEL_MASK 0x0007
|
||||
|
||||
/*
|
||||
* Broadcom LED source encodings. These are used in BCM5461, BCM5481,
|
||||
@@ -186,6 +192,12 @@
|
||||
#define BCM5482_SSD_SGMII_SLAVE_EN 0x0002 /* Slave mode enable */
|
||||
#define BCM5482_SSD_SGMII_SLAVE_AD 0x0001 /* Slave auto-detection */
|
||||
|
||||
+/* BCM54810 Registers */
|
||||
+#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL (MII_BCM54XX_EXP_SEL_ER + 0x90)
|
||||
+#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN (1 << 0)
|
||||
+#define BCM54810_SHD_CLK_CTL 0x3
|
||||
+#define BCM54810_SHD_CLK_CTL_GTXCLK_EN (1 << 9)
|
||||
+
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Fast Ethernet Transceiver definitions. */
|
||||
--- a/drivers/net/phy/Kconfig
|
||||
+++ b/drivers/net/phy/Kconfig
|
||||
@@ -77,7 +77,7 @@ config BROADCOM_PHY
|
||||
select BCM_NET_PHYLIB
|
||||
---help---
|
||||
Currently supports the BCM5411, BCM5421, BCM5461, BCM54616S, BCM5464,
|
||||
- BCM5481 and BCM5482 PHYs.
|
||||
+ BCM5481, BCM54810 and BCM5482 PHYs.
|
||||
|
||||
config BCM_CYGNUS_PHY
|
||||
tristate "Drivers for Broadcom Cygnus SoC internal PHY"
|
||||
--- a/drivers/net/phy/bcm-phy-lib.c
|
||||
+++ b/drivers/net/phy/bcm-phy-lib.c
|
||||
@@ -50,6 +50,23 @@ int bcm_phy_read_exp(struct phy_device *
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bcm_phy_read_exp);
|
||||
|
||||
+int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum)
|
||||
+{
|
||||
+ /* The register must be written to both the Shadow Register Select and
|
||||
+ * the Shadow Read Register Selector
|
||||
+ */
|
||||
+ phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum |
|
||||
+ regnum << MII_BCM54XX_AUXCTL_SHDWSEL_READ_SHIFT);
|
||||
+ return phy_read(phydev, MII_BCM54XX_AUX_CTL);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(bcm54xx_auxctl_read);
|
||||
+
|
||||
+int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val)
|
||||
+{
|
||||
+ return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val);
|
||||
+}
|
||||
+EXPORT_SYMBOL(bcm54xx_auxctl_write);
|
||||
+
|
||||
int bcm_phy_write_misc(struct phy_device *phydev,
|
||||
u16 reg, u16 chl, u16 val)
|
||||
{
|
||||
--- a/drivers/net/phy/bcm-phy-lib.h
|
||||
+++ b/drivers/net/phy/bcm-phy-lib.h
|
||||
@@ -19,6 +19,9 @@
|
||||
int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val);
|
||||
int bcm_phy_read_exp(struct phy_device *phydev, u16 reg);
|
||||
|
||||
+int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val);
|
||||
+int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum);
|
||||
+
|
||||
int bcm_phy_write_misc(struct phy_device *phydev,
|
||||
u16 reg, u16 chl, u16 value);
|
||||
int bcm_phy_read_misc(struct phy_device *phydev,
|
||||
@@ -0,0 +1,76 @@
|
||||
--- a/drivers/net/phy/broadcom.c
|
||||
+++ b/drivers/net/phy/broadcom.c
|
||||
@@ -30,6 +30,22 @@ MODULE_DESCRIPTION("Broadcom PHY driver"
|
||||
MODULE_AUTHOR("Maciej W. Rozycki");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
+static int bcm54210e_config_init(struct phy_device *phydev)
|
||||
+{
|
||||
+ int val;
|
||||
+
|
||||
+ val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC);
|
||||
+ val &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN;
|
||||
+ val |= MII_BCM54XX_AUXCTL_MISC_WREN;
|
||||
+ bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC, val);
|
||||
+
|
||||
+ val = bcm_phy_read_shadow(phydev, BCM54810_SHD_CLK_CTL);
|
||||
+ val &= ~BCM54810_SHD_CLK_CTL_GTXCLK_EN;
|
||||
+ bcm_phy_write_shadow(phydev, BCM54810_SHD_CLK_CTL, val);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bcm54810_config(struct phy_device *phydev)
|
||||
{
|
||||
int rc, val;
|
||||
@@ -230,7 +246,11 @@ static int bcm54xx_config_init(struct ph
|
||||
(phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE))
|
||||
bcm54xx_adjust_rxrefclk(phydev);
|
||||
|
||||
- if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810) {
|
||||
+ if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54210E) {
|
||||
+ err = bcm54210e_config_init(phydev);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+ } else if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810) {
|
||||
err = bcm54810_config(phydev);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -548,6 +568,19 @@ static struct phy_driver broadcom_driver
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE },
|
||||
}, {
|
||||
+ .phy_id = PHY_ID_BCM54210E,
|
||||
+ .phy_id_mask = 0xfffffff0,
|
||||
+ .name = "Broadcom BCM54210E",
|
||||
+ .features = PHY_GBIT_FEATURES |
|
||||
+ SUPPORTED_Pause | SUPPORTED_Asym_Pause,
|
||||
+ .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
+ .config_init = bcm54xx_config_init,
|
||||
+ .config_aneg = genphy_config_aneg,
|
||||
+ .read_status = genphy_read_status,
|
||||
+ .ack_interrupt = bcm_phy_ack_intr,
|
||||
+ .config_intr = bcm_phy_config_intr,
|
||||
+ .driver = { .owner = THIS_MODULE },
|
||||
+}, {
|
||||
.phy_id = PHY_ID_BCM5461,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5461",
|
||||
@@ -710,6 +743,7 @@ module_phy_driver(broadcom_drivers);
|
||||
static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
|
||||
{ PHY_ID_BCM5411, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5421, 0xfffffff0 },
|
||||
+ { PHY_ID_BCM54210E, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5461, 0xfffffff0 },
|
||||
{ PHY_ID_BCM54612E, 0xfffffff0 },
|
||||
{ PHY_ID_BCM54616S, 0xfffffff0 },
|
||||
--- a/include/linux/brcmphy.h
|
||||
+++ b/include/linux/brcmphy.h
|
||||
@@ -17,6 +17,7 @@
|
||||
#define PHY_ID_BCM5482 0x0143bcb0
|
||||
#define PHY_ID_BCM5411 0x00206070
|
||||
#define PHY_ID_BCM5421 0x002060e0
|
||||
+#define PHY_ID_BCM54210E 0x600d84a0
|
||||
#define PHY_ID_BCM5464 0x002060b0
|
||||
#define PHY_ID_BCM5461 0x002060c0
|
||||
#define PHY_ID_BCM54612E 0x03625e60
|
||||
@@ -14,8 +14,6 @@ MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
|
||||
KERNEL_PATCHVER:=4.4
|
||||
|
||||
CPU_TYPE:=mips32r2
|
||||
|
||||
define Target/Description
|
||||
Build firmware images for Lantiq SoC
|
||||
endef
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ARCH:=mips
|
||||
SUBTARGET:=falcon
|
||||
BOARDNAME:=Falcon
|
||||
FEATURES:=squashfs mips16 nand
|
||||
FEATURES:=squashfs nand
|
||||
CPU_TYPE:=24kc
|
||||
|
||||
DEFAULT_PACKAGES+= kmod-leds-gpio \
|
||||
|
||||
@@ -538,9 +538,9 @@ TARGET_DEVICES += VGV7510KW22NOR
|
||||
define Device/VGV7510KW22BRN
|
||||
$(Device/lantiqBrnImage)
|
||||
IMAGE_SIZE := 7168k
|
||||
SIGNATURE := 5D00008000
|
||||
SIGNATURE := BRNDA6431
|
||||
MAGIC := 0x12345678
|
||||
CRC32_POLY := 0x2083b8ed
|
||||
CRC32_POLY := 0x04c11db7
|
||||
DEVICE_TITLE := o2 Box 6431 / Arcadyan VGV7510KW22 (BRN)
|
||||
DEVICE_PACKAGES := kmod-rt2800-pci wpad-mini kmod-usb-dwc2 kmod-ltq-tapi kmod-ltq-vmmc
|
||||
endef
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 19 Jan 2017 12:14:44 +0100
|
||||
Subject: [PATCH] MIPS: Lantiq: Fix cascaded IRQ setup
|
||||
|
||||
With the IRQ stack changes integrated, the XRX200 devices started
|
||||
emitting a constant stream of kernel messages like this:
|
||||
|
||||
[ 565.415310] Spurious IRQ: CAUSE=0x1100c300
|
||||
|
||||
This appears to be caused by IP0 firing for some reason without being
|
||||
handled. Fix this by setting up IP2-6 as a proper chained IRQ handler and
|
||||
calling do_IRQ for all MIPS CPU interrupts.
|
||||
|
||||
Cc: john@phrozen.org
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/arch/mips/lantiq/irq.c
|
||||
+++ b/arch/mips/lantiq/irq.c
|
||||
@@ -271,6 +271,11 @@ static void ltq_hw5_irqdispatch(void)
|
||||
DEFINE_HWx_IRQDISPATCH(5)
|
||||
#endif
|
||||
|
||||
+static void ltq_hw_irq_handler(struct irq_desc *desc)
|
||||
+{
|
||||
+ ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2);
|
||||
+}
|
||||
+
|
||||
#ifdef CONFIG_MIPS_MT_SMP
|
||||
void __init arch_init_ipiirq(int irq, struct irqaction *action)
|
||||
{
|
||||
@@ -315,23 +320,19 @@ static struct irqaction irq_call = {
|
||||
asmlinkage void plat_irq_dispatch(void)
|
||||
{
|
||||
unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
|
||||
- unsigned int i;
|
||||
+ int irq;
|
||||
|
||||
- if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) {
|
||||
- do_IRQ(MIPS_CPU_TIMER_IRQ);
|
||||
- goto out;
|
||||
- } else {
|
||||
- for (i = 0; i < MAX_IM; i++) {
|
||||
- if (pending & (CAUSEF_IP2 << i)) {
|
||||
- ltq_hw_irqdispatch(i);
|
||||
- goto out;
|
||||
- }
|
||||
- }
|
||||
+ if (!pending) {
|
||||
+ spurious_interrupt();
|
||||
+ return;
|
||||
}
|
||||
- pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
|
||||
|
||||
-out:
|
||||
- return;
|
||||
+ pending >>= CAUSEB_IP;
|
||||
+ while (pending) {
|
||||
+ irq = fls(pending) - 1;
|
||||
+ do_IRQ(MIPS_CPU_IRQ_BASE + irq);
|
||||
+ pending &= ~BIT(irq);
|
||||
+ }
|
||||
}
|
||||
|
||||
static int icu_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
|
||||
@@ -356,11 +357,6 @@ static const struct irq_domain_ops irq_d
|
||||
.map = icu_map,
|
||||
};
|
||||
|
||||
-static struct irqaction cascade = {
|
||||
- .handler = no_action,
|
||||
- .name = "cascade",
|
||||
-};
|
||||
-
|
||||
int __init icu_of_init(struct device_node *node, struct device_node *parent)
|
||||
{
|
||||
struct device_node *eiu_node;
|
||||
@@ -392,7 +388,7 @@ int __init icu_of_init(struct device_nod
|
||||
mips_cpu_irq_init();
|
||||
|
||||
for (i = 0; i < MAX_IM; i++)
|
||||
- setup_irq(i + 2, &cascade);
|
||||
+ irq_set_chained_handler(i + 2, ltq_hw_irq_handler);
|
||||
|
||||
if (cpu_has_vint) {
|
||||
pr_info("Setting up vectored interrupts\n");
|
||||
@@ -0,0 +1,53 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 19 Jan 2017 14:14:36 +0100
|
||||
Subject: [PATCH] MIPS: Lantiq: Keep ethernet enabled during boot
|
||||
|
||||
Disabling ethernet during reboot (only to enable it again when the
|
||||
ethernet driver attaches) can put the chip into a faulty state where it
|
||||
corrupts the header of all incoming packets.
|
||||
|
||||
This happens if packets arrive during the time window where the core is
|
||||
disabled, and it can be easily reproduced by rebooting while sending a
|
||||
flood ping to the broadcast address.
|
||||
|
||||
Cc: john@phrozen.org
|
||||
Cc: hauke.mehrtens@lantiq.com
|
||||
Cc: stable@vger.kernel.org
|
||||
Fixes: 95135bfa7ead ("MIPS: Lantiq: Deactivate most of the devices by default")
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/arch/mips/lantiq/xway/sysctrl.c
|
||||
+++ b/arch/mips/lantiq/xway/sysctrl.c
|
||||
@@ -564,7 +564,7 @@ void __init ltq_soc_init(void)
|
||||
clkdev_add_pmu("1a800000.pcie", "msi", 1, 1, PMU1_PCIE2_MSI);
|
||||
clkdev_add_pmu("1a800000.pcie", "pdi", 1, 1, PMU1_PCIE2_PDI);
|
||||
clkdev_add_pmu("1a800000.pcie", "ctl", 1, 1, PMU1_PCIE2_CTL);
|
||||
- clkdev_add_pmu("1e108000.eth", NULL, 1, 0, PMU_SWITCH | PMU_PPE_DP);
|
||||
+ clkdev_add_pmu("1e108000.eth", NULL, 0, 0, PMU_SWITCH | PMU_PPE_DP);
|
||||
clkdev_add_pmu("1da00000.usif", "NULL", 1, 0, PMU_USIF);
|
||||
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
|
||||
} else if (of_machine_is_compatible("lantiq,ar10")) {
|
||||
@@ -572,7 +572,7 @@ void __init ltq_soc_init(void)
|
||||
ltq_ar10_fpi_hz(), ltq_ar10_pp32_hz());
|
||||
clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
|
||||
clkdev_add_pmu("1e106000.usb", "ctl", 1, 0, PMU_USB1);
|
||||
- clkdev_add_pmu("1e108000.eth", NULL, 1, 0, PMU_SWITCH |
|
||||
+ clkdev_add_pmu("1e108000.eth", NULL, 0, 0, PMU_SWITCH |
|
||||
PMU_PPE_DP | PMU_PPE_TC);
|
||||
clkdev_add_pmu("1da00000.usif", "NULL", 1, 0, PMU_USIF);
|
||||
clkdev_add_pmu("1f203000.rcu", "gphy", 1, 0, PMU_GPHY);
|
||||
@@ -594,11 +594,11 @@ void __init ltq_soc_init(void)
|
||||
clkdev_add_pmu(NULL, "ahb", 1, 0, PMU_AHBM | PMU_AHBS);
|
||||
|
||||
clkdev_add_pmu("1da00000.usif", "NULL", 1, 0, PMU_USIF);
|
||||
- clkdev_add_pmu("1e108000.eth", NULL, 1, 0,
|
||||
+ clkdev_add_pmu("1e108000.eth", NULL, 0, 0,
|
||||
PMU_SWITCH | PMU_PPE_DPLUS | PMU_PPE_DPLUM |
|
||||
PMU_PPE_EMA | PMU_PPE_TC | PMU_PPE_SLL01 |
|
||||
PMU_PPE_QSB | PMU_PPE_TOP);
|
||||
- clkdev_add_pmu("1f203000.rcu", "gphy", 1, 0, PMU_GPHY);
|
||||
+ clkdev_add_pmu("1f203000.rcu", "gphy", 0, 0, PMU_GPHY);
|
||||
clkdev_add_pmu("1e103000.sdio", NULL, 1, 0, PMU_SDIO);
|
||||
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
|
||||
clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
|
||||
@@ -1,7 +1,7 @@
|
||||
ARCH:=mips
|
||||
SUBTARGET:=xrx200
|
||||
BOARDNAME:=XRX200
|
||||
FEATURES:=squashfs atm mips16 nand ubifs
|
||||
FEATURES:=squashfs atm nand ubifs
|
||||
CPU_TYPE:=24kc
|
||||
|
||||
DEFAULT_PACKAGES+=kmod-leds-gpio \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ARCH:=mips
|
||||
SUBTARGET:=xway
|
||||
BOARDNAME:=XWAY
|
||||
FEATURES:=squashfs atm mips16 nand ubifs ramdisk
|
||||
FEATURES:=squashfs atm nand ubifs ramdisk
|
||||
CPU_TYPE:=24kc
|
||||
|
||||
DEFAULT_PACKAGES+=kmod-leds-gpio kmod-gpio-button-hotplug swconfig
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ARCH:=mips
|
||||
SUBTARGET:=xway_legacy
|
||||
BOARDNAME:=XWAY Legacy
|
||||
FEATURES:=squashfs atm mips16 ramdisk small_flash
|
||||
FEATURES:=squashfs atm ramdisk small_flash
|
||||
CPU_TYPE:=24kc
|
||||
|
||||
DEFAULT_PACKAGES+=kmod-leds-gpio kmod-gpio-button-hotplug swconfig
|
||||
|
||||
@@ -12,6 +12,7 @@ CPU_TYPE:=24kc
|
||||
SUBTARGETS:=le be le64 be64
|
||||
INITRAMFS_EXTRA_FILES:=
|
||||
MAINTAINER:=Florian Fainelli <florian@openwrt.org>
|
||||
FEATURES:=ramdisk source-only
|
||||
|
||||
KERNEL_PATCHVER:=4.4
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
ARCH:=mips
|
||||
SUBTARGET:=be
|
||||
BOARDNAME:=Big Endian
|
||||
FEATURES:=ramdisk mips16
|
||||
|
||||
define Target/Description
|
||||
Build BE firmware images for MIPS Malta CoreLV board running in
|
||||
|
||||
@@ -2,7 +2,6 @@ ARCH:=mips64
|
||||
CPU_TYPE:=mips64
|
||||
SUBTARGET:=be64
|
||||
BOARDNAME:=Big Endian (64-bits)
|
||||
FEATURES:=ramdisk
|
||||
|
||||
define Target/Description
|
||||
Build BE firmware images for MIPS Malta CoreLV board running in
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
ARCH:=mipsel
|
||||
SUBTARGET:=le
|
||||
BOARDNAME:=Little Endian
|
||||
FEATURES:=ramdisk mips16
|
||||
|
||||
define Target/Description
|
||||
Build LE firmware images for MIPS Malta CoreLV board running in
|
||||
|
||||
@@ -2,7 +2,6 @@ ARCH:=mips64el
|
||||
CPU_TYPE:=mips64
|
||||
SUBTARGET:=le64
|
||||
BOARDNAME:=Little Endian (64-bits)
|
||||
FEATURES:=ramdisk
|
||||
|
||||
define Target/Description
|
||||
Build LE firmware images for MIPS Malta CoreLV board running in
|
||||
|
||||
@@ -22,6 +22,4 @@ endef
|
||||
|
||||
include $(INCLUDE_DIR)/target.mk
|
||||
|
||||
DEFAULT_PACKAGES += kmod-wdt-stmp3xxx
|
||||
|
||||
$(eval $(call BuildTarget))
|
||||
|
||||
@@ -10,8 +10,7 @@ define Profile/duckbill
|
||||
FEATURES+=usbgadget
|
||||
PACKAGES+= \
|
||||
-dnsmasq -firewall -ppp -ip6tables -iptables -6relayd -mtd uboot-envtools \
|
||||
kmod-leds-gpio kmod-ledtrig-timer kmod-usb-mxs-phy -kmod-ipt-nathelper \
|
||||
kmod-i2c-mxs kmod-spi-mxs uboot-mxs-duckbill
|
||||
kmod-leds-gpio kmod-ledtrig-timer -kmod-ipt-nathelper uboot-mxs-duckbill
|
||||
endef
|
||||
|
||||
define Profile/duckbill/Description
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
define Profile/olinuxino-maxi
|
||||
NAME:=Olimex OLinuXino Maxi/Mini boards
|
||||
PACKAGES += imx-bootlets uboot-mxs-mx23_olinuxino \
|
||||
kmod-usb-mxs-phy kmod-usb-net kmod-usb-net-smsc95xx \
|
||||
kmod-gpio-mcp23s08 kmod-leds-gpio kmod-ledtrig-heartbeat kmod-rtc-stmp3xxx \
|
||||
kmod-sound-core kmod-sound-soc-mxs kmod-iio-mxs-lradc kmod-crypto-hw-dcp \
|
||||
kmod-i2c-mxs kmod-spi-mxs
|
||||
kmod-usb-net kmod-usb-net-smsc95xx kmod-gpio-mcp23s08 \
|
||||
kmod-leds-gpio kmod-ledtrig-heartbeat kmod-sound-core
|
||||
endef
|
||||
|
||||
define Profile/olinuxino-maxi/Description
|
||||
|
||||
@@ -8,10 +8,7 @@
|
||||
define Profile/olinuxino-micro
|
||||
NAME:=Olimex OLinuXino Micro/Nano boards
|
||||
PACKAGES += imx-bootlets uboot-mxs-mx23_olinuxino \
|
||||
kmod-usb-mxs-phy kmod-gpio-mcp23s08 kmod-leds-gpio \
|
||||
kmod-ledtrig-heartbeat kmod-rtc-stmp3xxx \
|
||||
kmod-iio-mxs-lradc kmod-crypto-hw-dcp \
|
||||
kmod-i2c-mxs kmod-spi-mxs
|
||||
kmod-gpio-mcp23s08 kmod-leds-gpio kmod-ledtrig-heartbeat
|
||||
endef
|
||||
|
||||
define Profile/olinuxino-micro/Description
|
||||
|
||||
@@ -10,7 +10,7 @@ ARCH:=mipsel
|
||||
BOARD:=ramips
|
||||
BOARDNAME:=MediaTek Ralink MIPS
|
||||
SUBTARGETS:=rt305x mt7620 mt7621 mt7628 mt7688 rt3883 rt288x
|
||||
FEATURES:=squashfs gpio mips16
|
||||
FEATURES:=squashfs gpio
|
||||
MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
|
||||
KERNEL_PATCHVER:=4.4
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
SUBTARGET:=rt288x
|
||||
BOARDNAME:=RT288x based boards
|
||||
CPU_TYPE:=mips32r2
|
||||
CPU_TYPE:=24kc
|
||||
|
||||
DEFAULT_PACKAGES += kmod-rt2800-soc
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ ARCH:=$(shell uname -m | sed \
|
||||
)
|
||||
BOARD:=uml
|
||||
BOARDNAME:=User Mode Linux
|
||||
FEATURES:=squashfs ext4 audio
|
||||
FEATURES:=squashfs ext4 audio source-only
|
||||
MAINTAINER:=Florian Fainelli <florian@openwrt.org>
|
||||
|
||||
KERNEL_PATCHVER:=4.4
|
||||
|
||||
@@ -10,7 +10,7 @@ ARCH:=i386
|
||||
BOARD:=x86
|
||||
BOARDNAME:=x86
|
||||
FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu
|
||||
SUBTARGETS:=generic legacy xen_domu geode 64
|
||||
SUBTARGETS:=generic legacy geode 64
|
||||
MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
KERNEL_PATCHVER:=4.4
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
::sysinit:/etc/init.d/rcS S boot
|
||||
::shutdown:/etc/init.d/rcS K shutdown
|
||||
ttyS0::askfirst:/usr/libexec/login.sh
|
||||
hvc0::askfirst:/usr/libexec/login.sh
|
||||
tty1::askfirst:/usr/libexec/login.sh
|
||||
|
||||
@@ -21,20 +21,13 @@ platform_copy_config() {
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local diskdev partdev ibs diff
|
||||
local diskdev partdev diff
|
||||
|
||||
if export_bootdevice && export_partdevice diskdev 0; then
|
||||
sync
|
||||
if [ "$SAVE_PARTITIONS" = "1" ]; then
|
||||
get_partitions "/dev/$diskdev" bootdisk
|
||||
|
||||
#get block size
|
||||
if [ -f "/sys/block/$diskdev/queue/physical_block_size" ]; then
|
||||
ibs="$(cat "/sys/block/$diskdev/queue/physical_block_size")"
|
||||
else
|
||||
ibs=512
|
||||
fi
|
||||
|
||||
#extract the boot sector from the image
|
||||
get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
|
||||
|
||||
@@ -54,7 +47,7 @@ platform_do_upgrade() {
|
||||
while read part start size; do
|
||||
if export_partdevice partdev $part; then
|
||||
echo "Writing image to /dev/$partdev..."
|
||||
get_image "$@" | dd of="/dev/$partdev" ibs="$ibs" obs=1M skip="$start" count="$size" conv=fsync
|
||||
get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
|
||||
else
|
||||
echo "Unable to find partition $part device, skipped."
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2010 OpenWrt.org
|
||||
|
||||
do_mount_xenfs() {
|
||||
grep -q xenfs /proc/filesystems && \
|
||||
mount -o noatime -t xenfs none /proc/xen
|
||||
}
|
||||
|
||||
boot_hook_add preinit_mount_root do_mount_xenfs
|
||||
@@ -5,7 +5,7 @@ CONFIG_ACPI_BATTERY=y
|
||||
# CONFIG_ACPI_BGRT is not set
|
||||
CONFIG_ACPI_BUTTON=y
|
||||
# CONFIG_ACPI_CMPC is not set
|
||||
# CONFIG_ACPI_CONTAINER is not set
|
||||
CONFIG_ACPI_CONTAINER=y
|
||||
CONFIG_ACPI_CPU_FREQ_PSS=y
|
||||
# CONFIG_ACPI_CUSTOM_DSDT is not set
|
||||
# CONFIG_ACPI_DEBUG is not set
|
||||
@@ -13,6 +13,7 @@ CONFIG_ACPI_CPU_FREQ_PSS=y
|
||||
# CONFIG_ACPI_DOCK is not set
|
||||
# CONFIG_ACPI_EC_DEBUGFS is not set
|
||||
# CONFIG_ACPI_FAN is not set
|
||||
CONFIG_ACPI_HOTPLUG_CPU=y
|
||||
CONFIG_ACPI_HOTPLUG_IOAPIC=y
|
||||
# CONFIG_ACPI_I2C_OPREGION is not set
|
||||
# CONFIG_ACPI_INITRD_TABLE_OVERRIDE is not set
|
||||
@@ -40,6 +41,7 @@ CONFIG_AGP_INTEL=y
|
||||
# CONFIG_AGP_SIS is not set
|
||||
# CONFIG_AGP_SWORKS is not set
|
||||
# CONFIG_AGP_VIA is not set
|
||||
# CONFIG_APM is not set
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
|
||||
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
|
||||
@@ -51,10 +53,17 @@ CONFIG_BACKLIGHT_GENERIC=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
|
||||
CONFIG_CLKDEV_LOOKUP=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CRYPTO_AEAD=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
CONFIG_CRYPTO_NULL2=y
|
||||
# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_AMDGPU=y
|
||||
@@ -112,6 +121,7 @@ CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_CMDLINE=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
CONFIG_FB_EFI=y
|
||||
# CONFIG_FB_I810 is not set
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
@@ -126,6 +136,7 @@ CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_FREEZER=y
|
||||
CONFIG_GENERIC_PENDING_IRQ=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GPIOLIB=y
|
||||
@@ -151,13 +162,18 @@ CONFIG_HAVE_KVM_IRQ_BYPASS=y
|
||||
CONFIG_HAVE_KVM_IRQ_ROUTING=y
|
||||
CONFIG_HAVE_KVM_MSI=y
|
||||
CONFIG_HDMI=y
|
||||
CONFIG_HIBERNATE_CALLBACKS=y
|
||||
CONFIG_HID=y
|
||||
CONFIG_HID_BATTERY_STRENGTH=y
|
||||
# CONFIG_HIGHMEM64G is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_HPET=y
|
||||
CONFIG_HPET_MMAP=y
|
||||
# CONFIG_HP_ACCEL is not set
|
||||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_HVC_IRQ=y
|
||||
CONFIG_HVC_XEN=y
|
||||
CONFIG_HVC_XEN_FRONTEND=y
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HW_RANDOM_VIRTIO=y
|
||||
CONFIG_HYPERVISOR_GUEST=y
|
||||
@@ -169,6 +185,7 @@ CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_INTEL_GTT=y
|
||||
CONFIG_INTEL_IDLE=y
|
||||
# CONFIG_INTEL_IPS is not set
|
||||
@@ -194,7 +211,6 @@ CONFIG_KVM_MMIO=y
|
||||
CONFIG_KVM_VFIO=y
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
# CONFIG_LGUEST is not set
|
||||
# CONFIG_LGUEST_GUEST is not set
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
# CONFIG_M486 is not set
|
||||
@@ -234,6 +250,7 @@ CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_PADATA=y
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_PARAVIRT_CLOCK=y
|
||||
# CONFIG_PARAVIRT_DEBUG is not set
|
||||
@@ -249,7 +266,9 @@ CONFIG_PATA_SC1200=y
|
||||
CONFIG_PATA_VIA=y
|
||||
CONFIG_PCIEAER=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIE_PME=y
|
||||
CONFIG_PCI_MMCONFIG=y
|
||||
CONFIG_PCI_XEN=y
|
||||
# CONFIG_PCWATCHDOG is not set
|
||||
CONFIG_PGTABLE_LEVELS=3
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
@@ -259,7 +278,12 @@ CONFIG_PINCTRL_BROXTON=y
|
||||
CONFIG_PINCTRL_CHERRYVIEW=y
|
||||
CONFIG_PINCTRL_INTEL=y
|
||||
CONFIG_PINCTRL_SUNRISEPOINT=y
|
||||
CONFIG_PM=y
|
||||
# CONFIG_PMIC_OPREGION is not set
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
CONFIG_PNP=y
|
||||
CONFIG_PNPACPI=y
|
||||
# CONFIG_PNPBIOS is not set
|
||||
@@ -284,9 +308,10 @@ CONFIG_SERIAL_8250_PNP=y
|
||||
CONFIG_SMP=y
|
||||
# CONFIG_SURFACE_PRO3_BUTTON is not set
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_SWIOTLB_XEN=y
|
||||
CONFIG_SYS_HYPERVISOR=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
# CONFIG_TASK_XACCT is not set
|
||||
# CONFIG_TOSHIBA_BT_RFKILL is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_UCS2_STRING=y
|
||||
@@ -303,7 +328,6 @@ CONFIG_USER_RETURN_NOTIFIER=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||
CONFIG_VHOST=y
|
||||
# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
|
||||
CONFIG_VHOST_NET=y
|
||||
CONFIG_VHOST_RING=y
|
||||
CONFIG_VIRTIO=y
|
||||
@@ -317,6 +341,7 @@ CONFIG_VIRTIO_NET=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_PCI_LEGACY=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_VT_CONSOLE_SLEEP=y
|
||||
# CONFIG_WDT is not set
|
||||
CONFIG_X86_32_SMP=y
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
@@ -342,4 +367,32 @@ CONFIG_X86_PM_TIMER=y
|
||||
# CONFIG_X86_POWERNOW_K8 is not set
|
||||
CONFIG_X86_TSC=y
|
||||
CONFIG_X86_USE_PPRO_CHECKSUM=y
|
||||
CONFIG_XEN=y
|
||||
CONFIG_XENFS=y
|
||||
CONFIG_XEN_ACPI=y
|
||||
CONFIG_XEN_ACPI_PROCESSOR=y
|
||||
CONFIG_XEN_AUTO_XLATE=y
|
||||
# CONFIG_XEN_BACKEND is not set
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=y
|
||||
CONFIG_XEN_COMPAT_XENFS=y
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_DEV_EVTCHN=y
|
||||
CONFIG_XEN_DOM0=y
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_XEN_GNTDEV=y
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=y
|
||||
CONFIG_XEN_HAVE_PVMMU=y
|
||||
CONFIG_XEN_HAVE_VPMU=y
|
||||
CONFIG_XEN_NETDEV_FRONTEND=y
|
||||
CONFIG_XEN_PCIDEV_FRONTEND=y
|
||||
CONFIG_XEN_PRIVCMD=y
|
||||
CONFIG_XEN_PVHVM=y
|
||||
CONFIG_XEN_SAVE_RESTORE=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
CONFIG_XEN_SCSI_FRONTEND=y
|
||||
CONFIG_XEN_SYMS=y
|
||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
CONFIG_XEN_WDT=y
|
||||
CONFIG_XEN_XENBUS_FRONTEND=y
|
||||
CONFIG_XPS=y
|
||||
|
||||
@@ -7,8 +7,6 @@ DEFAULT_PACKAGES += \
|
||||
kmod-ledtrig-heartbeat kmod-ledtrig-gpio \
|
||||
kmod-ledtrig-netdev hwclock wpad-mini
|
||||
|
||||
CPU_TYPE := geode
|
||||
|
||||
define Target/Description
|
||||
Build firmware images for AMD Geode GX/LX based systems (net5501, alix, geos)
|
||||
endef
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
::sysinit:/etc/init.d/rcS S boot
|
||||
::shutdown:/etc/init.d/rcS K stop
|
||||
tts/0::askfirst:/usr/libexec/login.sh
|
||||
hvc0::askfirst:/usr/libexec/login.sh
|
||||
tty1::askfirst:/usr/libexec/login.sh
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2010 OpenWrt.org
|
||||
|
||||
do_mount_xenfs() {
|
||||
[ -f /etc/modules.d/??-xenfs ] && {
|
||||
insmod $(cat /etc/modules.d/??-xenfs)
|
||||
mount -o noatime none /proc/xen -t xenfs
|
||||
}
|
||||
}
|
||||
|
||||
boot_hook_add preinit_mount_root do_mount_xenfs
|
||||
@@ -1,100 +0,0 @@
|
||||
# CONFIG_APM is not set
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
|
||||
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
|
||||
CONFIG_CPU_RMAP=y
|
||||
# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CMDLINE=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_FOPS=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
# CONFIG_FB_VESA is not set
|
||||
CONFIG_FREEZER=y
|
||||
CONFIG_GENERIC_PENDING_IRQ=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HIBERNATE_CALLBACKS=y
|
||||
# CONFIG_HIGHMEM64G is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_HVC_IRQ=y
|
||||
CONFIG_HVC_XEN=y
|
||||
CONFIG_HVC_XEN_FRONTEND=y
|
||||
CONFIG_HYPERVISOR_GUEST=y
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
|
||||
CONFIG_IOMMU_HELPER=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_XZ is not set
|
||||
# CONFIG_LGUEST_GUEST is not set
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
# CONFIG_M486 is not set
|
||||
CONFIG_MMU_NOTIFIER=y
|
||||
CONFIG_MPENTIUM4=y
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_PARAVIRT_CLOCK=y
|
||||
# CONFIG_PARAVIRT_DEBUG is not set
|
||||
CONFIG_PARAVIRT_SPINLOCKS=y
|
||||
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
|
||||
CONFIG_PCI_XEN=y
|
||||
CONFIG_PGTABLE_LEVELS=3
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PM=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
CONFIG_QUEUED_RWLOCKS=y
|
||||
CONFIG_QUEUED_SPINLOCKS=y
|
||||
CONFIG_RCU_STALL_COMMON=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_SWIOTLB_XEN=y
|
||||
CONFIG_SYS_HYPERVISOR=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_VT_CONSOLE_SLEEP=y
|
||||
CONFIG_X86_32_SMP=y
|
||||
# CONFIG_X86_BIGSMP is not set
|
||||
CONFIG_X86_CMOV=y
|
||||
CONFIG_X86_CMPXCHG64=y
|
||||
CONFIG_X86_DEBUGCTLMSR=y
|
||||
CONFIG_X86_INTERNODE_CACHE_SHIFT=7
|
||||
CONFIG_X86_L1_CACHE_SHIFT=7
|
||||
CONFIG_X86_MINIMUM_CPU_FAMILY=5
|
||||
CONFIG_X86_PAE=y
|
||||
# CONFIG_X86_PMEM_LEGACY is not set
|
||||
CONFIG_X86_TSC=y
|
||||
CONFIG_X86_USE_PPRO_CHECKSUM=y
|
||||
CONFIG_XEN=y
|
||||
CONFIG_XENFS=y
|
||||
CONFIG_XEN_AUTO_XLATE=y
|
||||
CONFIG_XEN_BALLOON=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=y
|
||||
CONFIG_XEN_COMPAT_XENFS=y
|
||||
CONFIG_XEN_DEBUG_FS=y
|
||||
CONFIG_XEN_DEV_EVTCHN=y
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_XEN_GNTDEV=y
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=y
|
||||
CONFIG_XEN_HAVE_PVMMU=y
|
||||
CONFIG_XEN_HAVE_VPMU=y
|
||||
CONFIG_XEN_NETDEV_FRONTEND=y
|
||||
CONFIG_XEN_PCIDEV_FRONTEND=y
|
||||
CONFIG_XEN_PRIVCMD=y
|
||||
CONFIG_XEN_PVHVM=y
|
||||
CONFIG_XEN_SAVE_RESTORE=y
|
||||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
CONFIG_XEN_SCSI_FRONTEND=y
|
||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
# CONFIG_XEN_WDT is not set
|
||||
CONFIG_XEN_XENBUS_FRONTEND=y
|
||||
CONFIG_XPS=y
|
||||
@@ -1,15 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2006-2015 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
define Profile/Generic
|
||||
NAME:=Generic
|
||||
endef
|
||||
|
||||
define Profile/Generic/Description
|
||||
Generic Profile
|
||||
endef
|
||||
$(eval $(call Profile,Generic))
|
||||
@@ -1,3 +0,0 @@
|
||||
BOARDNAME:=Xen Paravirt Guest
|
||||
FEATURES:=display ext4 targz
|
||||
CPU_TYPE := pentium4
|
||||
@@ -17,6 +17,7 @@ SDK_NAME:=$(VERSION_DIST_SANITIZED)-sdk-$(if $(CONFIG_VERSION_FILENAMES),$(VERSI
|
||||
SDK_BUILD_DIR:=$(BUILD_DIR)/$(SDK_NAME)
|
||||
|
||||
STAGING_SUBDIR_HOST := staging_dir/host
|
||||
STAGING_SUBDIR_TARGET := staging_dir/$(TARGET_DIR_NAME)
|
||||
STAGING_SUBDIR_TOOLCHAIN := staging_dir/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)_$(LIBC)-$(LIBCV)$(if $(CONFIG_arm),_eabi)
|
||||
|
||||
EXCLUDE_DIRS:=*/ccache/* \
|
||||
@@ -36,10 +37,13 @@ SDK_DIRS = \
|
||||
$(STAGING_SUBDIR_HOST) \
|
||||
$(STAGING_SUBDIR_TOOLCHAIN)
|
||||
|
||||
BASE_FEED:=$(shell git config --get remote.origin.url 2>/dev/null | sed -ne 's/^/src-git base /p')
|
||||
GIT_URL:=$(filter git://% http://% https://%,$(shell git config --get remote.origin.url 2>/dev/null))
|
||||
GIT_BRANCH:=$(filter-out master,$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null))
|
||||
|
||||
BASE_FEED:=$(if $(GIT_URL),src-git base $(GIT_URL)$(if $(GIT_BRANCH),;$(GIT_BRANCH)))
|
||||
BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),$(shell cd $(TOPDIR); LC_ALL=C git svn info 2>/dev/null | sed -ne 's/^URL: /src-gitsvn base /p'))
|
||||
BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),$(shell cd $(TOPDIR); LC_ALL=C svn info 2>/dev/null | sed -ne 's/^URL: /src-svn base /p'))
|
||||
BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),src-git base https://git.lede-project.org/source.git$(filter-out ;master,;$(shell git rev-parse --abbrev-ref HEAD)))
|
||||
BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),src-git base https://git.lede-project.org/source.git$(if $(GIT_BRANCH),;$(GIT_BRANCH)))
|
||||
|
||||
KDIR_BASE = $(patsubst $(TOPDIR)/%,%,$(LINUX_DIR))
|
||||
|
||||
@@ -92,7 +96,7 @@ $(BIN_DIR)/$(SDK_NAME).tar.xz: clean
|
||||
find \
|
||||
$(SDK_BUILD_DIR)/$(STAGING_SUBDIR_HOST)/lib \
|
||||
$(SDK_BUILD_DIR)/$(STAGING_SUBDIR_HOST)/usr/lib \
|
||||
-type f -name \*.so\* -or -name \*.a; \
|
||||
-type f -name \*.so\*; \
|
||||
) | xargs strip 2>/dev/null >/dev/null
|
||||
|
||||
mkdir -p $(SDK_BUILD_DIR)/target/linux
|
||||
@@ -115,6 +119,11 @@ $(BIN_DIR)/$(SDK_NAME).tar.xz: clean
|
||||
$(TOPDIR)/package/kernel/linux \
|
||||
$(SDK_BUILD_DIR)/package/
|
||||
|
||||
-rm -rf \
|
||||
$(SDK_BUILD_DIR)/$(STAGING_SUBDIR_HOST)/ccache \
|
||||
$(SDK_BUILD_DIR)/$(STAGING_SUBDIR_TARGET)/ccache \
|
||||
$(SDK_BUILD_DIR)/$(STAGING_SUBDIR_TOOLCHAIN)/ccache
|
||||
|
||||
-rm -f $(SDK_BUILD_DIR)/feeds.conf.default
|
||||
$(if $(BASE_FEED),echo "$(BASE_FEED)" > $(SDK_BUILD_DIR)/feeds.conf.default)
|
||||
if [ -f $(TOPDIR)/feeds.conf ]; then \
|
||||
|
||||
Reference in New Issue
Block a user