resolve conflict
This commit is contained in:
commit
f59a5f9ad9
@ -6,13 +6,13 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
|
||||
endif
|
||||
|
||||
LINUX_VERSION-4.9 = .180
|
||||
LINUX_VERSION-4.14 = .123
|
||||
LINUX_VERSION-4.19 = .48
|
||||
LINUX_VERSION-4.9 = .182
|
||||
LINUX_VERSION-4.14 = .127
|
||||
LINUX_VERSION-4.19 = .52
|
||||
|
||||
LINUX_KERNEL_HASH-4.9.180 = d25a490d62a3e96a587333e163862585eac4086fc8d4893b4ec1711e7d387c5f
|
||||
LINUX_KERNEL_HASH-4.14.123 = 25f58cb56bde388ac9bcee984f5f2d0ca094b0a8af6b92ad1f5b2fd0e6725b85
|
||||
LINUX_KERNEL_HASH-4.19.48 = 01d0db4f10cc8e384241a605e29413e32c442aa6853c116877538b07c16893fa
|
||||
LINUX_KERNEL_HASH-4.9.182 = b16e12681a0638368479d73a9b1b8e9407c1ae4b7ae52fdf236d9e5657999695
|
||||
LINUX_KERNEL_HASH-4.14.127 = d7464c2379cdee46548ae9f848671f4669d4003af4034f3f738f2f0511ec75b3
|
||||
LINUX_KERNEL_HASH-4.19.52 = 266ee655620c3689ae94761970d6827fffc919760caf815427ad22730ba4381e
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
|
||||
|
||||
@ -3,7 +3,7 @@ Date: Wed, 19 Jul 2017 08:49:31 +0200
|
||||
Subject: [PATCH] ath9k: adjust tx power reduction for US regulatory
|
||||
domain
|
||||
|
||||
FCC regulatory rules allow for up to 3 dBi antenna gain. Account for
|
||||
FCC regulatory rules allow for up to 6 dBi antenna gain. Account for
|
||||
this in the EEPROM based tx power reduction code.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
@ -15,9 +15,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (ant_gain > max_gain)
|
||||
ant_reduction = ant_gain - max_gain;
|
||||
|
||||
+ /* FCC allows maximum antenna gain of 3 dBi */
|
||||
+ /* FCC allows maximum antenna gain of 6 dBi */
|
||||
+ if (reg->region == NL80211_DFS_FCC)
|
||||
+ ant_reduction = max_t(int, ant_reduction - 6, 0);
|
||||
+ ant_reduction = max_t(int, ant_reduction - 12, 0);
|
||||
+
|
||||
ah->eep_ops->set_txpower(ah, chan, ctl,
|
||||
ant_reduction, new_pwr, test);
|
||||
|
||||
@ -0,0 +1,49 @@
|
||||
From: Sven Eckelmann <seckelmann@datto.com>
|
||||
Date: Tue, 11 Jun 2019 13:58:35 +0200
|
||||
Subject: ath10k: fix max antenna gain unit
|
||||
|
||||
Most of the txpower for the ath10k firmware is stored as twicepower (0.5 dB
|
||||
steps). This isn't the case for max_antenna_gain - which is still expected
|
||||
by the firmware as dB.
|
||||
|
||||
The firmware is converting it from dB to the internal (twicepower)
|
||||
representation when it calculates the limits of a channel. This can be seen
|
||||
in tpc_stats when configuring "12" as max_antenna_gain. Instead of the
|
||||
expected 12 (6 dB), the tpc_stats shows 24 (12 dB).
|
||||
|
||||
Tested on QCA9888 and IPQ4019 with firmware 10.4-3.5.3-00057.
|
||||
|
||||
Fixes: 02256930d9b8 ("ath10k: use proper tx power unit")
|
||||
Signed-off-by: Sven Eckelmann <seckelmann@datto.com>
|
||||
|
||||
Forwarded: https://patchwork.kernel.org/patch/10986723/
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -1020,7 +1020,7 @@ static int ath10k_monitor_vdev_start(str
|
||||
arg.channel.min_power = 0;
|
||||
arg.channel.max_power = channel->max_power * 2;
|
||||
arg.channel.max_reg_power = channel->max_reg_power * 2;
|
||||
- arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
|
||||
+ arg.channel.max_antenna_gain = channel->max_antenna_gain;
|
||||
|
||||
reinit_completion(&ar->vdev_setup_done);
|
||||
|
||||
@@ -1462,7 +1462,7 @@ static int ath10k_vdev_start_restart(str
|
||||
arg.channel.min_power = 0;
|
||||
arg.channel.max_power = chandef->chan->max_power * 2;
|
||||
arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
|
||||
- arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
|
||||
+ arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain;
|
||||
|
||||
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
||||
arg.ssid = arvif->u.ap.ssid;
|
||||
@@ -3139,7 +3139,7 @@ static int ath10k_update_channel_list(st
|
||||
ch->min_power = 0;
|
||||
ch->max_power = channel->max_power * 2;
|
||||
ch->max_reg_power = channel->max_reg_power * 2;
|
||||
- ch->max_antenna_gain = channel->max_antenna_gain * 2;
|
||||
+ ch->max_antenna_gain = channel->max_antenna_gain;
|
||||
ch->reg_class_id = 0; /* FIXME */
|
||||
|
||||
/* FIXME: why use only legacy modes, why not any
|
||||
@ -0,0 +1,101 @@
|
||||
From: Sven Eckelmann <seckelmann@datto.com>
|
||||
Date: Wed, 28 Nov 2018 16:16:27 +0100
|
||||
Subject: ath10k: adjust tx power reduction for US regulatory domain
|
||||
|
||||
FCC allows maximum antenna gain of 6 dBi. 15.247(b)(4):
|
||||
|
||||
> (4) The conducted output power limit
|
||||
> specified in paragraph (b) of this section
|
||||
> is based on the use of antennas
|
||||
> with directional gains that do not exceed
|
||||
> 6 dBi. Except as shown in paragraph
|
||||
> (c) of this section, if transmitting
|
||||
> antennas of directional gain greater
|
||||
> than 6 dBi are used, the conducted
|
||||
> output power from the intentional radiator
|
||||
> shall be reduced below the stated
|
||||
> values in paragraphs (b)(1), (b)(2),
|
||||
> and (b)(3) of this section, as appropriate,
|
||||
> by the amount in dB that the
|
||||
> directional gain of the antenna exceeds
|
||||
> 6 dBi.
|
||||
|
||||
https://www.gpo.gov/fdsys/pkg/CFR-2013-title47-vol1/pdf/CFR-2013-title47-vol1-sec15-247.pdf
|
||||
|
||||
Signed-off-by: Sven Eckelmann <seckelmann@datto.com>
|
||||
|
||||
Forwarded: no
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
@@ -988,6 +988,40 @@ static inline int ath10k_vdev_setup_sync
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static u32 ath10k_get_max_antenna_gain(struct ath10k *ar,
|
||||
+ u32 ch_max_antenna_gain)
|
||||
+{
|
||||
+ u32 max_antenna_gain;
|
||||
+
|
||||
+ if (ar->dfs_detector && ar->dfs_detector->region == NL80211_DFS_FCC) {
|
||||
+ /* FCC allows maximum antenna gain of 6 dBi. 15.247(b)(4):
|
||||
+ *
|
||||
+ * > (4) The conducted output power limit
|
||||
+ * > specified in paragraph (b) of this section
|
||||
+ * > is based on the use of antennas
|
||||
+ * > with directional gains that do not exceed
|
||||
+ * > 6 dBi. Except as shown in paragraph
|
||||
+ * > (c) of this section, if transmitting
|
||||
+ * > antennas of directional gain greater
|
||||
+ * > than 6 dBi are used, the conducted
|
||||
+ * > output power from the intentional radiator
|
||||
+ * > shall be reduced below the stated
|
||||
+ * > values in paragraphs (b)(1), (b)(2),
|
||||
+ * > and (b)(3) of this section, as appropriate,
|
||||
+ * > by the amount in dB that the
|
||||
+ * > directional gain of the antenna exceeds
|
||||
+ * > 6 dBi.
|
||||
+ *
|
||||
+ * https://www.gpo.gov/fdsys/pkg/CFR-2013-title47-vol1/pdf/CFR-2013-title47-vol1-sec15-247.pdf
|
||||
+ */
|
||||
+ max_antenna_gain = 6;
|
||||
+ } else {
|
||||
+ max_antenna_gain = 0;
|
||||
+ }
|
||||
+
|
||||
+ return max(ch_max_antenna_gain, max_antenna_gain);
|
||||
+}
|
||||
+
|
||||
static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
|
||||
{
|
||||
struct cfg80211_chan_def *chandef = NULL;
|
||||
@@ -1020,7 +1054,8 @@ static int ath10k_monitor_vdev_start(str
|
||||
arg.channel.min_power = 0;
|
||||
arg.channel.max_power = channel->max_power * 2;
|
||||
arg.channel.max_reg_power = channel->max_reg_power * 2;
|
||||
- arg.channel.max_antenna_gain = channel->max_antenna_gain;
|
||||
+ arg.channel.max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
||||
+ channel->max_antenna_gain);
|
||||
|
||||
reinit_completion(&ar->vdev_setup_done);
|
||||
|
||||
@@ -1462,7 +1497,8 @@ static int ath10k_vdev_start_restart(str
|
||||
arg.channel.min_power = 0;
|
||||
arg.channel.max_power = chandef->chan->max_power * 2;
|
||||
arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
|
||||
- arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain;
|
||||
+ arg.channel.max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
||||
+ chandef->chan->max_antenna_gain);
|
||||
|
||||
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
||||
arg.ssid = arvif->u.ap.ssid;
|
||||
@@ -3139,7 +3175,8 @@ static int ath10k_update_channel_list(st
|
||||
ch->min_power = 0;
|
||||
ch->max_power = channel->max_power * 2;
|
||||
ch->max_reg_power = channel->max_reg_power * 2;
|
||||
- ch->max_antenna_gain = channel->max_antenna_gain;
|
||||
+ ch->max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
||||
+ channel->max_antenna_gain);
|
||||
ch->reg_class_id = 0; /* FIXME */
|
||||
|
||||
/* FIXME: why use only legacy modes, why not any
|
||||
@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=default-settings
|
||||
PKG_VERSION:=1.1
|
||||
PKG_RELEASE:=39
|
||||
PKG_RELEASE:=41
|
||||
PKG_LICENSE:=GPLv3
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ sed -i '/set wireless.radio${devidx}.disabled/d' /lib/wifi/mac80211.sh
|
||||
wifi up
|
||||
|
||||
sed -i '/DISTRIB_REVISION/d' /etc/openwrt_release
|
||||
echo "DISTRIB_REVISION='R9.6.1'" >> /etc/openwrt_release
|
||||
echo "DISTRIB_REVISION='R9.6.19'" >> /etc/openwrt_release
|
||||
sed -i '/DISTRIB_DESCRIPTION/d' /etc/openwrt_release
|
||||
echo "DISTRIB_DESCRIPTION='OpenWrt '" >> /etc/openwrt_release
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ produce a noisy warning.
|
||||
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -372,10 +372,14 @@ static int xhci_try_enable_msi(struct us
|
||||
@@ -370,10 +370,14 @@ static int xhci_try_enable_msi(struct us
|
||||
free_irq(hcd->irq, hcd);
|
||||
hcd->irq = 0;
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ produce a noisy warning.
|
||||
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -424,10 +424,14 @@ static int xhci_try_enable_msi(struct us
|
||||
@@ -422,10 +422,14 @@ static int xhci_try_enable_msi(struct us
|
||||
free_irq(hcd->irq, hcd);
|
||||
hcd->irq = 0;
|
||||
|
||||
|
||||
@ -448,7 +448,7 @@
|
||||
memcpy(p, foc->val, foc->len);
|
||||
--- a/net/ipv4/igmp.c
|
||||
+++ b/net/ipv4/igmp.c
|
||||
@@ -537,7 +537,7 @@ static struct sk_buff *add_grec(struct s
|
||||
@@ -548,7 +548,7 @@ static struct sk_buff *add_grec(struct s
|
||||
if (!skb)
|
||||
return NULL;
|
||||
psrc = skb_put(skb, sizeof(__be32));
|
||||
@ -748,7 +748,7 @@
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3858,14 +3858,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -3874,14 +3874,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
||||
@ -737,7 +737,7 @@
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3858,14 +3858,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -3874,14 +3874,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
||||
@ -728,7 +728,7 @@
|
||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3898,14 +3898,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -3912,14 +3912,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ it on BCM4708 family.
|
||||
/* called during probe() after chip reset completes */
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -168,6 +168,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
@@ -166,6 +166,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -90,7 +90,7 @@ it on BCM4708 family.
|
||||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -551,10 +594,20 @@ static int xhci_init(struct usb_hcd *hcd
|
||||
@@ -549,10 +592,20 @@ static int xhci_init(struct usb_hcd *hcd
|
||||
|
||||
static int xhci_run_finished(struct xhci_hcd *xhci)
|
||||
{
|
||||
@ -114,7 +114,7 @@ it on BCM4708 family.
|
||||
xhci->shared_hcd->state = HC_STATE_RUNNING;
|
||||
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
|
||||
|
||||
@@ -564,6 +617,10 @@ static int xhci_run_finished(struct xhci
|
||||
@@ -562,6 +615,10 @@ static int xhci_run_finished(struct xhci
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
|
||||
"Finished xhci_run for USB3 roothub");
|
||||
return 0;
|
||||
|
||||
@ -40,7 +40,7 @@ it on BCM4708 family.
|
||||
/* called during probe() after chip reset completes */
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -158,6 +158,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
@@ -156,6 +156,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -90,7 +90,7 @@ it on BCM4708 family.
|
||||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -605,10 +648,20 @@ static int xhci_init(struct usb_hcd *hcd
|
||||
@@ -603,10 +646,20 @@ static int xhci_init(struct usb_hcd *hcd
|
||||
|
||||
static int xhci_run_finished(struct xhci_hcd *xhci)
|
||||
{
|
||||
@ -114,7 +114,7 @@ it on BCM4708 family.
|
||||
xhci->shared_hcd->state = HC_STATE_RUNNING;
|
||||
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
|
||||
|
||||
@@ -618,6 +671,10 @@ static int xhci_run_finished(struct xhci
|
||||
@@ -616,6 +669,10 @@ static int xhci_run_finished(struct xhci
|
||||
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
|
||||
"Finished xhci_run for USB3 roothub");
|
||||
return 0;
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -7618,8 +7618,6 @@ int alloc_contig_range(unsigned long sta
|
||||
@@ -7620,8 +7620,6 @@ int alloc_contig_range(unsigned long sta
|
||||
|
||||
/* Make sure the range is really isolated. */
|
||||
if (test_pages_isolated(outer_start, end, false)) {
|
||||
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
|
||||
size_t pagelist_size;
|
||||
struct scatterlist *scatterlist, *sg;
|
||||
int dma_buffers;
|
||||
@@ -417,10 +436,16 @@ create_pagelist(char __user *buf, size_t
|
||||
@@ -426,10 +445,16 @@ create_pagelist(char __user *buf, size_t
|
||||
/* Allocate enough storage to hold the page pointers and the page
|
||||
** list
|
||||
*/
|
||||
@ -116,7 +116,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
|
||||
|
||||
vchiq_log_trace(vchiq_arm_log_level, "create_pagelist - %pK",
|
||||
pagelist);
|
||||
@@ -441,6 +466,7 @@ create_pagelist(char __user *buf, size_t
|
||||
@@ -450,6 +475,7 @@ create_pagelist(char __user *buf, size_t
|
||||
pagelistinfo->pagelist = pagelist;
|
||||
pagelistinfo->pagelist_buffer_size = pagelist_size;
|
||||
pagelistinfo->dma_addr = dma_addr;
|
||||
|
||||
@ -84,7 +84,7 @@ Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
|
||||
--- a/include/linux/compiler-gcc.h
|
||||
+++ b/include/linux/compiler-gcc.h
|
||||
@@ -362,3 +362,30 @@
|
||||
@@ -366,3 +366,30 @@
|
||||
#if GCC_VERSION >= 50100
|
||||
#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
|
||||
#endif
|
||||
@ -117,7 +117,7 @@ Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
+
|
||||
--- a/include/linux/compiler_types.h
|
||||
+++ b/include/linux/compiler_types.h
|
||||
@@ -283,4 +283,22 @@ struct ftrace_likely_data {
|
||||
@@ -287,4 +287,22 @@ struct ftrace_likely_data {
|
||||
# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
|
||||
#endif
|
||||
|
||||
|
||||
@ -65,7 +65,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
|
||||
* Before updating sk_refcnt, we must commit prior changes to memory
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -1683,7 +1683,7 @@ u32 tcp_tso_autosize(const struct sock *
|
||||
@@ -1687,7 +1687,7 @@ u32 tcp_tso_autosize(const struct sock *
|
||||
{
|
||||
u32 bytes, segs;
|
||||
|
||||
@ -74,7 +74,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
|
||||
sk->sk_gso_max_size - 1 - MAX_TCP_HEADER);
|
||||
|
||||
/* Goal is to send at least one packet per ms,
|
||||
@@ -2200,7 +2200,7 @@ static bool tcp_small_queue_check(struct
|
||||
@@ -2204,7 +2204,7 @@ static bool tcp_small_queue_check(struct
|
||||
{
|
||||
unsigned int limit;
|
||||
|
||||
|
||||
@ -0,0 +1,566 @@
|
||||
From 21d81d05787908b13a4079f42a63a5b3254b7ab4 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
Date: Wed, 13 Mar 2019 20:54:49 +0000
|
||||
Subject: [PATCH] net: sched: Introduce act_ctinfo action
|
||||
|
||||
ctinfo is a new tc filter action module. It is designed to restore DSCPs
|
||||
stored in conntrack marks
|
||||
|
||||
The feature is intended for use and has been found useful for restoring
|
||||
ingress classifications based on egress classifications across links
|
||||
that bleach or otherwise change DSCP, typically home ISP Internet links.
|
||||
Restoring DSCP on ingress on the WAN link allows qdiscs such as CAKE to
|
||||
shape inbound packets according to policies that are easier to implement
|
||||
on egress.
|
||||
|
||||
Ingress classification is traditionally a challenging task since
|
||||
iptables rules haven't yet run and tc filter/eBPF programs are pre-NAT
|
||||
lookups, hence are unable to see internal IPv4 addresses as used on the
|
||||
typical home masquerading gateway.
|
||||
|
||||
ctinfo understands the following parameters:
|
||||
|
||||
dscp mask[/statemask]
|
||||
|
||||
mask - a 32 bit mask of at least 6 contiguous bits where conndscp will
|
||||
place the DSCP in conntrack mark. The DSCP is left-shifted by the
|
||||
number of unset lower bits of the mask before storing into the mark
|
||||
field.
|
||||
|
||||
statemask - a 32 bit mask of (usually) 1 bit length, outside the area
|
||||
specified by mask. This represents a conditional operation flag the
|
||||
DSCP is only restored if the flag is set. This is useful to implement a
|
||||
'one shot' iptables based classification where the 'complicated'
|
||||
iptables rules are only run once to classify the connection on initial
|
||||
(egress) packet and subsequent packets are all marked/restored with the
|
||||
same DSCP. A mask of zero disables the conditional behaviour.
|
||||
|
||||
optional parameters:
|
||||
|
||||
zone - conntrack zone
|
||||
|
||||
control - action related control (reclassify | pipe | drop | continue |
|
||||
ok | goto chain <CHAIN_INDEX>
|
||||
|
||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
---
|
||||
include/net/tc_act/tc_ctinfo.h | 28 ++
|
||||
include/uapi/linux/pkt_cls.h | 3 +-
|
||||
include/uapi/linux/tc_act/tc_ctinfo.h | 34 +++
|
||||
net/sched/Kconfig | 13 +
|
||||
net/sched/Makefile | 1 +
|
||||
net/sched/act_ctinfo.c | 394 ++++++++++++++++++++++++++
|
||||
6 files changed, 472 insertions(+), 1 deletion(-)
|
||||
create mode 100644 include/net/tc_act/tc_ctinfo.h
|
||||
create mode 100644 include/uapi/linux/tc_act/tc_ctinfo.h
|
||||
create mode 100644 net/sched/act_ctinfo.c
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/net/tc_act/tc_ctinfo.h
|
||||
@@ -0,0 +1,28 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+#ifndef __NET_TC_CTINFO_H
|
||||
+#define __NET_TC_CTINFO_H
|
||||
+
|
||||
+#include <net/act_api.h>
|
||||
+
|
||||
+struct tcf_ctinfo_params {
|
||||
+ struct rcu_head rcu;
|
||||
+ struct net *net;
|
||||
+ u32 dscpmask;
|
||||
+ u32 dscpstatemask;
|
||||
+ u32 cpmarkmask;
|
||||
+ u16 zone;
|
||||
+ u8 mode;
|
||||
+ u8 dscpmaskshift;
|
||||
+};
|
||||
+
|
||||
+struct tcf_ctinfo {
|
||||
+ struct tc_action common;
|
||||
+ struct tcf_ctinfo_params __rcu *params;
|
||||
+ u64 stats_dscp_set;
|
||||
+ u64 stats_dscp_error;
|
||||
+ u64 stats_cpmark_set;
|
||||
+};
|
||||
+
|
||||
+#define to_ctinfo(a) ((struct tcf_ctinfo *)a)
|
||||
+
|
||||
+#endif /* __NET_TC_CTINFO_H */
|
||||
--- a/include/uapi/linux/pkt_cls.h
|
||||
+++ b/include/uapi/linux/pkt_cls.h
|
||||
@@ -66,7 +66,8 @@ enum {
|
||||
TCA_ID_UNSPEC=0,
|
||||
TCA_ID_POLICE=1,
|
||||
/* other actions go here */
|
||||
- __TCA_ID_MAX=255
|
||||
+ TCA_ID_CTINFO=27,
|
||||
+ __TCA_ID_MAX = 255
|
||||
};
|
||||
|
||||
#define TCA_ID_MAX __TCA_ID_MAX
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/tc_act/tc_ctinfo.h
|
||||
@@ -0,0 +1,34 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
+#ifndef __UAPI_TC_CTINFO_H
|
||||
+#define __UAPI_TC_CTINFO_H
|
||||
+
|
||||
+#include <linux/types.h>
|
||||
+#include <linux/pkt_cls.h>
|
||||
+
|
||||
+struct tc_ctinfo {
|
||||
+ tc_gen;
|
||||
+};
|
||||
+
|
||||
+enum {
|
||||
+ TCA_CTINFO_UNSPEC,
|
||||
+ TCA_CTINFO_PAD,
|
||||
+ TCA_CTINFO_TM,
|
||||
+ TCA_CTINFO_ACT,
|
||||
+ TCA_CTINFO_ZONE,
|
||||
+ TCA_CTINFO_PARMS_DSCP_MASK,
|
||||
+ TCA_CTINFO_PARMS_DSCP_STATEMASK,
|
||||
+ TCA_CTINFO_PARMS_CPMARK_MASK,
|
||||
+ TCA_CTINFO_STATS_DSCP_SET,
|
||||
+ TCA_CTINFO_STATS_DSCP_ERROR,
|
||||
+ TCA_CTINFO_STATS_CPMARK_SET,
|
||||
+ __TCA_CTINFO_MAX
|
||||
+};
|
||||
+
|
||||
+#define TCA_CTINFO_MAX (__TCA_CTINFO_MAX - 1)
|
||||
+
|
||||
+enum {
|
||||
+ CTINFO_MODE_DSCP = BIT(0),
|
||||
+ CTINFO_MODE_CPMARK = BIT(1)
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -808,6 +808,19 @@ config NET_ACT_CONNMARK
|
||||
To compile this code as a module, choose M here: the
|
||||
module will be called act_connmark.
|
||||
|
||||
+config NET_ACT_CTINFO
|
||||
+ tristate "Netfilter Connmark to DSCP Retriever"
|
||||
+ depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
|
||||
+ depends on NF_CONNTRACK && NF_CONNTRACK_MARK
|
||||
+ help
|
||||
+ Say Y here to allow transfer of a connmark stored DSCP into
|
||||
+ ipv4/v6 diffserv
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+ To compile this code as a module, choose M here: the
|
||||
+ module will be called act_ctinfo.
|
||||
+
|
||||
config NET_ACT_SKBMOD
|
||||
tristate "skb data modification action"
|
||||
depends on NET_CLS_ACT
|
||||
--- a/net/sched/Makefile
|
||||
+++ b/net/sched/Makefile
|
||||
@@ -21,6 +21,7 @@ obj-$(CONFIG_NET_ACT_CSUM) += act_csum.o
|
||||
obj-$(CONFIG_NET_ACT_VLAN) += act_vlan.o
|
||||
obj-$(CONFIG_NET_ACT_BPF) += act_bpf.o
|
||||
obj-$(CONFIG_NET_ACT_CONNMARK) += act_connmark.o
|
||||
+obj-$(CONFIG_NET_ACT_CTINFO) += act_ctinfo.o
|
||||
obj-$(CONFIG_NET_ACT_SKBMOD) += act_skbmod.o
|
||||
obj-$(CONFIG_NET_ACT_IFE) += act_ife.o
|
||||
obj-$(CONFIG_NET_IFE_SKBMARK) += act_meta_mark.o
|
||||
--- /dev/null
|
||||
+++ b/net/sched/act_ctinfo.c
|
||||
@@ -0,0 +1,394 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+/* net/sched/act_ctinfo.c netfilter ctinfo connmark actions
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/skbuff.h>
|
||||
+#include <linux/rtnetlink.h>
|
||||
+#include <linux/pkt_cls.h>
|
||||
+#include <linux/ip.h>
|
||||
+#include <linux/ipv6.h>
|
||||
+#include <net/netlink.h>
|
||||
+#include <net/pkt_sched.h>
|
||||
+#include <net/act_api.h>
|
||||
+#include <net/pkt_cls.h>
|
||||
+#include <uapi/linux/tc_act/tc_ctinfo.h>
|
||||
+#include <net/tc_act/tc_ctinfo.h>
|
||||
+
|
||||
+#include <net/netfilter/nf_conntrack.h>
|
||||
+#include <net/netfilter/nf_conntrack_core.h>
|
||||
+#include <net/netfilter/nf_conntrack_ecache.h>
|
||||
+#include <net/netfilter/nf_conntrack_zones.h>
|
||||
+
|
||||
+static struct tc_action_ops act_ctinfo_ops;
|
||||
+static unsigned int ctinfo_net_id;
|
||||
+
|
||||
+static void tcf_ctinfo_dscp_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
|
||||
+ struct tcf_ctinfo_params *cp,
|
||||
+ struct sk_buff *skb, int wlen, int proto)
|
||||
+{
|
||||
+ u8 dscp,newdscp;
|
||||
+
|
||||
+ newdscp = (((ct->mark & cp->dscpmask) >> cp->dscpmaskshift) << 2) &
|
||||
+ ~INET_ECN_MASK;
|
||||
+
|
||||
+ /* mark contains DSCP so restore DSCP bits from ct->mark into diffserv */
|
||||
+ /* using overlimits stats to count how many DSCP updates */
|
||||
+ switch (proto) {
|
||||
+ case NFPROTO_IPV4:
|
||||
+ dscp = ipv4_get_dsfield(ip_hdr(skb)) & ~INET_ECN_MASK;
|
||||
+ if (dscp != newdscp) {
|
||||
+ if (likely(!skb_try_make_writable(skb, wlen))) {
|
||||
+ ipv4_change_dsfield(ip_hdr(skb),
|
||||
+ INET_ECN_MASK,
|
||||
+ newdscp);
|
||||
+ ca->stats_dscp_set++;
|
||||
+ } else {
|
||||
+ ca->stats_dscp_error++;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case NFPROTO_IPV6:
|
||||
+ dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & ~INET_ECN_MASK;
|
||||
+ if (dscp != newdscp) {
|
||||
+ if (likely(!skb_try_make_writable(skb, wlen))) {
|
||||
+ ipv6_change_dsfield(ipv6_hdr(skb),
|
||||
+ INET_ECN_MASK,
|
||||
+ newdscp);
|
||||
+ ca->stats_dscp_set++;
|
||||
+ } else {
|
||||
+ ca->stats_dscp_error++;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void tcf_ctinfo_cpmark_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
|
||||
+ struct tcf_ctinfo_params *cp,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ ca->stats_cpmark_set++;
|
||||
+ skb->mark = ct->mark & cp->cpmarkmask;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a,
|
||||
+ struct tcf_result *res)
|
||||
+{
|
||||
+ const struct nf_conntrack_tuple_hash *thash = NULL;
|
||||
+ struct tcf_ctinfo *ca = to_ctinfo(a);
|
||||
+ struct nf_conntrack_tuple tuple;
|
||||
+ struct nf_conntrack_zone zone;
|
||||
+ enum ip_conntrack_info ctinfo;
|
||||
+ struct tcf_ctinfo_params *cp;
|
||||
+ struct nf_conn *ct;
|
||||
+ int proto, wlen;
|
||||
+ int action;
|
||||
+
|
||||
+ cp = rcu_dereference_bh(ca->params);
|
||||
+
|
||||
+ tcf_lastuse_update(&ca->tcf_tm);
|
||||
+ bstats_update(&ca->tcf_bstats, skb);
|
||||
+ action = READ_ONCE(ca->tcf_action);
|
||||
+
|
||||
+ wlen = skb_network_offset(skb);
|
||||
+ if (tc_skb_protocol(skb) == htons(ETH_P_IP)) {
|
||||
+ wlen += sizeof(struct iphdr);
|
||||
+ if (!pskb_may_pull(skb, wlen))
|
||||
+ goto out;
|
||||
+
|
||||
+ proto = NFPROTO_IPV4;
|
||||
+ } else if (tc_skb_protocol(skb) == htons(ETH_P_IPV6)) {
|
||||
+ wlen += sizeof(struct ipv6hdr);
|
||||
+ if (!pskb_may_pull(skb, wlen))
|
||||
+ goto out;
|
||||
+
|
||||
+ proto = NFPROTO_IPV6;
|
||||
+ } else {
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ct = nf_ct_get(skb, &ctinfo);
|
||||
+ if (!ct) { /* look harder, usually ingress */
|
||||
+ if (!nf_ct_get_tuplepr(skb, skb_network_offset(skb),
|
||||
+ proto, cp->net, &tuple))
|
||||
+ goto out;
|
||||
+ zone.id = cp->zone;
|
||||
+ zone.dir = NF_CT_DEFAULT_ZONE_DIR;
|
||||
+
|
||||
+ thash = nf_conntrack_find_get(cp->net, &zone, &tuple);
|
||||
+ if (!thash)
|
||||
+ goto out;
|
||||
+
|
||||
+ ct = nf_ct_tuplehash_to_ctrack(thash);
|
||||
+ }
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_DSCP)
|
||||
+ if (!cp->dscpstatemask || (ct->mark & cp->dscpstatemask))
|
||||
+ tcf_ctinfo_dscp_set(ct, ca, cp, skb, wlen, proto);
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_CPMARK)
|
||||
+ tcf_ctinfo_cpmark_set(ct, ca, cp, skb);
|
||||
+
|
||||
+ if (thash)
|
||||
+ nf_ct_put(ct);
|
||||
+out:
|
||||
+ return action;
|
||||
+}
|
||||
+
|
||||
+static const struct nla_policy ctinfo_policy[TCA_CTINFO_MAX + 1] = {
|
||||
+ [TCA_CTINFO_ACT] = { .len = sizeof(struct
|
||||
+ tc_ctinfo) },
|
||||
+ [TCA_CTINFO_ZONE] = { .type = NLA_U16 },
|
||||
+ [TCA_CTINFO_PARMS_DSCP_MASK] = { .type = NLA_U32 },
|
||||
+ [TCA_CTINFO_PARMS_DSCP_STATEMASK] = { .type = NLA_U32 },
|
||||
+ [TCA_CTINFO_PARMS_CPMARK_MASK] = { .type = NLA_U32 },
|
||||
+};
|
||||
+
|
||||
+static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,
|
||||
+ struct nlattr *est, struct tc_action **a,
|
||||
+ int ovr, int bind)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+ struct nlattr *tb[TCA_CTINFO_MAX + 1];
|
||||
+ struct tcf_ctinfo_params *cp_new;
|
||||
+/* struct tcf_chain *goto_ch = NULL; */
|
||||
+ u32 dscpmask = 0, dscpstatemask;
|
||||
+ struct tc_ctinfo *actparm;
|
||||
+ struct tcf_ctinfo *ci;
|
||||
+ u8 dscpmaskshift;
|
||||
+ int ret = 0, err;
|
||||
+
|
||||
+ if (!nla)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, NULL);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ if (!tb[TCA_CTINFO_ACT])
|
||||
+ return -EINVAL;
|
||||
+ actparm = nla_data(tb[TCA_CTINFO_ACT]);
|
||||
+
|
||||
+ /* do some basic validation here before dynamically allocating things */
|
||||
+ /* that we would otherwise have to clean up. */
|
||||
+ if (tb[TCA_CTINFO_PARMS_DSCP_MASK]) {
|
||||
+ dscpmask = nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_MASK]);
|
||||
+ /* need contiguous 6 bit mask */
|
||||
+ dscpmaskshift = dscpmask ? __ffs(dscpmask) : 0;
|
||||
+ if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f)
|
||||
+ return -EINVAL;
|
||||
+ dscpstatemask = tb[TCA_CTINFO_PARMS_DSCP_STATEMASK] ?
|
||||
+ nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_STATEMASK]) : 0;
|
||||
+ /* mask & statemask must not overlap */
|
||||
+ if (dscpmask & dscpstatemask)
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ /* done the validation:now to the actual action allocation */
|
||||
+ err = tcf_idr_check(tn, actparm->index, a, bind);
|
||||
+ if (!err) {
|
||||
+ ret = tcf_idr_create(tn, actparm->index, est, a,
|
||||
+ &act_ctinfo_ops, bind, false);
|
||||
+ if (ret) {
|
||||
+ /* tcf_idr_cleanup(tn, actparm->index); */
|
||||
+ return ret;
|
||||
+ }
|
||||
+ ret = ACT_P_CREATED;
|
||||
+ } else if (err > 0) {
|
||||
+ if (bind) /* don't override defaults */
|
||||
+ return 0;
|
||||
+ if (!ovr) {
|
||||
+ tcf_idr_release(*a, bind);
|
||||
+ return -EEXIST;
|
||||
+ }
|
||||
+ } else {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+/* err = tcf_action_check_ctrlact(actparm->action, tp, &goto_ch, extack);
|
||||
+ if (err < 0)
|
||||
+ goto release_idr;
|
||||
+ */
|
||||
+
|
||||
+ ci = to_ctinfo(*a);
|
||||
+
|
||||
+ cp_new = kzalloc(sizeof(*cp_new), GFP_KERNEL);
|
||||
+ if (unlikely(!cp_new)) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto put_chain;
|
||||
+ }
|
||||
+
|
||||
+ cp_new->net = net;
|
||||
+ cp_new->zone = tb[TCA_CTINFO_ZONE] ?
|
||||
+ nla_get_u16(tb[TCA_CTINFO_ZONE]) : 0;
|
||||
+ if (dscpmask) {
|
||||
+ cp_new->dscpmask = dscpmask;
|
||||
+ cp_new->dscpmaskshift = dscpmaskshift;
|
||||
+ cp_new->dscpstatemask = dscpstatemask;
|
||||
+ cp_new->mode |= CTINFO_MODE_DSCP;
|
||||
+ }
|
||||
+
|
||||
+ if (tb[TCA_CTINFO_PARMS_CPMARK_MASK]) {
|
||||
+ cp_new->cpmarkmask = nla_get_u32(tb[TCA_CTINFO_PARMS_CPMARK_MASK]);
|
||||
+ cp_new->mode |= CTINFO_MODE_CPMARK;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock_bh(&ci->tcf_lock);
|
||||
+/* goto_ch = tcf_action_set_ctrlact(*a, actparm->action, goto_ch); */
|
||||
+ ci->tcf_action = actparm->action;
|
||||
+ rcu_swap_protected(ci->params, cp_new,
|
||||
+ lockdep_is_held(&ci->tcf_lock));
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+
|
||||
+/* if (goto_ch)
|
||||
+ tcf_chain_put_by_act(goto_ch); */
|
||||
+ if (cp_new)
|
||||
+ kfree_rcu(cp_new, rcu);
|
||||
+
|
||||
+ if (ret == ACT_P_CREATED)
|
||||
+ tcf_idr_insert(tn, *a);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+put_chain:
|
||||
+/* if (goto_ch)
|
||||
+ tcf_chain_put_by_act(goto_ch); */
|
||||
+/*release_idr:*/
|
||||
+ tcf_idr_release(*a, bind);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_dump(struct sk_buff *skb, struct tc_action *a,
|
||||
+ int bind, int ref)
|
||||
+{
|
||||
+ struct tcf_ctinfo *ci = to_ctinfo(a);
|
||||
+ struct tc_ctinfo opt = {
|
||||
+ .index = ci->tcf_index,
|
||||
+ .refcnt = ci->tcf_refcnt - ref,
|
||||
+ .bindcnt = ci->tcf_bindcnt - bind,
|
||||
+ };
|
||||
+ unsigned char *b = skb_tail_pointer(skb);
|
||||
+ struct tcf_ctinfo_params *cp;
|
||||
+ struct tcf_t t;
|
||||
+
|
||||
+ spin_lock_bh(&ci->tcf_lock);
|
||||
+ cp = rcu_dereference_protected(ci->params,
|
||||
+ lockdep_is_held(&ci->tcf_lock));
|
||||
+
|
||||
+ tcf_tm_dump(&t, &ci->tcf_tm);
|
||||
+ if (nla_put_64bit(skb, TCA_CTINFO_TM, sizeof(t), &t, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ opt.action = ci->tcf_action;
|
||||
+ if (nla_put(skb, TCA_CTINFO_ACT, sizeof(opt), &opt))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u16(skb, TCA_CTINFO_ZONE, cp->zone))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_DSCP) {
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_MASK,
|
||||
+ cp->dscpmask))
|
||||
+ goto nla_put_failure;
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_STATEMASK,
|
||||
+ cp->dscpstatemask))
|
||||
+ goto nla_put_failure;
|
||||
+ }
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_CPMARK) {
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_CPMARK_MASK,
|
||||
+ cp->cpmarkmask))
|
||||
+ goto nla_put_failure;
|
||||
+ }
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_SET,
|
||||
+ ci->stats_dscp_set, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_ERROR,
|
||||
+ ci->stats_dscp_error, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_CPMARK_SET,
|
||||
+ ci->stats_cpmark_set, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+ return skb->len;
|
||||
+
|
||||
+nla_put_failure:
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+ nlmsg_trim(skb, b);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_walker(struct net *net, struct sk_buff *skb,
|
||||
+ struct netlink_callback *cb, int type,
|
||||
+ const struct tc_action_ops *ops)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tcf_generic_walker(tn, skb, cb, type, ops);
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_search(struct net *net, struct tc_action **a, u32 index)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tcf_idr_search(tn, a, index);
|
||||
+}
|
||||
+
|
||||
+static struct tc_action_ops act_ctinfo_ops = {
|
||||
+ .kind = "ctinfo",
|
||||
+ .type = TCA_ID_CTINFO,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .act = tcf_ctinfo_act,
|
||||
+ .dump = tcf_ctinfo_dump,
|
||||
+ .init = tcf_ctinfo_init,
|
||||
+ .walk = tcf_ctinfo_walker,
|
||||
+ .lookup = tcf_ctinfo_search,
|
||||
+ .size = sizeof(struct tcf_ctinfo),
|
||||
+};
|
||||
+
|
||||
+static __net_init int ctinfo_init_net(struct net *net)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tc_action_net_init(tn, &act_ctinfo_ops);
|
||||
+}
|
||||
+
|
||||
+static void __net_exit ctinfo_exit_net(struct net *net)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ tc_action_net_exit(tn);
|
||||
+}
|
||||
+
|
||||
+static struct pernet_operations ctinfo_net_ops = {
|
||||
+ .init = ctinfo_init_net,
|
||||
+ .exit = ctinfo_exit_net,
|
||||
+ .id = &ctinfo_net_id,
|
||||
+ .size = sizeof(struct tc_action_net),
|
||||
+};
|
||||
+
|
||||
+static int __init ctinfo_init_module(void)
|
||||
+{
|
||||
+ return tcf_register_action(&act_ctinfo_ops, &ctinfo_net_ops);
|
||||
+}
|
||||
+
|
||||
+static void __exit ctinfo_cleanup_module(void)
|
||||
+{
|
||||
+ tcf_unregister_action(&act_ctinfo_ops, &ctinfo_net_ops);
|
||||
+}
|
||||
+
|
||||
+module_init(ctinfo_init_module);
|
||||
+module_exit(ctinfo_cleanup_module);
|
||||
+MODULE_AUTHOR("Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>");
|
||||
+MODULE_DESCRIPTION("Conntrack mark to DSCP restoring");
|
||||
+MODULE_LICENSE("GPL");
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -520,5 +520,35 @@ void nf_flow_table_free(struct nf_flowta
|
||||
@@ -531,5 +531,35 @@ void nf_flow_table_free(struct nf_flowta
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_flow_table_free);
|
||||
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -196,47 +196,14 @@ static struct nft_expr_type nft_flow_off
|
||||
@@ -197,47 +197,14 @@ static struct nft_expr_type nft_flow_off
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_ip.c
|
||||
+++ b/net/netfilter/nf_flow_table_ip.c
|
||||
@@ -241,7 +241,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
@@ -244,7 +244,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
|
||||
dir = tuplehash->tuple.dir;
|
||||
flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]);
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (unlikely(nf_flow_exceeds_mtu(skb, flow->tuplehash[dir].tuple.mtu)) &&
|
||||
(ip_hdr(skb)->frag_off & htons(IP_DF)) != 0)
|
||||
@@ -459,7 +459,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
@@ -465,7 +465,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
|
||||
dir = tuplehash->tuple.dir;
|
||||
flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]);
|
||||
|
||||
@ -54,11 +54,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
nf_ct_gc_expired(tmp);
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -183,8 +183,27 @@ static const struct rhashtable_params nf
|
||||
@@ -183,6 +183,24 @@ static const struct rhashtable_params nf
|
||||
.automatic_shrinking = true,
|
||||
};
|
||||
|
||||
+#define DAY (86400 * HZ)
|
||||
+#define DAY (86400 * HZ)
|
||||
+
|
||||
+/* Set an arbitrary timeout large enough not to ever expire, this save
|
||||
+ * us a check for the IPS_OFFLOAD_BIT from the packet path via
|
||||
@ -78,11 +78,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+
|
||||
int flow_offload_add(struct nf_flowtable *flow_table, struct flow_offload *flow)
|
||||
{
|
||||
int err;
|
||||
@@ -203,6 +221,7 @@ int flow_offload_add(struct nf_flowtable
|
||||
return err;
|
||||
}
|
||||
|
||||
+ nf_ct_offload_timeout(flow);
|
||||
flow->timeout = (u32)jiffies;
|
||||
|
||||
rhashtable_insert_fast(&flow_table->rhashtable,
|
||||
@@ -305,6 +324,8 @@ static int nf_flow_offload_gc_step(struc
|
||||
return 0;
|
||||
}
|
||||
@@ -316,6 +335,8 @@ static int nf_flow_offload_gc_step(struc
|
||||
rhashtable_walk_start(&hti);
|
||||
|
||||
while ((tuplehash = rhashtable_walk_next(&hti))) {
|
||||
@ -91,7 +96,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (IS_ERR(tuplehash)) {
|
||||
err = PTR_ERR(tuplehash);
|
||||
if (err != -EAGAIN)
|
||||
@@ -317,9 +338,13 @@ static int nf_flow_offload_gc_step(struc
|
||||
@@ -328,9 +349,13 @@ static int nf_flow_offload_gc_step(struc
|
||||
|
||||
flow = container_of(tuplehash, struct flow_offload, tuplehash[0]);
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -231,6 +231,9 @@ static void flow_offload_del(struct nf_f
|
||||
@@ -242,6 +242,9 @@ static void flow_offload_del(struct nf_f
|
||||
e = container_of(flow, struct flow_offload_entry, flow);
|
||||
clear_bit(IPS_OFFLOAD_BIT, &e->ct->status);
|
||||
|
||||
|
||||
@ -0,0 +1,597 @@
|
||||
From 402c8d61d2f27060be14849fcb30682f75f3bf3b Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
Date: Wed, 13 Mar 2019 20:54:49 +0000
|
||||
Subject: [PATCH] net: sched: Introduce act_ctinfo action
|
||||
|
||||
ctinfo is a new tc filter action module. It is designed to restore DSCPs
|
||||
stored in conntrack marks into the ipv4/v6 diffserv field.
|
||||
|
||||
The feature is intended for use and has been found useful for restoring
|
||||
ingress classifications based on egress classifications across links
|
||||
that bleach or otherwise change DSCP, typically home ISP Internet links.
|
||||
Restoring DSCP on ingress on the WAN link allows qdiscs such as CAKE to
|
||||
shape inbound packets according to policies that are easier to indicate
|
||||
on egress.
|
||||
|
||||
Ingress classification is traditionally a challenging task since
|
||||
iptables rules haven't yet run and tc filter/eBPF programs are pre-NAT
|
||||
lookups, hence are unable to see internal IPv4 addresses as used on the
|
||||
typical home masquerading gateway.
|
||||
|
||||
ctinfo understands the following parameters:
|
||||
|
||||
dscp dscpmask[/statemask]
|
||||
|
||||
dscpmask - a 32 bit mask of at least 6 contiguous bits and indicates
|
||||
where ctinfo will find the DSCP bits stored in the conntrack mark.
|
||||
|
||||
statemask - a 32 bit mask of (usually) 1 bit length, outside the area
|
||||
specified by dscpmask. This represents a conditional operation flag
|
||||
whereby the DSCP is only restored if the flag is set. This is useful to
|
||||
implement a 'one shot' iptables based classification where the
|
||||
'complicated' iptables rules are only run once to classify the
|
||||
connection on initial (egress) packet and subsequent packets are all
|
||||
marked/restored with the same DSCP. A mask of zero disables the
|
||||
conditional behaviour ie. the conntrack mark DSCP bits are always
|
||||
restored to the ip diffserv field (assuming the conntrack entry is found
|
||||
& the skb is an ipv4/ipv6 type)
|
||||
|
||||
optional parameters:
|
||||
|
||||
zone - conntrack zone
|
||||
|
||||
control - action related control (reclassify | pipe | drop | continue |
|
||||
ok | goto chain <CHAIN_INDEX>)
|
||||
|
||||
e.g. dscp 0xfc000000/0x01000000
|
||||
|
||||
|----0xFC----conntrack mark----000000---|
|
||||
| Bits 31-26 | bit 25 | bit24 |~~~ Bit 0|
|
||||
| DSCP | unused | flag |unused |
|
||||
|-----------------------0x01---000000---|
|
||||
| |
|
||||
| |
|
||||
---| Conditional flag
|
||||
v only restore if set
|
||||
|-ip diffserv-|
|
||||
| 6 bits |
|
||||
|-------------|
|
||||
|
||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
---
|
||||
include/net/tc_act/tc_ctinfo.h | 28 ++
|
||||
include/uapi/linux/pkt_cls.h | 3 +-
|
||||
include/uapi/linux/tc_act/tc_ctinfo.h | 34 ++
|
||||
net/sched/Kconfig | 17 +
|
||||
net/sched/Makefile | 1 +
|
||||
net/sched/act_ctinfo.c | 395 ++++++++++++++++++++++
|
||||
tools/testing/selftests/tc-testing/config | 1 +
|
||||
7 files changed, 478 insertions(+), 1 deletion(-)
|
||||
create mode 100644 include/net/tc_act/tc_ctinfo.h
|
||||
create mode 100644 include/uapi/linux/tc_act/tc_ctinfo.h
|
||||
create mode 100644 net/sched/act_ctinfo.c
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/net/tc_act/tc_ctinfo.h
|
||||
@@ -0,0 +1,28 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+#ifndef __NET_TC_CTINFO_H
|
||||
+#define __NET_TC_CTINFO_H
|
||||
+
|
||||
+#include <net/act_api.h>
|
||||
+
|
||||
+struct tcf_ctinfo_params {
|
||||
+ struct rcu_head rcu;
|
||||
+ struct net *net;
|
||||
+ u32 dscpmask;
|
||||
+ u32 dscpstatemask;
|
||||
+ u32 cpmarkmask;
|
||||
+ u16 zone;
|
||||
+ u8 mode;
|
||||
+ u8 dscpmaskshift;
|
||||
+};
|
||||
+
|
||||
+struct tcf_ctinfo {
|
||||
+ struct tc_action common;
|
||||
+ struct tcf_ctinfo_params __rcu *params;
|
||||
+ u64 stats_dscp_set;
|
||||
+ u64 stats_dscp_error;
|
||||
+ u64 stats_cpmark_set;
|
||||
+};
|
||||
+
|
||||
+#define to_ctinfo(a) ((struct tcf_ctinfo *)a)
|
||||
+
|
||||
+#endif /* __NET_TC_CTINFO_H */
|
||||
--- a/include/uapi/linux/pkt_cls.h
|
||||
+++ b/include/uapi/linux/pkt_cls.h
|
||||
@@ -68,7 +68,8 @@ enum {
|
||||
TCA_ID_UNSPEC=0,
|
||||
TCA_ID_POLICE=1,
|
||||
/* other actions go here */
|
||||
- __TCA_ID_MAX=255
|
||||
+ TCA_ID_CTINFO,
|
||||
+ __TCA_ID_MAX = 255
|
||||
};
|
||||
|
||||
#define TCA_ID_MAX __TCA_ID_MAX
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/tc_act/tc_ctinfo.h
|
||||
@@ -0,0 +1,34 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
+#ifndef __UAPI_TC_CTINFO_H
|
||||
+#define __UAPI_TC_CTINFO_H
|
||||
+
|
||||
+#include <linux/types.h>
|
||||
+#include <linux/pkt_cls.h>
|
||||
+
|
||||
+struct tc_ctinfo {
|
||||
+ tc_gen;
|
||||
+};
|
||||
+
|
||||
+enum {
|
||||
+ TCA_CTINFO_UNSPEC,
|
||||
+ TCA_CTINFO_PAD,
|
||||
+ TCA_CTINFO_TM,
|
||||
+ TCA_CTINFO_ACT,
|
||||
+ TCA_CTINFO_ZONE,
|
||||
+ TCA_CTINFO_PARMS_DSCP_MASK,
|
||||
+ TCA_CTINFO_PARMS_DSCP_STATEMASK,
|
||||
+ TCA_CTINFO_PARMS_CPMARK_MASK,
|
||||
+ TCA_CTINFO_STATS_DSCP_SET,
|
||||
+ TCA_CTINFO_STATS_DSCP_ERROR,
|
||||
+ TCA_CTINFO_STATS_CPMARK_SET,
|
||||
+ __TCA_CTINFO_MAX
|
||||
+};
|
||||
+
|
||||
+#define TCA_CTINFO_MAX (__TCA_CTINFO_MAX - 1)
|
||||
+
|
||||
+enum {
|
||||
+ CTINFO_MODE_DSCP = BIT(0),
|
||||
+ CTINFO_MODE_CPMARK = BIT(1)
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -866,6 +866,23 @@ config NET_ACT_CONNMARK
|
||||
To compile this code as a module, choose M here: the
|
||||
module will be called act_connmark.
|
||||
|
||||
+config NET_ACT_CTINFO
|
||||
+ tristate "Netfilter Connection Mark Actions"
|
||||
+ depends on NET_CLS_ACT && NETFILTER && IP_NF_IPTABLES
|
||||
+ depends on NF_CONNTRACK && NF_CONNTRACK_MARK
|
||||
+ help
|
||||
+ Say Y here to allow transfer of a connmark stored information.
|
||||
+ Current actions transfer connmark stored DSCP into
|
||||
+ ipv4/v6 diffserv and/or to transfer connmark to packet
|
||||
+ mark. Both are useful for restoring egress based marks
|
||||
+ back onto ingress connections for qdisc priority mapping
|
||||
+ purposes.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+ To compile this code as a module, choose M here: the
|
||||
+ module will be called act_ctinfo.
|
||||
+
|
||||
config NET_ACT_SKBMOD
|
||||
tristate "skb data modification action"
|
||||
depends on NET_CLS_ACT
|
||||
--- a/net/sched/Makefile
|
||||
+++ b/net/sched/Makefile
|
||||
@@ -21,6 +21,7 @@ obj-$(CONFIG_NET_ACT_CSUM) += act_csum.o
|
||||
obj-$(CONFIG_NET_ACT_VLAN) += act_vlan.o
|
||||
obj-$(CONFIG_NET_ACT_BPF) += act_bpf.o
|
||||
obj-$(CONFIG_NET_ACT_CONNMARK) += act_connmark.o
|
||||
+obj-$(CONFIG_NET_ACT_CTINFO) += act_ctinfo.o
|
||||
obj-$(CONFIG_NET_ACT_SKBMOD) += act_skbmod.o
|
||||
obj-$(CONFIG_NET_ACT_IFE) += act_ife.o
|
||||
obj-$(CONFIG_NET_IFE_SKBMARK) += act_meta_mark.o
|
||||
--- /dev/null
|
||||
+++ b/net/sched/act_ctinfo.c
|
||||
@@ -0,0 +1,395 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+/* net/sched/act_ctinfo.c netfilter ctinfo connmark actions
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/skbuff.h>
|
||||
+#include <linux/rtnetlink.h>
|
||||
+#include <linux/pkt_cls.h>
|
||||
+#include <linux/ip.h>
|
||||
+#include <linux/ipv6.h>
|
||||
+#include <net/netlink.h>
|
||||
+#include <net/pkt_sched.h>
|
||||
+#include <net/act_api.h>
|
||||
+#include <net/pkt_cls.h>
|
||||
+#include <uapi/linux/tc_act/tc_ctinfo.h>
|
||||
+#include <net/tc_act/tc_ctinfo.h>
|
||||
+
|
||||
+#include <net/netfilter/nf_conntrack.h>
|
||||
+#include <net/netfilter/nf_conntrack_core.h>
|
||||
+#include <net/netfilter/nf_conntrack_ecache.h>
|
||||
+#include <net/netfilter/nf_conntrack_zones.h>
|
||||
+
|
||||
+static struct tc_action_ops act_ctinfo_ops;
|
||||
+static unsigned int ctinfo_net_id;
|
||||
+
|
||||
+static void tcf_ctinfo_dscp_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
|
||||
+ struct tcf_ctinfo_params *cp,
|
||||
+ struct sk_buff *skb, int wlen, int proto)
|
||||
+{
|
||||
+ u8 dscp, newdscp;
|
||||
+
|
||||
+ newdscp = (((ct->mark & cp->dscpmask) >> cp->dscpmaskshift) << 2) &
|
||||
+ ~INET_ECN_MASK;
|
||||
+
|
||||
+ switch (proto) {
|
||||
+ case NFPROTO_IPV4:
|
||||
+ dscp = ipv4_get_dsfield(ip_hdr(skb)) & ~INET_ECN_MASK;
|
||||
+ if (dscp != newdscp) {
|
||||
+ if (likely(!skb_try_make_writable(skb, wlen))) {
|
||||
+ ipv4_change_dsfield(ip_hdr(skb),
|
||||
+ INET_ECN_MASK,
|
||||
+ newdscp);
|
||||
+ ca->stats_dscp_set++;
|
||||
+ } else {
|
||||
+ ca->stats_dscp_error++;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case NFPROTO_IPV6:
|
||||
+ dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & ~INET_ECN_MASK;
|
||||
+ if (dscp != newdscp) {
|
||||
+ if (likely(!skb_try_make_writable(skb, wlen))) {
|
||||
+ ipv6_change_dsfield(ipv6_hdr(skb),
|
||||
+ INET_ECN_MASK,
|
||||
+ newdscp);
|
||||
+ ca->stats_dscp_set++;
|
||||
+ } else {
|
||||
+ ca->stats_dscp_error++;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void tcf_ctinfo_cpmark_set(struct nf_conn *ct, struct tcf_ctinfo *ca,
|
||||
+ struct tcf_ctinfo_params *cp,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ ca->stats_cpmark_set++;
|
||||
+ skb->mark = ct->mark & cp->cpmarkmask;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a,
|
||||
+ struct tcf_result *res)
|
||||
+{
|
||||
+ const struct nf_conntrack_tuple_hash *thash = NULL;
|
||||
+ struct tcf_ctinfo *ca = to_ctinfo(a);
|
||||
+ struct nf_conntrack_tuple tuple;
|
||||
+ struct nf_conntrack_zone zone;
|
||||
+ enum ip_conntrack_info ctinfo;
|
||||
+ struct tcf_ctinfo_params *cp;
|
||||
+ struct nf_conn *ct;
|
||||
+ int proto, wlen;
|
||||
+ int action;
|
||||
+
|
||||
+ cp = rcu_dereference_bh(ca->params);
|
||||
+
|
||||
+ tcf_lastuse_update(&ca->tcf_tm);
|
||||
+ bstats_update(&ca->tcf_bstats, skb);
|
||||
+ action = READ_ONCE(ca->tcf_action);
|
||||
+
|
||||
+ wlen = skb_network_offset(skb);
|
||||
+ if (tc_skb_protocol(skb) == htons(ETH_P_IP)) {
|
||||
+ wlen += sizeof(struct iphdr);
|
||||
+ if (!pskb_may_pull(skb, wlen))
|
||||
+ goto out;
|
||||
+
|
||||
+ proto = NFPROTO_IPV4;
|
||||
+ } else if (tc_skb_protocol(skb) == htons(ETH_P_IPV6)) {
|
||||
+ wlen += sizeof(struct ipv6hdr);
|
||||
+ if (!pskb_may_pull(skb, wlen))
|
||||
+ goto out;
|
||||
+
|
||||
+ proto = NFPROTO_IPV6;
|
||||
+ } else {
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ct = nf_ct_get(skb, &ctinfo);
|
||||
+ if (!ct) { /* look harder, usually ingress */
|
||||
+ if (!nf_ct_get_tuplepr(skb, skb_network_offset(skb),
|
||||
+ proto, cp->net, &tuple))
|
||||
+ goto out;
|
||||
+ zone.id = cp->zone;
|
||||
+ zone.dir = NF_CT_DEFAULT_ZONE_DIR;
|
||||
+
|
||||
+ thash = nf_conntrack_find_get(cp->net, &zone, &tuple);
|
||||
+ if (!thash)
|
||||
+ goto out;
|
||||
+
|
||||
+ ct = nf_ct_tuplehash_to_ctrack(thash);
|
||||
+ }
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_DSCP)
|
||||
+ if (!cp->dscpstatemask || (ct->mark & cp->dscpstatemask))
|
||||
+ tcf_ctinfo_dscp_set(ct, ca, cp, skb, wlen, proto);
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_CPMARK)
|
||||
+ tcf_ctinfo_cpmark_set(ct, ca, cp, skb);
|
||||
+
|
||||
+ if (thash)
|
||||
+ nf_ct_put(ct);
|
||||
+out:
|
||||
+ return action;
|
||||
+}
|
||||
+
|
||||
+static const struct nla_policy ctinfo_policy[TCA_CTINFO_MAX + 1] = {
|
||||
+ [TCA_CTINFO_ACT] = { .len = sizeof(struct
|
||||
+ tc_ctinfo) },
|
||||
+ [TCA_CTINFO_ZONE] = { .type = NLA_U16 },
|
||||
+ [TCA_CTINFO_PARMS_DSCP_MASK] = { .type = NLA_U32 },
|
||||
+ [TCA_CTINFO_PARMS_DSCP_STATEMASK] = { .type = NLA_U32 },
|
||||
+ [TCA_CTINFO_PARMS_CPMARK_MASK] = { .type = NLA_U32 },
|
||||
+};
|
||||
+
|
||||
+static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,
|
||||
+ struct nlattr *est, struct tc_action **a,
|
||||
+ int ovr, int bind, bool rtnl_held,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+ struct nlattr *tb[TCA_CTINFO_MAX + 1];
|
||||
+ struct tcf_ctinfo_params *cp_new;
|
||||
+/* struct tcf_chain *goto_ch = NULL; */
|
||||
+ u32 dscpmask = 0, dscpstatemask;
|
||||
+ struct tc_ctinfo *actparm;
|
||||
+ struct tcf_ctinfo *ci;
|
||||
+ u8 dscpmaskshift;
|
||||
+ int ret = 0, err;
|
||||
+
|
||||
+ if (!nla)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, NULL);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ if (!tb[TCA_CTINFO_ACT])
|
||||
+ return -EINVAL;
|
||||
+ actparm = nla_data(tb[TCA_CTINFO_ACT]);
|
||||
+
|
||||
+ /* do some basic validation here before dynamically allocating things */
|
||||
+ /* that we would otherwise have to clean up. */
|
||||
+ if (tb[TCA_CTINFO_PARMS_DSCP_MASK]) {
|
||||
+ dscpmask = nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_MASK]);
|
||||
+ /* need contiguous 6 bit mask */
|
||||
+ dscpmaskshift = dscpmask ? __ffs(dscpmask) : 0;
|
||||
+ if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f)
|
||||
+ return -EINVAL;
|
||||
+ dscpstatemask = tb[TCA_CTINFO_PARMS_DSCP_STATEMASK] ?
|
||||
+ nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_STATEMASK]) : 0;
|
||||
+ /* mask & statemask must not overlap */
|
||||
+ if (dscpmask & dscpstatemask)
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ /* done the validation:now to the actual action allocation */
|
||||
+ err = tcf_idr_check_alloc(tn, &actparm->index, a, bind);
|
||||
+ if (!err) {
|
||||
+ ret = tcf_idr_create(tn, actparm->index, est, a,
|
||||
+ &act_ctinfo_ops, bind, false);
|
||||
+ if (ret) {
|
||||
+ tcf_idr_cleanup(tn, actparm->index);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ ret = ACT_P_CREATED;
|
||||
+ } else if (err > 0) {
|
||||
+ if (bind) /* don't override defaults */
|
||||
+ return 0;
|
||||
+ if (!ovr) {
|
||||
+ tcf_idr_release(*a, bind);
|
||||
+ return -EEXIST;
|
||||
+ }
|
||||
+ } else {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+/* err = tcf_action_check_ctrlact(actparm->action, tp, &goto_ch, extack);
|
||||
+ if (err < 0)
|
||||
+ goto release_idr;
|
||||
+ */
|
||||
+
|
||||
+ ci = to_ctinfo(*a);
|
||||
+
|
||||
+ cp_new = kzalloc(sizeof(*cp_new), GFP_KERNEL);
|
||||
+ if (unlikely(!cp_new)) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto put_chain;
|
||||
+ }
|
||||
+
|
||||
+ cp_new->net = net;
|
||||
+ cp_new->zone = tb[TCA_CTINFO_ZONE] ?
|
||||
+ nla_get_u16(tb[TCA_CTINFO_ZONE]) : 0;
|
||||
+ if (dscpmask) {
|
||||
+ cp_new->dscpmask = dscpmask;
|
||||
+ cp_new->dscpmaskshift = dscpmaskshift;
|
||||
+ cp_new->dscpstatemask = dscpstatemask;
|
||||
+ cp_new->mode |= CTINFO_MODE_DSCP;
|
||||
+ }
|
||||
+
|
||||
+ if (tb[TCA_CTINFO_PARMS_CPMARK_MASK]) {
|
||||
+ cp_new->cpmarkmask =
|
||||
+ nla_get_u32(tb[TCA_CTINFO_PARMS_CPMARK_MASK]);
|
||||
+ cp_new->mode |= CTINFO_MODE_CPMARK;
|
||||
+ }
|
||||
+
|
||||
+ spin_lock_bh(&ci->tcf_lock);
|
||||
+/* goto_ch = tcf_action_set_ctrlact(*a, actparm->action, goto_ch); */
|
||||
+ ci->tcf_action = actparm->action;
|
||||
+ rcu_swap_protected(ci->params, cp_new,
|
||||
+ lockdep_is_held(&ci->tcf_lock));
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+
|
||||
+/* if (goto_ch)
|
||||
+ tcf_chain_put_by_act(goto_ch); */
|
||||
+ if (cp_new)
|
||||
+ kfree_rcu(cp_new, rcu);
|
||||
+
|
||||
+ if (ret == ACT_P_CREATED)
|
||||
+ tcf_idr_insert(tn, *a);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+put_chain:
|
||||
+/* if (goto_ch)
|
||||
+ tcf_chain_put_by_act(goto_ch);
|
||||
+release_idr: */
|
||||
+ tcf_idr_release(*a, bind);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_dump(struct sk_buff *skb, struct tc_action *a,
|
||||
+ int bind, int ref)
|
||||
+{
|
||||
+ struct tcf_ctinfo *ci = to_ctinfo(a);
|
||||
+ struct tc_ctinfo opt = {
|
||||
+ .index = ci->tcf_index,
|
||||
+ .refcnt = refcount_read(&ci->tcf_refcnt) - ref,
|
||||
+ .bindcnt = atomic_read(&ci->tcf_bindcnt) - bind,
|
||||
+ };
|
||||
+ unsigned char *b = skb_tail_pointer(skb);
|
||||
+ struct tcf_ctinfo_params *cp;
|
||||
+ struct tcf_t t;
|
||||
+
|
||||
+ spin_lock_bh(&ci->tcf_lock);
|
||||
+ cp = rcu_dereference_protected(ci->params,
|
||||
+ lockdep_is_held(&ci->tcf_lock));
|
||||
+
|
||||
+ tcf_tm_dump(&t, &ci->tcf_tm);
|
||||
+ if (nla_put_64bit(skb, TCA_CTINFO_TM, sizeof(t), &t, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ opt.action = ci->tcf_action;
|
||||
+ if (nla_put(skb, TCA_CTINFO_ACT, sizeof(opt), &opt))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u16(skb, TCA_CTINFO_ZONE, cp->zone))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_DSCP) {
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_MASK,
|
||||
+ cp->dscpmask))
|
||||
+ goto nla_put_failure;
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_DSCP_STATEMASK,
|
||||
+ cp->dscpstatemask))
|
||||
+ goto nla_put_failure;
|
||||
+ }
|
||||
+
|
||||
+ if (cp->mode & CTINFO_MODE_CPMARK) {
|
||||
+ if (nla_put_u32(skb, TCA_CTINFO_PARMS_CPMARK_MASK,
|
||||
+ cp->cpmarkmask))
|
||||
+ goto nla_put_failure;
|
||||
+ }
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_SET,
|
||||
+ ci->stats_dscp_set, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_DSCP_ERROR,
|
||||
+ ci->stats_dscp_error, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ if (nla_put_u64_64bit(skb, TCA_CTINFO_STATS_CPMARK_SET,
|
||||
+ ci->stats_cpmark_set, TCA_CTINFO_PAD))
|
||||
+ goto nla_put_failure;
|
||||
+
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+ return skb->len;
|
||||
+
|
||||
+nla_put_failure:
|
||||
+ spin_unlock_bh(&ci->tcf_lock);
|
||||
+ nlmsg_trim(skb, b);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_walker(struct net *net, struct sk_buff *skb,
|
||||
+ struct netlink_callback *cb, int type,
|
||||
+ const struct tc_action_ops *ops,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tcf_generic_walker(tn, skb, cb, type, ops, extack);
|
||||
+}
|
||||
+
|
||||
+static int tcf_ctinfo_search(struct net *net, struct tc_action **a, u32 index,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tcf_idr_search(tn, a, index);
|
||||
+}
|
||||
+
|
||||
+static struct tc_action_ops act_ctinfo_ops = {
|
||||
+ .kind = "ctinfo",
|
||||
+ .type = TCA_ID_CTINFO,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .act = tcf_ctinfo_act,
|
||||
+ .dump = tcf_ctinfo_dump,
|
||||
+ .init = tcf_ctinfo_init,
|
||||
+ .walk = tcf_ctinfo_walker,
|
||||
+ .lookup = tcf_ctinfo_search,
|
||||
+ .size = sizeof(struct tcf_ctinfo),
|
||||
+};
|
||||
+
|
||||
+static __net_init int ctinfo_init_net(struct net *net)
|
||||
+{
|
||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||
+
|
||||
+ return tc_action_net_init(tn, &act_ctinfo_ops);
|
||||
+}
|
||||
+
|
||||
+static void __net_exit ctinfo_exit_net(struct list_head *net_list)
|
||||
+{
|
||||
+ tc_action_net_exit(net_list, ctinfo_net_id);
|
||||
+}
|
||||
+
|
||||
+static struct pernet_operations ctinfo_net_ops = {
|
||||
+ .init = ctinfo_init_net,
|
||||
+ .exit_batch = ctinfo_exit_net,
|
||||
+ .id = &ctinfo_net_id,
|
||||
+ .size = sizeof(struct tc_action_net),
|
||||
+};
|
||||
+
|
||||
+static int __init ctinfo_init_module(void)
|
||||
+{
|
||||
+ return tcf_register_action(&act_ctinfo_ops, &ctinfo_net_ops);
|
||||
+}
|
||||
+
|
||||
+static void __exit ctinfo_cleanup_module(void)
|
||||
+{
|
||||
+ tcf_unregister_action(&act_ctinfo_ops, &ctinfo_net_ops);
|
||||
+}
|
||||
+
|
||||
+module_init(ctinfo_init_module);
|
||||
+module_exit(ctinfo_cleanup_module);
|
||||
+MODULE_AUTHOR("Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>");
|
||||
+MODULE_DESCRIPTION("Connection tracking mark actions");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--- a/tools/testing/selftests/tc-testing/config
|
||||
+++ b/tools/testing/selftests/tc-testing/config
|
||||
@@ -37,6 +37,7 @@ CONFIG_NET_ACT_SKBEDIT=m
|
||||
CONFIG_NET_ACT_CSUM=m
|
||||
CONFIG_NET_ACT_VLAN=m
|
||||
CONFIG_NET_ACT_BPF=m
|
||||
+CONFIG_NET_ACT_CONNDSCP=m
|
||||
CONFIG_NET_ACT_CONNMARK=m
|
||||
CONFIG_NET_ACT_SKBMOD=m
|
||||
CONFIG_NET_ACT_IFE=m
|
||||
@ -60,7 +60,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
nval = cmpxchg(&tp->tsq_flags, oval, nval);
|
||||
if (nval != oval)
|
||||
continue;
|
||||
@@ -2222,6 +2222,8 @@ static bool tcp_write_xmit(struct sock *
|
||||
@@ -2226,6 +2226,8 @@ static bool tcp_write_xmit(struct sock *
|
||||
unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
|
||||
break;
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -2127,6 +2127,15 @@ static bool tcp_small_queue_check(struct
|
||||
@@ -2131,6 +2131,15 @@ static bool tcp_small_queue_check(struct
|
||||
limit <<= factor;
|
||||
|
||||
if (atomic_read(&sk->sk_wmem_alloc) > limit) {
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -1960,26 +1960,26 @@ static bool tcp_can_coalesce_send_queue_
|
||||
@@ -1964,26 +1964,26 @@ static bool tcp_can_coalesce_send_queue_
|
||||
*/
|
||||
static int tcp_mtu_probe(struct sock *sk)
|
||||
{
|
||||
|
||||
@ -114,7 +114,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if (nval != oval)
|
||||
continue;
|
||||
|
||||
@@ -2136,7 +2136,7 @@ static bool tcp_small_queue_check(struct
|
||||
@@ -2140,7 +2140,7 @@ static bool tcp_small_queue_check(struct
|
||||
skb->prev == sk->sk_write_queue.next)
|
||||
return false;
|
||||
|
||||
@ -123,7 +123,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* It is possible TX completion already happened
|
||||
* before we set TSQ_THROTTLED, so we must
|
||||
* test again the condition.
|
||||
@@ -2234,8 +2234,8 @@ static bool tcp_write_xmit(struct sock *
|
||||
@@ -2238,8 +2238,8 @@ static bool tcp_write_xmit(struct sock *
|
||||
unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
|
||||
break;
|
||||
|
||||
@ -134,7 +134,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
if (tcp_small_queue_check(sk, skb, 0))
|
||||
break;
|
||||
|
||||
@@ -3546,8 +3546,6 @@ void __tcp_send_ack(struct sock *sk, u32
|
||||
@@ -3550,8 +3550,6 @@ void __tcp_send_ack(struct sock *sk, u32
|
||||
/* We do not want pure acks influencing TCP Small Queues or fq/pacing
|
||||
* too much.
|
||||
* SKB_TRUESIZE(max(1 .. 66, MAX_TCP_HEADER)) is unfortunately ~784
|
||||
@ -145,7 +145,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/ipv4/tcp_timer.c
|
||||
+++ b/net/ipv4/tcp_timer.c
|
||||
@@ -326,7 +326,7 @@ static void tcp_delack_timer(unsigned lo
|
||||
@@ -327,7 +327,7 @@ static void tcp_delack_timer(unsigned lo
|
||||
inet_csk(sk)->icsk_ack.blocked = 1;
|
||||
__NET_INC_STATS(sock_net(sk), LINUX_MIB_DELAYEDACKLOCKED);
|
||||
/* deleguate our work to tcp_release_cb() */
|
||||
@ -154,7 +154,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
sock_hold(sk);
|
||||
}
|
||||
bh_unlock_sock(sk);
|
||||
@@ -609,7 +609,7 @@ static void tcp_write_timer(unsigned lon
|
||||
@@ -610,7 +610,7 @@ static void tcp_write_timer(unsigned lon
|
||||
tcp_write_timer_handler(sk);
|
||||
} else {
|
||||
/* delegate our work to tcp_release_cb() */
|
||||
|
||||
@ -65,7 +65,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
|
||||
* Before updating sk_refcnt, we must commit prior changes to memory
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -1593,7 +1593,7 @@ u32 tcp_tso_autosize(const struct sock *
|
||||
@@ -1597,7 +1597,7 @@ u32 tcp_tso_autosize(const struct sock *
|
||||
{
|
||||
u32 bytes, segs;
|
||||
|
||||
@ -74,7 +74,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
|
||||
sk->sk_gso_max_size - 1 - MAX_TCP_HEADER);
|
||||
|
||||
/* Goal is to send at least one packet per ms,
|
||||
@@ -2123,7 +2123,7 @@ static bool tcp_small_queue_check(struct
|
||||
@@ -2127,7 +2127,7 @@ static bool tcp_small_queue_check(struct
|
||||
{
|
||||
unsigned int limit;
|
||||
|
||||
|
||||
@ -399,7 +399,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/* bnx2x_has_rx_work() reads the status block,
|
||||
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
@@ -1797,7 +1797,7 @@ static int bnxt_poll_nitroa0(struct napi
|
||||
@@ -1799,7 +1799,7 @@ static int bnxt_poll_nitroa0(struct napi
|
||||
}
|
||||
|
||||
if (!bnxt_has_work(bp, cpr) && rx_pkts < budget) {
|
||||
@ -819,7 +819,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2.c
|
||||
@@ -5406,7 +5406,7 @@ static int mvpp2_poll(struct napi_struct
|
||||
@@ -5404,7 +5404,7 @@ static int mvpp2_poll(struct napi_struct
|
||||
|
||||
if (budget > 0) {
|
||||
cause_rx = 0;
|
||||
|
||||
@ -3289,6 +3289,7 @@ CONFIG_NMI_LOG_BUF_SHIFT=13
|
||||
# CONFIG_NOP_USB_XCEIV is not set
|
||||
# CONFIG_NORTEL_HERMES is not set
|
||||
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
|
||||
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
|
||||
# CONFIG_NOZOMI is not set
|
||||
# CONFIG_NO_BOOTMEM is not set
|
||||
# CONFIG_NO_HZ is not set
|
||||
@ -5665,3 +5666,4 @@ CONFIG_ZONE_DMA=y
|
||||
# CONFIG_ZRAM is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
# CONFIG_ZX_TDM is not set
|
||||
# CONFIG_NET_ACT_CTINFO is not set
|
||||
|
||||
@ -3449,6 +3449,7 @@ CONFIG_NMI_LOG_BUF_SHIFT=13
|
||||
# CONFIG_NOP_USB_XCEIV is not set
|
||||
# CONFIG_NORTEL_HERMES is not set
|
||||
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
|
||||
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
|
||||
# CONFIG_NOZOMI is not set
|
||||
# CONFIG_NO_BOOTMEM is not set
|
||||
# CONFIG_NO_HZ is not set
|
||||
@ -5940,3 +5941,4 @@ CONFIG_ZONE_DMA=y
|
||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
# CONFIG_ZX_TDM is not set
|
||||
# CONFIG_NET_ACT_CTINFO is not set
|
||||
|
||||
@ -5325,3 +5325,4 @@ CONFIG_ZONE_DMA=y
|
||||
# CONFIG_ZPOOL is not set
|
||||
# CONFIG_ZRAM is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
# CONFIG_NET_ACT_CTINFO is not set
|
||||
|
||||
@ -381,7 +381,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/proc.c
|
||||
+++ b/net/ipv4/proc.c
|
||||
@@ -558,6 +558,9 @@ static __net_initdata struct pernet_oper
|
||||
@@ -559,6 +559,9 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
int __init ip_misc_proc_init(void)
|
||||
{
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
/* For layer 4 checksum field offset. */
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/udp.h>
|
||||
@@ -265,6 +266,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
@@ -268,6 +269,7 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
skb->dev = outdev;
|
||||
nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr);
|
||||
skb_dst_set_noref(skb, &rt->dst);
|
||||
@ -60,7 +60,7 @@
|
||||
neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb);
|
||||
|
||||
return NF_STOLEN;
|
||||
@@ -482,6 +484,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
@@ -488,6 +490,7 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
skb->dev = outdev;
|
||||
nexthop = rt6_nexthop(rt, &flow->tuplehash[!dir].tuple.src_v6);
|
||||
skb_dst_set_noref(skb, &rt->dst);
|
||||
|
||||
@ -382,7 +382,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/proc.c
|
||||
+++ b/net/ipv4/proc.c
|
||||
@@ -523,5 +523,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -524,5 +524,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
int __init ip_misc_proc_init(void)
|
||||
{
|
||||
|
||||
@ -22,7 +22,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -401,6 +401,11 @@ KBUILD_CFLAGS_MODULE := -DMODULE
|
||||
KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s)
|
||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||
GCC_PLUGINS_CFLAGS :=
|
||||
|
||||
+ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
|
||||
@ -382,7 +382,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/ipv4/proc.c
|
||||
+++ b/net/ipv4/proc.c
|
||||
@@ -565,6 +565,9 @@ static __net_initdata struct pernet_oper
|
||||
@@ -566,6 +566,9 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
int __init ip_misc_proc_init(void)
|
||||
{
|
||||
|
||||
@ -0,0 +1,110 @@
|
||||
From 852a88f35f4b7e5ebb717fed3c3a3330d5ad4336 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
|
||||
Date: Wed, 10 Apr 2019 16:43:27 +0200
|
||||
Subject: [PATCH v2] MIPS: perf: ath79: Fix perfcount IRQ assignment
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Currently it's not possible to use perf on ath79 due to genirq flags
|
||||
mismatch happening on static virtual IRQ 13 which is used for
|
||||
performance counters hardware IRQ 5.
|
||||
|
||||
On TP-Link Archer C7v5:
|
||||
|
||||
CPU0
|
||||
2: 0 MIPS 2 ath9k
|
||||
4: 318 MIPS 4 19000000.eth
|
||||
7: 55034 MIPS 7 timer
|
||||
8: 1236 MISC 3 ttyS0
|
||||
12: 0 INTC 1 ehci_hcd:usb1
|
||||
13: 0 gpio-ath79 2 keys
|
||||
14: 0 gpio-ath79 5 keys
|
||||
15: 31 AR724X PCI 1 ath10k_pci
|
||||
|
||||
$ perf top
|
||||
genirq: Flags mismatch irq 13. 00014c83 (mips_perf_pmu) vs. 00002003 (keys)
|
||||
|
||||
On TP-Link Archer C7v4:
|
||||
|
||||
CPU0
|
||||
4: 0 MIPS 4 19000000.eth
|
||||
5: 7135 MIPS 5 1a000000.eth
|
||||
7: 98379 MIPS 7 timer
|
||||
8: 30 MISC 3 ttyS0
|
||||
12: 90028 INTC 0 ath9k
|
||||
13: 5520 INTC 1 ehci_hcd:usb1
|
||||
14: 4623 INTC 2 ehci_hcd:usb2
|
||||
15: 32844 AR724X PCI 1 ath10k_pci
|
||||
16: 0 gpio-ath79 16 keys
|
||||
23: 0 gpio-ath79 23 keys
|
||||
|
||||
$ perf top
|
||||
genirq: Flags mismatch irq 13. 00014c80 (mips_perf_pmu) vs. 00000080 (ehci_hcd:usb1)
|
||||
|
||||
This problem is happening, because currently statically assigned virtual
|
||||
IRQ 13 for performance counters is not claimed during the initialization
|
||||
of MIPS PMU during the bootup, so the IRQ subsystem doesn't know, that
|
||||
this interrupt isn't available for further use.
|
||||
|
||||
So this patch fixes the issue by simply booking hardware IRQ 5 for MIPS PMU.
|
||||
|
||||
Tested-by: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
||||
---
|
||||
|
||||
Changes since v1:
|
||||
|
||||
I've incorporated two comments which I've received on IRC from blogic and
|
||||
I've also reworded the commit message to match the changes in v2 of this
|
||||
patch.
|
||||
|
||||
* use actual hardware perfcount IRQ 5 instead of the virtual IRQ 13
|
||||
* dropped the CONFIG_PERF_EVENTS ifdef around irq_create_mapping
|
||||
|
||||
arch/mips/ath79/setup.c | 6 ------
|
||||
drivers/irqchip/irq-ath79-misc.c | 11 +++++++++++
|
||||
2 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -183,12 +183,6 @@ const char *get_system_type(void)
|
||||
return ath79_sys_type;
|
||||
}
|
||||
|
||||
-int get_c0_perfcount_int(void)
|
||||
-{
|
||||
- return ATH79_MISC_IRQ(5);
|
||||
-}
|
||||
-EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
|
||||
-
|
||||
unsigned int get_c0_compare_int(void)
|
||||
{
|
||||
return CP0_LEGACY_COMPARE_IRQ;
|
||||
--- a/drivers/irqchip/irq-ath79-misc.c
|
||||
+++ b/drivers/irqchip/irq-ath79-misc.c
|
||||
@@ -22,6 +22,15 @@
|
||||
#define AR71XX_RESET_REG_MISC_INT_ENABLE 4
|
||||
|
||||
#define ATH79_MISC_IRQ_COUNT 32
|
||||
+#define ATH79_MISC_PERF_IRQ 5
|
||||
+
|
||||
+static int ath79_perfcount_irq;
|
||||
+
|
||||
+int get_c0_perfcount_int(void)
|
||||
+{
|
||||
+ return ath79_perfcount_irq;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
|
||||
|
||||
static void ath79_misc_irq_handler(struct irq_desc *desc)
|
||||
{
|
||||
@@ -113,6 +122,8 @@ static void __init ath79_misc_intc_domai
|
||||
{
|
||||
void __iomem *base = domain->host_data;
|
||||
|
||||
+ ath79_perfcount_irq = irq_create_mapping(domain, ATH79_MISC_PERF_IRQ);
|
||||
+
|
||||
/* Disable and clear all interrupts */
|
||||
__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -6143,7 +6143,7 @@ static void __ref alloc_node_mem_map(str
|
||||
@@ -6145,7 +6145,7 @@ static void __ref alloc_node_mem_map(str
|
||||
mem_map = NODE_DATA(0)->node_mem_map;
|
||||
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
|
||||
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
|
||||
|
||||
@ -1,3 +1,98 @@
|
||||
--- a/arch/arm/kernel/atags.h
|
||||
+++ b/arch/arm/kernel/atags.h
|
||||
@@ -5,7 +5,7 @@ void convert_to_tag_list(struct tag *tag
|
||||
const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer,
|
||||
unsigned int machine_nr);
|
||||
#else
|
||||
-static inline const struct machine_desc *
|
||||
+static inline const struct machine_desc * __init __noreturn
|
||||
setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)
|
||||
{
|
||||
early_print("no ATAGS support: can't continue\n");
|
||||
--- a/arch/arm64/include/asm/cpufeature.h
|
||||
+++ b/arch/arm64/include/asm/cpufeature.h
|
||||
@@ -125,7 +125,7 @@ static inline bool cpu_have_feature(unsi
|
||||
}
|
||||
|
||||
/* System capability check for constant caps */
|
||||
-static inline bool __cpus_have_const_cap(int num)
|
||||
+static __always_inline bool __cpus_have_const_cap(int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
return false;
|
||||
@@ -139,7 +139,7 @@ static inline bool cpus_have_cap(unsigne
|
||||
return test_bit(num, cpu_hwcaps);
|
||||
}
|
||||
|
||||
-static inline bool cpus_have_const_cap(int num)
|
||||
+static __always_inline bool cpus_have_const_cap(int num)
|
||||
{
|
||||
if (static_branch_likely(&arm64_const_caps_ready))
|
||||
return __cpus_have_const_cap(num);
|
||||
--- a/arch/mips/include/asm/bitops.h
|
||||
+++ b/arch/mips/include/asm/bitops.h
|
||||
@@ -462,7 +462,7 @@ static inline void __clear_bit_unlock(un
|
||||
* Return the bit position (0..63) of the most significant 1 bit in a word
|
||||
* Returns -1 if no 1 bit exists
|
||||
*/
|
||||
-static inline unsigned long __fls(unsigned long word)
|
||||
+static __always_inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
int num;
|
||||
|
||||
@@ -528,7 +528,7 @@ static inline unsigned long __fls(unsign
|
||||
* Returns 0..SZLONG-1
|
||||
* Undefined if no bit exists, so code should check against 0 first.
|
||||
*/
|
||||
-static inline unsigned long __ffs(unsigned long word)
|
||||
+static __always_inline unsigned long __ffs(unsigned long word)
|
||||
{
|
||||
return __fls(word & -word);
|
||||
}
|
||||
--- a/arch/mips/kernel/cpu-bugs64.c
|
||||
+++ b/arch/mips/kernel/cpu-bugs64.c
|
||||
@@ -42,8 +42,8 @@ static inline void align_mod(const int a
|
||||
: GCC_IMM_ASM() (align), GCC_IMM_ASM() (mod));
|
||||
}
|
||||
|
||||
-static inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
- const int align, const int mod)
|
||||
+static __always_inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
+ const int align, const int mod)
|
||||
{
|
||||
unsigned long flags;
|
||||
int m1, m2;
|
||||
--- a/arch/powerpc/kernel/prom_init.c
|
||||
+++ b/arch/powerpc/kernel/prom_init.c
|
||||
@@ -474,14 +474,14 @@ static int __init prom_next_node(phandle
|
||||
}
|
||||
}
|
||||
|
||||
-static inline int prom_getprop(phandle node, const char *pname,
|
||||
- void *value, size_t valuelen)
|
||||
+static inline int __init prom_getprop(phandle node, const char *pname,
|
||||
+ void *value, size_t valuelen)
|
||||
{
|
||||
return call_prom("getprop", 4, 1, node, ADDR(pname),
|
||||
(u32)(unsigned long) value, (u32) valuelen);
|
||||
}
|
||||
|
||||
-static inline int prom_getproplen(phandle node, const char *pname)
|
||||
+static inline int __init prom_getproplen(phandle node, const char *pname)
|
||||
{
|
||||
return call_prom("getproplen", 2, 1, node, ADDR(pname));
|
||||
}
|
||||
--- a/arch/s390/include/asm/cpacf.h
|
||||
+++ b/arch/s390/include/asm/cpacf.h
|
||||
@@ -184,7 +184,7 @@ static inline int __cpacf_check_opcode(u
|
||||
}
|
||||
}
|
||||
|
||||
-static inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
+static __always_inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
{
|
||||
if (__cpacf_check_opcode(opcode)) {
|
||||
__cpacf_query(opcode, mask);
|
||||
--- a/arch/x86/Kconfig.debug
|
||||
+++ b/arch/x86/Kconfig.debug
|
||||
@@ -284,20 +284,6 @@ config CPA_DEBUG
|
||||
@ -23,13 +118,13 @@
|
||||
depends on DEBUG_KERNEL
|
||||
--- a/lib/Kconfig.debug
|
||||
+++ b/lib/Kconfig.debug
|
||||
@@ -137,6 +137,20 @@ endmenu # "printk and dmesg options"
|
||||
|
||||
menu "Compile-time checks and compiler options"
|
||||
@@ -305,6 +305,20 @@ config HEADERS_CHECK
|
||||
exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in
|
||||
your build tree), to make sure they're suitable.
|
||||
|
||||
+config OPTIMIZE_INLINING
|
||||
+ bool "Allow gcc to uninline functions marked 'inline'"
|
||||
+ ---help---
|
||||
+ bool "Allow compiler to uninline functions marked 'inline'"
|
||||
+ help
|
||||
+ This option determines if the kernel forces gcc to inline the functions
|
||||
+ developers have marked 'inline'. Doing so takes away freedom from gcc to
|
||||
+ do what it thinks is best, which is desirable for the gcc 3.x series of
|
||||
@ -41,9 +136,9 @@
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
config DEBUG_INFO
|
||||
bool "Compile the kernel with debug info"
|
||||
depends on DEBUG_KERNEL && !COMPILE_TEST
|
||||
config DEBUG_SECTION_MISMATCH
|
||||
bool "Enable full Section mismatch analysis"
|
||||
help
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -296,9 +296,6 @@ config ZONE_DMA32
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
From 8cabf9d8bd67d3f8603a4c1ceedaa629a7212be8 Mon Sep 17 00:00:00 2001
|
||||
From: Pawel Dembicki <paweldembicki@gmail.com>
|
||||
Date: Fri, 24 May 2019 17:56:19 +0200
|
||||
Subject: [PATCH] powerpc: Enable kernel XZ compression option on PPC_85xx
|
||||
|
||||
Enable kernel XZ compression option on PPC_85xx. Tested with
|
||||
simpleImage on TP-Link TL-WDR4900 (Freescale P1014 processor).
|
||||
|
||||
Suggested-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
||||
---
|
||||
arch/powerpc/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/powerpc/Kconfig
|
||||
+++ b/arch/powerpc/Kconfig
|
||||
@@ -199,6 +199,7 @@ config PPC
|
||||
select HAVE_IOREMAP_PROT
|
||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
||||
select HAVE_KERNEL_GZIP
|
||||
+ select HAVE_KERNEL_XZ if PPC_85xx
|
||||
select HAVE_KPROBES
|
||||
select HAVE_KPROBES_ON_FTRACE
|
||||
select HAVE_KRETPROBES
|
||||
@ -0,0 +1,110 @@
|
||||
From 852a88f35f4b7e5ebb717fed3c3a3330d5ad4336 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
|
||||
Date: Wed, 10 Apr 2019 16:43:27 +0200
|
||||
Subject: [PATCH v2] MIPS: perf: ath79: Fix perfcount IRQ assignment
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Currently it's not possible to use perf on ath79 due to genirq flags
|
||||
mismatch happening on static virtual IRQ 13 which is used for
|
||||
performance counters hardware IRQ 5.
|
||||
|
||||
On TP-Link Archer C7v5:
|
||||
|
||||
CPU0
|
||||
2: 0 MIPS 2 ath9k
|
||||
4: 318 MIPS 4 19000000.eth
|
||||
7: 55034 MIPS 7 timer
|
||||
8: 1236 MISC 3 ttyS0
|
||||
12: 0 INTC 1 ehci_hcd:usb1
|
||||
13: 0 gpio-ath79 2 keys
|
||||
14: 0 gpio-ath79 5 keys
|
||||
15: 31 AR724X PCI 1 ath10k_pci
|
||||
|
||||
$ perf top
|
||||
genirq: Flags mismatch irq 13. 00014c83 (mips_perf_pmu) vs. 00002003 (keys)
|
||||
|
||||
On TP-Link Archer C7v4:
|
||||
|
||||
CPU0
|
||||
4: 0 MIPS 4 19000000.eth
|
||||
5: 7135 MIPS 5 1a000000.eth
|
||||
7: 98379 MIPS 7 timer
|
||||
8: 30 MISC 3 ttyS0
|
||||
12: 90028 INTC 0 ath9k
|
||||
13: 5520 INTC 1 ehci_hcd:usb1
|
||||
14: 4623 INTC 2 ehci_hcd:usb2
|
||||
15: 32844 AR724X PCI 1 ath10k_pci
|
||||
16: 0 gpio-ath79 16 keys
|
||||
23: 0 gpio-ath79 23 keys
|
||||
|
||||
$ perf top
|
||||
genirq: Flags mismatch irq 13. 00014c80 (mips_perf_pmu) vs. 00000080 (ehci_hcd:usb1)
|
||||
|
||||
This problem is happening, because currently statically assigned virtual
|
||||
IRQ 13 for performance counters is not claimed during the initialization
|
||||
of MIPS PMU during the bootup, so the IRQ subsystem doesn't know, that
|
||||
this interrupt isn't available for further use.
|
||||
|
||||
So this patch fixes the issue by simply booking hardware IRQ 5 for MIPS PMU.
|
||||
|
||||
Tested-by: Kevin 'ldir' Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
||||
---
|
||||
|
||||
Changes since v1:
|
||||
|
||||
I've incorporated two comments which I've received on IRC from blogic and
|
||||
I've also reworded the commit message to match the changes in v2 of this
|
||||
patch.
|
||||
|
||||
* use actual hardware perfcount IRQ 5 instead of the virtual IRQ 13
|
||||
* dropped the CONFIG_PERF_EVENTS ifdef around irq_create_mapping
|
||||
|
||||
arch/mips/ath79/setup.c | 6 ------
|
||||
drivers/irqchip/irq-ath79-misc.c | 11 +++++++++++
|
||||
2 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -211,12 +211,6 @@ const char *get_system_type(void)
|
||||
return ath79_sys_type;
|
||||
}
|
||||
|
||||
-int get_c0_perfcount_int(void)
|
||||
-{
|
||||
- return ATH79_MISC_IRQ(5);
|
||||
-}
|
||||
-EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
|
||||
-
|
||||
unsigned int get_c0_compare_int(void)
|
||||
{
|
||||
return CP0_LEGACY_COMPARE_IRQ;
|
||||
--- a/drivers/irqchip/irq-ath79-misc.c
|
||||
+++ b/drivers/irqchip/irq-ath79-misc.c
|
||||
@@ -22,6 +22,15 @@
|
||||
#define AR71XX_RESET_REG_MISC_INT_ENABLE 4
|
||||
|
||||
#define ATH79_MISC_IRQ_COUNT 32
|
||||
+#define ATH79_MISC_PERF_IRQ 5
|
||||
+
|
||||
+static int ath79_perfcount_irq;
|
||||
+
|
||||
+int get_c0_perfcount_int(void)
|
||||
+{
|
||||
+ return ath79_perfcount_irq;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
|
||||
|
||||
static void ath79_misc_irq_handler(struct irq_desc *desc)
|
||||
{
|
||||
@@ -113,6 +122,8 @@ static void __init ath79_misc_intc_domai
|
||||
{
|
||||
void __iomem *base = domain->host_data;
|
||||
|
||||
+ ath79_perfcount_irq = irq_create_mapping(domain, ATH79_MISC_PERF_IRQ);
|
||||
+
|
||||
/* Disable and clear all interrupts */
|
||||
__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
|
||||
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -6393,7 +6393,7 @@ static void __ref alloc_node_mem_map(str
|
||||
@@ -6395,7 +6395,7 @@ static void __ref alloc_node_mem_map(str
|
||||
mem_map = NODE_DATA(0)->node_mem_map;
|
||||
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
|
||||
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
|
||||
|
||||
@ -1,3 +1,147 @@
|
||||
--- a/arch/arm/kernel/atags.h
|
||||
+++ b/arch/arm/kernel/atags.h
|
||||
@@ -5,7 +5,7 @@ void convert_to_tag_list(struct tag *tag
|
||||
const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer,
|
||||
unsigned int machine_nr);
|
||||
#else
|
||||
-static inline const struct machine_desc *
|
||||
+static inline const struct machine_desc * __init __noreturn
|
||||
setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)
|
||||
{
|
||||
early_print("no ATAGS support: can't continue\n");
|
||||
--- a/arch/arm64/include/asm/cpufeature.h
|
||||
+++ b/arch/arm64/include/asm/cpufeature.h
|
||||
@@ -365,7 +365,7 @@ static inline bool cpu_have_feature(unsi
|
||||
}
|
||||
|
||||
/* System capability check for constant caps */
|
||||
-static inline bool __cpus_have_const_cap(int num)
|
||||
+static __always_inline bool __cpus_have_const_cap(int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
return false;
|
||||
@@ -379,7 +379,7 @@ static inline bool cpus_have_cap(unsigne
|
||||
return test_bit(num, cpu_hwcaps);
|
||||
}
|
||||
|
||||
-static inline bool cpus_have_const_cap(int num)
|
||||
+static __always_inline bool cpus_have_const_cap(int num)
|
||||
{
|
||||
if (static_branch_likely(&arm64_const_caps_ready))
|
||||
return __cpus_have_const_cap(num);
|
||||
--- a/arch/mips/include/asm/bitops.h
|
||||
+++ b/arch/mips/include/asm/bitops.h
|
||||
@@ -463,7 +463,7 @@ static inline void __clear_bit_unlock(un
|
||||
* Return the bit position (0..63) of the most significant 1 bit in a word
|
||||
* Returns -1 if no 1 bit exists
|
||||
*/
|
||||
-static inline unsigned long __fls(unsigned long word)
|
||||
+static __always_inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
int num;
|
||||
|
||||
@@ -529,7 +529,7 @@ static inline unsigned long __fls(unsign
|
||||
* Returns 0..SZLONG-1
|
||||
* Undefined if no bit exists, so code should check against 0 first.
|
||||
*/
|
||||
-static inline unsigned long __ffs(unsigned long word)
|
||||
+static __always_inline unsigned long __ffs(unsigned long word)
|
||||
{
|
||||
return __fls(word & -word);
|
||||
}
|
||||
--- a/arch/mips/kernel/cpu-bugs64.c
|
||||
+++ b/arch/mips/kernel/cpu-bugs64.c
|
||||
@@ -42,8 +42,8 @@ static inline void align_mod(const int a
|
||||
: GCC_IMM_ASM() (align), GCC_IMM_ASM() (mod));
|
||||
}
|
||||
|
||||
-static inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
- const int align, const int mod)
|
||||
+static __always_inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
+ const int align, const int mod)
|
||||
{
|
||||
unsigned long flags;
|
||||
int m1, m2;
|
||||
--- a/arch/powerpc/kernel/prom_init.c
|
||||
+++ b/arch/powerpc/kernel/prom_init.c
|
||||
@@ -498,14 +498,14 @@ static int __init prom_next_node(phandle
|
||||
}
|
||||
}
|
||||
|
||||
-static inline int prom_getprop(phandle node, const char *pname,
|
||||
- void *value, size_t valuelen)
|
||||
+static inline int __init prom_getprop(phandle node, const char *pname,
|
||||
+ void *value, size_t valuelen)
|
||||
{
|
||||
return call_prom("getprop", 4, 1, node, ADDR(pname),
|
||||
(u32)(unsigned long) value, (u32) valuelen);
|
||||
}
|
||||
|
||||
-static inline int prom_getproplen(phandle node, const char *pname)
|
||||
+static inline int __init prom_getproplen(phandle node, const char *pname)
|
||||
{
|
||||
return call_prom("getproplen", 2, 1, node, ADDR(pname));
|
||||
}
|
||||
--- a/arch/powerpc/mm/tlb-radix.c
|
||||
+++ b/arch/powerpc/mm/tlb-radix.c
|
||||
@@ -90,8 +90,8 @@ void radix__tlbiel_all(unsigned int acti
|
||||
asm volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
|
||||
}
|
||||
|
||||
-static inline void __tlbiel_pid(unsigned long pid, int set,
|
||||
- unsigned long ric)
|
||||
+static __always_inline void __tlbiel_pid(unsigned long pid, int set,
|
||||
+ unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
||||
@@ -106,7 +106,7 @@ static inline void __tlbiel_pid(unsigned
|
||||
trace_tlbie(0, 1, rb, rs, ric, prs, r);
|
||||
}
|
||||
|
||||
-static inline void __tlbie_pid(unsigned long pid, unsigned long ric)
|
||||
+static __always_inline void __tlbie_pid(unsigned long pid, unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
||||
@@ -136,7 +136,7 @@ static inline void __tlbiel_lpid(unsigne
|
||||
trace_tlbie(lpid, 1, rb, rs, ric, prs, r);
|
||||
}
|
||||
|
||||
-static inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
|
||||
+static __always_inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
||||
@@ -239,7 +239,7 @@ static inline void fixup_tlbie_lpid(unsi
|
||||
/*
|
||||
* We use 128 set in radix mode and 256 set in hpt mode.
|
||||
*/
|
||||
-static inline void _tlbiel_pid(unsigned long pid, unsigned long ric)
|
||||
+static __always_inline void _tlbiel_pid(unsigned long pid, unsigned long ric)
|
||||
{
|
||||
int set;
|
||||
|
||||
@@ -918,7 +918,7 @@ void radix__tlb_flush(struct mmu_gather
|
||||
tlb->need_flush_all = 0;
|
||||
}
|
||||
|
||||
-static inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
|
||||
+static __always_inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
|
||||
unsigned long start, unsigned long end,
|
||||
int psize, bool also_pwc)
|
||||
{
|
||||
--- a/arch/s390/include/asm/cpacf.h
|
||||
+++ b/arch/s390/include/asm/cpacf.h
|
||||
@@ -202,7 +202,7 @@ static inline int __cpacf_check_opcode(u
|
||||
}
|
||||
}
|
||||
|
||||
-static inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
+static __always_inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
{
|
||||
if (__cpacf_check_opcode(opcode)) {
|
||||
__cpacf_query(opcode, mask);
|
||||
--- a/arch/x86/Kconfig.debug
|
||||
+++ b/arch/x86/Kconfig.debug
|
||||
@@ -276,20 +276,6 @@ config CPA_DEBUG
|
||||
@ -21,15 +165,26 @@
|
||||
config DEBUG_ENTRY
|
||||
bool "Debug low-level entry code"
|
||||
depends on DEBUG_KERNEL
|
||||
--- a/drivers/mtd/nand/raw/vf610_nfc.c
|
||||
+++ b/drivers/mtd/nand/raw/vf610_nfc.c
|
||||
@@ -373,7 +373,7 @@ static int vf610_nfc_cmd(struct nand_chi
|
||||
{
|
||||
const struct nand_op_instr *instr;
|
||||
struct vf610_nfc *nfc = chip_to_nfc(chip);
|
||||
- int op_id = -1, trfr_sz = 0, offset;
|
||||
+ int op_id = -1, trfr_sz = 0, offset = 0;
|
||||
u32 col = 0, row = 0, cmd1 = 0, cmd2 = 0, code = 0;
|
||||
bool force8bit = false;
|
||||
|
||||
--- a/lib/Kconfig.debug
|
||||
+++ b/lib/Kconfig.debug
|
||||
@@ -150,6 +150,20 @@ endmenu # "printk and dmesg options"
|
||||
|
||||
menu "Compile-time checks and compiler options"
|
||||
@@ -309,6 +309,20 @@ config HEADERS_CHECK
|
||||
exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in
|
||||
your build tree), to make sure they're suitable.
|
||||
|
||||
+config OPTIMIZE_INLINING
|
||||
+ bool "Allow gcc to uninline functions marked 'inline'"
|
||||
+ ---help---
|
||||
+ bool "Allow compiler to uninline functions marked 'inline'"
|
||||
+ help
|
||||
+ This option determines if the kernel forces gcc to inline the functions
|
||||
+ developers have marked 'inline'. Doing so takes away freedom from gcc to
|
||||
+ do what it thinks is best, which is desirable for the gcc 3.x series of
|
||||
@ -41,9 +196,9 @@
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
config DEBUG_INFO
|
||||
bool "Compile the kernel with debug info"
|
||||
depends on DEBUG_KERNEL && !COMPILE_TEST
|
||||
config DEBUG_SECTION_MISMATCH
|
||||
bool "Enable full Section mismatch analysis"
|
||||
help
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -306,9 +306,6 @@ config ZONE_DMA32
|
||||
@ -58,7 +213,7 @@
|
||||
|
||||
--- a/include/linux/compiler_types.h
|
||||
+++ b/include/linux/compiler_types.h
|
||||
@@ -264,8 +264,7 @@ struct ftrace_likely_data {
|
||||
@@ -268,8 +268,7 @@ struct ftrace_likely_data {
|
||||
* of extern inline functions at link time.
|
||||
* A lot of inline functions can cause havoc with function tracing.
|
||||
*/
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
From 66770a004afe10df11d3902e16eaa0c2c39436bb Mon Sep 17 00:00:00 2001
|
||||
From: Pawel Dembicki <paweldembicki@gmail.com>
|
||||
Date: Fri, 24 May 2019 17:56:19 +0200
|
||||
Subject: [PATCH] powerpc: Enable kernel XZ compression option on PPC_85xx
|
||||
|
||||
Enable kernel XZ compression option on PPC_85xx. Tested with
|
||||
simpleImage on TP-Link TL-WDR4900 (Freescale P1014 processor).
|
||||
|
||||
Suggested-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
||||
---
|
||||
arch/powerpc/Kconfig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/powerpc/Kconfig
|
||||
+++ b/arch/powerpc/Kconfig
|
||||
@@ -197,7 +197,7 @@ config PPC
|
||||
select HAVE_IOREMAP_PROT
|
||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
||||
select HAVE_KERNEL_GZIP
|
||||
- select HAVE_KERNEL_XZ if PPC_BOOK3S
|
||||
+ select HAVE_KERNEL_XZ if PPC_BOOK3S || PPC_85xx
|
||||
select HAVE_KPROBES
|
||||
select HAVE_KPROBES_ON_FTRACE
|
||||
select HAVE_KRETPROBES
|
||||
@ -156,7 +156,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -216,10 +216,16 @@ int flow_offload_add(struct nf_flowtable
|
||||
@@ -227,10 +227,16 @@ int flow_offload_add(struct nf_flowtable
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_add);
|
||||
|
||||
@ -173,7 +173,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
|
||||
rhashtable_remove_fast(&flow_table->rhashtable,
|
||||
&flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].node,
|
||||
@@ -234,6 +240,9 @@ static void flow_offload_del(struct nf_f
|
||||
@@ -245,6 +251,9 @@ static void flow_offload_del(struct nf_f
|
||||
if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN))
|
||||
flow_offload_fixup_ct_state(e->ct);
|
||||
|
||||
@ -183,7 +183,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
flow_offload_free(flow);
|
||||
}
|
||||
|
||||
@@ -347,6 +356,9 @@ static int nf_flow_offload_gc_step(struc
|
||||
@@ -358,6 +367,9 @@ static int nf_flow_offload_gc_step(struc
|
||||
if (!teardown)
|
||||
nf_ct_offload_timeout(flow);
|
||||
|
||||
@ -193,7 +193,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
if (nf_flow_has_expired(flow) || teardown)
|
||||
flow_offload_del(flow_table, flow);
|
||||
}
|
||||
@@ -482,10 +494,43 @@ int nf_flow_dnat_port(const struct flow_
|
||||
@@ -493,10 +505,43 @@ int nf_flow_dnat_port(const struct flow_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_flow_dnat_port);
|
||||
|
||||
@ -237,7 +237,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
INIT_DEFERRABLE_WORK(&flowtable->gc_work, nf_flow_offload_work_gc);
|
||||
|
||||
err = rhashtable_init(&flowtable->rhashtable,
|
||||
@@ -523,6 +568,8 @@ static void nf_flow_table_iterate_cleanu
|
||||
@@ -534,6 +579,8 @@ static void nf_flow_table_iterate_cleanu
|
||||
{
|
||||
nf_flow_table_iterate(flowtable, nf_flow_table_do_cleanup, dev);
|
||||
flush_delayed_work(&flowtable->gc_work);
|
||||
@ -246,7 +246,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
}
|
||||
|
||||
void nf_flow_table_cleanup(struct net *net, struct net_device *dev)
|
||||
@@ -536,6 +583,26 @@ void nf_flow_table_cleanup(struct net *n
|
||||
@@ -547,6 +594,26 @@ void nf_flow_table_cleanup(struct net *n
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_flow_table_cleanup);
|
||||
|
||||
@ -273,7 +273,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
void nf_flow_table_free(struct nf_flowtable *flow_table)
|
||||
{
|
||||
mutex_lock(&flowtable_lock);
|
||||
@@ -545,9 +612,58 @@ void nf_flow_table_free(struct nf_flowta
|
||||
@@ -556,9 +623,58 @@ void nf_flow_table_free(struct nf_flowta
|
||||
nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL);
|
||||
WARN_ON(!nf_flow_offload_gc_step(flow_table));
|
||||
rhashtable_destroy(&flow_table->rhashtable);
|
||||
@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
+MODULE_ALIAS("nf-flow-table-hw");
|
||||
--- a/net/netfilter/nf_tables_api.c
|
||||
+++ b/net/netfilter/nf_tables_api.c
|
||||
@@ -5458,6 +5458,13 @@ static int nf_tables_flowtable_parse_hoo
|
||||
@@ -5463,6 +5463,13 @@ static int nf_tables_flowtable_parse_hoo
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
|
||||
if (!ops)
|
||||
return -ENOMEM;
|
||||
@@ -5589,10 +5596,19 @@ static int nf_tables_newflowtable(struct
|
||||
@@ -5594,10 +5601,19 @@ static int nf_tables_newflowtable(struct
|
||||
}
|
||||
|
||||
flowtable->data.type = type;
|
||||
@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
|
||||
flowtable);
|
||||
if (err < 0)
|
||||
@@ -5718,7 +5734,8 @@ static int nf_tables_fill_flowtable_info
|
||||
@@ -5723,7 +5739,8 @@ static int nf_tables_fill_flowtable_info
|
||||
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
|
||||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
|
||||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
|
||||
@ -559,6 +559,6 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
+ if (flowtable->flags & NF_FLOWTABLE_F_HW)
|
||||
+ nf_flow_offload_hw_add(nft_net(pkt), flow, ct);
|
||||
+
|
||||
dst_release(route.tuple[!dir].dst);
|
||||
return;
|
||||
|
||||
err_flow_add:
|
||||
|
||||
@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct flow_offload_tuple_rhash tuplehash[FLOW_OFFLOAD_DIR_MAX];
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -356,7 +356,7 @@ static int nf_flow_offload_gc_step(struc
|
||||
@@ -367,7 +367,7 @@ static int nf_flow_offload_gc_step(struc
|
||||
if (!teardown)
|
||||
nf_ct_offload_timeout(flow);
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/arm/boot/dts/qcom-ipq4019.dtsi | 34 ++++++++++++++++++++++++++--------
|
||||
1 file changed, 26 insertions(+), 8 deletions(-)
|
||||
1 file changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@ -54,7 +54,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
};
|
||||
|
||||
L2: l2-cache {
|
||||
@@ -94,6 +90,28 @@
|
||||
@@ -94,6 +90,32 @@
|
||||
};
|
||||
};
|
||||
|
||||
@ -65,18 +65,22 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
+ opp-48000000 {
|
||||
+ opp-hz = /bits/ 64 <48000000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ };
|
||||
+ opp-200000000 {
|
||||
+ opp-hz = /bits/ 64 <200000000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ };
|
||||
+ opp-500000000 {
|
||||
+ opp-hz = /bits/ 64 <500000000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ };
|
||||
+ opp-716000000 {
|
||||
+ opp-hz = /bits/ 64 <716000000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
|
||||
@ -22,7 +22,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -262,7 +262,7 @@
|
||||
@@ -266,7 +266,7 @@
|
||||
|
||||
saw0: regulator@b089000 {
|
||||
compatible = "qcom,saw2";
|
||||
|
||||
@ -41,7 +41,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
};
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -410,5 +410,79 @@
|
||||
@@ -414,5 +414,79 @@
|
||||
"legacy";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -41,7 +41,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
};
|
||||
|
||||
cpus {
|
||||
@@ -132,6 +134,12 @@
|
||||
@@ -136,6 +138,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
@ -54,7 +54,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
timer {
|
||||
compatible = "arm,armv7-timer";
|
||||
interrupts = <1 2 0xf08>,
|
||||
@@ -177,13 +185,13 @@
|
||||
@@ -181,13 +189,13 @@
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
clocks = <&gcc GCC_BLSP1_AHB_CLK>;
|
||||
clock-names = "bam_clk";
|
||||
#dma-cells = <1>;
|
||||
@@ -191,7 +199,7 @@
|
||||
@@ -195,7 +203,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -79,7 +79,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
compatible = "qcom,spi-qup-v2.2.1";
|
||||
reg = <0x78b5000 0x600>;
|
||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||
@@ -200,10 +208,26 @@
|
||||
@@ -204,10 +212,26 @@
|
||||
clock-names = "core", "iface";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
compatible = "qcom,i2c-qup-v2.2.1";
|
||||
reg = <0x78b7000 0x600>;
|
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
|
||||
@@ -212,14 +236,29 @@
|
||||
@@ -216,14 +240,29 @@
|
||||
clock-names = "iface", "core";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
@ -138,7 +138,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
clocks = <&gcc GCC_CRYPTO_AHB_CLK>;
|
||||
clock-names = "bam_clk";
|
||||
#dma-cells = <1>;
|
||||
@@ -293,7 +332,7 @@
|
||||
@@ -297,7 +336,7 @@
|
||||
serial@78af000 {
|
||||
compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
|
||||
reg = <0x78af000 0x200>;
|
||||
@ -147,7 +147,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
status = "disabled";
|
||||
clocks = <&gcc GCC_BLSP1_UART1_APPS_CLK>,
|
||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||
@@ -305,7 +344,7 @@
|
||||
@@ -309,7 +348,7 @@
|
||||
serial@78b0000 {
|
||||
compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
|
||||
reg = <0x78b0000 0x200>;
|
||||
@ -156,7 +156,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
status = "disabled";
|
||||
clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>,
|
||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||
@@ -327,6 +366,101 @@
|
||||
@@ -331,6 +370,101 @@
|
||||
reg = <0x4ab000 0x4>;
|
||||
};
|
||||
|
||||
@ -258,7 +258,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
wifi0: wifi@a000000 {
|
||||
compatible = "qcom,ipq4019-wifi";
|
||||
reg = <0xa000000 0x200000>;
|
||||
@@ -360,7 +494,7 @@
|
||||
@@ -364,7 +498,7 @@
|
||||
<GIC_SPI 45 IRQ_TYPE_EDGE_RISING>,
|
||||
<GIC_SPI 46 IRQ_TYPE_EDGE_RISING>,
|
||||
<GIC_SPI 47 IRQ_TYPE_EDGE_RISING>,
|
||||
@ -267,7 +267,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
interrupt-names = "msi0", "msi1", "msi2", "msi3",
|
||||
"msi4", "msi5", "msi6", "msi7",
|
||||
"msi8", "msi9", "msi10", "msi11",
|
||||
@@ -402,7 +536,7 @@
|
||||
@@ -406,7 +540,7 @@
|
||||
<GIC_SPI 61 IRQ_TYPE_EDGE_RISING>,
|
||||
<GIC_SPI 62 IRQ_TYPE_EDGE_RISING>,
|
||||
<GIC_SPI 63 IRQ_TYPE_EDGE_RISING>,
|
||||
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -381,7 +381,7 @@
|
||||
@@ -385,7 +385,7 @@
|
||||
#size-cells = <2>;
|
||||
|
||||
ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000
|
||||
|
||||
@ -61,7 +61,7 @@ Origin: other, https://patchwork.kernel.org/patch/10339127/
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -182,6 +182,7 @@
|
||||
@@ -186,6 +186,7 @@
|
||||
compatible = "qcom,ipq4019-pinctrl";
|
||||
reg = <0x01000000 0x300000>;
|
||||
gpio-controller;
|
||||
|
||||
@ -34,7 +34,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
status = "ok";
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -346,7 +346,7 @@
|
||||
@@ -350,7 +350,7 @@
|
||||
regulator;
|
||||
};
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -397,8 +397,8 @@
|
||||
@@ -401,8 +401,8 @@
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
From: Niklas Cassel <niklas.cassel@linaro.org>
|
||||
Subject: [PATCH] ARM: dts: qcom: ipq4019: Fix MSI IRQ type
|
||||
Date: Thu, 24 Jan 2019 14:00:47 +0100
|
||||
|
||||
The databook clearly states that the MSI IRQ (msi_ctrl_int) is a level
|
||||
triggered interrupt.
|
||||
|
||||
The msi_ctrl_int will be high for as long as any MSI status bit is set,
|
||||
thus the IRQ type should be set to IRQ_TYPE_LEVEL_HIGH, causing the
|
||||
IRQ handler to keep getting called, as long as any MSI status bit is set.
|
||||
|
||||
A git grep shows that ipq4019 is the only SoC using snps,dw-pcie that has
|
||||
configured this IRQ incorrectly.
|
||||
|
||||
Not having the correct IRQ type defined will cause us to lose interrupts,
|
||||
which in turn causes timeouts in the PCIe endpoint drivers.
|
||||
|
||||
Signed-off-by: Niklas Cassel <niklas.cassel@linaro.org>
|
||||
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -404,7 +404,7 @@
|
||||
ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000>,
|
||||
<0x82000000 0 0x40300000 0x40300000 0 0x00d00000>;
|
||||
|
||||
- interrupts = <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>;
|
||||
+ interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "msi";
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0x7>;
|
||||
@ -0,0 +1,29 @@
|
||||
From 09f145f417a5d64d6b8d4476699dfb0eccc6c784 Mon Sep 17 00:00:00 2001
|
||||
From: Abhishek Sahu <absahu@codeaurora.org>
|
||||
Date: Tue, 7 May 2019 10:14:05 +0300
|
||||
Subject: [PATCH] ipq40xx: fix high resolution timer
|
||||
|
||||
Cherry-picked from CAF QSDK repo.
|
||||
Original commit message:
|
||||
The kernel is failing in switching the timer for high resolution
|
||||
mode and clock source operates in 10ms resolution. The always-on
|
||||
property needs to be given for timer device tree node to make
|
||||
clock source working in 1ns resolution.
|
||||
|
||||
Change-Id: I7c00b3c74d97c2a30ac9f05e18b511a0550fd459
|
||||
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
|
||||
Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/qcom-ipq4019.dtsi | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -167,6 +167,7 @@
|
||||
<1 4 0xf08>,
|
||||
<1 1 0xf08>;
|
||||
clock-frequency = <48000000>;
|
||||
+ always-on;
|
||||
};
|
||||
|
||||
soc {
|
||||
@ -15,7 +15,7 @@ so the info might change.
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -562,6 +562,34 @@
|
||||
@@ -567,6 +567,34 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -590,6 +590,29 @@
|
||||
@@ -595,6 +595,29 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
};
|
||||
|
||||
cpus {
|
||||
@@ -613,6 +615,64 @@
|
||||
@@ -618,6 +620,64 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@ -10,8 +10,8 @@ Signed-off-by: Matthew McClintock <mmcclint@codeaurora.org>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
---
|
||||
arch/arm/boot/dts/qcom-ipq4019.dtsi | 54 ++++++++++++++---------------
|
||||
1 file changed, 26 insertions(+), 28 deletions(-)
|
||||
arch/arm/boot/dts/qcom-ipq4019.dtsi | 58 ++++++++++++++---------------
|
||||
1 file changed, 30 insertions(+), 28 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@ -79,7 +79,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
};
|
||||
|
||||
L2: l2-cache {
|
||||
@@ -136,6 +112,28 @@
|
||||
@@ -136,6 +112,32 @@
|
||||
};
|
||||
};
|
||||
|
||||
@ -89,18 +89,22 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
+
|
||||
+ opp-48000000 {
|
||||
+ opp-hz = /bits/ 64 <48000000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ };
|
||||
+ opp-200000000 {
|
||||
+ opp-hz = /bits/ 64 <200000000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ };
|
||||
+ opp-500000000 {
|
||||
+ opp-hz = /bits/ 64 <500000000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ };
|
||||
+ opp-716000000 {
|
||||
+ opp-hz = /bits/ 64 <716000000>;
|
||||
+ opp-microvolt = <1100000>;
|
||||
+ clock-latency-ns = <256000>;
|
||||
+ };
|
||||
+ };
|
||||
|
||||
@ -23,7 +23,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -321,7 +321,7 @@
|
||||
@@ -325,7 +325,7 @@
|
||||
|
||||
saw0: regulator@b089000 {
|
||||
compatible = "qcom,saw2";
|
||||
|
||||
@ -41,7 +41,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
};
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -564,5 +564,79 @@
|
||||
@@ -568,5 +568,79 @@
|
||||
"legacy";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Andy Gross <andy.gross@linaro.org>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -401,7 +401,7 @@
|
||||
@@ -405,7 +405,7 @@
|
||||
#size-cells = <2>;
|
||||
|
||||
ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000
|
||||
|
||||
@ -60,7 +60,7 @@ will be executed twice with the same parameters for the same pinctrl.
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -202,6 +202,7 @@
|
||||
@@ -206,6 +206,7 @@
|
||||
compatible = "qcom,ipq4019-pinctrl";
|
||||
reg = <0x01000000 0x300000>;
|
||||
gpio-controller;
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
From: Christian Lamparter <chunkeey@gmail.com>
|
||||
Date: Mon, 25 Feb 2019 20:14:19 +0100
|
||||
Subject: [PATCH] ARM: dts: qcom: ipq4019: enlarge PCIe BAR range
|
||||
|
||||
David Bauer reported that the VDSL modem (attached via PCIe)
|
||||
on his AVM Fritz!Box 7530 was complaining about not having
|
||||
enough space in the BAR. A closer inspection of the old
|
||||
qcom-ipq40xx.dtsi pulled from the GL-iNet repository listed:
|
||||
|
||||
| qcom,pcie@80000 {
|
||||
| compatible = "qcom,msm_pcie";
|
||||
| reg = <0x80000 0x2000>,
|
||||
| <0x99000 0x800>,
|
||||
| <0x40000000 0xf1d>,
|
||||
| <0x40000f20 0xa8>,
|
||||
| <0x40100000 0x1000>,
|
||||
| <0x40200000 0x100000>,
|
||||
| <0x40300000 0xd00000>;
|
||||
| reg-names = "parf", "phy", "dm_core", "elbi",
|
||||
| "conf", "io", "bars";
|
||||
|
||||
Matching the reg-names with the listed reg leads to
|
||||
<0xd00000> as the size for the "bars".
|
||||
|
||||
BugLink: https://www.mail-archive.com/openwrt-devel@lists.openwrt.org/msg45212.html
|
||||
Reported-by: David Bauer <mail@david-bauer.net>
|
||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -405,8 +405,8 @@
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
- ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000
|
||||
- 0x82000000 0 0x40300000 0x40300000 0 0x400000>;
|
||||
+ ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000>,
|
||||
+ <0x82000000 0 0x40300000 0x40300000 0 0x00d00000>;
|
||||
|
||||
interrupts = <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-names = "msi";
|
||||
@ -0,0 +1,32 @@
|
||||
From: Niklas Cassel <niklas.cassel@linaro.org>
|
||||
Subject: [PATCH] ARM: dts: qcom: ipq4019: Fix MSI IRQ type
|
||||
Date: Thu, 24 Jan 2019 14:00:47 +0100
|
||||
|
||||
The databook clearly states that the MSI IRQ (msi_ctrl_int) is a level
|
||||
triggered interrupt.
|
||||
|
||||
The msi_ctrl_int will be high for as long as any MSI status bit is set,
|
||||
thus the IRQ type should be set to IRQ_TYPE_LEVEL_HIGH, causing the
|
||||
IRQ handler to keep getting called, as long as any MSI status bit is set.
|
||||
|
||||
A git grep shows that ipq4019 is the only SoC using snps,dw-pcie that has
|
||||
configured this IRQ incorrectly.
|
||||
|
||||
Not having the correct IRQ type defined will cause us to lose interrupts,
|
||||
which in turn causes timeouts in the PCIe endpoint drivers.
|
||||
|
||||
Signed-off-by: Niklas Cassel <niklas.cassel@linaro.org>
|
||||
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -408,7 +408,7 @@
|
||||
ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000>,
|
||||
<0x82000000 0 0x40300000 0x40300000 0 0x00d00000>;
|
||||
|
||||
- interrupts = <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>;
|
||||
+ interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "msi";
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0x7>;
|
||||
@ -0,0 +1,29 @@
|
||||
From 09f145f417a5d64d6b8d4476699dfb0eccc6c784 Mon Sep 17 00:00:00 2001
|
||||
From: Abhishek Sahu <absahu@codeaurora.org>
|
||||
Date: Tue, 7 May 2019 10:14:05 +0300
|
||||
Subject: [PATCH] ipq40xx: fix high resolution timer
|
||||
|
||||
Cherry-picked from CAF QSDK repo.
|
||||
Original commit message:
|
||||
The kernel is failing in switching the timer for high resolution
|
||||
mode and clock source operates in 10ms resolution. The always-on
|
||||
property needs to be given for timer device tree node to make
|
||||
clock source working in 1ns resolution.
|
||||
|
||||
Change-Id: I7c00b3c74d97c2a30ac9f05e18b511a0550fd459
|
||||
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
|
||||
Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/qcom-ipq4019.dtsi | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -171,6 +171,7 @@
|
||||
<1 4 0xf08>,
|
||||
<1 1 0xf08>;
|
||||
clock-frequency = <48000000>;
|
||||
+ always-on;
|
||||
};
|
||||
|
||||
soc {
|
||||
@ -15,7 +15,7 @@ so the info might change.
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -566,6 +566,34 @@
|
||||
@@ -571,6 +571,34 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
|
||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||
@@ -594,6 +594,29 @@
|
||||
@@ -599,6 +599,29 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
};
|
||||
|
||||
cpus {
|
||||
@@ -617,6 +619,64 @@
|
||||
@@ -622,6 +624,64 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
uart->capabilities = up->capabilities;
|
||||
--- a/drivers/tty/serial/serial_core.c
|
||||
+++ b/drivers/tty/serial/serial_core.c
|
||||
@@ -2260,6 +2260,7 @@ uart_report_port(struct uart_driver *drv
|
||||
@@ -2254,6 +2254,7 @@ uart_report_port(struct uart_driver *drv
|
||||
snprintf(address, sizeof(address),
|
||||
"I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
|
||||
break;
|
||||
@ -26,7 +26,7 @@
|
||||
case UPIO_MEM:
|
||||
case UPIO_MEM16:
|
||||
case UPIO_MEM32:
|
||||
@@ -2924,6 +2925,7 @@ int uart_match_port(struct uart_port *po
|
||||
@@ -2926,6 +2927,7 @@ int uart_match_port(struct uart_port *po
|
||||
case UPIO_HUB6:
|
||||
return (port1->iobase == port2->iobase) &&
|
||||
(port1->hub6 == port2->hub6);
|
||||
|
||||
@ -10,7 +10,7 @@ BOARD:=layerscape
|
||||
BOARDNAME:=NXP Layerscape
|
||||
KERNEL_PATCHVER:=4.14
|
||||
FEATURES:=squashfs nand usb pcie gpio fpu ubifs ext4
|
||||
SUBTARGETS:=armv8_64b armv8_32b armv7
|
||||
SUBTARGETS:=armv8_64b armv7
|
||||
MAINTAINER:=Yangbo Lu <yangbo.lu@nxp.com>
|
||||
|
||||
define Target/Description
|
||||
|
||||
@ -7,9 +7,6 @@ Layerscape Quick Start
|
||||
LS1012ARDB LS1012AFRWY LS1043ARDB LS1046ARDB LS1088ARDB LS2088ARDB
|
||||
(SD card boot support on LS1043ARDB/LS1046ARDB/LS1088ARDB)
|
||||
|
||||
* ARMv8 32-bit
|
||||
LS1012ARDB LS1012AFRWY LS1043ARDB LS1046ARDB
|
||||
|
||||
* ARMv7
|
||||
LS1021ATWR LS1021AIOT
|
||||
(SD card boot support on LS1021ATWR/LS1021AIOT)
|
||||
|
||||
14
target/linux/layerscape/armv7/config-4.14
Executable file → Normal file
14
target/linux/layerscape/armv7/config-4.14
Executable file → Normal file
@ -73,6 +73,7 @@ CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
# CONFIG_AT803X_PHY_SMART_EEE is not set
|
||||
CONFIG_ATAGS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
@ -205,8 +206,6 @@ CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set
|
||||
# CONFIG_DEVFREQ_GOV_USERSPACE is not set
|
||||
# CONFIG_DEVFREQ_THERMAL is not set
|
||||
CONFIG_DEVKMEM=y
|
||||
CONFIG_DEVMEM=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_DMADEVICES=y
|
||||
@ -261,6 +260,7 @@ CONFIG_FSL_IFC=y
|
||||
# CONFIG_FSL_PPFE is not set
|
||||
CONFIG_FSL_PQ_MDIO=y
|
||||
# CONFIG_FSL_QDMA is not set
|
||||
# CONFIG_FSL_QIXIS is not set
|
||||
# CONFIG_FSL_SDK_DPA is not set
|
||||
CONFIG_FSL_XGMAC_MDIO=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
@ -281,6 +281,7 @@ CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IO=y
|
||||
CONFIG_GENERIC_IRQ_CHIP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_MIGRATION=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_MSI_IRQ=y
|
||||
@ -395,6 +396,7 @@ CONFIG_IMX_DMA=y
|
||||
CONFIG_IMX_SDMA=y
|
||||
# CONFIG_IMX_WEIM is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_INPHI_PHY is not set
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
CONFIG_IOMMU_HELPER=y
|
||||
@ -432,6 +434,7 @@ CONFIG_MARVELL_PHY=y
|
||||
CONFIG_MCPM=y
|
||||
CONFIG_MDIO_BITBANG=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
# CONFIG_MDIO_FSL_BACKPLANE is not set
|
||||
# CONFIG_MDIO_GPIO is not set
|
||||
@ -539,6 +542,7 @@ CONFIG_PCIEASPM_DEFAULT=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIE_DW=y
|
||||
CONFIG_PCIE_DW_HOST=y
|
||||
# CONFIG_PCIE_DW_PLAT_HOST is not set
|
||||
CONFIG_PCIE_PME=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||
@ -568,8 +572,6 @@ CONFIG_PM_DEVFREQ=y
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_BRCMKONA=y
|
||||
CONFIG_POWER_RESET_BRCMSTB=y
|
||||
@ -592,7 +594,7 @@ CONFIG_PSTORE_PMSG=y
|
||||
CONFIG_PSTORE_RAM=y
|
||||
CONFIG_PSTORE_ZLIB_COMPRESS=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
CONFIG_PTP_1588_CLOCK_GIANFAR=y
|
||||
CONFIG_PTP_1588_CLOCK_QORIQ=y
|
||||
CONFIG_QORIQ_CPUFREQ=y
|
||||
# CONFIG_QUICC_ENGINE is not set
|
||||
CONFIG_RAS=y
|
||||
@ -685,6 +687,7 @@ CONFIG_SPI_CADENCE=y
|
||||
# CONFIG_SPI_FSL_QUADSPI is not set
|
||||
# CONFIG_SPI_IMX is not set
|
||||
CONFIG_SPI_MASTER=y
|
||||
# CONFIG_SPI_NXP_FLEXSPI is not set
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_SPI_XILINX=y
|
||||
CONFIG_SPMI=y
|
||||
@ -706,7 +709,6 @@ CONFIG_SWIOTLB=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SWP_EMULATE=y
|
||||
CONFIG_SYNC_FILE=y
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
|
||||
@ -1,936 +0,0 @@
|
||||
CONFIG_AD525X_DPOT=y
|
||||
CONFIG_AD525X_DPOT_I2C=y
|
||||
# CONFIG_AD525X_DPOT_SPI is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_APDS9802ALS=y
|
||||
CONFIG_AQUANTIA_PHY=y
|
||||
# CONFIG_ARCH_AXXIA is not set
|
||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
|
||||
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
|
||||
CONFIG_ARCH_HAS_RESET_CONTROLLER=y
|
||||
CONFIG_ARCH_HAS_SET_MEMORY=y
|
||||
CONFIG_ARCH_HAS_SG_CHAIN=y
|
||||
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
|
||||
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
|
||||
CONFIG_ARCH_HAS_TICK_BROADCAST=y
|
||||
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
|
||||
CONFIG_ARCH_MULTIPLATFORM=y
|
||||
# CONFIG_ARCH_MULTI_CPU_AUTO is not set
|
||||
CONFIG_ARCH_MULTI_V6_V7=y
|
||||
CONFIG_ARCH_MULTI_V7=y
|
||||
CONFIG_ARCH_MXC=y
|
||||
CONFIG_ARCH_NR_GPIO=0
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
|
||||
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
CONFIG_ARCH_SUPPORTS_UPROBES=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
|
||||
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
|
||||
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
|
||||
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_APPENDED_DTB=y
|
||||
CONFIG_ARM_ARCH_TIMER=y
|
||||
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
||||
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||
# CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND is not set
|
||||
CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER=y
|
||||
CONFIG_ARM_CPUIDLE=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_ARM_ERRATA_430973=y
|
||||
CONFIG_ARM_ERRATA_643719=y
|
||||
CONFIG_ARM_ERRATA_720789=y
|
||||
CONFIG_ARM_ERRATA_754322=y
|
||||
CONFIG_ARM_ERRATA_754327=y
|
||||
CONFIG_ARM_ERRATA_764369=y
|
||||
CONFIG_ARM_ERRATA_775420=y
|
||||
CONFIG_ARM_ERRATA_798181=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
CONFIG_ARM_HEAVY_MB=y
|
||||
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_ARM_LPAE=y
|
||||
CONFIG_ARM_PATCH_IDIV=y
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
CONFIG_ARM_PMU=y
|
||||
CONFIG_ARM_PSCI=y
|
||||
CONFIG_ARM_PSCI_FW=y
|
||||
# CONFIG_ARM_SMMU is not set
|
||||
CONFIG_ARM_THUMB=y
|
||||
CONFIG_ARM_THUMBEE=y
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_ASSOCIATIVE_ARRAY=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_ATAGS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_GENERIC=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_BATTERY_SBS=y
|
||||
CONFIG_BCM_NET_PHYLIB=y
|
||||
CONFIG_BINARY_PRINTF=y
|
||||
CONFIG_BLK_CMDLINE_PARSER=y
|
||||
CONFIG_BLK_DEV_BSG=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=262144
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BLK_MQ_VIRTIO=y
|
||||
CONFIG_BLK_SCSI_REQUEST=y
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
|
||||
CONFIG_BOUNCE=y
|
||||
# CONFIG_BPF_SYSCALL is not set
|
||||
CONFIG_BRCMSTB_GISB_ARB=y
|
||||
CONFIG_BROADCOM_PHY=y
|
||||
CONFIG_BUILD_BIN2C=y
|
||||
CONFIG_CACHE_L2X0=y
|
||||
# CONFIG_CACHE_L2X0_PMU is not set
|
||||
CONFIG_CAN=y
|
||||
CONFIG_CAN_BCM=y
|
||||
CONFIG_CAN_CALC_BITTIMING=y
|
||||
# CONFIG_CAN_CC770 is not set
|
||||
# CONFIG_CAN_C_CAN is not set
|
||||
CONFIG_CAN_DEV=y
|
||||
CONFIG_CAN_FLEXCAN=y
|
||||
# CONFIG_CAN_GRCAN is not set
|
||||
CONFIG_CAN_GW=y
|
||||
# CONFIG_CAN_LEDS is not set
|
||||
CONFIG_CAN_MCP251X=y
|
||||
CONFIG_CAN_RAW=y
|
||||
# CONFIG_CAN_SJA1000 is not set
|
||||
# CONFIG_CAN_SOFTING is not set
|
||||
# CONFIG_CAN_TI_HECC is not set
|
||||
CONFIG_CHECKPOINT_RESTORE=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_CLKDEV_LOOKUP=y
|
||||
CONFIG_CLKSRC_IMX_GPT=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CLK_QORIQ=y
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
CONFIG_CMA_SIZE_MBYTES=64
|
||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
CONFIG_CMDLINE_PARTITION=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTEXT_SWITCH_TRACER=y
|
||||
CONFIG_COREDUMP=y
|
||||
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_CPUFREQ_DT_PLATDEV=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_32v7=y
|
||||
CONFIG_CPU_ABRT_EV7=y
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_CPU_CACHE_V7=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
|
||||
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
|
||||
CONFIG_CPU_PABRT_V7=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CPU_SPECTRE=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_CPU_THUMB_CAPABLE=y
|
||||
CONFIG_CPU_TLB_V7=y
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CRASH_CORE=y
|
||||
CONFIG_CRC16=y
|
||||
# CONFIG_CRC32_SARWATE is not set
|
||||
CONFIG_CRC32_SLICEBY8=y
|
||||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
CONFIG_CRYPTO_ACOMP2=y
|
||||
CONFIG_CRYPTO_AEAD=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
CONFIG_CRYPTO_NULL2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
# CONFIG_CRYPTO_TLS is not set
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_ALIGN_RODATA=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_IMX_UART_PORT=1
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_UART_8250 is not set
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_DECOMPRESS_XZ=y
|
||||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_DEVKMEM=y
|
||||
CONFIG_DEVMEM=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_OF=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
CONFIG_DMI=y
|
||||
CONFIG_DMIID=y
|
||||
# CONFIG_DMI_SYSFS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_BRIDGE=y
|
||||
CONFIG_DRM_FBDEV_EMULATION=y
|
||||
CONFIG_DRM_FBDEV_OVERALLOC=100
|
||||
CONFIG_DRM_FSL_DCU=y
|
||||
CONFIG_DRM_GEM_CMA_HELPER=y
|
||||
CONFIG_DRM_KMS_CMA_HELPER=y
|
||||
CONFIG_DRM_KMS_FB_HELPER=y
|
||||
CONFIG_DRM_KMS_HELPER=y
|
||||
CONFIG_DRM_PANEL=y
|
||||
CONFIG_DRM_PANEL_BRIDGE=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=y
|
||||
CONFIG_DRM_SII902X=y
|
||||
# CONFIG_DRM_VIRTIO_GPU is not set
|
||||
CONFIG_DTC=y
|
||||
CONFIG_DT_IDLE_STATES=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DW_DMAC=y
|
||||
CONFIG_DW_DMAC_CORE=y
|
||||
CONFIG_DW_WATCHDOG=y
|
||||
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||
CONFIG_EDAC_SUPPORT=y
|
||||
CONFIG_EEPROM_93CX6=y
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EFI=y
|
||||
# CONFIG_EFIVAR_FS is not set
|
||||
CONFIG_EFI_ARMSTUB=y
|
||||
# CONFIG_EFI_CAPSULE_LOADER is not set
|
||||
CONFIG_EFI_ESRT=y
|
||||
CONFIG_EFI_PARAMS_FROM_FDT=y
|
||||
CONFIG_EFI_RUNTIME_WRAPPERS=y
|
||||
CONFIG_EFI_STUB=y
|
||||
# CONFIG_EFI_TEST is not set
|
||||
# CONFIG_EFI_VARS is not set
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_EVENT_TRACING=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_FAT_FS=y
|
||||
CONFIG_FB=y
|
||||
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_MODE_HELPERS=y
|
||||
CONFIG_FB_MX3=y
|
||||
# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set
|
||||
CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_FOPS=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
CONFIG_FEC=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_FMAN_ARM=y
|
||||
# CONFIG_FMAN_MIB_CNT_OVF_IRQ_EN is not set
|
||||
# CONFIG_FMAN_P1023 is not set
|
||||
# CONFIG_FMAN_P3040_P4080_P5020 is not set
|
||||
# CONFIG_FMAN_PFC is not set
|
||||
# CONFIG_FMAN_V3H is not set
|
||||
# CONFIG_FMAN_V3L is not set
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_SUPPORT=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=12
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FREEZER=y
|
||||
CONFIG_FSL_BMAN_CONFIG=y
|
||||
CONFIG_FSL_BMAN_DEBUGFS=y
|
||||
# CONFIG_FSL_BMAN_TEST is not set
|
||||
# CONFIG_FSL_DPAA2_ETH_CEETM is not set
|
||||
# CONFIG_FSL_DPAA_1588 is not set
|
||||
CONFIG_FSL_DPAA_ADVANCED_DRIVERS=y
|
||||
# CONFIG_FSL_DPAA_CEETM is not set
|
||||
CONFIG_FSL_DPAA_CS_THRESHOLD_10G=0x10000000
|
||||
CONFIG_FSL_DPAA_CS_THRESHOLD_1G=0x06000000
|
||||
# CONFIG_FSL_DPAA_DBG_LOOP is not set
|
||||
# CONFIG_FSL_DPAA_ETH_DEBUG is not set
|
||||
CONFIG_FSL_DPAA_ETH_DEBUGFS=y
|
||||
# CONFIG_FSL_DPAA_ETH_JUMBO_FRAME is not set
|
||||
CONFIG_FSL_DPAA_ETH_MAX_BUF_COUNT=128
|
||||
CONFIG_FSL_DPAA_ETH_REFILL_THRESHOLD=80
|
||||
CONFIG_FSL_DPAA_ETH_USE_NDO_SELECT_QUEUE=y
|
||||
# CONFIG_FSL_DPAA_HOOKS is not set
|
||||
CONFIG_FSL_DPAA_INGRESS_CS_THRESHOLD=0x10000000
|
||||
CONFIG_FSL_DPAA_OFFLINE_PORTS=y
|
||||
# CONFIG_FSL_DPAA_TS is not set
|
||||
CONFIG_FSL_DPA_CAN_WAIT=y
|
||||
CONFIG_FSL_DPA_CAN_WAIT_SYNC=y
|
||||
# CONFIG_FSL_DPA_CHECKING is not set
|
||||
CONFIG_FSL_DPA_PIRQ_FAST=y
|
||||
CONFIG_FSL_DPA_PIRQ_SLOW=y
|
||||
CONFIG_FSL_DPA_PORTAL_SHARE=y
|
||||
CONFIG_FSL_EDMA=y
|
||||
CONFIG_FSL_FM_MAX_FRAME_SIZE=1522
|
||||
CONFIG_FSL_FM_RX_EXTRA_HEADROOM=64
|
||||
CONFIG_FSL_GUTS=y
|
||||
CONFIG_FSL_IFC=y
|
||||
CONFIG_FSL_PPFE=y
|
||||
CONFIG_FSL_PPFE_UTIL_DISABLED=y
|
||||
CONFIG_FSL_PQ_MDIO=y
|
||||
# CONFIG_FSL_QDMA is not set
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_BMAN_W=2
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_RW_W=2
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_SRCCIV=4
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_SRQ_W=3
|
||||
CONFIG_FSL_QMAN_CONFIG=y
|
||||
CONFIG_FSL_QMAN_DEBUGFS=y
|
||||
CONFIG_FSL_QMAN_FQD_SZ=10
|
||||
# CONFIG_FSL_QMAN_FQ_LOOKUP is not set
|
||||
CONFIG_FSL_QMAN_INIT_TIMEOUT=10
|
||||
CONFIG_FSL_QMAN_PFDR_SZ=13
|
||||
CONFIG_FSL_QMAN_PIRQ_DQRR_ITHRESH=12
|
||||
CONFIG_FSL_QMAN_PIRQ_IPERIOD=100
|
||||
CONFIG_FSL_QMAN_PIRQ_MR_ITHRESH=4
|
||||
CONFIG_FSL_QMAN_POLL_LIMIT=32
|
||||
# CONFIG_FSL_QMAN_TEST is not set
|
||||
CONFIG_FSL_SDK_BMAN=y
|
||||
CONFIG_FSL_SDK_DPA=y
|
||||
CONFIG_FSL_SDK_DPAA_ETH=y
|
||||
CONFIG_FSL_SDK_FMAN=y
|
||||
# CONFIG_FSL_SDK_FMAN_TEST is not set
|
||||
CONFIG_FSL_SDK_QMAN=y
|
||||
CONFIG_FSL_USDPAA=y
|
||||
CONFIG_FSL_XGMAC_MDIO=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FTRACE_SYSCALLS is not set
|
||||
CONFIG_FUSE_FS=y
|
||||
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_ARCH_TOPOLOGY=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IO=y
|
||||
CONFIG_GENERIC_IRQ_CHIP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_MSI_IRQ=y
|
||||
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
CONFIG_GENERIC_STRNLEN_USER=y
|
||||
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||
CONFIG_GIANFAR=y
|
||||
CONFIG_GLOB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIO_GENERIC=y
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_GPIO_MPC8XXX=y
|
||||
CONFIG_GPIO_MXC=y
|
||||
# CONFIG_GRO_CELLS is not set
|
||||
CONFIG_HANDLE_DOMAIN_IRQ=y
|
||||
CONFIG_HARDEN_BRANCH_PREDICTOR=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT_MAP=y
|
||||
# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
|
||||
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
|
||||
CONFIG_HAVE_ARCH_BITREVERSE=y
|
||||
CONFIG_HAVE_ARCH_JUMP_LABEL=y
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_HAVE_ARCH_PFN_VALID=y
|
||||
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
|
||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_HAVE_ARM_ARCH_TIMER=y
|
||||
CONFIG_HAVE_ARM_SMCCC=y
|
||||
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
|
||||
CONFIG_HAVE_CC_STACKPROTECTOR=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
CONFIG_HAVE_CLK_PREPARE=y
|
||||
CONFIG_HAVE_CONTEXT_TRACKING=y
|
||||
CONFIG_HAVE_C_RECORDMCOUNT=y
|
||||
CONFIG_HAVE_DEBUG_KMEMLEAK=y
|
||||
CONFIG_HAVE_DMA_API_DEBUG=y
|
||||
CONFIG_HAVE_DMA_CONTIGUOUS=y
|
||||
CONFIG_HAVE_DYNAMIC_FTRACE=y
|
||||
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
|
||||
CONFIG_HAVE_EBPF_JIT=y
|
||||
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
|
||||
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
||||
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_HAVE_GENERIC_GUP=y
|
||||
CONFIG_HAVE_HW_BREAKPOINT=y
|
||||
CONFIG_HAVE_IDE=y
|
||||
CONFIG_HAVE_IMX_SRC=y
|
||||
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_HAVE_MEMBLOCK=y
|
||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
|
||||
CONFIG_HAVE_NET_DSA=y
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
CONFIG_HAVE_OPTPROBES=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_HAVE_PERF_REGS=y
|
||||
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_HAVE_RCU_TABLE_FREE=y
|
||||
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
|
||||
CONFIG_HAVE_SMP=y
|
||||
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
|
||||
CONFIG_HAVE_UID16=y
|
||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HDMI=y
|
||||
CONFIG_HID=y
|
||||
CONFIG_HID_GENERIC=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_IMX_RNGC=y
|
||||
CONFIG_HZ_FIXED=0
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_ALGOBIT=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_COMPAT=y
|
||||
CONFIG_I2C_DEMUX_PINCTRL=y
|
||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
# CONFIG_I2C_DESIGNWARE_SLAVE is not set
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
CONFIG_I2C_IMX=y
|
||||
# CONFIG_I2C_IMX_LPI2C is not set
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C_MUX_PCA954x=y
|
||||
CONFIG_I2C_MUX_PINCTRL=y
|
||||
CONFIG_I2C_RK3X=y
|
||||
CONFIG_I2C_SLAVE=y
|
||||
CONFIG_I2C_SLAVE_EEPROM=y
|
||||
CONFIG_I2C_XILINX=y
|
||||
CONFIG_ICPLUS_PHY=y
|
||||
CONFIG_ICS932S401=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_IMX2_WDT=y
|
||||
CONFIG_IMX_DMA=y
|
||||
CONFIG_IMX_SDMA=y
|
||||
# CONFIG_IMX_WEIM is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
# CONFIG_INET_DIAG_DESTROY is not set
|
||||
# CONFIG_INET_RAW_DIAG is not set
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_JOYDEV=y
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_INPUT_MATRIXKMAP=y
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_IOMMU_HELPER=y
|
||||
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
|
||||
# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set
|
||||
CONFIG_IOMMU_SUPPORT=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_IPC_NS=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_DOMAIN_DEBUG=y
|
||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
# CONFIG_ISDN is not set
|
||||
CONFIG_ISL29003=y
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_XZ is not set
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_KEXEC_CORE=y
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
CONFIG_KEYBOARD_BCM=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
# CONFIG_KEYBOARD_IMX is not set
|
||||
CONFIG_KEYS=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
CONFIG_LIBFDT=y
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
CONFIG_LOGO_LINUX_MONO=y
|
||||
CONFIG_LOGO_LINUX_VGA16=y
|
||||
CONFIG_LS_SCFG_MSI=y
|
||||
# CONFIG_LS_SOC_DRIVERS is not set
|
||||
CONFIG_LZO_COMPRESS=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_MANDATORY_FILE_LOCKING=y
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_MCPM=y
|
||||
CONFIG_MDIO_BITBANG=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_BUS_MUX=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
# CONFIG_MDIO_FSL_BACKPLANE is not set
|
||||
# CONFIG_MDIO_GPIO is not set
|
||||
CONFIG_MEMORY=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
# CONFIG_MFD_VEXPRESS_SYSREG is not set
|
||||
CONFIG_MICREL_PHY=y
|
||||
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
|
||||
CONFIG_MIGHT_HAVE_PCI=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_BLOCK_MINORS=16
|
||||
# CONFIG_MMC_MXC is not set
|
||||
CONFIG_MMC_SDHCI=y
|
||||
# CONFIG_MMC_SDHCI_ESDHC_IMX is not set
|
||||
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
|
||||
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
||||
# CONFIG_MMC_SDHCI_PCI is not set
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
# CONFIG_MMC_TIFM_SD is not set
|
||||
CONFIG_MODULES_TREE_LOOKUP=y
|
||||
CONFIG_MODULES_USE_ELF_REL=y
|
||||
# CONFIG_MOUSE_BCM5974 is not set
|
||||
# CONFIG_MOUSE_CYAPA is not set
|
||||
CONFIG_MOUSE_ELAN_I2C=y
|
||||
CONFIG_MOUSE_ELAN_I2C_I2C=y
|
||||
# CONFIG_MOUSE_ELAN_I2C_SMBUS is not set
|
||||
CONFIG_MOUSE_PS2=y
|
||||
CONFIG_MOUSE_PS2_ALPS=y
|
||||
CONFIG_MOUSE_PS2_BYD=y
|
||||
CONFIG_MOUSE_PS2_CYPRESS=y
|
||||
CONFIG_MOUSE_PS2_ELANTECH=y
|
||||
CONFIG_MOUSE_PS2_FOCALTECH=y
|
||||
CONFIG_MOUSE_PS2_LOGIPS2PP=y
|
||||
CONFIG_MOUSE_PS2_SMBUS=y
|
||||
CONFIG_MOUSE_PS2_SYNAPTICS=y
|
||||
CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
CONFIG_MOUSE_PS2_TRACKPOINT=y
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
CONFIG_MTD_CFI_GEOMETRY=y
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_DATAFLASH=y
|
||||
# CONFIG_MTD_DATAFLASH_OTP is not set
|
||||
# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
|
||||
CONFIG_MTD_M25P80=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
|
||||
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT=16384
|
||||
CONFIG_MTD_SST25L=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD_UBI_BEB_LIMIT=20
|
||||
# CONFIG_MTD_UBI_BLOCK is not set
|
||||
# CONFIG_MTD_UBI_FASTMAP is not set
|
||||
# CONFIG_MTD_UBI_GLUEBI is not set
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
CONFIG_MULTI_IRQ_HANDLER=y
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
CONFIG_MX3_IPU=y
|
||||
CONFIG_MX3_IPU_IRQS=4
|
||||
# CONFIG_MXS_DMA is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_NATIONAL_PHY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NEON=y
|
||||
# CONFIG_NET_CADENCE is not set
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_NET_PTP_CLASSIFY=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_NOP_TRACER=y
|
||||
CONFIG_NO_BOOTMEM=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_NVMEM=y
|
||||
# CONFIG_NVMEM_IMX_IIM is not set
|
||||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_ADDRESS_PCI=y
|
||||
CONFIG_OF_DYNAMIC=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_MDIO=y
|
||||
CONFIG_OF_NET=y
|
||||
CONFIG_OF_PCI=y
|
||||
CONFIG_OF_PCI_IRQ=y
|
||||
CONFIG_OF_RESERVED_MEM=y
|
||||
CONFIG_OLD_SIGACTION=y
|
||||
CONFIG_OLD_SIGSUSPEND3=y
|
||||
CONFIG_OUTER_CACHE=y
|
||||
CONFIG_OUTER_CACHE_SYNC=y
|
||||
CONFIG_PACKET_DIAG=y
|
||||
CONFIG_PADATA=y
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
CONFIG_PANIC_ON_OOPS_VALUE=0
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEAER=y
|
||||
CONFIG_PCIEASPM=y
|
||||
# CONFIG_PCIEASPM_DEBUG is not set
|
||||
CONFIG_PCIEASPM_DEFAULT=y
|
||||
# CONFIG_PCIEASPM_PERFORMANCE is not set
|
||||
# CONFIG_PCIEASPM_POWERSAVE is not set
|
||||
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIE_DW=y
|
||||
CONFIG_PCIE_DW_HOST=y
|
||||
CONFIG_PCIE_PME=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||
CONFIG_PCI_ECAM=y
|
||||
CONFIG_PCI_HOST_COMMON=y
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCI_LABEL=y
|
||||
CONFIG_PCI_LAYERSCAPE=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCI_MSI_IRQ_DOMAIN=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
CONFIG_PGTABLE_LEVELS=3
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PID_NS=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PL310_ERRATA_588369=y
|
||||
CONFIG_PL310_ERRATA_727915=y
|
||||
CONFIG_PL310_ERRATA_753970=y
|
||||
CONFIG_PL310_ERRATA_769419=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_CLK=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_BRCMKONA=y
|
||||
CONFIG_POWER_RESET_BRCMSTB=y
|
||||
CONFIG_POWER_RESET_GPIO=y
|
||||
CONFIG_POWER_RESET_GPIO_RESTART=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_POWER_RESET_SYSCON_POWEROFF=y
|
||||
CONFIG_POWER_RESET_VEXPRESS=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_PPS=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_PROBE_EVENTS=y
|
||||
CONFIG_PROC_CHILDREN=y
|
||||
CONFIG_PSTORE=y
|
||||
CONFIG_PSTORE_CONSOLE=y
|
||||
# CONFIG_PSTORE_LZ4_COMPRESS is not set
|
||||
# CONFIG_PSTORE_LZO_COMPRESS is not set
|
||||
CONFIG_PSTORE_PMSG=y
|
||||
CONFIG_PSTORE_RAM=y
|
||||
CONFIG_PSTORE_ZLIB_COMPRESS=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
# CONFIG_PTP_1588_CLOCK_DPAA is not set
|
||||
CONFIG_PTP_1588_CLOCK_GIANFAR=y
|
||||
CONFIG_QMAN_CEETM_UPDATE_PERIOD=1000
|
||||
CONFIG_QORIQ_CPUFREQ=y
|
||||
# CONFIG_QUICC_ENGINE is not set
|
||||
CONFIG_RAS=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=21
|
||||
# CONFIG_RCU_EXPERT is not set
|
||||
CONFIG_RCU_NEED_SEGCBLIST=y
|
||||
CONFIG_RCU_STALL_COMMON=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_RD_XZ=y
|
||||
CONFIG_REALTEK_PHY=y
|
||||
CONFIG_REED_SOLOMON=y
|
||||
CONFIG_REED_SOLOMON_DEC8=y
|
||||
CONFIG_REED_SOLOMON_ENC8=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_REGMAP_SPI=y
|
||||
# CONFIG_RESET_ATTACK_MITIGATION is not set
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RING_BUFFER=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
# CONFIG_RTC_DRV_CMOS is not set
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
# CONFIG_RTC_DRV_EFI is not set
|
||||
CONFIG_RTC_DRV_EM3027=y
|
||||
# CONFIG_RTC_DRV_IMXDI is not set
|
||||
# CONFIG_RTC_DRV_MXC is not set
|
||||
CONFIG_RTC_DRV_PCF2127=y
|
||||
CONFIG_RTC_DRV_PCF85263=y
|
||||
CONFIG_RTC_I2C_AND_SPI=y
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
# CONFIG_SCHED_INFO is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_SECCOMP_FILTER=y
|
||||
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_8250_EM=y
|
||||
CONFIG_SERIAL_8250_FSL=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_BCM63XX=y
|
||||
CONFIG_SERIAL_BCM63XX_CONSOLE=y
|
||||
CONFIG_SERIAL_CONEXANT_DIGICOLOR=y
|
||||
CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y
|
||||
CONFIG_SERIAL_FSL_LPUART=y
|
||||
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
|
||||
CONFIG_SERIAL_IMX=y
|
||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_ST_ASC=y
|
||||
CONFIG_SERIAL_ST_ASC_CONSOLE=y
|
||||
CONFIG_SERIAL_XILINX_PS_UART=y
|
||||
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
CONFIG_SG_POOL=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SMP_ON_UP=y
|
||||
CONFIG_SMSC_PHY=y
|
||||
CONFIG_SOCK_DIAG=y
|
||||
CONFIG_SOC_BRCMSTB=y
|
||||
CONFIG_SOC_BUS=y
|
||||
# CONFIG_SOC_IMX50 is not set
|
||||
# CONFIG_SOC_IMX51 is not set
|
||||
# CONFIG_SOC_IMX53 is not set
|
||||
# CONFIG_SOC_IMX6Q is not set
|
||||
# CONFIG_SOC_IMX6SL is not set
|
||||
# CONFIG_SOC_IMX6SX is not set
|
||||
# CONFIG_SOC_IMX6UL is not set
|
||||
# CONFIG_SOC_IMX7D is not set
|
||||
CONFIG_SOC_LS1021A=y
|
||||
# CONFIG_SOC_VF610 is not set
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_CADENCE=y
|
||||
# CONFIG_SPI_FSL_LPSPI is not set
|
||||
CONFIG_SPI_FSL_QUADSPI=y
|
||||
# CONFIG_SPI_IMX is not set
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_SPI_XILINX=y
|
||||
CONFIG_SPMI=y
|
||||
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
|
||||
CONFIG_SQUASHFS_DECOMP_SINGLE=y
|
||||
CONFIG_SQUASHFS_FILE_CACHE=y
|
||||
# CONFIG_SQUASHFS_FILE_DIRECT is not set
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_SQUASHFS_ZLIB=y
|
||||
CONFIG_SRAM=y
|
||||
CONFIG_SRAM_EXEC=y
|
||||
CONFIG_SRCU=y
|
||||
CONFIG_STACKTRACE=y
|
||||
CONFIG_STAGING_BOARD=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SWP_EMULATE=y
|
||||
CONFIG_SYNC_FILE=y
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_TOUCHSCREEN_PROPERTIES=y
|
||||
CONFIG_TRACEPOINTS=y
|
||||
CONFIG_TRACE_CLOCK=y
|
||||
CONFIG_TRACING=y
|
||||
CONFIG_TRACING_EVENTS_GPIO=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_TREE_SRCU=y
|
||||
CONFIG_UBIFS_FS=y
|
||||
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
|
||||
CONFIG_UBIFS_FS_LZO=y
|
||||
CONFIG_UBIFS_FS_ZLIB=y
|
||||
CONFIG_UCS2_STRING=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNIX_DIAG=y
|
||||
CONFIG_UPROBES=y
|
||||
CONFIG_UPROBE_EVENTS=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
# CONFIG_USERIO is not set
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_USE_OF=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VDSO=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_VEXPRESS_CONFIG=y
|
||||
CONFIG_VEXPRESS_SYSCFG=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_VGA_ARB=y
|
||||
CONFIG_VGA_ARB_MAX_GPUS=16
|
||||
CONFIG_VIDEOMODE_HELPERS=y
|
||||
CONFIG_VIRTIO=y
|
||||
CONFIG_VIRTIO_BLK=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
CONFIG_VIRTIO_MMIO=y
|
||||
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
|
||||
CONFIG_VIRTIO_NET=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_PCI_LEGACY=y
|
||||
CONFIG_VITESSE_PHY=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_VT_CONSOLE_SLEEP=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
|
||||
CONFIG_XILINX_WATCHDOG=y
|
||||
CONFIG_XPS=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_ARMTHUMB=y
|
||||
CONFIG_XZ_DEC_BCJ=y
|
||||
CONFIG_XZ_DEC_IA64=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
CONFIG_XZ_DEC_SPARC=y
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
@ -23,7 +23,6 @@ CONFIG_ARCH_LAYERSCAPE=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS=18
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MAX=33
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
|
||||
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
|
||||
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
|
||||
@ -54,7 +53,6 @@ CONFIG_ARM64_ERRATUM_826319=y
|
||||
CONFIG_ARM64_ERRATUM_827319=y
|
||||
CONFIG_ARM64_ERRATUM_832075=y
|
||||
CONFIG_ARM64_ERRATUM_843419=y
|
||||
CONFIG_ARM64_ERRATUM_845719=y
|
||||
CONFIG_ARM64_HW_AFDBM=y
|
||||
# CONFIG_ARM64_LSE_ATOMICS is not set
|
||||
CONFIG_ARM64_MODULE_CMODEL_LARGE=y
|
||||
@ -65,13 +63,11 @@ CONFIG_ARM64_PAN=y
|
||||
# CONFIG_ARM64_PTDUMP_DEBUGFS is not set
|
||||
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
|
||||
CONFIG_ARM64_SSBD=y
|
||||
# CONFIG_ARM64_SW_TTBR0_PAN is not set
|
||||
CONFIG_ARM64_UAO=y
|
||||
CONFIG_ARM64_VA_BITS=48
|
||||
# CONFIG_ARM64_VA_BITS_39 is not set
|
||||
CONFIG_ARM64_VA_BITS_48=y
|
||||
CONFIG_ARM64_VHE=y
|
||||
# CONFIG_ARMV8_DEPRECATED is not set
|
||||
CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_ARCH_TIMER=y
|
||||
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
||||
@ -96,7 +92,6 @@ CONFIG_ATA=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
|
||||
CONFIG_AUDIT_COMPAT_GENERIC=y
|
||||
CONFIG_AUDIT_GENERIC=y
|
||||
CONFIG_AUDIT_TREE=y
|
||||
CONFIG_AUDIT_WATCH=y
|
||||
@ -118,11 +113,9 @@ CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BLK_MQ_VIRTIO=y
|
||||
CONFIG_BLK_SCSI_REQUEST=y
|
||||
CONFIG_BLOCK_COMPAT=y
|
||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_BPF_JIT=y
|
||||
# CONFIG_BPF_SYSCALL is not set
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
@ -156,10 +149,6 @@ CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMMON_CLK_CS2000_CP=y
|
||||
CONFIG_COMMON_CLK_VERSATILE=y
|
||||
CONFIG_COMMON_CLK_XGENE=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_COMPAT_BINFMT_ELF=y
|
||||
CONFIG_COMPAT_NETLINK_MESSAGES=y
|
||||
CONFIG_COMPAT_OLD_SIGACTION=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_COREDUMP=y
|
||||
@ -198,7 +187,6 @@ CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_CRCT10DIF=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API_DESC is not set
|
||||
# CONFIG_CRYPTO_DEV_FSL_DPAA2_CAAM is not set
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
@ -225,7 +213,6 @@ CONFIG_DEFAULT_CFQ=y
|
||||
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_DEVMEM=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_DMADEVICES=y
|
||||
@ -320,6 +307,7 @@ CONFIG_FSL_DPAA2_ETHSW=y
|
||||
CONFIG_FSL_DPAA2_EVB=y
|
||||
CONFIG_FSL_DPAA2_MAC=y
|
||||
# CONFIG_FSL_DPAA2_MAC_NETDEVS is not set
|
||||
CONFIG_FSL_DPAA2_PTP_CLOCK=y
|
||||
# CONFIG_FSL_DPAA2_QDMA is not set
|
||||
# CONFIG_FSL_DPAA_1588 is not set
|
||||
CONFIG_FSL_DPAA_ADVANCED_DRIVERS=y
|
||||
@ -332,7 +320,6 @@ CONFIG_FSL_DPAA_ETH_DEBUGFS=y
|
||||
# CONFIG_FSL_DPAA_ETH_JUMBO_FRAME is not set
|
||||
CONFIG_FSL_DPAA_ETH_MAX_BUF_COUNT=128
|
||||
CONFIG_FSL_DPAA_ETH_REFILL_THRESHOLD=80
|
||||
CONFIG_FSL_DPAA_ETH_USE_NDO_SELECT_QUEUE=y
|
||||
# CONFIG_FSL_DPAA_HOOKS is not set
|
||||
CONFIG_FSL_DPAA_INGRESS_CS_THRESHOLD=0x10000000
|
||||
CONFIG_FSL_DPAA_OFFLINE_PORTS=y
|
||||
@ -358,6 +345,7 @@ CONFIG_FSL_PPFE=y
|
||||
CONFIG_FSL_PPFE_UTIL_DISABLED=y
|
||||
# CONFIG_FSL_QBMAN_DEBUG is not set
|
||||
# CONFIG_FSL_QDMA is not set
|
||||
CONFIG_FSL_QIXIS=y
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_BMAN_W=2
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_RW_W=2
|
||||
CONFIG_FSL_QMAN_CI_SCHED_CFG_SRCCIV=4
|
||||
@ -433,7 +421,6 @@ CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HAVE_ARCH_JUMP_LABEL=y
|
||||
CONFIG_HAVE_ARCH_KASAN=y
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
|
||||
CONFIG_HAVE_ARCH_PFN_VALID=y
|
||||
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
|
||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||
@ -474,7 +461,6 @@ CONFIG_HAVE_RCU_TABLE_FREE=y
|
||||
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
|
||||
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
|
||||
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
|
||||
CONFIG_HAVE_UID16=y
|
||||
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
CONFIG_HIBERNATE_CALLBACKS=y
|
||||
CONFIG_HIBERNATION=y
|
||||
@ -527,6 +513,7 @@ CONFIG_INET_DIAG=y
|
||||
# CONFIG_INET_RAW_DIAG is not set
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_INPHI_PHY=y
|
||||
CONFIG_INPUT=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
@ -586,6 +573,7 @@ CONFIG_MDIO_BITBANG=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_BUS_MUX=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
# CONFIG_MDIO_FSL_BACKPLANE is not set
|
||||
# CONFIG_MDIO_GPIO is not set
|
||||
@ -593,6 +581,7 @@ CONFIG_MEMORY=y
|
||||
CONFIG_MEMORY_BALLOON=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MEMTEST=y
|
||||
CONFIG_MFD_CORE=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
# CONFIG_MFD_VEXPRESS_SYSREG is not set
|
||||
CONFIG_MICREL_PHY=y
|
||||
@ -650,7 +639,11 @@ CONFIG_MTD_UBI_BEB_LIMIT=20
|
||||
# CONFIG_MTD_UBI_FASTMAP is not set
|
||||
# CONFIG_MTD_UBI_GLUEBI is not set
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
CONFIG_MULTIPLEXER=y
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
# CONFIG_MUX_ADG792A is not set
|
||||
# CONFIG_MUX_GPIO is not set
|
||||
CONFIG_MUX_MMIO=y
|
||||
CONFIG_MV_XOR_V2=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
@ -688,7 +681,6 @@ CONFIG_OF_NUMA=y
|
||||
CONFIG_OF_PCI=y
|
||||
CONFIG_OF_PCI_IRQ=y
|
||||
CONFIG_OF_RESERVED_MEM=y
|
||||
CONFIG_OLD_SIGSUSPEND3=y
|
||||
CONFIG_PACKET_DIAG=y
|
||||
CONFIG_PADATA=y
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
@ -708,6 +700,9 @@ CONFIG_PCIEASPM_DEFAULT=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIE_DW=y
|
||||
CONFIG_PCIE_DW_HOST=y
|
||||
# CONFIG_PCIE_DW_PLAT_HOST is not set
|
||||
CONFIG_PCIE_MOBIVEIL=y
|
||||
CONFIG_PCIE_MOBIVEIL_HOST=y
|
||||
CONFIG_PCIE_PME=y
|
||||
CONFIG_PCI_ATS=y
|
||||
CONFIG_PCI_BUS_ADDR_T_64BIT=y
|
||||
@ -720,6 +715,7 @@ CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCI_IOV=y
|
||||
CONFIG_PCI_LABEL=y
|
||||
CONFIG_PCI_LAYERSCAPE=y
|
||||
CONFIG_PCI_LAYERSCAPE_GEN4=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCI_MSI_IRQ_DOMAIN=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
@ -737,8 +733,6 @@ CONFIG_PM_OPP=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_PM_SLEEP_SMP=y
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_POWER_RESET_VEXPRESS=y
|
||||
@ -754,8 +748,7 @@ CONFIG_PRINT_QUOTA_WARNING=y
|
||||
CONFIG_PROC_CHILDREN=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
# CONFIG_PTP_1588_CLOCK_DPAA is not set
|
||||
CONFIG_PTP_1588_CLOCK_DPAA2=y
|
||||
CONFIG_PTP_1588_CLOCK_QORIQ=y
|
||||
CONFIG_QCOM_HIDMA=y
|
||||
CONFIG_QCOM_HIDMA_MGMT=y
|
||||
CONFIG_QCOM_QDF2400_ERRATUM_0065=y
|
||||
@ -844,6 +837,7 @@ CONFIG_SPI=y
|
||||
CONFIG_SPI_FSL_DSPI=y
|
||||
CONFIG_SPI_FSL_QUADSPI=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_NXP_FLEXSPI=y
|
||||
CONFIG_SPI_PL022=y
|
||||
CONFIG_SPMI=y
|
||||
# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
|
||||
@ -861,10 +855,8 @@ CONFIG_SWIOTLB=y
|
||||
CONFIG_SWIOTLB_XEN=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SYNC_FILE=y
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
||||
CONFIG_SYSFS_SYSCALL=y
|
||||
CONFIG_SYSVIPC_COMPAT=y
|
||||
CONFIG_SYS_HYPERVISOR=y
|
||||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
CONFIG_TASKSTATS=y
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright 2015-2018 Traverse Technologies
|
||||
# Copyright 2015-2019 Traverse Technologies
|
||||
#
|
||||
platform_do_upgrade_traverse_nandubi() {
|
||||
bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}')
|
||||
@ -8,60 +9,25 @@ platform_do_upgrade_traverse_nandubi() {
|
||||
if [ "$bootsys" -eq "2" ]; then
|
||||
newbootsys=1
|
||||
fi
|
||||
mkdir -p /tmp/image
|
||||
cd /tmp/image
|
||||
get_image "$1" > image.tar
|
||||
ls -la image.tar
|
||||
files=$(tar -tf image.tar)
|
||||
echo "Files in image:"
|
||||
echo $files
|
||||
for f in $files
|
||||
do
|
||||
part_name=$(echo $f | awk -F '/' '{{print $2}}')
|
||||
if [ -z "$part_name" ] || [ "$part_name" = "CONTROL" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
[ "$part_name" = "root" ] && part_name="rootfs"
|
||||
|
||||
volume=$part_name
|
||||
if [ "$part_name" = "kernel" ] || [ "$part_name" = "rootfs" ]; then
|
||||
volume="${part_name}${newbootsys}"
|
||||
fi
|
||||
volume_id=$(ubinfo -d 0 --name $volume | awk '/Volume ID/ {print $3}')
|
||||
file_size=$(tar -tvf image.tar $f | awk '{{print $3}}')
|
||||
echo "$f size $file_size"
|
||||
tar -xOf image.tar $f | ubiupdatevol -s $file_size /dev/ubi0_$volume_id -
|
||||
|
||||
echo "$volume upgraded"
|
||||
done
|
||||
# If nand_do_upgrade succeeds, we don't have an opportunity to add any actions of
|
||||
# our own, so do it here and set back on failure
|
||||
echo "Setting bootsys to #${newbootsys}"
|
||||
fw_setenv bootsys $newbootsys
|
||||
echo "Upgrade complete"
|
||||
}
|
||||
platform_copy_config() {
|
||||
bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}')
|
||||
rootvol=rootfs$bootsys
|
||||
volume_id=$(ubinfo -d 0 --name $rootvol | awk '/Volume ID/ {print $3}')
|
||||
mkdir -p /mnt/oldsys
|
||||
mount -t ubifs -o rw,noatime /dev/ubi0_$volume_id /mnt/oldsys
|
||||
cp -af "$CONF_TAR" /mnt/oldsys
|
||||
umount /mnt/oldsys
|
||||
CI_UBIPART="nandubi"
|
||||
CI_KERNPART="kernel${newbootsys}"
|
||||
CI_ROOTPART="rootfs${newbootsys}"
|
||||
nand_do_upgrade "$ARGV" || (echo "Upgrade failed, setting bootsys ${bootsys}" && fw_setenv bootsys $bootsys)
|
||||
|
||||
}
|
||||
platform_check_image() {
|
||||
local board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
traverse,ls1043v | \
|
||||
traverse,ls1043s | \
|
||||
traverse,five64)
|
||||
local tar_file="$1"
|
||||
local kernel_length=$( (tar xf $tar_file sysupgrade-traverse-five64/kernel -O | wc -c) 2> /dev/null)
|
||||
local rootfs_length=$( (tar xf $tar_file sysupgrade-traverse-five64/root -O | wc -c) 2> /dev/null)
|
||||
[ "$kernel_length" -eq 0 -o "$rootfs_length" -eq 0 ] && {
|
||||
echo "The upgrade image is corrupt."
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
traverse,ls1043s)
|
||||
nand_do_platform_check "traverse-ls1043" $1
|
||||
return $?
|
||||
;;
|
||||
*)
|
||||
echo "Sysupgrade is not currently supported on $board"
|
||||
@ -75,8 +41,7 @@ platform_do_upgrade() {
|
||||
|
||||
case "$board" in
|
||||
traverse,ls1043v | \
|
||||
traverse,ls1043s | \
|
||||
traverse,five64)
|
||||
traverse,ls1043s)
|
||||
platform_do_upgrade_traverse_nandubi "$ARGV"
|
||||
;;
|
||||
*)
|
||||
@ -88,7 +53,7 @@ platform_pre_upgrade() {
|
||||
# Force the creation of fw_printenv.lock
|
||||
mkdir -p /var/lock
|
||||
touch /var/lock/fw_printenv.lock
|
||||
|
||||
|
||||
export RAMFS_COPY_BIN="/usr/sbin/fw_printenv /usr/sbin/fw_setenv /usr/sbin/ubinfo /bin/echo ${RAMFS_COPY_BIN}"
|
||||
export RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock ${RAMFS_COPY_DATA}"
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys-polled {
|
||||
keys {
|
||||
compatible = "gpio-keys-polled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@ -95,7 +95,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys-polled {
|
||||
keys {
|
||||
compatible = "gpio-keys-polled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@ -7,8 +7,6 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/image.mk
|
||||
|
||||
ITB_BOARDS = traverse-five64
|
||||
|
||||
LS_SD_ROOTFSPART_OFFSET = 64
|
||||
LS_SD_IMAGE_SIZE = $(shell echo $$((($(LS_SD_ROOTFSPART_OFFSET) + \
|
||||
$(CONFIG_TARGET_ROOTFS_PARTSIZE)) * 1024 * 1024)))
|
||||
@ -49,10 +47,6 @@ ifeq ($(SUBTARGET),armv8_64b)
|
||||
include armv8_64b.mk
|
||||
endif
|
||||
|
||||
ifeq ($(SUBTARGET),armv8_32b)
|
||||
include armv8_32b.mk
|
||||
endif
|
||||
|
||||
ifeq ($(SUBTARGET),armv7)
|
||||
include armv7.mk
|
||||
endif
|
||||
|
||||
@ -1,116 +0,0 @@
|
||||
#
|
||||
# Copyright 2018 NXP
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
define Device/Default
|
||||
PROFILES := Default
|
||||
IMAGES := firmware.bin
|
||||
FILESYSTEMS := ubifs
|
||||
MKUBIFS_OPTS := -m 1 -e 262016 -c 128
|
||||
KERNEL := kernel-bin | uImage none
|
||||
KERNEL_NAME := zImage
|
||||
KERNEL_LOADADDR := 0x80008000
|
||||
KERNEL_ENTRY_POINT := 0x80008000
|
||||
endef
|
||||
|
||||
define Device/ls1012ardb
|
||||
DEVICE_TITLE := LS1012ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1012ardb \
|
||||
layerscape-ppfe \
|
||||
layerscape-ppa-ls1012ardb \
|
||||
u-boot-ls1012ardb-image \
|
||||
kmod-ppfe
|
||||
DEVICE_DTS := ../../../arm64/boot/dts/freescale/fsl-ls1012a-rdb
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 256KiB
|
||||
PAGESIZE := 1
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 10M | \
|
||||
ls-append pfe.itb | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
append-ubi | check-size 67108865
|
||||
endef
|
||||
TARGET_DEVICES += ls1012ardb
|
||||
|
||||
define Device/ls1012afrwy
|
||||
DEVICE_TITLE := LS1012AFRWY
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1012afrwy \
|
||||
layerscape-ppfe \
|
||||
layerscape-ppa-ls1012afrwy \
|
||||
u-boot-ls1012afrwy-image \
|
||||
kmod-ppfe
|
||||
DEVICE_DTS := ../../../arm64/boot/dts/freescale/fsl-ls1012a-frwy
|
||||
FILESYSTEMS := ext4
|
||||
IMAGES := firmware.bin sdcard.img
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 128K | \
|
||||
ls-append pfe.itb | pad-to 384K | \
|
||||
ls-append $(1)-ppa.itb | pad-to 1024K | \
|
||||
ls-append $(1)-uboot.bin | pad-to 1856K | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 2048K | \
|
||||
check-size 2097153
|
||||
IMAGE/sdcard.img := \
|
||||
ls-clean | \
|
||||
ls-append-sdhead $(1) | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \
|
||||
append-rootfs | check-size $(LS_SD_IMAGE_SIZE)
|
||||
endef
|
||||
TARGET_DEVICES += ls1012afrwy
|
||||
|
||||
define Device/ls1043ardb
|
||||
DEVICE_TITLE := LS1043ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1043ardb \
|
||||
layerscape-fman-ls1043ardb \
|
||||
layerscape-ppa-ls1043ardb \
|
||||
u-boot-ls1043ardb-image
|
||||
DEVICE_DTS := ../../../arm64/boot/dts/freescale/fsl-ls1043a-rdb-sdk
|
||||
FILESYSTEMS := squashfs
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
append-rootfs | pad-rootfs | check-size 67108865
|
||||
endef
|
||||
TARGET_DEVICES += ls1043ardb
|
||||
|
||||
define Device/ls1046ardb
|
||||
DEVICE_TITLE := LS1046ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1046ardb \
|
||||
layerscape-fman-ls1046ardb \
|
||||
layerscape-ppa-ls1046ardb \
|
||||
u-boot-ls1046ardb-image
|
||||
DEVICE_DTS := ../../../arm64/boot/dts/freescale/fsl-ls1046a-rdb-sdk
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 256KiB
|
||||
PAGESIZE := 1
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
append-ubi | check-size 67108865
|
||||
endef
|
||||
TARGET_DEVICES += ls1046ardb
|
||||
@ -18,9 +18,8 @@ endef
|
||||
define Device/ls1012ardb
|
||||
DEVICE_TITLE := LS1012ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1012ardb \
|
||||
layerscape-ppfe \
|
||||
layerscape-ppa-ls1012ardb \
|
||||
tfa-ls1012ardb \
|
||||
kmod-ppfe
|
||||
DEVICE_DTS := freescale/fsl-ls1012a-rdb
|
||||
UBINIZE_OPTS := -E 5
|
||||
@ -28,10 +27,9 @@ define Device/ls1012ardb
|
||||
PAGESIZE := 1
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 10M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 10M | \
|
||||
ls-append pfe.itb | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
@ -42,19 +40,17 @@ TARGET_DEVICES += ls1012ardb
|
||||
define Device/ls1012afrwy
|
||||
DEVICE_TITLE := LS1012AFRWY
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1012afrwy \
|
||||
layerscape-ppfe \
|
||||
layerscape-ppa-ls1012afrwy \
|
||||
tfa-ls1012afrwy \
|
||||
kmod-ppfe
|
||||
DEVICE_DTS := freescale/fsl-ls1012a-frwy
|
||||
FILESYSTEMS := ext4
|
||||
IMAGES := firmware.bin sdcard.img
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 128K | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 128K | \
|
||||
ls-append pfe.itb | pad-to 384K | \
|
||||
ls-append $(1)-ppa.itb | pad-to 1024K | \
|
||||
ls-append $(1)-uboot.bin | pad-to 1856K | \
|
||||
ls-append $(1)-fip.bin | pad-to 1856K | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 2048K | \
|
||||
check-size 2097153
|
||||
IMAGE/sdcard.img := \
|
||||
@ -69,17 +65,16 @@ TARGET_DEVICES += ls1012afrwy
|
||||
define Device/ls1043ardb
|
||||
DEVICE_TITLE := LS1043ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1043ardb \
|
||||
layerscape-fman-ls1043ardb \
|
||||
layerscape-ppa-ls1043ardb
|
||||
tfa-ls1043ardb \
|
||||
fmc fmc-eth-config
|
||||
DEVICE_DTS := freescale/fsl-ls1043a-rdb-sdk
|
||||
FILESYSTEMS := squashfs
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 9M | \
|
||||
ls-append $(1)-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
@ -91,16 +86,17 @@ define Device/ls1043ardb-sdboot
|
||||
DEVICE_TITLE := LS1043ARDB (SD Card Boot)
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-fman-ls1043ardb \
|
||||
layerscape-ppa-ls1043ardb
|
||||
tfa-ls1043ardb-sdboot \
|
||||
fmc fmc-eth-config
|
||||
DEVICE_DTS := freescale/fsl-ls1043a-rdb-sdk
|
||||
FILESYSTEMS := ext4
|
||||
IMAGES := sdcard.img
|
||||
IMAGE/sdcard.img := \
|
||||
ls-clean | \
|
||||
ls-append-sdhead $(1) | pad-to 4K | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append ls1043ardb-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 9M | \
|
||||
ls-append ls1043ardb-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \
|
||||
@ -111,19 +107,18 @@ TARGET_DEVICES += ls1043ardb-sdboot
|
||||
define Device/ls1046ardb
|
||||
DEVICE_TITLE := LS1046ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1046ardb \
|
||||
layerscape-fman-ls1046ardb \
|
||||
layerscape-ppa-ls1046ardb
|
||||
tfa-ls1046ardb \
|
||||
fmc fmc-eth-config
|
||||
DEVICE_DTS := freescale/fsl-ls1046a-rdb-sdk
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 256KiB
|
||||
PAGESIZE := 1
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 9M | \
|
||||
ls-append $(1)-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to 32M | \
|
||||
@ -135,16 +130,17 @@ define Device/ls1046ardb-sdboot
|
||||
DEVICE_TITLE := LS1046ARDB (SD Card Boot)
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-fman-ls1046ardb \
|
||||
layerscape-ppa-ls1046ardb
|
||||
tfa-ls1046ardb-sdboot \
|
||||
fmc fmc-eth-config
|
||||
DEVICE_DTS := freescale/fsl-ls1046a-rdb-sdk
|
||||
FILESYSTEMS := ext4
|
||||
IMAGES := sdcard.img
|
||||
IMAGE/sdcard.img := \
|
||||
ls-clean | \
|
||||
ls-append-sdhead $(1) | pad-to 4K | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append ls1046ardb-ppa.itb | pad-to 9M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 9M | \
|
||||
ls-append ls1046ardb-fman.bin | pad-to 15M | \
|
||||
ls-append-dtb $$(DEVICE_DTS) | pad-to 16M | \
|
||||
append-kernel | pad-to $(LS_SD_ROOTFSPART_OFFSET)M | \
|
||||
@ -155,10 +151,9 @@ TARGET_DEVICES += ls1046ardb-sdboot
|
||||
define Device/ls1088ardb
|
||||
DEVICE_TITLE := LS1088ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1088ardb \
|
||||
layerscape-mc-ls1088ardb \
|
||||
layerscape-dpl-ls1088ardb \
|
||||
layerscape-ppa-ls1088ardb \
|
||||
tfa-ls1088ardb \
|
||||
restool
|
||||
DEVICE_DTS := freescale/fsl-ls1088a-rdb
|
||||
UBINIZE_OPTS := -E 5
|
||||
@ -166,10 +161,9 @@ define Device/ls1088ardb
|
||||
PAGESIZE := 1
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 10M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 10M | \
|
||||
ls-append $(1)-mc.itb | pad-to 13M | \
|
||||
ls-append $(1)-dpl.dtb | pad-to 14M | \
|
||||
ls-append $(1)-dpc.dtb | pad-to 15M | \
|
||||
@ -182,10 +176,9 @@ TARGET_DEVICES += ls1088ardb
|
||||
define Device/ls1088ardb-sdboot
|
||||
DEVICE_TITLE := LS1088ARDB (SD Card Boot)
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls1088ardb-sdboot \
|
||||
layerscape-mc-ls1088ardb \
|
||||
layerscape-dpl-ls1088ardb \
|
||||
layerscape-ppa-ls1088ardb \
|
||||
tfa-ls1088ardb-sdboot \
|
||||
restool
|
||||
DEVICE_DTS := freescale/fsl-ls1088a-rdb
|
||||
FILESYSTEMS := ext4
|
||||
@ -193,10 +186,9 @@ define Device/ls1088ardb-sdboot
|
||||
IMAGE/sdcard.img := \
|
||||
ls-clean | \
|
||||
ls-append-sdhead $(1) | pad-to 4K | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append ls1088ardb-ppa.itb | pad-to 10M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 10M | \
|
||||
ls-append ls1088ardb-mc.itb | pad-to 13M | \
|
||||
ls-append ls1088ardb-dpl.dtb | pad-to 14M | \
|
||||
ls-append ls1088ardb-dpc.dtb | pad-to 15M | \
|
||||
@ -209,19 +201,17 @@ TARGET_DEVICES += ls1088ardb-sdboot
|
||||
define Device/ls2088ardb
|
||||
DEVICE_TITLE := LS2088ARDB
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-rcw-ls2088ardb \
|
||||
layerscape-mc-ls2088ardb \
|
||||
layerscape-dpl-ls2088ardb \
|
||||
layerscape-ppa-ls2088ardb \
|
||||
tfa-ls2088ardb \
|
||||
restool
|
||||
DEVICE_DTS := freescale/fsl-ls2088a-rdb
|
||||
FILESYSTEMS := squashfs
|
||||
IMAGE/firmware.bin := \
|
||||
ls-clean | \
|
||||
ls-append $(1)-rcw.bin | pad-to 1M | \
|
||||
ls-append $(1)-uboot.bin | pad-to 3M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 4M | \
|
||||
ls-append $(1)-ppa.itb | pad-to 10M | \
|
||||
ls-append $(1)-bl2.pbl | pad-to 1M | \
|
||||
ls-append $(1)-fip.bin | pad-to 5M | \
|
||||
ls-append $(1)-uboot-env.bin | pad-to 10M | \
|
||||
ls-append $(1)-mc.itb | pad-to 13M | \
|
||||
ls-append $(1)-dpl.dtb | pad-to 14M | \
|
||||
ls-append $(1)-dpc.dtb | pad-to 15M | \
|
||||
@ -231,18 +221,18 @@ define Device/ls2088ardb
|
||||
endef
|
||||
TARGET_DEVICES += ls2088ardb
|
||||
|
||||
define Device/traverse-five64
|
||||
define Device/traverse-ls1043
|
||||
KERNEL_NAME := Image
|
||||
KERNEL_SUFFIX := -kernel.itb
|
||||
KERNEL_INSTALL := 1
|
||||
FDT_LOADADDR = 0x90000000
|
||||
FILESYSTEMS := ubifs
|
||||
DEVICE_TITLE := Traverse LS1043 Boards (Five64, LS1043S)
|
||||
DEVICE_TITLE := Traverse LS1043 Boards
|
||||
DEVICE_PACKAGES += \
|
||||
layerscape-fman-ls1043ardb \
|
||||
uboot-envtools uboot-traverse-ls1043v uboot-traverse-ls1043v-sdcard \
|
||||
uboot-envtools \
|
||||
kmod-i2c-core kmod-i2c-mux-pca954x \
|
||||
kmod-hwmon-core kmod-hwmon-ltc2990 kmod-hwmon-pac1934 kmod-hwmon-emc17xx\
|
||||
kmod-hwmon-core \
|
||||
kmod-gpio-pca953x kmod-input-gpio-keys-polled \
|
||||
kmod-rtc-isl1208
|
||||
DEVICE_DESCRIPTION = \
|
||||
@ -253,9 +243,9 @@ define Device/traverse-five64
|
||||
DEVICE_DTS_CONFIG = ls1043s
|
||||
KERNEL := kernel-bin | gzip | traverse-fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb $$(FDT_LOADADDR)
|
||||
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb $$(FDT_LOADADDR)
|
||||
IMAGES = root sysupgrade.tar
|
||||
IMAGES = root sysupgrade.bin
|
||||
IMAGE/root = append-rootfs
|
||||
IMAGE/sysupgrade.tar = sysupgrade-tar
|
||||
IMAGE/sysupgrade.bin = sysupgrade-tar | append-metadata
|
||||
MKUBIFS_OPTS := -m 2048 -e 124KiB -c 4096
|
||||
endef
|
||||
TARGET_DEVICES += traverse-five64
|
||||
TARGET_DEVICES += traverse-ls1043
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
From 0bafdb711c1a61fbe5bb5b4d4bb5e32425d95a72 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Fri, 16 Nov 2018 15:36:03 +0800
|
||||
From 2a1351617985ef47581de825ae1bbf1d42bf3200 Mon Sep 17 00:00:00 2001
|
||||
From: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Date: Mon, 6 May 2019 17:29:32 +0800
|
||||
Subject: [PATCH] config: support layerscape
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
@ -10,45 +10,65 @@ This is an integrated patch of config for layerscape
|
||||
|
||||
Signed-off-by: Alison Wang <alison.wang@nxp.com>
|
||||
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
|
||||
Signed-off-by: Calvin Johnson <calvin.johnson@nxp.com>
|
||||
Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
|
||||
Signed-off-by: Chenhui Zhao <chenhui.zhao@nxp.com>
|
||||
Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita@nxp.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
|
||||
Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
|
||||
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
||||
Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
|
||||
Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
|
||||
Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
|
||||
Signed-off-by: Pankit Garg <pankit.garg@nxp.com>
|
||||
Signed-off-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
|
||||
Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
|
||||
Signed-off-by: Razvan Stefanescu <razvan.stefanescu@nxp.com>
|
||||
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@nxp.com>
|
||||
Signed-off-by: Subrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
|
||||
Signed-off-by: Xiaowei Bao <xiaowei.bao@nxp.com>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Signed-off-by: Yogesh Gaur <yogeshnarayan.gaur@nxp.com>
|
||||
Signed-off-by: Zhang Ying-22455 <ying.zhang22455@nxp.com>
|
||||
Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
||||
---
|
||||
drivers/Makefile | 2 ++
|
||||
drivers/irqchip/Makefile | 1 +
|
||||
drivers/net/ethernet/freescale/Kconfig | 14 ++++----
|
||||
drivers/net/ethernet/freescale/Kconfig | 14 +++++----
|
||||
drivers/net/ethernet/freescale/Makefile | 3 ++
|
||||
drivers/ptp/Kconfig | 29 +++++++++++++++++
|
||||
drivers/ptp/Kconfig | 16 +++++-----
|
||||
drivers/soc/Kconfig | 1 +
|
||||
drivers/soc/fsl/Kconfig | 11 +++++++
|
||||
drivers/soc/fsl/Kconfig.arm | 16 +++++++++
|
||||
drivers/soc/fsl/Makefile | 3 ++
|
||||
drivers/soc/fsl/Kconfig | 22 +++++++++++++
|
||||
drivers/soc/fsl/Kconfig.arm | 16 ++++++++++
|
||||
drivers/soc/fsl/Makefile | 5 +++
|
||||
drivers/soc/fsl/layerscape/Kconfig | 10 ++++++
|
||||
drivers/soc/fsl/layerscape/Makefile | 1 +
|
||||
drivers/staging/Kconfig | 4 +++
|
||||
drivers/staging/Makefile | 2 ++
|
||||
drivers/staging/fsl-dpaa2/Kconfig | 43 ++++++++++++++++++++++++-
|
||||
drivers/staging/fsl-dpaa2/Kconfig | 56 ++++++++++++++++++++++++++++++++-
|
||||
drivers/staging/fsl-dpaa2/Makefile | 4 +++
|
||||
14 files changed, 135 insertions(+), 7 deletions(-)
|
||||
15 files changed, 142 insertions(+), 15 deletions(-)
|
||||
create mode 100644 drivers/soc/fsl/Kconfig.arm
|
||||
create mode 100644 drivers/soc/fsl/layerscape/Kconfig
|
||||
create mode 100644 drivers/soc/fsl/layerscape/Makefile
|
||||
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -20,6 +20,8 @@ obj-$(CONFIG_PCI) += pci/
|
||||
obj-$(CONFIG_PCI_ENDPOINT) += pci/endpoint/
|
||||
# PCI dwc controller drivers
|
||||
obj-y += pci/dwc/
|
||||
+# PCI mobiveil controller drivers
|
||||
+obj-y += pci/mobiveil/
|
||||
|
||||
obj-$(CONFIG_PARISC) += parisc/
|
||||
obj-$(CONFIG_RAPIDIO) += rapidio/
|
||||
--- a/drivers/irqchip/Makefile
|
||||
+++ b/drivers/irqchip/Makefile
|
||||
@@ -80,3 +80,4 @@ obj-$(CONFIG_ARCH_ASPEED) += irq-aspeed
|
||||
@ -106,42 +126,34 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
obj-$(CONFIG_FSL_DPAA_ETH) += dpaa/
|
||||
--- a/drivers/ptp/Kconfig
|
||||
+++ b/drivers/ptp/Kconfig
|
||||
@@ -55,6 +55,35 @@ config PTP_1588_CLOCK_GIANFAR
|
||||
@@ -41,19 +41,19 @@ config PTP_1588_CLOCK_DTE
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called gianfar_ptp.
|
||||
will be called ptp_dte.
|
||||
|
||||
-config PTP_1588_CLOCK_GIANFAR
|
||||
- tristate "Freescale eTSEC as PTP clock"
|
||||
- depends on GIANFAR
|
||||
+config PTP_1588_CLOCK_QORIQ
|
||||
+ tristate "Freescale QorIQ 1588 timer as PTP clock"
|
||||
+ depends on GIANFAR || FSL_DPAA_ETH || FSL_SDK_DPAA_ETH
|
||||
depends on PTP_1588_CLOCK
|
||||
default y
|
||||
help
|
||||
- This driver adds support for using the eTSEC as a PTP
|
||||
- clock. This clock is only useful if your PTP programs are
|
||||
- getting hardware time stamps on the PTP Ethernet packets
|
||||
- using the SO_TIMESTAMPING API.
|
||||
+ This driver adds support for using the Freescale QorIQ 1588
|
||||
+ timer as a PTP clock. This clock is only useful if your PTP
|
||||
+ programs are getting hardware time stamps on the PTP Ethernet
|
||||
+ packets using the SO_TIMESTAMPING API.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
- will be called gianfar_ptp.
|
||||
+ will be called ptp_qoriq.
|
||||
|
||||
+config PTP_1588_CLOCK_DPAA
|
||||
+ tristate "Freescale DPAA as PTP clock"
|
||||
+ depends on FSL_SDK_DPAA_ETH
|
||||
+ select PTP_1588_CLOCK
|
||||
+ select FSL_DPAA_TS
|
||||
+ default n
|
||||
+ help
|
||||
+ This driver adds support for using the DPAA 1588 timer module
|
||||
+ as a PTP clock. This clock is only useful if your PTP programs are
|
||||
+ getting hardware time stamps on the PTP Ethernet packets
|
||||
+ using the SO_TIMESTAMPING API.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the module
|
||||
+ will be called dpaa_ptp.
|
||||
+
|
||||
+config PTP_1588_CLOCK_DPAA2
|
||||
+ tristate "Freescale DPAA2 as PTP clock"
|
||||
+ depends on FSL_DPAA2_ETH
|
||||
+ select PTP_1588_CLOCK
|
||||
+ default y
|
||||
+ help
|
||||
+ This driver adds support for using the DPAA2 1588 timer module
|
||||
+ as a PTP clock. This clock is only useful if your PTP programs are
|
||||
+ getting hardware time stamps on the PTP Ethernet packets
|
||||
+ using the SO_TIMESTAMPING API.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the module
|
||||
+ will be called dpaa2-rtc.
|
||||
+
|
||||
config PTP_1588_CLOCK_IXP46X
|
||||
tristate "Intel IXP46x as PTP clock"
|
||||
depends on IXP4XX_ETH
|
||||
--- a/drivers/soc/Kconfig
|
||||
+++ b/drivers/soc/Kconfig
|
||||
@@ -5,6 +5,7 @@ source "drivers/soc/amlogic/Kconfig"
|
||||
@ -154,11 +166,22 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
source "drivers/soc/qcom/Kconfig"
|
||||
--- a/drivers/soc/fsl/Kconfig
|
||||
+++ b/drivers/soc/fsl/Kconfig
|
||||
@@ -16,3 +16,14 @@ config FSL_GUTS
|
||||
@@ -16,3 +16,25 @@ config FSL_GUTS
|
||||
Initially only reading SVR and registering soc device are supported.
|
||||
Other guts accesses, such as reading RCW, should eventually be moved
|
||||
into this driver as well.
|
||||
+
|
||||
+config FSL_QIXIS
|
||||
+ tristate "QIXIS system controller driver"
|
||||
+ depends on OF
|
||||
+ select REGMAP_I2C
|
||||
+ select REGMAP_MMIO
|
||||
+ select MFD_CORE
|
||||
+ default n
|
||||
+ help
|
||||
+ Say y here to enable QIXIS system controller api. The qixis driver
|
||||
+ provides FPGA functions to control system.
|
||||
+
|
||||
+config FSL_SLEEP_FSM
|
||||
+ bool
|
||||
+ help
|
||||
@ -190,11 +213,14 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+endif
|
||||
--- a/drivers/soc/fsl/Makefile
|
||||
+++ b/drivers/soc/fsl/Makefile
|
||||
@@ -6,3 +6,6 @@ obj-$(CONFIG_FSL_DPAA) +
|
||||
@@ -5,4 +5,9 @@
|
||||
obj-$(CONFIG_FSL_DPAA) += qbman/
|
||||
obj-$(CONFIG_QUICC_ENGINE) += qe/
|
||||
obj-$(CONFIG_CPM) += qe/
|
||||
+obj-$(CONFIG_FSL_QIXIS) += qixis_ctrl.o
|
||||
obj-$(CONFIG_FSL_GUTS) += guts.o
|
||||
+obj-$(CONFIG_FSL_LS2_CONSOLE) += ls2-console/
|
||||
+obj-$(CONFIG_SUSPEND) += rcpm.o
|
||||
+obj-$(CONFIG_LS_SOC_DRIVERS) += layerscape/
|
||||
+obj-$(CONFIG_FSL_SLEEP_FSM) += sleep_fsm.o
|
||||
--- /dev/null
|
||||
@ -244,7 +270,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---help---
|
||||
Build drivers for Freescale DataPath Acceleration
|
||||
Architecture (DPAA2) family of SoCs.
|
||||
@@ -16,3 +16,44 @@ config FSL_DPAA2_ETH
|
||||
@@ -16,3 +16,57 @@ config FSL_DPAA2_ETH
|
||||
---help---
|
||||
Ethernet driver for Freescale DPAA2 SoCs, using the
|
||||
Freescale MC bus driver
|
||||
@ -277,6 +303,19 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ (PFC) in the driver.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+config FSL_DPAA2_PTP_CLOCK
|
||||
+ tristate "Freescale DPAA2 as PTP clock"
|
||||
+ select PTP_1588_CLOCK
|
||||
+ default y
|
||||
+ help
|
||||
+ This driver adds support for using the DPAA2 1588 timer module
|
||||
+ as a PTP clock. This clock is only useful if your PTP programs are
|
||||
+ getting hardware time stamps on the PTP Ethernet packets
|
||||
+ using the SO_TIMESTAMPING API.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the module
|
||||
+ will be called dpaa2-rtc.
|
||||
+endif
|
||||
+
|
||||
+source "drivers/staging/fsl-dpaa2/mac/Kconfig"
|
||||
@ -297,5 +336,5 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
obj-$(CONFIG_FSL_DPAA2_ETH) += ethernet/
|
||||
+obj-$(CONFIG_FSL_DPAA2_MAC) += mac/
|
||||
+obj-$(CONFIG_FSL_DPAA2_EVB) += evb/
|
||||
+obj-$(CONFIG_PTP_1588_CLOCK_DPAA2) += rtc/
|
||||
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += rtc/
|
||||
+obj-$(CONFIG_FSL_DPAA2_ETHSW) += ethsw/
|
||||
|
||||
@ -1,54 +1,301 @@
|
||||
From 74243154052af635ee9ce9d07aab273ce219c855 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Thu, 13 Dec 2018 13:23:52 +0800
|
||||
From d2ef9f2f6d16d34d7eee74cb8efd269341fec5a1 Mon Sep 17 00:00:00 2001
|
||||
From: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Date: Mon, 6 May 2019 16:54:17 +0800
|
||||
Subject: [PATCH] core-linux: support layerscape
|
||||
|
||||
This is an integrated patch of core-linux for layerscape.
|
||||
This is an integrated patch of core-linux for layerscape
|
||||
|
||||
Signed-off-by: Aaron Lu <aaron.lu@intel.com>
|
||||
Signed-off-by: Abhijit Ayarekar <abhijit.ayarekar@caviumnetworks.com>
|
||||
Signed-off-by: Amrita Kumari <amrita.kumari@nxp.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Ashish Kumar <Ashish.Kumar@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
|
||||
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: David Ahern <dsahern@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: Guanhua Gao <guanhua.gao@nxp.com>
|
||||
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Joel Fernandes <joelaf@google.com>
|
||||
Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Li Yang <leoyang.li@nxp.com>
|
||||
Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
|
||||
Signed-off-by: Lukas Wunner <lukas@wunner.de>
|
||||
Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
|
||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||||
Signed-off-by: Nikhil Badola <nikhil.badola@freescale.com>
|
||||
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
|
||||
Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
|
||||
Signed-off-by: pascal paillet <p.paillet@st.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
|
||||
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
|
||||
Signed-off-by: Suresh Gupta <suresh.gupta@freescale.com>
|
||||
Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Signed-off-by: yinbo.zhu <yinbo.zhu@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
drivers/base/dma-mapping.c | 7 ++
|
||||
drivers/net/bonding/bond_main.c | 5 +-
|
||||
drivers/net/bonding/bond_options.c | 2 +-
|
||||
drivers/net/team/team.c | 3 +-
|
||||
drivers/net/vrf.c | 3 +-
|
||||
drivers/of/device.c | 13 +++-
|
||||
drivers/soc/fsl/guts.c | 3 +
|
||||
include/linux/fsl_devices.h | 2 +
|
||||
include/linux/netdevice.h | 13 +++-
|
||||
include/linux/skbuff.h | 2 +
|
||||
include/net/bonding.h | 3 +-
|
||||
net/batman-adv/soft-interface.c | 3 +-
|
||||
net/bridge/br_device.c | 3 +-
|
||||
net/core/dev.c | 81 ++++++++++++++---------
|
||||
net/core/rtnetlink.c | 10 +--
|
||||
net/core/skbuff.c | 29 +++++++-
|
||||
samples/bpf/Makefile | 12 +++-
|
||||
samples/bpf/map_perf_test_kern.c | 2 +-
|
||||
samples/bpf/map_perf_test_user.c | 2 +-
|
||||
tools/testing/selftests/bpf/bpf_helpers.h | 56 ++++++++++++++--
|
||||
20 files changed, 193 insertions(+), 61 deletions(-)
|
||||
drivers/base/core.c | 122 ++++++++++++++++++++++++++----
|
||||
drivers/base/dma-mapping.c | 7 ++
|
||||
drivers/gpu/ipu-v3/ipu-pre.c | 3 +-
|
||||
drivers/gpu/ipu-v3/ipu-prg.c | 3 +-
|
||||
drivers/iommu/dma-iommu.c | 3 +
|
||||
drivers/mux/Kconfig | 12 +--
|
||||
drivers/mux/mmio.c | 6 +-
|
||||
drivers/of/device.c | 14 +++-
|
||||
drivers/soc/imx/gpc.c | 2 +-
|
||||
include/linux/device.h | 20 +++--
|
||||
include/linux/fsl_devices.h | 2 +
|
||||
include/linux/netdevice.h | 10 ++-
|
||||
include/linux/skbuff.h | 2 +
|
||||
lib/dma-noop.c | 19 +++++
|
||||
mm/page_alloc.c | 10 ++-
|
||||
net/core/dev.c | 81 ++++++++++++--------
|
||||
net/core/skbuff.c | 29 ++++++-
|
||||
samples/bpf/Makefile | 12 ++-
|
||||
samples/bpf/map_perf_test_kern.c | 2 +-
|
||||
samples/bpf/map_perf_test_user.c | 2 +-
|
||||
tools/testing/selftests/bpf/bpf_helpers.h | 56 ++++++++++++--
|
||||
21 files changed, 337 insertions(+), 80 deletions(-)
|
||||
|
||||
--- a/drivers/base/core.c
|
||||
+++ b/drivers/base/core.c
|
||||
@@ -161,10 +161,10 @@ static int device_reorder_to_tail(struct
|
||||
* of the link. If DL_FLAG_PM_RUNTIME is not set, DL_FLAG_RPM_ACTIVE will be
|
||||
* ignored.
|
||||
*
|
||||
- * If the DL_FLAG_AUTOREMOVE is set, the link will be removed automatically
|
||||
- * when the consumer device driver unbinds from it. The combination of both
|
||||
- * DL_FLAG_AUTOREMOVE and DL_FLAG_STATELESS set is invalid and will cause NULL
|
||||
- * to be returned.
|
||||
+ * If the DL_FLAG_AUTOREMOVE_CONSUMER is set, the link will be removed
|
||||
+ * automatically when the consumer device driver unbinds from it.
|
||||
+ * The combination of both DL_FLAG_AUTOREMOVE_CONSUMER and DL_FLAG_STATELESS
|
||||
+ * set is invalid and will cause NULL to be returned.
|
||||
*
|
||||
* A side effect of the link creation is re-ordering of dpm_list and the
|
||||
* devices_kset list by moving the consumer device and all devices depending
|
||||
@@ -181,7 +181,8 @@ struct device_link *device_link_add(stru
|
||||
struct device_link *link;
|
||||
|
||||
if (!consumer || !supplier ||
|
||||
- ((flags & DL_FLAG_STATELESS) && (flags & DL_FLAG_AUTOREMOVE)))
|
||||
+ ((flags & DL_FLAG_STATELESS) &&
|
||||
+ (flags & DL_FLAG_AUTOREMOVE_CONSUMER)))
|
||||
return NULL;
|
||||
|
||||
device_links_write_lock();
|
||||
@@ -199,8 +200,10 @@ struct device_link *device_link_add(stru
|
||||
}
|
||||
|
||||
list_for_each_entry(link, &supplier->links.consumers, s_node)
|
||||
- if (link->consumer == consumer)
|
||||
+ if (link->consumer == consumer) {
|
||||
+ kref_get(&link->kref);
|
||||
goto out;
|
||||
+ }
|
||||
|
||||
link = kzalloc(sizeof(*link), GFP_KERNEL);
|
||||
if (!link)
|
||||
@@ -232,6 +235,7 @@ struct device_link *device_link_add(stru
|
||||
link->consumer = consumer;
|
||||
INIT_LIST_HEAD(&link->c_node);
|
||||
link->flags = flags;
|
||||
+ kref_init(&link->kref);
|
||||
|
||||
/* Determine the initial link state. */
|
||||
if (flags & DL_FLAG_STATELESS) {
|
||||
@@ -302,8 +306,10 @@ static void __device_link_free_srcu(stru
|
||||
device_link_free(container_of(rhead, struct device_link, rcu_head));
|
||||
}
|
||||
|
||||
-static void __device_link_del(struct device_link *link)
|
||||
+static void __device_link_del(struct kref *kref)
|
||||
{
|
||||
+ struct device_link *link = container_of(kref, struct device_link, kref);
|
||||
+
|
||||
dev_info(link->consumer, "Dropping the link to %s\n",
|
||||
dev_name(link->supplier));
|
||||
|
||||
@@ -315,8 +321,10 @@ static void __device_link_del(struct dev
|
||||
call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu);
|
||||
}
|
||||
#else /* !CONFIG_SRCU */
|
||||
-static void __device_link_del(struct device_link *link)
|
||||
+static void __device_link_del(struct kref *kref)
|
||||
{
|
||||
+ struct device_link *link = container_of(kref, struct device_link, kref);
|
||||
+
|
||||
dev_info(link->consumer, "Dropping the link to %s\n",
|
||||
dev_name(link->supplier));
|
||||
|
||||
@@ -334,18 +342,50 @@ static void __device_link_del(struct dev
|
||||
* @link: Device link to delete.
|
||||
*
|
||||
* The caller must ensure proper synchronization of this function with runtime
|
||||
- * PM.
|
||||
+ * PM. If the link was added multiple times, it needs to be deleted as often.
|
||||
+ * Care is required for hotplugged devices: Their links are purged on removal
|
||||
+ * and calling device_link_del() is then no longer allowed.
|
||||
*/
|
||||
void device_link_del(struct device_link *link)
|
||||
{
|
||||
device_links_write_lock();
|
||||
device_pm_lock();
|
||||
- __device_link_del(link);
|
||||
+ kref_put(&link->kref, __device_link_del);
|
||||
device_pm_unlock();
|
||||
device_links_write_unlock();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_link_del);
|
||||
|
||||
+/**
|
||||
+ * device_link_remove - remove a link between two devices.
|
||||
+ * @consumer: Consumer end of the link.
|
||||
+ * @supplier: Supplier end of the link.
|
||||
+ *
|
||||
+ * The caller must ensure proper synchronization of this function with runtime
|
||||
+ * PM.
|
||||
+ */
|
||||
+void device_link_remove(void *consumer, struct device *supplier)
|
||||
+{
|
||||
+ struct device_link *link;
|
||||
+
|
||||
+ if (WARN_ON(consumer == supplier))
|
||||
+ return;
|
||||
+
|
||||
+ device_links_write_lock();
|
||||
+ device_pm_lock();
|
||||
+
|
||||
+ list_for_each_entry(link, &supplier->links.consumers, s_node) {
|
||||
+ if (link->consumer == consumer) {
|
||||
+ kref_put(&link->kref, __device_link_del);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ device_pm_unlock();
|
||||
+ device_links_write_unlock();
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(device_link_remove);
|
||||
+
|
||||
static void device_links_missing_supplier(struct device *dev)
|
||||
{
|
||||
struct device_link *link;
|
||||
@@ -453,8 +493,8 @@ static void __device_links_no_driver(str
|
||||
if (link->flags & DL_FLAG_STATELESS)
|
||||
continue;
|
||||
|
||||
- if (link->flags & DL_FLAG_AUTOREMOVE)
|
||||
- __device_link_del(link);
|
||||
+ if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
|
||||
+ kref_put(&link->kref, __device_link_del);
|
||||
else if (link->status != DL_STATE_SUPPLIER_UNBIND)
|
||||
WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
|
||||
}
|
||||
@@ -489,8 +529,18 @@ void device_links_driver_cleanup(struct
|
||||
if (link->flags & DL_FLAG_STATELESS)
|
||||
continue;
|
||||
|
||||
- WARN_ON(link->flags & DL_FLAG_AUTOREMOVE);
|
||||
+ WARN_ON(link->flags & DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
WARN_ON(link->status != DL_STATE_SUPPLIER_UNBIND);
|
||||
+
|
||||
+ /*
|
||||
+ * autoremove the links between this @dev and its consumer
|
||||
+ * devices that are not active, i.e. where the link state
|
||||
+ * has moved to DL_STATE_SUPPLIER_UNBIND.
|
||||
+ */
|
||||
+ if (link->status == DL_STATE_SUPPLIER_UNBIND &&
|
||||
+ link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
|
||||
+ kref_put(&link->kref, __device_link_del);
|
||||
+
|
||||
WRITE_ONCE(link->status, DL_STATE_DORMANT);
|
||||
}
|
||||
|
||||
@@ -607,13 +657,13 @@ static void device_links_purge(struct de
|
||||
|
||||
list_for_each_entry_safe_reverse(link, ln, &dev->links.suppliers, c_node) {
|
||||
WARN_ON(link->status == DL_STATE_ACTIVE);
|
||||
- __device_link_del(link);
|
||||
+ __device_link_del(&link->kref);
|
||||
}
|
||||
|
||||
list_for_each_entry_safe_reverse(link, ln, &dev->links.consumers, s_node) {
|
||||
WARN_ON(link->status != DL_STATE_DORMANT &&
|
||||
link->status != DL_STATE_NONE);
|
||||
- __device_link_del(link);
|
||||
+ __device_link_del(&link->kref);
|
||||
}
|
||||
|
||||
device_links_write_unlock();
|
||||
@@ -1035,6 +1085,34 @@ static ssize_t online_store(struct devic
|
||||
}
|
||||
static DEVICE_ATTR_RW(online);
|
||||
|
||||
+static ssize_t suppliers_show(struct device *dev, struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct device_link *link;
|
||||
+ size_t count = 0;
|
||||
+
|
||||
+ list_for_each_entry(link, &dev->links.suppliers, c_node)
|
||||
+ count += scnprintf(buf + count, PAGE_SIZE - count, "%s\n",
|
||||
+ dev_name(link->supplier));
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+static DEVICE_ATTR_RO(suppliers);
|
||||
+
|
||||
+static ssize_t consumers_show(struct device *dev, struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct device_link *link;
|
||||
+ size_t count = 0;
|
||||
+
|
||||
+ list_for_each_entry(link, &dev->links.consumers, s_node)
|
||||
+ count += scnprintf(buf + count, PAGE_SIZE - count, "%s\n",
|
||||
+ dev_name(link->consumer));
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+static DEVICE_ATTR_RO(consumers);
|
||||
+
|
||||
int device_add_groups(struct device *dev, const struct attribute_group **groups)
|
||||
{
|
||||
return sysfs_create_groups(&dev->kobj, groups);
|
||||
@@ -1206,8 +1284,20 @@ static int device_add_attrs(struct devic
|
||||
goto err_remove_dev_groups;
|
||||
}
|
||||
|
||||
+ error = device_create_file(dev, &dev_attr_suppliers);
|
||||
+ if (error)
|
||||
+ goto err_remove_online;
|
||||
+
|
||||
+ error = device_create_file(dev, &dev_attr_consumers);
|
||||
+ if (error)
|
||||
+ goto err_remove_suppliers;
|
||||
+
|
||||
return 0;
|
||||
|
||||
+ err_remove_suppliers:
|
||||
+ device_remove_file(dev, &dev_attr_suppliers);
|
||||
+ err_remove_online:
|
||||
+ device_remove_file(dev, &dev_attr_online);
|
||||
err_remove_dev_groups:
|
||||
device_remove_groups(dev, dev->groups);
|
||||
err_remove_type_groups:
|
||||
@@ -1225,6 +1315,8 @@ static void device_remove_attrs(struct d
|
||||
struct class *class = dev->class;
|
||||
const struct device_type *type = dev->type;
|
||||
|
||||
+ device_remove_file(dev, &dev_attr_consumers);
|
||||
+ device_remove_file(dev, &dev_attr_suppliers);
|
||||
device_remove_file(dev, &dev_attr_online);
|
||||
device_remove_groups(dev, dev->groups);
|
||||
|
||||
--- a/drivers/base/dma-mapping.c
|
||||
+++ b/drivers/base/dma-mapping.c
|
||||
@@ -335,6 +335,7 @@ void dma_common_free_remap(void *cpu_add
|
||||
@ -72,62 +319,87 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
if (dma_dev->of_node) {
|
||||
ret = of_dma_configure(dev, dma_dev->of_node);
|
||||
} else if (has_acpi_companion(dma_dev)) {
|
||||
--- a/drivers/net/bonding/bond_main.c
|
||||
+++ b/drivers/net/bonding/bond_main.c
|
||||
@@ -1330,7 +1330,8 @@ void bond_lower_state_changed(struct sla
|
||||
}
|
||||
--- a/drivers/gpu/ipu-v3/ipu-pre.c
|
||||
+++ b/drivers/gpu/ipu-v3/ipu-pre.c
|
||||
@@ -124,7 +124,8 @@ ipu_pre_lookup_by_phandle(struct device
|
||||
list_for_each_entry(pre, &ipu_pre_list, list) {
|
||||
if (pre_node == pre->dev->of_node) {
|
||||
mutex_unlock(&ipu_pre_list_mutex);
|
||||
- device_link_add(dev, pre->dev, DL_FLAG_AUTOREMOVE);
|
||||
+ device_link_add(dev, pre->dev,
|
||||
+ DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
of_node_put(pre_node);
|
||||
return pre;
|
||||
}
|
||||
--- a/drivers/gpu/ipu-v3/ipu-prg.c
|
||||
+++ b/drivers/gpu/ipu-v3/ipu-prg.c
|
||||
@@ -99,7 +99,8 @@ ipu_prg_lookup_by_phandle(struct device
|
||||
list_for_each_entry(prg, &ipu_prg_list, list) {
|
||||
if (prg_node == prg->dev->of_node) {
|
||||
mutex_unlock(&ipu_prg_list_mutex);
|
||||
- device_link_add(dev, prg->dev, DL_FLAG_AUTOREMOVE);
|
||||
+ device_link_add(dev, prg->dev,
|
||||
+ DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
prg->id = ipu_id;
|
||||
of_node_put(prg_node);
|
||||
return prg;
|
||||
--- a/drivers/iommu/dma-iommu.c
|
||||
+++ b/drivers/iommu/dma-iommu.c
|
||||
@@ -381,6 +381,9 @@ static dma_addr_t iommu_dma_alloc_iova(s
|
||||
if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1)))
|
||||
iova_len = roundup_pow_of_two(iova_len);
|
||||
|
||||
/* enslave device <slave> to bond device <master> */
|
||||
-int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
|
||||
+int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
|
||||
@@ -3506,7 +3507,7 @@ static int bond_do_ioctl(struct net_devi
|
||||
switch (cmd) {
|
||||
case BOND_ENSLAVE_OLD:
|
||||
case SIOCBONDENSLAVE:
|
||||
- res = bond_enslave(bond_dev, slave_dev);
|
||||
+ res = bond_enslave(bond_dev, slave_dev, NULL);
|
||||
break;
|
||||
case BOND_RELEASE_OLD:
|
||||
case SIOCBONDRELEASE:
|
||||
--- a/drivers/net/bonding/bond_options.c
|
||||
+++ b/drivers/net/bonding/bond_options.c
|
||||
@@ -1382,7 +1382,7 @@ static int bond_option_slaves_set(struct
|
||||
switch (command[0]) {
|
||||
case '+':
|
||||
netdev_dbg(bond->dev, "Adding slave %s\n", dev->name);
|
||||
- ret = bond_enslave(bond->dev, dev);
|
||||
+ ret = bond_enslave(bond->dev, dev, NULL);
|
||||
break;
|
||||
+ if (dev->bus_dma_mask)
|
||||
+ dma_limit &= dev->bus_dma_mask;
|
||||
+
|
||||
if (domain->geometry.force_aperture)
|
||||
dma_limit = min(dma_limit, domain->geometry.aperture_end);
|
||||
|
||||
case '-':
|
||||
--- a/drivers/net/team/team.c
|
||||
+++ b/drivers/net/team/team.c
|
||||
@@ -1953,7 +1953,8 @@ static int team_netpoll_setup(struct net
|
||||
}
|
||||
#endif
|
||||
--- a/drivers/mux/Kconfig
|
||||
+++ b/drivers/mux/Kconfig
|
||||
@@ -35,14 +35,14 @@ config MUX_GPIO
|
||||
be called mux-gpio.
|
||||
|
||||
-static int team_add_slave(struct net_device *dev, struct net_device *port_dev)
|
||||
+static int team_add_slave(struct net_device *dev, struct net_device *port_dev,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct team *team = netdev_priv(dev);
|
||||
int err;
|
||||
--- a/drivers/net/vrf.c
|
||||
+++ b/drivers/net/vrf.c
|
||||
@@ -791,7 +791,8 @@ err:
|
||||
return ret;
|
||||
}
|
||||
config MUX_MMIO
|
||||
- tristate "MMIO register bitfield-controlled Multiplexer"
|
||||
- depends on (OF && MFD_SYSCON) || COMPILE_TEST
|
||||
+ tristate "MMIO/Regmap register bitfield-controlled Multiplexer"
|
||||
+ depends on OF || COMPILE_TEST
|
||||
help
|
||||
- MMIO register bitfield-controlled Multiplexer controller.
|
||||
+ MMIO/Regmap register bitfield-controlled Multiplexer controller.
|
||||
|
||||
-static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
|
||||
+static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
{
|
||||
if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev))
|
||||
return -EINVAL;
|
||||
- The driver builds multiplexer controllers for bitfields in a syscon
|
||||
- register. For N bit wide bitfields, there will be 2^N possible
|
||||
- multiplexer states.
|
||||
+ The driver builds multiplexer controllers for bitfields in either
|
||||
+ a syscon register or a driver regmap register. For N bit wide
|
||||
+ bitfields, there will be 2^N possible multiplexer states.
|
||||
|
||||
To compile the driver as a module, choose M here: the module will
|
||||
be called mux-mmio.
|
||||
--- a/drivers/mux/mmio.c
|
||||
+++ b/drivers/mux/mmio.c
|
||||
@@ -31,6 +31,7 @@ static const struct mux_control_ops mux_
|
||||
|
||||
static const struct of_device_id mux_mmio_dt_ids[] = {
|
||||
{ .compatible = "mmio-mux", },
|
||||
+ { .compatible = "reg-mux", },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mux_mmio_dt_ids);
|
||||
@@ -46,7 +47,10 @@ static int mux_mmio_probe(struct platfor
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
- regmap = syscon_node_to_regmap(np->parent);
|
||||
+ if (of_device_is_compatible(np, "mmio-mux"))
|
||||
+ regmap = syscon_node_to_regmap(np->parent);
|
||||
+ else
|
||||
+ regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
|
||||
if (IS_ERR(regmap)) {
|
||||
ret = PTR_ERR(regmap);
|
||||
dev_err(dev, "failed to get regmap: %d\n", ret);
|
||||
--- a/drivers/of/device.c
|
||||
+++ b/drivers/of/device.c
|
||||
@@ -15,6 +15,9 @@
|
||||
@ -150,7 +422,11 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
dev->bus != &platform_bus_type)
|
||||
return ret == -ENODEV ? 0 : ret;
|
||||
|
||||
@@ -155,7 +161,12 @@ int of_dma_configure(struct device *dev,
|
||||
@@ -152,10 +158,16 @@ int of_dma_configure(struct device *dev,
|
||||
* set by the driver.
|
||||
*/
|
||||
mask = DMA_BIT_MASK(ilog2(dma_addr + size - 1) + 1);
|
||||
+ dev->bus_dma_mask = mask;
|
||||
dev->coherent_dma_mask &= mask;
|
||||
*dev->dma_mask &= mask;
|
||||
|
||||
@ -164,18 +440,91 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
dev_dbg(dev, "device is%sdma coherent\n",
|
||||
coherent ? " " : " not ");
|
||||
|
||||
--- a/drivers/soc/fsl/guts.c
|
||||
+++ b/drivers/soc/fsl/guts.c
|
||||
@@ -213,6 +213,9 @@ static const struct of_device_id fsl_gut
|
||||
{ .compatible = "fsl,ls1021a-dcfg", },
|
||||
{ .compatible = "fsl,ls1043a-dcfg", },
|
||||
{ .compatible = "fsl,ls2080a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1088a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1012a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1046a-dcfg", },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fsl_guts_of_match);
|
||||
--- a/drivers/soc/imx/gpc.c
|
||||
+++ b/drivers/soc/imx/gpc.c
|
||||
@@ -209,7 +209,7 @@ static int imx_pgc_power_domain_probe(st
|
||||
goto genpd_err;
|
||||
}
|
||||
|
||||
- device_link_add(dev, dev->parent, DL_FLAG_AUTOREMOVE);
|
||||
+ device_link_add(dev, dev->parent, DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
|
||||
return 0;
|
||||
|
||||
--- a/include/linux/device.h
|
||||
+++ b/include/linux/device.h
|
||||
@@ -55,6 +55,8 @@ struct bus_attribute {
|
||||
struct bus_attribute bus_attr_##_name = __ATTR_RW(_name)
|
||||
#define BUS_ATTR_RO(_name) \
|
||||
struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
|
||||
+#define BUS_ATTR_WO(_name) \
|
||||
+ struct bus_attribute bus_attr_##_name = __ATTR_WO(_name)
|
||||
|
||||
extern int __must_check bus_create_file(struct bus_type *,
|
||||
struct bus_attribute *);
|
||||
@@ -750,14 +752,16 @@ enum device_link_state {
|
||||
* Device link flags.
|
||||
*
|
||||
* STATELESS: The core won't track the presence of supplier/consumer drivers.
|
||||
- * AUTOREMOVE: Remove this link automatically on consumer driver unbind.
|
||||
+ * AUTOREMOVE_CONSUMER: Remove the link automatically on consumer driver unbind.
|
||||
* PM_RUNTIME: If set, the runtime PM framework will use this link.
|
||||
* RPM_ACTIVE: Run pm_runtime_get_sync() on the supplier during link creation.
|
||||
+ * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind.
|
||||
*/
|
||||
-#define DL_FLAG_STATELESS BIT(0)
|
||||
-#define DL_FLAG_AUTOREMOVE BIT(1)
|
||||
-#define DL_FLAG_PM_RUNTIME BIT(2)
|
||||
-#define DL_FLAG_RPM_ACTIVE BIT(3)
|
||||
+#define DL_FLAG_STATELESS BIT(0)
|
||||
+#define DL_FLAG_AUTOREMOVE_CONSUMER BIT(1)
|
||||
+#define DL_FLAG_PM_RUNTIME BIT(2)
|
||||
+#define DL_FLAG_RPM_ACTIVE BIT(3)
|
||||
+#define DL_FLAG_AUTOREMOVE_SUPPLIER BIT(4)
|
||||
|
||||
/**
|
||||
* struct device_link - Device link representation.
|
||||
@@ -768,6 +772,7 @@ enum device_link_state {
|
||||
* @status: The state of the link (with respect to the presence of drivers).
|
||||
* @flags: Link flags.
|
||||
* @rpm_active: Whether or not the consumer device is runtime-PM-active.
|
||||
+ * @kref: Count repeated addition of the same link.
|
||||
* @rcu_head: An RCU head to use for deferred execution of SRCU callbacks.
|
||||
*/
|
||||
struct device_link {
|
||||
@@ -778,6 +783,7 @@ struct device_link {
|
||||
enum device_link_state status;
|
||||
u32 flags;
|
||||
bool rpm_active;
|
||||
+ struct kref kref;
|
||||
#ifdef CONFIG_SRCU
|
||||
struct rcu_head rcu_head;
|
||||
#endif
|
||||
@@ -850,6 +856,8 @@ struct dev_links_info {
|
||||
* @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all
|
||||
* hardware supports 64-bit addresses for consistent allocations
|
||||
* such descriptors.
|
||||
+ * @bus_dma_mask: Mask of an upstream bridge or bus which imposes a smaller DMA
|
||||
+ * limit than the device itself supports.
|
||||
* @dma_pfn_offset: offset of DMA memory range relatively of RAM
|
||||
* @dma_parms: A low level driver may set these to teach IOMMU code about
|
||||
* segment limitations.
|
||||
@@ -929,6 +937,7 @@ struct device {
|
||||
not all hardware supports
|
||||
64 bit addresses for consistent
|
||||
allocations such descriptors. */
|
||||
+ u64 bus_dma_mask; /* upstream dma_mask constraint */
|
||||
unsigned long dma_pfn_offset;
|
||||
|
||||
struct device_dma_parameters *dma_parms;
|
||||
@@ -1267,6 +1276,7 @@ extern const char *dev_driver_string(con
|
||||
struct device_link *device_link_add(struct device *consumer,
|
||||
struct device *supplier, u32 flags);
|
||||
void device_link_del(struct device_link *link);
|
||||
+void device_link_remove(void *consumer, struct device *supplier);
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
|
||||
--- a/include/linux/fsl_devices.h
|
||||
+++ b/include/linux/fsl_devices.h
|
||||
@@ -99,7 +99,9 @@ struct fsl_usb2_platform_data {
|
||||
@ -190,17 +539,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -1260,7 +1260,8 @@ struct net_device_ops {
|
||||
u32 flow_id);
|
||||
#endif
|
||||
int (*ndo_add_slave)(struct net_device *dev,
|
||||
- struct net_device *slave_dev);
|
||||
+ struct net_device *slave_dev,
|
||||
+ struct netlink_ext_ack *extack);
|
||||
int (*ndo_del_slave)(struct net_device *dev,
|
||||
struct net_device *slave_dev);
|
||||
netdev_features_t (*ndo_fix_features)(struct net_device *dev,
|
||||
@@ -2344,7 +2345,8 @@ int register_netdevice_notifier(struct n
|
||||
@@ -2344,7 +2344,8 @@ int register_netdevice_notifier(struct n
|
||||
int unregister_netdevice_notifier(struct notifier_block *nb);
|
||||
|
||||
struct netdev_notifier_info {
|
||||
@ -210,7 +549,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
};
|
||||
|
||||
struct netdev_notifier_info_ext {
|
||||
@@ -2376,6 +2378,7 @@ static inline void netdev_notifier_info_
|
||||
@@ -2376,6 +2377,7 @@ static inline void netdev_notifier_info_
|
||||
struct net_device *dev)
|
||||
{
|
||||
info->dev = dev;
|
||||
@ -218,7 +557,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
}
|
||||
|
||||
static inline struct net_device *
|
||||
@@ -2384,6 +2387,12 @@ netdev_notifier_info_to_dev(const struct
|
||||
@@ -2384,6 +2386,12 @@ netdev_notifier_info_to_dev(const struct
|
||||
return info->dev;
|
||||
}
|
||||
|
||||
@ -249,42 +588,58 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
|
||||
__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
|
||||
int len, __wsum csum);
|
||||
--- a/include/net/bonding.h
|
||||
+++ b/include/net/bonding.h
|
||||
@@ -592,7 +592,8 @@ void bond_destroy_sysfs(struct bond_net
|
||||
void bond_prepare_sysfs_group(struct bonding *bond);
|
||||
int bond_sysfs_slave_add(struct slave *slave);
|
||||
void bond_sysfs_slave_del(struct slave *slave);
|
||||
-int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
|
||||
+int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
||||
+ struct netlink_ext_ack *extack);
|
||||
int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
|
||||
u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
|
||||
int bond_set_carrier(struct bonding *bond);
|
||||
--- a/net/batman-adv/soft-interface.c
|
||||
+++ b/net/batman-adv/soft-interface.c
|
||||
@@ -876,7 +876,8 @@ free_bat_counters:
|
||||
* Return: 0 if successful or error otherwise.
|
||||
*/
|
||||
static int batadv_softif_slave_add(struct net_device *dev,
|
||||
- struct net_device *slave_dev)
|
||||
+ struct net_device *slave_dev,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
--- a/lib/dma-noop.c
|
||||
+++ b/lib/dma-noop.c
|
||||
@@ -58,11 +58,30 @@ static int dma_noop_map_sg(struct device
|
||||
return nents;
|
||||
}
|
||||
|
||||
+static int dma_noop_supported(struct device *dev, u64 mask)
|
||||
+{
|
||||
+#ifdef CONFIG_ZONE_DMA
|
||||
+ if (mask < DMA_BIT_MASK(ARCH_ZONE_DMA_BITS))
|
||||
+ return 0;
|
||||
+#else
|
||||
+ /*
|
||||
+ * Because 32-bit DMA masks are so common we expect every architecture
|
||||
+ * to be able to satisfy them - either by not supporting more physical
|
||||
+ * memory, or by providing a ZONE_DMA32. If neither is the case, the
|
||||
+ * architecture needs to use an IOMMU instead of the direct mapping.
|
||||
+ */
|
||||
+ if (dev->bus_dma_mask && mask > dev->bus_dma_mask)
|
||||
+ return 0;
|
||||
+#endif
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
const struct dma_map_ops dma_noop_ops = {
|
||||
.alloc = dma_noop_alloc,
|
||||
.free = dma_noop_free,
|
||||
.map_page = dma_noop_map_page,
|
||||
.map_sg = dma_noop_map_sg,
|
||||
+ dma_supported = dma_noop_supported
|
||||
};
|
||||
|
||||
EXPORT_SYMBOL(dma_noop_ops);
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -4366,8 +4366,14 @@ void page_frag_free(void *addr)
|
||||
{
|
||||
struct batadv_hard_iface *hard_iface;
|
||||
struct net *net = dev_net(dev);
|
||||
--- a/net/bridge/br_device.c
|
||||
+++ b/net/bridge/br_device.c
|
||||
@@ -324,7 +324,8 @@ void br_netpoll_disable(struct net_bridg
|
||||
struct page *page = virt_to_head_page(addr);
|
||||
|
||||
#endif
|
||||
- if (unlikely(put_page_testzero(page)))
|
||||
- __free_pages_ok(page, compound_order(page));
|
||||
+ if (unlikely(put_page_testzero(page))) {
|
||||
+ unsigned int order = compound_order(page);
|
||||
+
|
||||
+ if (order == 0) /* Via pcp? */
|
||||
+ free_hot_cold_page(page, false);
|
||||
+ else
|
||||
+ __free_pages_ok(page, order);
|
||||
+ }
|
||||
}
|
||||
EXPORT_SYMBOL(page_frag_free);
|
||||
|
||||
-static int br_add_slave(struct net_device *dev, struct net_device *slave_dev)
|
||||
+static int br_add_slave(struct net_device *dev, struct net_device *slave_dev,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
|
||||
{
|
||||
struct net_bridge *br = netdev_priv(dev);
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -162,7 +162,6 @@ static struct list_head offload_base __r
|
||||
@ -480,46 +835,6 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
}
|
||||
}
|
||||
|
||||
--- a/net/core/rtnetlink.c
|
||||
+++ b/net/core/rtnetlink.c
|
||||
@@ -1912,7 +1912,8 @@ static int do_setvfinfo(struct net_devic
|
||||
return err;
|
||||
}
|
||||
|
||||
-static int do_set_master(struct net_device *dev, int ifindex)
|
||||
+static int do_set_master(struct net_device *dev, int ifindex,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
|
||||
const struct net_device_ops *ops;
|
||||
@@ -1937,7 +1938,7 @@ static int do_set_master(struct net_devi
|
||||
return -EINVAL;
|
||||
ops = upper_dev->netdev_ops;
|
||||
if (ops->ndo_add_slave) {
|
||||
- err = ops->ndo_add_slave(upper_dev, dev);
|
||||
+ err = ops->ndo_add_slave(upper_dev, dev, extack);
|
||||
if (err)
|
||||
return err;
|
||||
} else {
|
||||
@@ -2074,7 +2075,7 @@ static int do_setlink(const struct sk_bu
|
||||
}
|
||||
|
||||
if (tb[IFLA_MASTER]) {
|
||||
- err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
|
||||
+ err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
|
||||
if (err)
|
||||
goto errout;
|
||||
status |= DO_SETLINK_MODIFIED;
|
||||
@@ -2723,7 +2724,8 @@ replay:
|
||||
goto out_unregister;
|
||||
}
|
||||
if (tb[IFLA_MASTER]) {
|
||||
- err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
|
||||
+ err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]),
|
||||
+ extack);
|
||||
if (err)
|
||||
goto out_unregister;
|
||||
}
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -803,6 +803,32 @@ void napi_consume_skb(struct sk_buff *sk
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
From 6eeff55fd4756f271ad09a914078c9aa45f8359d Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Fri, 16 Nov 2018 14:23:40 +0800
|
||||
Subject: [PATCH 04/39] arch: support layerscape
|
||||
From f29db0048a07384ee4cd962c676b750e13e5d6b0 Mon Sep 17 00:00:00 2001
|
||||
From: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Date: Mon, 6 May 2019 17:17:58 +0800
|
||||
Subject: [PATCH] arch: support layerscape
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is an integrated patch of arch for layerscape
|
||||
|
||||
Signed-off-by: Abhimanyu Saini <abhimanyu.saini@nxp.com>
|
||||
Signed-off-by: Alison Wang <alison.wang@freescale.com>
|
||||
Signed-off-by: Amrita Kumari <amrita.kumari@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Chenhui Zhao <chenhui.zhao@freescale.com>
|
||||
Signed-off-by: Dave Liu <daveliu@freescale.com>
|
||||
Signed-off-by: Guanhua <guanhua.gao@nxp.com>
|
||||
@ -19,6 +24,7 @@ Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
|
||||
Signed-off-by: Li Yang <leoli@freescale.com>
|
||||
Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
|
||||
Signed-off-by: Pan Jiafei <Jiafei.Pan@nxp.com>
|
||||
Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
|
||||
Signed-off-by: Poonam Aggrwal <poonam.aggrwal@nxp.com>
|
||||
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
|
||||
Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
|
||||
@ -26,28 +32,32 @@ Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
|
||||
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
|
||||
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
|
||||
Signed-off-by: Tang Yuantian <Yuantian.Tang@freescale.com>
|
||||
Signed-off-by: Vabhav Sharma <vabhav.sharma@nxp.com>
|
||||
Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
|
||||
Signed-off-by: Xie Xiaobo <X.Xie@freescale.com>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
|
||||
Signed-off-by: Zhao Chenhui <chenhui.zhao@freescale.com>
|
||||
Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
arch/arm/include/asm/delay.h | 16 ++++++++++++++
|
||||
arch/arm/include/asm/io.h | 31 +++++++++++++++++++++++++++
|
||||
arch/arm/include/asm/mach/map.h | 4 ++--
|
||||
arch/arm/include/asm/pgtable.h | 7 ++++++
|
||||
arch/arm/kernel/time.c | 3 +++
|
||||
arch/arm/mm/dma-mapping.c | 1 +
|
||||
arch/arm/mm/ioremap.c | 7 ++++++
|
||||
arch/arm/mm/mmu.c | 9 ++++++++
|
||||
arch/arm64/include/asm/cache.h | 2 +-
|
||||
arch/arm64/include/asm/io.h | 1 +
|
||||
arch/arm64/include/asm/pgtable-prot.h | 3 +++
|
||||
arch/arm64/include/asm/pgtable.h | 5 +++++
|
||||
arch/arm64/mm/dma-mapping.c | 1 +
|
||||
arch/arm64/mm/init.c | 12 +++++++----
|
||||
14 files changed, 95 insertions(+), 7 deletions(-)
|
||||
arch/arm/include/asm/delay.h | 16 ++++++
|
||||
arch/arm/include/asm/io.h | 31 ++++++++++
|
||||
arch/arm/include/asm/mach/map.h | 4 +-
|
||||
arch/arm/include/asm/pgtable.h | 7 +++
|
||||
arch/arm/kernel/time.c | 3 +
|
||||
arch/arm/mm/dma-mapping.c | 1 +
|
||||
arch/arm/mm/ioremap.c | 7 +++
|
||||
arch/arm/mm/mmu.c | 9 +++
|
||||
arch/arm64/include/asm/cache.h | 2 +-
|
||||
arch/arm64/include/asm/io.h | 1 +
|
||||
arch/arm64/include/asm/pgtable-prot.h | 3 +
|
||||
arch/arm64/include/asm/pgtable.h | 5 ++
|
||||
arch/arm64/mm/dma-mapping.c | 1 +
|
||||
arch/arm64/mm/init.c | 12 ++--
|
||||
drivers/soc/fsl/guts.c | 9 +++
|
||||
drivers/soc/fsl/qixis_ctrl.c | 105 ++++++++++++++++++++++++++++++++++
|
||||
16 files changed, 209 insertions(+), 7 deletions(-)
|
||||
create mode 100644 drivers/soc/fsl/qixis_ctrl.c
|
||||
|
||||
--- a/arch/arm/include/asm/delay.h
|
||||
+++ b/arch/arm/include/asm/delay.h
|
||||
@ -323,3 +333,136 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
|
||||
|
||||
dma_contiguous_reserve(arm64_dma_phys_limit);
|
||||
--- a/drivers/soc/fsl/guts.c
|
||||
+++ b/drivers/soc/fsl/guts.c
|
||||
@@ -100,6 +100,11 @@ static const struct fsl_soc_die_attr fsl
|
||||
.svr = 0x87000000,
|
||||
.mask = 0xfff70000,
|
||||
},
|
||||
+ /* Die: LX2160A, SoC: LX2160A/LX2120A/LX2080A */
|
||||
+ { .die = "LX2160A",
|
||||
+ .svr = 0x87360000,
|
||||
+ .mask = 0xff3f0000,
|
||||
+ },
|
||||
{ },
|
||||
};
|
||||
|
||||
@@ -213,6 +218,10 @@ static const struct of_device_id fsl_gut
|
||||
{ .compatible = "fsl,ls1021a-dcfg", },
|
||||
{ .compatible = "fsl,ls1043a-dcfg", },
|
||||
{ .compatible = "fsl,ls2080a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1088a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1012a-dcfg", },
|
||||
+ { .compatible = "fsl,ls1046a-dcfg", },
|
||||
+ { .compatible = "fsl,lx2160a-dcfg", },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fsl_guts_of_match);
|
||||
--- /dev/null
|
||||
+++ b/drivers/soc/fsl/qixis_ctrl.c
|
||||
@@ -0,0 +1,105 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+
|
||||
+/* Freescale QIXIS system controller driver.
|
||||
+ *
|
||||
+ * Copyright 2015 Freescale Semiconductor, Inc.
|
||||
+ * Copyright 2018-2019 NXP
|
||||
+ */
|
||||
+
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mfd/core.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/regmap.h>
|
||||
+
|
||||
+/* QIXIS MAP */
|
||||
+struct fsl_qixis_regs {
|
||||
+ u8 id; /* Identification Registers */
|
||||
+ u8 version; /* Version Register */
|
||||
+ u8 qixis_ver; /* QIXIS Version Register */
|
||||
+ u8 reserved1[0x1f];
|
||||
+};
|
||||
+
|
||||
+struct qixis_priv {
|
||||
+ struct regmap *regmap;
|
||||
+};
|
||||
+
|
||||
+static struct regmap_config qixis_regmap_config = {
|
||||
+ .reg_bits = 8,
|
||||
+ .val_bits = 8,
|
||||
+};
|
||||
+
|
||||
+static const struct mfd_cell fsl_qixis_devs[] = {
|
||||
+ {
|
||||
+ .name = "reg-mux",
|
||||
+ .of_compatible = "reg-mux",
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int fsl_qixis_i2c_probe(struct i2c_client *client)
|
||||
+{
|
||||
+ struct qixis_priv *priv;
|
||||
+ int ret = 0;
|
||||
+ u32 qver;
|
||||
+
|
||||
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ priv = devm_kzalloc(&client->dev, sizeof(struct qixis_priv),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!priv)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ priv->regmap = regmap_init_i2c(client, &qixis_regmap_config);
|
||||
+ regmap_read(priv->regmap, offsetof(struct fsl_qixis_regs, qixis_ver),
|
||||
+ &qver);
|
||||
+ pr_info("Freescale QIXIS Version: 0x%08x\n", qver);
|
||||
+
|
||||
+ i2c_set_clientdata(client, priv);
|
||||
+
|
||||
+ if (of_device_is_compatible(client->dev.of_node, "simple-mfd"))
|
||||
+ ret = devm_mfd_add_devices(&client->dev, -1, fsl_qixis_devs,
|
||||
+ ARRAY_SIZE(fsl_qixis_devs), NULL, 0,
|
||||
+ NULL);
|
||||
+ if (ret)
|
||||
+ goto error;
|
||||
+
|
||||
+ return ret;
|
||||
+error:
|
||||
+ regmap_exit(priv->regmap);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int fsl_qixis_i2c_remove(struct i2c_client *client)
|
||||
+{
|
||||
+ struct qixis_priv *priv;
|
||||
+
|
||||
+ priv = i2c_get_clientdata(client);
|
||||
+ regmap_exit(priv->regmap);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct of_device_id fsl_qixis_i2c_of_match[] = {
|
||||
+ { .compatible = "fsl,fpga-qixis-i2c" },
|
||||
+ {}
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, fsl_qixis_i2c_of_match);
|
||||
+
|
||||
+static struct i2c_driver fsl_qixis_i2c_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "qixis_ctrl_i2c",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .of_match_table = of_match_ptr(fsl_qixis_i2c_of_match),
|
||||
+ },
|
||||
+ .probe_new = fsl_qixis_i2c_probe,
|
||||
+ .remove = fsl_qixis_i2c_remove,
|
||||
+};
|
||||
+module_i2c_driver(fsl_qixis_i2c_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Wang Dongsheng <dongsheng.wang@freescale.com>");
|
||||
+MODULE_DESCRIPTION("Freescale QIXIS system controller driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,96 +0,0 @@
|
||||
From 263092cd68368ac6f030b847a1d5b0069bc2cef3 Mon Sep 17 00:00:00 2001
|
||||
From: Mathew McBride <matt@traverse.com.au>
|
||||
Date: Tue, 17 Apr 2018 10:01:03 +1000
|
||||
Subject: [PATCH 05/40] add DTS for Traverse LS1043 Boards
|
||||
|
||||
Signed-off-by: Mathew McBride <matt@traverse.com.au>
|
||||
---
|
||||
arch/arm64/boot/dts/freescale/Makefile | 5 +++-
|
||||
.../boot/dts/freescale/traverse-ls1043s.dts | 29 +++++++++++++++++++
|
||||
.../boot/dts/freescale/traverse-ls1043v.dts | 29 +++++++++++++++++++
|
||||
3 files changed, 62 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm64/boot/dts/freescale/Makefile
|
||||
+++ b/arch/arm64/boot/dts/freescale/Makefile
|
||||
@@ -22,7 +22,10 @@ dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls2
|
||||
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls2080a-simu.dtb
|
||||
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls2088a-qds.dtb
|
||||
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-ls2088a-rdb.dtb
|
||||
-
|
||||
+
|
||||
+dtb-$(CONFIG_ARCH_LAYERSCAPE) += traverse-ls1043v.dtb
|
||||
+dtb-$(CONFIG_ARCH_LAYERSCAPE) += traverse-ls1043s.dtb
|
||||
+
|
||||
always := $(dtb-y)
|
||||
subdir-y := $(dts-dirs)
|
||||
clean-files := *.dtb
|
||||
--- a/arch/arm64/boot/dts/freescale/traverse-ls1043s.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/traverse-ls1043s.dts
|
||||
@@ -330,3 +330,32 @@
|
||||
&sata {
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+/* Additions for Layerscape SDK (4.4/4.9) Kernel only
|
||||
+ * These kernels need additional setup for FMan/QMan DMA shared memory
|
||||
+ */
|
||||
+
|
||||
+#include "qoriq-qman-portals-sdk.dtsi"
|
||||
+#include "qoriq-bman-portals-sdk.dtsi"
|
||||
+
|
||||
+&bman_fbpr {
|
||||
+ compatible = "fsl,bman-fbpr";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+&qman_fqd {
|
||||
+ compatible = "fsl,qman-fqd";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+&qman_pfdr {
|
||||
+ compatible = "fsl,qman-pfdr";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+
|
||||
+&soc {
|
||||
+#include "qoriq-dpaa-eth.dtsi"
|
||||
+#include "qoriq-fman3-0-6oh.dtsi"
|
||||
+};
|
||||
+
|
||||
+&fman0 {
|
||||
+ compatible = "fsl,fman", "simple-bus";
|
||||
+};
|
||||
--- a/arch/arm64/boot/dts/freescale/traverse-ls1043v.dts
|
||||
+++ b/arch/arm64/boot/dts/freescale/traverse-ls1043v.dts
|
||||
@@ -251,3 +251,32 @@
|
||||
&sata {
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+/* Additions for Layerscape SDK (4.4/4.9) Kernel only
|
||||
+ * These kernels need additional setup for FMan/QMan DMA shared memory
|
||||
+ */
|
||||
+
|
||||
+#include "qoriq-qman-portals-sdk.dtsi"
|
||||
+#include "qoriq-bman-portals-sdk.dtsi"
|
||||
+
|
||||
+&bman_fbpr {
|
||||
+ compatible = "fsl,bman-fbpr";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+&qman_fqd {
|
||||
+ compatible = "fsl,qman-fqd";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+&qman_pfdr {
|
||||
+ compatible = "fsl,qman-pfdr";
|
||||
+ alloc-ranges = <0 0 0x10000 0>;
|
||||
+};
|
||||
+
|
||||
+&soc {
|
||||
+#include "qoriq-dpaa-eth.dtsi"
|
||||
+#include "qoriq-fman3-0-6oh.dtsi"
|
||||
+};
|
||||
+
|
||||
+&fman0 {
|
||||
+ compatible = "fsl,fman", "simple-bus";
|
||||
+};
|
||||
@ -1,289 +0,0 @@
|
||||
From bb1a53f1bcb3f4c5983955a1d419c0e4e2531043 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Fri, 26 Oct 2018 16:00:37 +0800
|
||||
Subject: [PATCH 06/40] arm: dts: ls1021a: Add LS1021A-IOT board support
|
||||
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 3 +-
|
||||
arch/arm/boot/dts/ls1021a-iot.dts | 262 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 264 insertions(+), 1 deletion(-)
|
||||
create mode 100644 arch/arm/boot/dts/ls1021a-iot.dts
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -496,7 +496,8 @@ dtb-$(CONFIG_SOC_IMX7D) += \
|
||||
imx7s-warp.dtb
|
||||
dtb-$(CONFIG_SOC_LS1021A) += \
|
||||
ls1021a-qds.dtb \
|
||||
- ls1021a-twr.dtb
|
||||
+ ls1021a-twr.dtb \
|
||||
+ ls1021a-iot.dtb
|
||||
dtb-$(CONFIG_SOC_VF610) += \
|
||||
vf500-colibri-eval-v3.dtb \
|
||||
vf610-colibri-eval-v3.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/ls1021a-iot.dts
|
||||
@@ -0,0 +1,262 @@
|
||||
+/*
|
||||
+ * Copyright 2013-2016 Freescale Semiconductor, Inc.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "ls1021a.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "LS1021A IOT Board";
|
||||
+
|
||||
+ sys_mclk: clock-mclk {
|
||||
+ compatible = "fixed-clock";
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-frequency = <24576000>;
|
||||
+ };
|
||||
+
|
||||
+ regulators {
|
||||
+ compatible = "simple-bus";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ reg_3p3v: regulator@0 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <0>;
|
||||
+ regulator-name = "3P3V";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_2p5v: regulator@1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <1>;
|
||||
+ regulator-name = "2P5V";
|
||||
+ regulator-min-microvolt = <2500000>;
|
||||
+ regulator-max-microvolt = <2500000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ compatible = "simple-audio-card";
|
||||
+ simple-audio-card,format = "i2s";
|
||||
+ simple-audio-card,widgets =
|
||||
+ "Microphone", "Microphone Jack",
|
||||
+ "Headphone", "Headphone Jack",
|
||||
+ "Speaker", "Speaker Ext",
|
||||
+ "Line", "Line In Jack";
|
||||
+ simple-audio-card,routing =
|
||||
+ "MIC_IN", "Microphone Jack",
|
||||
+ "Microphone Jack", "Mic Bias",
|
||||
+ "LINE_IN", "Line In Jack",
|
||||
+ "Headphone Jack", "HP_OUT",
|
||||
+ "Speaker Ext", "LINE_OUT";
|
||||
+
|
||||
+ simple-audio-card,cpu {
|
||||
+ sound-dai = <&sai2>;
|
||||
+ frame-master;
|
||||
+ bitclock-master;
|
||||
+ };
|
||||
+
|
||||
+ simple-audio-card,codec {
|
||||
+ sound-dai = <&codec>;
|
||||
+ frame-master;
|
||||
+ bitclock-master;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ firmware {
|
||||
+ optee {
|
||||
+ compatible = "linaro,optee-tz";
|
||||
+ method = "smc";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&enet0 {
|
||||
+ tbi-handle = <&tbi1>;
|
||||
+ phy-handle = <&phy1>;
|
||||
+ phy-connection-type = "sgmii";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&enet1 {
|
||||
+ tbi-handle = <&tbi1>;
|
||||
+ phy-handle = <&phy3>;
|
||||
+ phy-connection-type = "sgmii";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&enet2 {
|
||||
+ fixed-link = <0 1 1000 0 0>;
|
||||
+ phy-connection-type = "rgmii-id";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&can0{
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&can1{
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&can2{
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&can3{
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&esdhc{
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ max1239@35 {
|
||||
+ compatible = "maxim,max1239";
|
||||
+ reg = <0x35>;
|
||||
+ #io-channel-cells = <1>;
|
||||
+ };
|
||||
+
|
||||
+ codec: sgtl5000@2a {
|
||||
+ #sound-dai-cells=<0x0>;
|
||||
+ compatible = "fsl,sgtl5000";
|
||||
+ reg = <0x2a>;
|
||||
+ VDDA-supply = <®_3p3v>;
|
||||
+ VDDIO-supply = <®_2p5v>;
|
||||
+ clocks = <&sys_mclk 1>;
|
||||
+ };
|
||||
+
|
||||
+ pca9555: pca9555@23 {
|
||||
+ compatible = "nxp,pca9555";
|
||||
+ /*pinctrl-names = "default";*/
|
||||
+ /*interrupt-parent = <&gpio2>;
|
||||
+ interrupts = <19 0x2>;*/
|
||||
+ gpio-controller;
|
||||
+ #gpio-cells = <2>;
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <2>;
|
||||
+ reg = <0x23>;
|
||||
+ };
|
||||
+
|
||||
+ ina220@44 {
|
||||
+ compatible = "ti,ina220";
|
||||
+ reg = <0x44>;
|
||||
+ shunt-resistor = <1000>;
|
||||
+ };
|
||||
+
|
||||
+ ina220@45 {
|
||||
+ compatible = "ti,ina220";
|
||||
+ reg = <0x45>;
|
||||
+ shunt-resistor = <1000>;
|
||||
+ };
|
||||
+
|
||||
+ lm75b@48 {
|
||||
+ compatible = "nxp,lm75a";
|
||||
+ reg = <0x48>;
|
||||
+ };
|
||||
+
|
||||
+ adt7461a@4c {
|
||||
+ compatible = "adt7461a";
|
||||
+ reg = <0x4c>;
|
||||
+ };
|
||||
+
|
||||
+ hdmi: sii9022a@39 {
|
||||
+ compatible = "fsl,sii902x";
|
||||
+ reg = <0x39>;
|
||||
+ interrupts = <GIC_SPI 163 IRQ_TYPE_EDGE_RISING>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&ifc {
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&lpuart0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mdio0 {
|
||||
+ phy0: ethernet-phy@0 {
|
||||
+ reg = <0x0>;
|
||||
+ };
|
||||
+ phy1: ethernet-phy@1 {
|
||||
+ reg = <0x1>;
|
||||
+ };
|
||||
+ phy2: ethernet-phy@2 {
|
||||
+ reg = <0x2>;
|
||||
+ };
|
||||
+ phy3: ethernet-phy@3 {
|
||||
+ reg = <0x3>;
|
||||
+ };
|
||||
+ tbi1: tbi-phy@1f {
|
||||
+ reg = <0x1f>;
|
||||
+ device_type = "tbi-phy";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&qspi {
|
||||
+ num-cs = <2>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ qflash0: s25fl128s@0 {
|
||||
+ compatible = "spansion,s25fl129p1";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ spi-max-frequency = <20000000>;
|
||||
+ reg = <0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sai2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&dcu {
|
||||
+ display = <&display>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ display: display@0 {
|
||||
+ bits-per-pixel = <24>;
|
||||
+
|
||||
+ display-timings {
|
||||
+ native-mode = <&timing0>;
|
||||
+
|
||||
+ timing0: mode0 {
|
||||
+ clock-frequency = <25000000>;
|
||||
+ hactive = <640>;
|
||||
+ vactive = <480>;
|
||||
+ hback-porch = <80>;
|
||||
+ hfront-porch = <80>;
|
||||
+ vback-porch = <16>;
|
||||
+ vfront-porch = <16>;
|
||||
+ hsync-len = <12>;
|
||||
+ vsync-len = <2>;
|
||||
+ hsync-active = <1>;
|
||||
+ vsync-active = <1>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,15 @@
|
||||
From bdb1d42c9398eb14e997e026bd46602543a7ed03 Mon Sep 17 00:00:00 2001
|
||||
From 1c96e22d28e1b18c41c71e7d0948378561a6526f Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Tue, 30 Oct 2018 18:26:16 +0800
|
||||
Subject: [PATCH 09/40] dpaa2-l2switch: support layerscape
|
||||
This is an integrated patch of dpaa2-l2switch for
|
||||
layerscape
|
||||
Date: Wed, 17 Apr 2019 18:58:29 +0800
|
||||
Subject: [PATCH] dpaa2-l2switch: support layerscape
|
||||
|
||||
This is an integrated patch of dpaa2-l2switch for layerscape
|
||||
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: Guanhua Gao <guanhua.gao@nxp.com>
|
||||
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
||||
Signed-off-by: Razvan Stefanescu <razvan.stefanescu@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
drivers/staging/fsl-dpaa2/ethsw/Makefile | 10 +
|
||||
drivers/staging/fsl-dpaa2/ethsw/README | 106 ++
|
||||
|
||||
@ -1,28 +1,33 @@
|
||||
From 92cf25fe454dd42136e717ba679a9dba740db0e7 Mon Sep 17 00:00:00 2001
|
||||
From dd0cc8d0739a72ee5d85039a9ba7812383e8f555 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Tue, 30 Oct 2018 18:26:18 +0800
|
||||
Subject: [PATCH 10/40] dpaa2-mac-phy: support layerscape
|
||||
This is an integrated patch of dpaa2-mac-phy for
|
||||
layerscape
|
||||
Date: Wed, 17 Apr 2019 18:58:30 +0800
|
||||
Subject: [PATCH] dpaa2-mac-phy: support layerscape
|
||||
|
||||
This is an integrated patch of dpaa2-mac-phy for layerscape
|
||||
|
||||
Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Bogdan Hamciuc <bogdan.hamciuc@nxp.com>
|
||||
Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
|
||||
Signed-off-by: Catalin Neacsu <valentin-catalin.neacsu@nxp.com>
|
||||
Signed-off-by: Constantin Tudor <constantin.tudor@nxp.com>
|
||||
Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita@nxp.com>
|
||||
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
||||
Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
|
||||
Signed-off-by: Itai Katz <itai.katz@freescale.com>
|
||||
Signed-off-by: J. German Rivera <German.Rivera@freescale.com>
|
||||
Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
|
||||
Signed-off-by: Razvan Stefanescu <razvan.stefanescu@nxp.com>
|
||||
Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Valentin Catalin Neacsu <valentin-catalin.neacsu@nxp.com>
|
||||
---
|
||||
drivers/staging/fsl-dpaa2/mac/Kconfig | 23 +
|
||||
drivers/staging/fsl-dpaa2/mac/Makefile | 10 +
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac-cmd.h | 172 ++++++
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac.c | 619 ++++++++++++++++++++
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac.h | 342 +++++++++++
|
||||
drivers/staging/fsl-dpaa2/mac/mac.c | 672 ++++++++++++++++++++++
|
||||
6 files changed, 1838 insertions(+)
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac-cmd.h | 196 ++++++
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac.c | 689 ++++++++++++++++++
|
||||
drivers/staging/fsl-dpaa2/mac/dpmac.h | 374 ++++++++++
|
||||
drivers/staging/fsl-dpaa2/mac/mac.c | 817 ++++++++++++++++++++++
|
||||
6 files changed, 2109 insertions(+)
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/mac/Kconfig
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/mac/Makefile
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/mac/dpmac-cmd.h
|
||||
@ -71,7 +76,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/mac/dpmac-cmd.h
|
||||
@@ -0,0 +1,172 @@
|
||||
@@ -0,0 +1,196 @@
|
||||
+/* Copyright 2013-2016 Freescale Semiconductor Inc.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
@ -110,9 +115,11 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#define DPMAC_VER_MAJOR 4
|
||||
+#define DPMAC_VER_MINOR 2
|
||||
+#define DPMAC_CMD_BASE_VERSION 1
|
||||
+#define DPMAC_CMD_2ND_VERSION 2
|
||||
+#define DPMAC_CMD_ID_OFFSET 4
|
||||
+
|
||||
+#define DPMAC_CMD(id) (((id) << DPMAC_CMD_ID_OFFSET) | DPMAC_CMD_BASE_VERSION)
|
||||
+#define DPMAC_CMD_V2(id) (((id) << DPMAC_CMD_ID_OFFSET) | DPMAC_CMD_2ND_VERSION)
|
||||
+
|
||||
+/* Command IDs */
|
||||
+#define DPMAC_CMDID_CLOSE DPMAC_CMD(0x800)
|
||||
@ -132,7 +139,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#define DPMAC_CMDID_CLEAR_IRQ_STATUS DPMAC_CMD(0x017)
|
||||
+
|
||||
+#define DPMAC_CMDID_GET_LINK_CFG DPMAC_CMD(0x0c2)
|
||||
+#define DPMAC_CMDID_GET_LINK_CFG_V2 DPMAC_CMD_V2(0x0c2)
|
||||
+#define DPMAC_CMDID_SET_LINK_STATE DPMAC_CMD(0x0c3)
|
||||
+#define DPMAC_CMDID_SET_LINK_STATE_V2 DPMAC_CMD_V2(0x0c3)
|
||||
+#define DPMAC_CMDID_GET_COUNTER DPMAC_CMD(0x0c4)
|
||||
+
|
||||
+#define DPMAC_CMDID_SET_PORT_MAC_ADDR DPMAC_CMD(0x0c5)
|
||||
@ -213,8 +222,17 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u32 rate;
|
||||
+};
|
||||
+
|
||||
+struct dpmac_rsp_get_link_cfg_v2 {
|
||||
+ u64 options;
|
||||
+ u32 rate;
|
||||
+ u32 pad;
|
||||
+ u64 advertising;
|
||||
+};
|
||||
+
|
||||
+#define DPMAC_STATE_SIZE 1
|
||||
+#define DPMAC_STATE_SHIFT 0
|
||||
+#define DPMAC_STATE_VALID_SIZE 1
|
||||
+#define DPMAC_STATE_VALID_SHIFT 1
|
||||
+
|
||||
+struct dpmac_cmd_set_link_state {
|
||||
+ u64 options;
|
||||
@ -224,6 +242,17 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u8 up;
|
||||
+};
|
||||
+
|
||||
+struct dpmac_cmd_set_link_state_v2 {
|
||||
+ u64 options;
|
||||
+ u32 rate;
|
||||
+ u32 pad0;
|
||||
+ /* from lsb: up:1, state_valid:1 */
|
||||
+ u8 state;
|
||||
+ u8 pad1[7];
|
||||
+ u64 supported;
|
||||
+ u64 advertising;
|
||||
+};
|
||||
+
|
||||
+struct dpmac_cmd_get_counter {
|
||||
+ u8 type;
|
||||
+};
|
||||
@ -246,7 +275,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#endif /* _FSL_DPMAC_CMD_H */
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/mac/dpmac.c
|
||||
@@ -0,0 +1,619 @@
|
||||
@@ -0,0 +1,689 @@
|
||||
+/* Copyright 2013-2016 Freescale Semiconductor Inc.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
@ -741,6 +770,42 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * dpmac_get_link_cfg_v2() - Get Ethernet link configuration
|
||||
+ * @mc_io: Pointer to opaque I/O object
|
||||
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
|
||||
+ * @token: Token of DPMAC object
|
||||
+ * @cfg: Returned structure with the link configuration
|
||||
+ *
|
||||
+ * Return: '0' on Success; Error code otherwise.
|
||||
+ */
|
||||
+int dpmac_get_link_cfg_v2(struct fsl_mc_io *mc_io,
|
||||
+ u32 cmd_flags,
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_cfg *cfg)
|
||||
+{
|
||||
+ struct dpmac_rsp_get_link_cfg_v2 *rsp_params;
|
||||
+ struct fsl_mc_command cmd = { 0 };
|
||||
+ int err = 0;
|
||||
+
|
||||
+ /* prepare command */
|
||||
+ cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_LINK_CFG_V2,
|
||||
+ cmd_flags,
|
||||
+ token);
|
||||
+
|
||||
+ /* send command to mc*/
|
||||
+ err = mc_send_command(mc_io, &cmd);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ rsp_params = (struct dpmac_rsp_get_link_cfg_v2 *)cmd.params;
|
||||
+ cfg->options = le64_to_cpu(rsp_params->options);
|
||||
+ cfg->rate = le32_to_cpu(rsp_params->rate);
|
||||
+ cfg->advertising = le64_to_cpu(rsp_params->advertising);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * dpmac_set_link_state() - Set the Ethernet link status
|
||||
+ * @mc_io: Pointer to opaque I/O object
|
||||
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
|
||||
@ -764,7 +829,41 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ cmd_params = (struct dpmac_cmd_set_link_state *)cmd.params;
|
||||
+ cmd_params->options = cpu_to_le64(link_state->options);
|
||||
+ cmd_params->rate = cpu_to_le32(link_state->rate);
|
||||
+ cmd_params->up = dpmac_get_field(link_state->up, STATE);
|
||||
+ dpmac_set_field(cmd_params->up, STATE, link_state->up);
|
||||
+
|
||||
+ /* send command to mc*/
|
||||
+ return mc_send_command(mc_io, &cmd);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * dpmac_set_link_state_v2() - Set the Ethernet link status
|
||||
+ * @mc_io: Pointer to opaque I/O object
|
||||
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
|
||||
+ * @token: Token of DPMAC object
|
||||
+ * @link_state: Link state configuration
|
||||
+ *
|
||||
+ * Return: '0' on Success; Error code otherwise.
|
||||
+ */
|
||||
+int dpmac_set_link_state_v2(struct fsl_mc_io *mc_io,
|
||||
+ u32 cmd_flags,
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_state *link_state)
|
||||
+{
|
||||
+ struct dpmac_cmd_set_link_state_v2 *cmd_params;
|
||||
+ struct fsl_mc_command cmd = { 0 };
|
||||
+
|
||||
+ /* prepare command */
|
||||
+ cmd.header = mc_encode_cmd_header(DPMAC_CMDID_SET_LINK_STATE_V2,
|
||||
+ cmd_flags,
|
||||
+ token);
|
||||
+ cmd_params = (struct dpmac_cmd_set_link_state_v2 *)cmd.params;
|
||||
+ cmd_params->options = cpu_to_le64(link_state->options);
|
||||
+ cmd_params->rate = cpu_to_le32(link_state->rate);
|
||||
+ dpmac_set_field(cmd_params->state, STATE, link_state->up);
|
||||
+ dpmac_set_field(cmd_params->state, STATE_VALID,
|
||||
+ link_state->state_valid);
|
||||
+ cmd_params->supported = cpu_to_le64(link_state->supported);
|
||||
+ cmd_params->advertising = cpu_to_le64(link_state->advertising);
|
||||
+
|
||||
+ /* send command to mc*/
|
||||
+ return mc_send_command(mc_io, &cmd);
|
||||
@ -868,7 +967,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+}
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/mac/dpmac.h
|
||||
@@ -0,0 +1,342 @@
|
||||
@@ -0,0 +1,374 @@
|
||||
+/* Copyright 2013-2016 Freescale Semiconductor Inc.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
@ -1073,13 +1172,29 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#define DPMAC_LINK_OPT_ASYM_PAUSE 0x0000000000000008ULL
|
||||
+
|
||||
+/**
|
||||
+ * Advertised link speeds
|
||||
+ */
|
||||
+#define DPMAC_ADVERTISED_10BASET_FULL 0x0000000000000001ULL
|
||||
+#define DPMAC_ADVERTISED_100BASET_FULL 0x0000000000000002ULL
|
||||
+#define DPMAC_ADVERTISED_1000BASET_FULL 0x0000000000000004ULL
|
||||
+#define DPMAC_ADVERTISED_10000BASET_FULL 0x0000000000000010ULL
|
||||
+#define DPMAC_ADVERTISED_2500BASEX_FULL 0x0000000000000020ULL
|
||||
+
|
||||
+/**
|
||||
+ * Advertise auto-negotiation enable
|
||||
+ */
|
||||
+#define DPMAC_ADVERTISED_AUTONEG 0x0000000000000008ULL
|
||||
+
|
||||
+/**
|
||||
+ * struct dpmac_link_cfg - Structure representing DPMAC link configuration
|
||||
+ * @rate: Link's rate - in Mbps
|
||||
+ * @options: Enable/Disable DPMAC link cfg features (bitmap)
|
||||
+ * @advertising: Speeds that are advertised for autoneg (bitmap)
|
||||
+ */
|
||||
+struct dpmac_link_cfg {
|
||||
+ u32 rate;
|
||||
+ u64 options;
|
||||
+ u64 advertising;
|
||||
+};
|
||||
+
|
||||
+int dpmac_get_link_cfg(struct fsl_mc_io *mc_io,
|
||||
@ -1087,16 +1202,27 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_cfg *cfg);
|
||||
+
|
||||
+int dpmac_get_link_cfg_v2(struct fsl_mc_io *mc_io,
|
||||
+ u32 cmd_flags,
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_cfg *cfg);
|
||||
+
|
||||
+/**
|
||||
+ * struct dpmac_link_state - DPMAC link configuration request
|
||||
+ * @rate: Rate in Mbps
|
||||
+ * @options: Enable/Disable DPMAC link cfg features (bitmap)
|
||||
+ * @up: Link state
|
||||
+ * @state_valid: Ignore/Update the state of the link
|
||||
+ * @supported: Speeds capability of the phy (bitmap)
|
||||
+ * @advertising: Speeds that are advertised for autoneg (bitmap)
|
||||
+ */
|
||||
+struct dpmac_link_state {
|
||||
+ u32 rate;
|
||||
+ u64 options;
|
||||
+ int up;
|
||||
+ int state_valid;
|
||||
+ u64 supported;
|
||||
+ u64 advertising;
|
||||
+};
|
||||
+
|
||||
+int dpmac_set_link_state(struct fsl_mc_io *mc_io,
|
||||
@ -1104,6 +1230,11 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_state *link_state);
|
||||
+
|
||||
+int dpmac_set_link_state_v2(struct fsl_mc_io *mc_io,
|
||||
+ u32 cmd_flags,
|
||||
+ u16 token,
|
||||
+ struct dpmac_link_state *link_state);
|
||||
+
|
||||
+/**
|
||||
+ * enum dpmac_counter - DPMAC counter types
|
||||
+ * @DPMAC_CNT_ING_FRAME_64: counts 64-bytes frames, good or bad.
|
||||
@ -1213,8 +1344,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#endif /* __FSL_DPMAC_H */
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/mac/mac.c
|
||||
@@ -0,0 +1,672 @@
|
||||
@@ -0,0 +1,817 @@
|
||||
+/* Copyright 2015 Freescale Semiconductor Inc.
|
||||
+ * Copyright 2018 NXP
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions are met:
|
||||
@ -1272,6 +1404,8 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ struct fsl_mc_device *mc_dev;
|
||||
+ struct dpmac_attr attr;
|
||||
+ struct dpmac_link_state old_state;
|
||||
+ u16 dpmac_ver_major;
|
||||
+ u16 dpmac_ver_minor;
|
||||
+};
|
||||
+
|
||||
+/* TODO: fix the 10G modes, mapping can't be right:
|
||||
@ -1292,8 +1426,62 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ PHY_INTERFACE_MODE_QSGMII, /* DPMAC_ETH_IF_QSGMII */
|
||||
+ PHY_INTERFACE_MODE_XGMII, /* DPMAC_ETH_IF_XAUI */
|
||||
+ PHY_INTERFACE_MODE_XGMII, /* DPMAC_ETH_IF_XFI */
|
||||
+ PHY_INTERFACE_MODE_XGMII, /* DPMAC_ETH_IF_CAUI */
|
||||
+ PHY_INTERFACE_MODE_XGMII, /* DPMAC_ETH_IF_1000BASEX */
|
||||
+ PHY_INTERFACE_MODE_XGMII, /* DPMAC_ETH_IF_USXGMII */
|
||||
+};
|
||||
+
|
||||
+static int cmp_dpmac_ver(struct dpaa2_mac_priv *priv,
|
||||
+ u16 ver_major, u16 ver_minor)
|
||||
+{
|
||||
+ if (priv->dpmac_ver_major == ver_major)
|
||||
+ return priv->dpmac_ver_minor - ver_minor;
|
||||
+ return priv->dpmac_ver_major - ver_major;
|
||||
+}
|
||||
+
|
||||
+#define DPMAC_LINK_AUTONEG_VER_MAJOR 4
|
||||
+#define DPMAC_LINK_AUTONEG_VER_MINOR 3
|
||||
+
|
||||
+struct dpaa2_mac_link_mode_map {
|
||||
+ u64 dpmac_lm;
|
||||
+ u64 ethtool_lm;
|
||||
+};
|
||||
+
|
||||
+static const struct dpaa2_mac_link_mode_map dpaa2_mac_lm_map[] = {
|
||||
+ {DPMAC_ADVERTISED_10BASET_FULL, ETHTOOL_LINK_MODE_10baseT_Full_BIT},
|
||||
+ {DPMAC_ADVERTISED_100BASET_FULL, ETHTOOL_LINK_MODE_100baseT_Full_BIT},
|
||||
+ {DPMAC_ADVERTISED_1000BASET_FULL, ETHTOOL_LINK_MODE_1000baseT_Full_BIT},
|
||||
+ {DPMAC_ADVERTISED_10000BASET_FULL, ETHTOOL_LINK_MODE_10000baseT_Full_BIT},
|
||||
+ {DPMAC_ADVERTISED_2500BASEX_FULL, ETHTOOL_LINK_MODE_2500baseX_Full_BIT},
|
||||
+ {DPMAC_ADVERTISED_AUTONEG, ETHTOOL_LINK_MODE_Autoneg_BIT},
|
||||
+};
|
||||
+
|
||||
+static void link_mode_dpmac2phydev(u64 dpmac_lm, u32 *phydev_lm)
|
||||
+{
|
||||
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(dpaa2_mac_lm_map); i++) {
|
||||
+ if (dpmac_lm & dpaa2_mac_lm_map[i].dpmac_lm)
|
||||
+ __set_bit(dpaa2_mac_lm_map[i].ethtool_lm, mask);
|
||||
+ }
|
||||
+
|
||||
+ ethtool_convert_link_mode_to_legacy_u32(phydev_lm, mask);
|
||||
+}
|
||||
+
|
||||
+static void link_mode_phydev2dpmac(u32 phydev_lm, u64 *dpni_lm)
|
||||
+{
|
||||
+ unsigned long lm;
|
||||
+ int i;
|
||||
+
|
||||
+ ethtool_convert_legacy_u32_to_link_mode(&lm, phydev_lm);
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(dpaa2_mac_lm_map); i++) {
|
||||
+ if (test_bit(dpaa2_mac_lm_map[i].ethtool_lm, &lm))
|
||||
+ *dpni_lm |= dpaa2_mac_lm_map[i].dpmac_lm;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void dpaa2_mac_link_changed(struct net_device *netdev)
|
||||
+{
|
||||
+ struct phy_device *phydev;
|
||||
@ -1313,6 +1501,12 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ if (phydev->autoneg)
|
||||
+ state.options |= DPMAC_LINK_OPT_AUTONEG;
|
||||
+
|
||||
+ if (phydev->pause && (phydev->advertising & ADVERTISED_Pause))
|
||||
+ state.options |= DPMAC_LINK_OPT_PAUSE;
|
||||
+ if (phydev->pause &&
|
||||
+ (phydev->advertising & ADVERTISED_Asym_Pause))
|
||||
+ state.options |= DPMAC_LINK_OPT_ASYM_PAUSE;
|
||||
+
|
||||
+ netif_carrier_on(netdev);
|
||||
+ } else {
|
||||
+ netif_carrier_off(netdev);
|
||||
@ -1325,11 +1519,18 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ phy_print_status(phydev);
|
||||
+ }
|
||||
+
|
||||
+ /* We must interrogate MC at all times, because we don't know
|
||||
+ * when and whether a potential DPNI may have read the link state.
|
||||
+ */
|
||||
+ err = dpmac_set_link_state(priv->mc_dev->mc_io, 0,
|
||||
+ priv->mc_dev->mc_handle, &state);
|
||||
+ if (cmp_dpmac_ver(priv, DPMAC_LINK_AUTONEG_VER_MAJOR,
|
||||
+ DPMAC_LINK_AUTONEG_VER_MINOR) < 0) {
|
||||
+ err = dpmac_set_link_state(priv->mc_dev->mc_io, 0,
|
||||
+ priv->mc_dev->mc_handle, &state);
|
||||
+ } else {
|
||||
+ link_mode_phydev2dpmac(phydev->supported, &state.supported);
|
||||
+ link_mode_phydev2dpmac(phydev->advertising, &state.advertising);
|
||||
+ state.state_valid = 1;
|
||||
+
|
||||
+ err = dpmac_set_link_state_v2(priv->mc_dev->mc_io, 0,
|
||||
+ priv->mc_dev->mc_handle, &state);
|
||||
+ }
|
||||
+ if (unlikely(err))
|
||||
+ dev_err(&priv->mc_dev->dev, "dpmac_set_link_state: %d\n", err);
|
||||
+}
|
||||
@ -1367,6 +1568,18 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ return NETDEV_TX_OK;
|
||||
+}
|
||||
+
|
||||
+static void dpaa2_mac_get_drvinfo(struct net_device *net_dev,
|
||||
+ struct ethtool_drvinfo *drvinfo)
|
||||
+{
|
||||
+ struct dpaa2_mac_priv *priv = netdev_priv(net_dev);
|
||||
+
|
||||
+ strlcpy(drvinfo->driver, KBUILD_MODNAME, sizeof(drvinfo->driver));
|
||||
+ snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
|
||||
+ "%u.%u", priv->dpmac_ver_major, priv->dpmac_ver_minor);
|
||||
+ strlcpy(drvinfo->bus_info, dev_name(net_dev->dev.parent->parent),
|
||||
+ sizeof(drvinfo->bus_info));
|
||||
+}
|
||||
+
|
||||
+static int dpaa2_mac_get_link_ksettings(struct net_device *netdev,
|
||||
+ struct ethtool_link_ksettings *ks)
|
||||
+{
|
||||
@ -1536,6 +1749,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+};
|
||||
+
|
||||
+static const struct ethtool_ops dpaa2_mac_ethtool_ops = {
|
||||
+ .get_drvinfo = &dpaa2_mac_get_drvinfo,
|
||||
+ .get_link_ksettings = &dpaa2_mac_get_link_ksettings,
|
||||
+ .set_link_ksettings = &dpaa2_mac_set_link_ksettings,
|
||||
+ .get_strings = &dpaa2_mac_get_strings,
|
||||
@ -1555,11 +1769,30 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ phydev->speed = cfg->rate;
|
||||
+ phydev->duplex = !!(cfg->options & DPMAC_LINK_OPT_HALF_DUPLEX);
|
||||
+
|
||||
+ if (cfg->advertising != 0) {
|
||||
+ phydev->advertising = 0;
|
||||
+ link_mode_dpmac2phydev(cfg->advertising, &phydev->advertising);
|
||||
+ }
|
||||
+
|
||||
+ if (phydev->supported & SUPPORTED_Pause) {
|
||||
+ if (cfg->options & DPMAC_LINK_OPT_PAUSE)
|
||||
+ phydev->advertising |= ADVERTISED_Pause;
|
||||
+ else
|
||||
+ phydev->advertising &= ~ADVERTISED_Pause;
|
||||
+ }
|
||||
+
|
||||
+ if (phydev->supported & SUPPORTED_Asym_Pause) {
|
||||
+ if (cfg->options & DPMAC_LINK_OPT_ASYM_PAUSE)
|
||||
+ phydev->advertising |= ADVERTISED_Asym_Pause;
|
||||
+ else
|
||||
+ phydev->advertising &= ~ADVERTISED_Asym_Pause;
|
||||
+ }
|
||||
+
|
||||
+ if (cfg->options & DPMAC_LINK_OPT_AUTONEG) {
|
||||
+ phydev->autoneg = 1;
|
||||
+ phydev->autoneg = AUTONEG_ENABLE;
|
||||
+ phydev->advertising |= ADVERTISED_Autoneg;
|
||||
+ } else {
|
||||
+ phydev->autoneg = 0;
|
||||
+ phydev->autoneg = AUTONEG_DISABLE;
|
||||
+ phydev->advertising &= ~ADVERTISED_Autoneg;
|
||||
+ }
|
||||
+
|
||||
@ -1571,7 +1804,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ struct device *dev = (struct device *)arg;
|
||||
+ struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
|
||||
+ struct dpaa2_mac_priv *priv = dev_get_drvdata(dev);
|
||||
+ struct dpmac_link_cfg link_cfg;
|
||||
+ struct dpmac_link_cfg link_cfg = { 0 };
|
||||
+ u32 status;
|
||||
+ int err;
|
||||
+
|
||||
@ -1582,8 +1815,14 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+ /* DPNI-initiated link configuration; 'ifconfig up' also calls this */
|
||||
+ if (status & DPMAC_IRQ_EVENT_LINK_CFG_REQ) {
|
||||
+ err = dpmac_get_link_cfg(mc_dev->mc_io, 0, mc_dev->mc_handle,
|
||||
+ &link_cfg);
|
||||
+ if (cmp_dpmac_ver(priv, DPMAC_LINK_AUTONEG_VER_MAJOR,
|
||||
+ DPMAC_LINK_AUTONEG_VER_MINOR) < 0)
|
||||
+ err = dpmac_get_link_cfg(mc_dev->mc_io, 0,
|
||||
+ mc_dev->mc_handle, &link_cfg);
|
||||
+ else
|
||||
+ err = dpmac_get_link_cfg_v2(mc_dev->mc_io, 0,
|
||||
+ mc_dev->mc_handle,
|
||||
+ &link_cfg);
|
||||
+ if (unlikely(err))
|
||||
+ goto out;
|
||||
+
|
||||
@ -1682,7 +1921,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ struct dpaa2_mac_priv *priv = NULL;
|
||||
+ struct device_node *phy_node, *dpmac_node;
|
||||
+ struct net_device *netdev;
|
||||
+ phy_interface_t if_mode;
|
||||
+ int if_mode;
|
||||
+ int err = 0;
|
||||
+
|
||||
+ dev = &mc_dev->dev;
|
||||
@ -1723,6 +1962,21 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ goto err_free_mcp;
|
||||
+ }
|
||||
+
|
||||
+ err = dpmac_get_api_version(mc_dev->mc_io, 0, &priv->dpmac_ver_major,
|
||||
+ &priv->dpmac_ver_minor);
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "dpmac_get_api_version failed\n");
|
||||
+ goto err_version;
|
||||
+ }
|
||||
+
|
||||
+ if (cmp_dpmac_ver(priv, DPMAC_VER_MAJOR, DPMAC_VER_MINOR) < 0) {
|
||||
+ dev_err(dev, "DPMAC version %u.%u lower than supported %u.%u\n",
|
||||
+ priv->dpmac_ver_major, priv->dpmac_ver_minor,
|
||||
+ DPMAC_VER_MAJOR, DPMAC_VER_MINOR);
|
||||
+ err = -ENOTSUPP;
|
||||
+ goto err_version;
|
||||
+ }
|
||||
+
|
||||
+ err = dpmac_get_attributes(mc_dev->mc_io, 0,
|
||||
+ mc_dev->mc_handle, &priv->attr);
|
||||
+ if (err) {
|
||||
@ -1761,12 +2015,12 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ }
|
||||
+#endif /* CONFIG_FSL_DPAA2_MAC_NETDEVS */
|
||||
+
|
||||
+ /* probe the PHY as a fixed-link if there's a phy-handle defined
|
||||
+ * in the device tree
|
||||
+ */
|
||||
+ phy_node = of_parse_phandle(dpmac_node, "phy-handle", 0);
|
||||
+ if (!phy_node) {
|
||||
+ goto probe_fixed_link;
|
||||
+ /* get the interface mode from the dpmac of node or from the MC attributes */
|
||||
+ if_mode = of_get_phy_mode(dpmac_node);
|
||||
+ if (if_mode >= 0) {
|
||||
+ dev_dbg(dev, "\tusing if mode %s for eth_if %d\n",
|
||||
+ phy_modes(if_mode), priv->attr.eth_if);
|
||||
+ goto link_type;
|
||||
+ }
|
||||
+
|
||||
+ if (priv->attr.eth_if < ARRAY_SIZE(dpaa2_mac_iface_mode)) {
|
||||
@ -1774,8 +2028,20 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ dev_dbg(dev, "\tusing if mode %s for eth_if %d\n",
|
||||
+ phy_modes(if_mode), priv->attr.eth_if);
|
||||
+ } else {
|
||||
+ dev_warn(dev, "Unexpected interface mode %d, will probe as fixed link\n",
|
||||
+ priv->attr.eth_if);
|
||||
+ dev_err(dev, "Unexpected interface mode %d\n",
|
||||
+ priv->attr.eth_if);
|
||||
+ err = -EINVAL;
|
||||
+ goto err_no_if_mode;
|
||||
+ }
|
||||
+
|
||||
+link_type:
|
||||
+ /* probe the PHY as fixed-link if the DPMAC attribute indicates so */
|
||||
+ if (priv->attr.link_type == DPMAC_LINK_TYPE_FIXED)
|
||||
+ goto probe_fixed_link;
|
||||
+
|
||||
+ /* or if there's no phy-handle defined in the device tree */
|
||||
+ phy_node = of_parse_phandle(dpmac_node, "phy-handle", 0);
|
||||
+ if (!phy_node) {
|
||||
+ goto probe_fixed_link;
|
||||
+ }
|
||||
+
|
||||
@ -1812,6 +2078,14 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ err = -EFAULT;
|
||||
+ goto err_no_phy;
|
||||
+ }
|
||||
+
|
||||
+ err = phy_connect_direct(netdev, netdev->phydev,
|
||||
+ &dpaa2_mac_link_changed, if_mode);
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "error trying to connect to PHY\n");
|
||||
+ goto err_no_phy;
|
||||
+ }
|
||||
+
|
||||
+ dev_info(dev, "Registered fixed PHY.\n");
|
||||
+ }
|
||||
+
|
||||
@ -1819,6 +2093,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+err_no_if_mode:
|
||||
+err_defer:
|
||||
+err_no_phy:
|
||||
+#ifdef CONFIG_FSL_DPAA2_MAC_NETDEVS
|
||||
@ -1826,6 +2101,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+err_free_irq:
|
||||
+#endif
|
||||
+ teardown_irqs(mc_dev);
|
||||
+err_version:
|
||||
+err_close:
|
||||
+ dpmac_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
|
||||
+err_free_mcp:
|
||||
|
||||
@ -1,30 +1,34 @@
|
||||
From 579f1f6767b1008c6e5ccc2b029acbb56002ed8b Mon Sep 17 00:00:00 2001
|
||||
From 802238feea29ddfb765fc0c162e0de34920cd58d Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Tue, 30 Oct 2018 18:26:20 +0800
|
||||
Subject: [PATCH 11/40] dpaa2-rtc: support layerscape
|
||||
Date: Wed, 17 Apr 2019 18:58:31 +0800
|
||||
Subject: [PATCH] dpaa2-rtc: support layerscape
|
||||
|
||||
This is an integrated patch of dpaa2-rtc for layerscape
|
||||
|
||||
Signed-off-by: Catalin Horghidan <catalin.horghidan@nxp.com>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Catalin Horghidan <catalin.horghidan@nxp.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
---
|
||||
drivers/staging/fsl-dpaa2/rtc/Makefile | 10 +
|
||||
drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h | 160 +++++
|
||||
drivers/staging/fsl-dpaa2/rtc/dprtc.c | 746 ++++++++++++++++++++++
|
||||
drivers/staging/fsl-dpaa2/rtc/dprtc.h | 172 +++++
|
||||
drivers/staging/fsl-dpaa2/rtc/rtc.c | 242 +++++++
|
||||
5 files changed, 1330 insertions(+)
|
||||
drivers/staging/fsl-dpaa2/rtc/rtc.c | 240 +++++++
|
||||
drivers/staging/fsl-dpaa2/rtc/rtc.h | 14 +
|
||||
6 files changed, 1342 insertions(+)
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.c
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.h
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.c
|
||||
create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.h
|
||||
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/rtc/Makefile
|
||||
@@ -0,0 +1,10 @@
|
||||
+
|
||||
+obj-$(CONFIG_PTP_1588_CLOCK_DPAA2) += dpaa2-rtc.o
|
||||
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += dpaa2-rtc.o
|
||||
+
|
||||
+dpaa2-rtc-objs := rtc.o dprtc.o
|
||||
+
|
||||
@ -1122,7 +1126,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#endif /* __FSL_DPRTC_H */
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/rtc/rtc.c
|
||||
@@ -0,0 +1,242 @@
|
||||
@@ -0,0 +1,240 @@
|
||||
+/* Copyright 2013-2015 Freescale Semiconductor Inc.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
@ -1160,8 +1164,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+#include <linux/fsl/mc.h>
|
||||
+
|
||||
+#include "dprtc.h"
|
||||
+#include "dprtc-cmd.h"
|
||||
+#include "rtc.h"
|
||||
+
|
||||
+#define N_EXT_TS 2
|
||||
+
|
||||
@ -1276,7 +1279,6 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+{
|
||||
+ struct device *dev;
|
||||
+ int err = 0;
|
||||
+ int dpaa2_phc_index;
|
||||
+ u32 tmr_add = 0;
|
||||
+
|
||||
+ if (!mc_dev)
|
||||
@ -1365,3 +1367,20 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DESCRIPTION("DPAA2 RTC (PTP 1588 clock) driver (prototype)");
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/fsl-dpaa2/rtc/rtc.h
|
||||
@@ -0,0 +1,14 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Copyright 2018 NXP
|
||||
+ */
|
||||
+
|
||||
+#ifndef __RTC_H
|
||||
+#define __RTC_H
|
||||
+
|
||||
+#include "dprtc.h"
|
||||
+#include "dprtc-cmd.h"
|
||||
+
|
||||
+extern int dpaa2_phc_index;
|
||||
+
|
||||
+#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,15 @@
|
||||
From 2aaf8e8caef3ec4c2c155421f62f983892c49387 Mon Sep 17 00:00:00 2001
|
||||
From ab58c737bc723f52e787e1767bbbf0fcbe39a27b Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Fri, 16 Nov 2018 12:20:04 +0800
|
||||
Subject: [PATCH 13/39] mc-bus: support layerscape
|
||||
Date: Wed, 17 Apr 2019 18:58:43 +0800
|
||||
Subject: [PATCH] mc-bus: support layerscape
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is an integrated patch of mc-bus for layerscape
|
||||
|
||||
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
|
||||
Signed-off-by: Cristian Sovaiala <cristian.sovaiala@freescale.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
@ -18,9 +23,8 @@ Signed-off-by: Lijun Pan <Lijun.Pan@freescale.com>
|
||||
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
|
||||
Signed-off-by: Radu Alexe <radu.alexe@nxp.com>
|
||||
Signed-off-by: Razvan Stefanescu <razvan.stefanescu@nxp.com>
|
||||
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
|
||||
Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
|
||||
Signed-off-by: Stuart Yoder <stuyoder@gmail.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
drivers/bus/Kconfig | 2 +
|
||||
drivers/bus/Makefile | 4 +
|
||||
@ -30,23 +34,21 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
.../fsl-mc/bus => bus/fsl-mc}/dpcon.c | 103 +-
|
||||
drivers/bus/fsl-mc/dpmcp.c | 99 ++
|
||||
.../fsl-mc/bus => bus/fsl-mc}/dprc-driver.c | 96 +-
|
||||
.../{staging/fsl-mc/bus => bus/fsl-mc}/dprc.c | 288 +----
|
||||
.../bus => bus/fsl-mc}/fsl-mc-allocator.c | 112 +-
|
||||
.../fsl-mc/bus => bus/fsl-mc}/fsl-mc-bus.c | 305 ++++-
|
||||
.../{staging/fsl-mc/bus => bus/fsl-mc}/dprc.c | 289 +----
|
||||
.../bus => bus/fsl-mc}/fsl-mc-allocator.c | 123 +-
|
||||
.../fsl-mc/bus => bus/fsl-mc}/fsl-mc-bus.c | 322 +++++-
|
||||
.../fsl-mc/bus => bus/fsl-mc}/fsl-mc-msi.c | 16 +-
|
||||
drivers/bus/fsl-mc/fsl-mc-private.h | 223 ++++
|
||||
drivers/bus/fsl-mc/fsl-mc-restool.c | 219 ++++
|
||||
.../fsl-mc/bus => bus/fsl-mc}/mc-io.c | 36 +-
|
||||
.../fsl-mc/bus => bus/fsl-mc}/mc-io.c | 51 +-
|
||||
.../fsl-mc/bus => bus/fsl-mc}/mc-sys.c | 33 +-
|
||||
drivers/irqchip/Kconfig | 6 +
|
||||
drivers/irqchip/Makefile | 1 +
|
||||
drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c | 98 ++
|
||||
drivers/staging/fsl-dpaa2/ethernet/README | 2 +-
|
||||
.../staging/fsl-dpaa2/ethernet/dpaa2-eth.c | 2 +-
|
||||
.../staging/fsl-dpaa2/ethernet/dpaa2-eth.h | 3 +-
|
||||
drivers/staging/fsl-dpaa2/ethernet/dpni.c | 2 +-
|
||||
drivers/staging/fsl-mc/TODO | 18 -
|
||||
drivers/staging/fsl-mc/bus/Kconfig | 16 +-
|
||||
drivers/staging/fsl-mc/bus/Kconfig | 15 +-
|
||||
drivers/staging/fsl-mc/bus/Makefile | 13 -
|
||||
drivers/staging/fsl-mc/bus/dpio/dpio-driver.c | 2 +-
|
||||
.../staging/fsl-mc/bus/dpio/dpio-service.c | 2 +-
|
||||
@ -57,9 +59,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
drivers/staging/fsl-mc/bus/dprc-cmd.h | 451 --------
|
||||
drivers/staging/fsl-mc/bus/dprc.h | 268 -----
|
||||
.../fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c | 1 +
|
||||
include/linux/fsl/mc.h | 1020 +++++++++++++++++
|
||||
include/linux/fsl/mc.h | 1029 +++++++++++++++++
|
||||
include/uapi/linux/fsl_mc.h | 31 +
|
||||
37 files changed, 2255 insertions(+), 1546 deletions(-)
|
||||
35 files changed, 2302 insertions(+), 1531 deletions(-)
|
||||
create mode 100644 drivers/bus/fsl-mc/Kconfig
|
||||
create mode 100644 drivers/bus/fsl-mc/Makefile
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/dpbp.c (67%)
|
||||
@ -68,14 +70,13 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/dprc-driver.c (93%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/dprc.c (68%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/fsl-mc-allocator.c (84%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/fsl-mc-bus.c (76%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/fsl-mc-bus.c (75%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/fsl-mc-msi.c (96%)
|
||||
create mode 100644 drivers/bus/fsl-mc/fsl-mc-private.h
|
||||
create mode 100644 drivers/bus/fsl-mc/fsl-mc-restool.c
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/mc-io.c (89%)
|
||||
rename drivers/{staging/fsl-mc/bus => bus/fsl-mc}/mc-sys.c (90%)
|
||||
create mode 100644 drivers/irqchip/irq-gic-v3-its-fsl-mc-msi.c
|
||||
delete mode 100644 drivers/staging/fsl-mc/TODO
|
||||
delete mode 100644 drivers/staging/fsl-mc/bus/dpmcp-cmd.h
|
||||
delete mode 100644 drivers/staging/fsl-mc/bus/dpmcp.h
|
||||
delete mode 100644 drivers/staging/fsl-mc/bus/dpmng-cmd.h
|
||||
@ -3618,7 +3619,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
-}
|
||||
--- /dev/null
|
||||
+++ b/drivers/bus/fsl-mc/dprc.c
|
||||
@@ -0,0 +1,575 @@
|
||||
@@ -0,0 +1,576 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
+/*
|
||||
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
|
||||
@ -4123,10 +4124,11 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+ /* retrieve response parameters */
|
||||
+ rsp_params = (struct dprc_rsp_get_obj_region *)cmd.params;
|
||||
+ region_desc->base_offset = le32_to_cpu(rsp_params->base_addr);
|
||||
+ region_desc->base_offset = le32_to_cpu(rsp_params->base_offset);
|
||||
+ region_desc->size = le32_to_cpu(rsp_params->size);
|
||||
+ region_desc->type = rsp_params->type;
|
||||
+ region_desc->flags = le32_to_cpu(rsp_params->flags);
|
||||
+ region_desc->base_address = le64_to_cpu(rsp_params->base_addr);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
@ -4862,7 +4864,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
-}
|
||||
--- /dev/null
|
||||
+++ b/drivers/bus/fsl-mc/fsl-mc-allocator.c
|
||||
@@ -0,0 +1,655 @@
|
||||
@@ -0,0 +1,666 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * fsl-mc object allocator driver
|
||||
@ -5160,6 +5162,14 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ if (!mc_adev)
|
||||
+ goto error;
|
||||
+
|
||||
+ mc_adev->consumer_link = device_link_add(&mc_dev->dev,
|
||||
+ &mc_adev->dev,
|
||||
+ DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
+ if (!mc_adev->consumer_link) {
|
||||
+ error = -EINVAL;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ *new_mc_adev = mc_adev;
|
||||
+ return 0;
|
||||
+error:
|
||||
@ -5186,6 +5196,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ return;
|
||||
+
|
||||
+ fsl_mc_resource_free(resource);
|
||||
+
|
||||
+ device_link_del(mc_adev->consumer_link);
|
||||
+ mc_adev->consumer_link = NULL;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(fsl_mc_object_free);
|
||||
+
|
||||
@ -6423,7 +6436,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
-postcore_initcall(fsl_mc_bus_driver_init);
|
||||
--- /dev/null
|
||||
+++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
|
||||
@@ -0,0 +1,1139 @@
|
||||
@@ -0,0 +1,1148 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Freescale Management Complex (MC) bus driver
|
||||
@ -7054,10 +7067,17 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ "dprc_get_obj_region() failed: %d\n", error);
|
||||
+ goto error_cleanup_regions;
|
||||
+ }
|
||||
+
|
||||
+ error = translate_mc_addr(mc_dev, mc_region_type,
|
||||
+ region_desc.base_offset,
|
||||
+ ®ions[i].start);
|
||||
+ /* Older MC only returned region offset and no base address
|
||||
+ * If base address is in the region_desc use it otherwise
|
||||
+ * revert to old mechanism
|
||||
+ */
|
||||
+ if (region_desc.base_address)
|
||||
+ regions[i].start = region_desc.base_address +
|
||||
+ region_desc.base_offset;
|
||||
+ else
|
||||
+ error = translate_mc_addr(mc_dev, mc_region_type,
|
||||
+ region_desc.base_offset,
|
||||
+ ®ions[i].start);
|
||||
+ if (error < 0) {
|
||||
+ dev_err(parent_dev,
|
||||
+ "Invalid MC offset: %#x (for %s.%d\'s region %d)\n",
|
||||
@ -7071,6 +7091,8 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ regions[i].flags = IORESOURCE_IO;
|
||||
+ if (region_desc.flags & DPRC_REGION_CACHEABLE)
|
||||
+ regions[i].flags |= IORESOURCE_CACHEABLE;
|
||||
+ if (region_desc.flags & DPRC_REGION_SHAREABLE)
|
||||
+ regions[i].flags |= IORESOURCE_MEM;
|
||||
+ }
|
||||
+
|
||||
+ mc_dev->regions = regions;
|
||||
@ -8884,7 +8906,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
-EXPORT_SYMBOL_GPL(fsl_mc_portal_reset);
|
||||
--- /dev/null
|
||||
+++ b/drivers/bus/fsl-mc/mc-io.c
|
||||
@@ -0,0 +1,268 @@
|
||||
@@ -0,0 +1,281 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
+/*
|
||||
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
|
||||
@ -9057,7 +9079,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ struct fsl_mc_resource *resource = NULL;
|
||||
+ struct fsl_mc_io *mc_io = NULL;
|
||||
+
|
||||
+ if (mc_dev->flags & FSL_MC_IS_DPRC) {
|
||||
+ if (fsl_mc_is_root_dprc(&mc_dev->dev)) {
|
||||
+ mc_bus_dev = mc_dev;
|
||||
+ } else {
|
||||
+ if (!dev_is_fsl_mc(mc_dev->dev.parent))
|
||||
@ -9096,9 +9118,19 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ if (error < 0)
|
||||
+ goto error_cleanup_resource;
|
||||
+
|
||||
+ dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
|
||||
+ &dpmcp_dev->dev,
|
||||
+ DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
+ if (!dpmcp_dev->consumer_link) {
|
||||
+ error = -EINVAL;
|
||||
+ goto error_cleanup_mc_io;
|
||||
+ }
|
||||
+
|
||||
+ *new_mc_io = mc_io;
|
||||
+ return 0;
|
||||
+
|
||||
+error_cleanup_mc_io:
|
||||
+ fsl_destroy_mc_io(mc_io);
|
||||
+error_cleanup_resource:
|
||||
+ fsl_mc_resource_free(resource);
|
||||
+ return error;
|
||||
@ -9131,6 +9163,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+ fsl_destroy_mc_io(mc_io);
|
||||
+ fsl_mc_resource_free(resource);
|
||||
+
|
||||
+ device_link_del(dpmcp_dev->consumer_link);
|
||||
+ dpmcp_dev->consumer_link = NULL;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(fsl_mc_portal_free);
|
||||
+
|
||||
@ -9878,20 +9913,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+}
|
||||
+
|
||||
+early_initcall(its_fsl_mc_msi_init);
|
||||
--- a/drivers/staging/fsl-dpaa2/ethernet/README
|
||||
+++ b/drivers/staging/fsl-dpaa2/ethernet/README
|
||||
@@ -36,7 +36,7 @@ are treated as internal resources of oth
|
||||
|
||||
For a more detailed description of the DPAA2 architecture and its object
|
||||
abstractions see:
|
||||
- drivers/staging/fsl-mc/README.txt
|
||||
+ Documentation/networking/dpaa2/overview.rst
|
||||
|
||||
Each Linux net device is built on top of a Datapath Network Interface (DPNI)
|
||||
object and uses Buffer Pools (DPBPs), I/O Portals (DPIOs) and Concentrators
|
||||
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
|
||||
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
|
||||
@@ -43,7 +43,7 @@
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <linux/filter.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <net/sock.h>
|
||||
@ -9902,11 +9926,12 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
|
||||
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h
|
||||
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h
|
||||
@@ -36,11 +36,10 @@
|
||||
@@ -9,12 +9,11 @@
|
||||
#include <linux/dcbnl.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/if_vlan.h>
|
||||
+#include <linux/fsl/mc.h>
|
||||
#include <linux/filter.h>
|
||||
|
||||
#include "../../fsl-mc/include/dpaa2-io.h"
|
||||
#include "../../fsl-mc/include/dpaa2-fd.h"
|
||||
@ -9917,7 +9942,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
|
||||
--- a/drivers/staging/fsl-dpaa2/ethernet/dpni.c
|
||||
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpni.c
|
||||
@@ -32,7 +32,7 @@
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
@ -9926,30 +9951,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
#include "dpni.h"
|
||||
#include "dpni-cmd.h"
|
||||
|
||||
--- a/drivers/staging/fsl-mc/TODO
|
||||
+++ /dev/null
|
||||
@@ -1,18 +0,0 @@
|
||||
-* Add at least one device driver for a DPAA2 object (child device of the
|
||||
- fsl-mc bus). Most likely candidate for this is adding DPAA2 Ethernet
|
||||
- driver support, which depends on drivers for several objects: DPNI,
|
||||
- DPIO, DPMAC. Other pre-requisites include:
|
||||
-
|
||||
- * MC firmware uprev. The MC firmware upon which the fsl-mc
|
||||
- bus driver and DPAA2 object drivers are based is continuing
|
||||
- to evolve, so minor updates are needed to keep in sync with binary
|
||||
- interface changes to the MC.
|
||||
-
|
||||
-* Cleanup
|
||||
-
|
||||
-Please send any patches to Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
|
||||
-german.rivera@freescale.com, devel@driverdev.osuosl.org,
|
||||
-linux-kernel@vger.kernel.org
|
||||
-
|
||||
-[1] https://lkml.org/lkml/2015/7/9/93
|
||||
-[2] https://lkml.org/lkml/2015/7/7/712
|
||||
--- a/drivers/staging/fsl-mc/bus/Kconfig
|
||||
+++ b/drivers/staging/fsl-mc/bus/Kconfig
|
||||
@@ -5,16 +5,6 @@
|
||||
@@ -5,15 +5,6 @@
|
||||
# Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
|
||||
#
|
||||
|
||||
@ -9962,11 +9966,10 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
- architecture. The fsl-mc bus driver handles discovery of
|
||||
- DPAA2 objects (which are represented as Linux devices) and
|
||||
- binding objects to drivers.
|
||||
-
|
||||
|
||||
config FSL_MC_DPIO
|
||||
tristate "QorIQ DPAA2 DPIO driver"
|
||||
depends on FSL_MC_BUS
|
||||
@@ -24,3 +14,9 @@ config FSL_MC_DPIO
|
||||
@@ -24,3 +15,9 @@ config FSL_MC_DPIO
|
||||
other DPAA2 objects. This driver does not expose the DPIO
|
||||
objects individually, but groups them under a service layer
|
||||
API.
|
||||
@ -10000,9 +10003,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
obj-$(CONFIG_FSL_MC_DPIO) += dpio/
|
||||
--- a/drivers/staging/fsl-mc/bus/dpio/dpio-driver.c
|
||||
+++ b/drivers/staging/fsl-mc/bus/dpio/dpio-driver.c
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <linux/dma-mapping.h>
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
-#include "../../include/mc.h"
|
||||
+#include <linux/fsl/mc.h>
|
||||
@ -11005,7 +11008,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
static struct irq_chip its_msi_irq_chip = {
|
||||
--- /dev/null
|
||||
+++ b/include/linux/fsl/mc.h
|
||||
@@ -0,0 +1,1020 @@
|
||||
@@ -0,0 +1,1029 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/*
|
||||
+ * Freescale Management Complex (MC) bus public interface
|
||||
@ -11208,6 +11211,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ struct fsl_mc_device_irq **irqs;
|
||||
+ struct fsl_mc_resource *resource;
|
||||
+ const char *driver_override;
|
||||
+ struct device_link *consumer_link;
|
||||
+};
|
||||
+
|
||||
+#define to_fsl_mc_device(_dev) \
|
||||
@ -11519,9 +11523,11 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+
|
||||
+/* DPRC command versioning */
|
||||
+#define DPRC_CMD_BASE_VERSION 1
|
||||
+#define DPRC_CMD_2ND_VERSION 2
|
||||
+#define DPRC_CMD_ID_OFFSET 4
|
||||
+
|
||||
+#define DPRC_CMD(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION)
|
||||
+#define DPRC_CMD_V2(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_2ND_VERSION)
|
||||
+
|
||||
+/* DPRC command IDs */
|
||||
+#define DPRC_CMDID_CLOSE DPRC_CMD(0x800)
|
||||
@ -11540,7 +11546,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+#define DPRC_CMDID_GET_CONT_ID DPRC_CMD(0x830)
|
||||
+#define DPRC_CMDID_GET_OBJ_COUNT DPRC_CMD(0x159)
|
||||
+#define DPRC_CMDID_GET_OBJ DPRC_CMD(0x15A)
|
||||
+#define DPRC_CMDID_GET_OBJ_REG DPRC_CMD(0x15E)
|
||||
+#define DPRC_CMDID_GET_OBJ_REG DPRC_CMD_V2(0x15E)
|
||||
+#define DPRC_CMDID_SET_OBJ_IRQ DPRC_CMD(0x15F)
|
||||
+
|
||||
+struct dprc_cmd_open {
|
||||
@ -11643,7 +11649,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ /* response word 0 */
|
||||
+ __le64 pad0;
|
||||
+ /* response word 1 */
|
||||
+ __le32 base_addr;
|
||||
+ __le32 base_offset;
|
||||
+ __le32 pad1;
|
||||
+ /* response word 2 */
|
||||
+ __le32 size;
|
||||
@ -11651,6 +11657,9 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u8 pad2[3];
|
||||
+ /* response word 3 */
|
||||
+ __le32 flags;
|
||||
+ __le32 pad3;
|
||||
+ /* response word 4 */
|
||||
+ __le64 base_addr;
|
||||
+};
|
||||
+
|
||||
+struct dprc_cmd_set_obj_irq {
|
||||
@ -11783,6 +11792,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+/* Region flags */
|
||||
+/* Cacheable - Indicates that region should be mapped as cacheable */
|
||||
+#define DPRC_REGION_CACHEABLE 0x00000001
|
||||
+#define DPRC_REGION_SHAREABLE 0x00000002
|
||||
+
|
||||
+/**
|
||||
+ * enum dprc_region_type - Region type
|
||||
@ -11791,7 +11801,8 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ */
|
||||
+enum dprc_region_type {
|
||||
+ DPRC_REGION_TYPE_MC_PORTAL,
|
||||
+ DPRC_REGION_TYPE_QBMAN_PORTAL
|
||||
+ DPRC_REGION_TYPE_QBMAN_PORTAL,
|
||||
+ DPRC_REGION_TYPE_QBMAN_MEM_BACKED_PORTAL
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
@ -11809,6 +11820,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ u32 size;
|
||||
+ u32 flags;
|
||||
+ enum dprc_region_type type;
|
||||
+ u64 base_address;
|
||||
+};
|
||||
+
|
||||
+int dprc_get_obj_region(struct fsl_mc_io *mc_io,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,28 +1,32 @@
|
||||
From 48dbe4b3a31795b8efdfff82f69eccd086052eed Mon Sep 17 00:00:00 2001
|
||||
From 371e99a257cb714f9a6027d6571cb1a43855d926 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Fri, 16 Nov 2018 10:27:30 +0800
|
||||
Subject: [PATCH 16/39] dpaa-bqman: support layerscape
|
||||
Date: Wed, 17 Apr 2019 18:58:24 +0800
|
||||
Subject: [PATCH] dpaa-bqman: support layerscape
|
||||
|
||||
This is an integrated patch of dpaa-bqman for layerscape
|
||||
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||
Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
|
||||
Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
|
||||
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
|
||||
Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
|
||||
Signed-off-by: Valentin Rothberg <valentinrothberg@gmail.com>
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
---
|
||||
drivers/soc/fsl/qbman/Kconfig | 2 +-
|
||||
drivers/soc/fsl/qbman/bman.c | 24 ++++-
|
||||
drivers/soc/fsl/qbman/bman_ccsr.c | 35 ++++++-
|
||||
drivers/soc/fsl/qbman/bman_portal.c | 12 ++-
|
||||
drivers/soc/fsl/qbman/bman.c | 24 +++-
|
||||
drivers/soc/fsl/qbman/bman_ccsr.c | 57 +++++++++-
|
||||
drivers/soc/fsl/qbman/bman_portal.c | 44 ++++++--
|
||||
drivers/soc/fsl/qbman/bman_priv.h | 3 +
|
||||
drivers/soc/fsl/qbman/dpaa_sys.h | 8 +-
|
||||
drivers/soc/fsl/qbman/qman.c | 46 ++++++++-
|
||||
drivers/soc/fsl/qbman/qman_ccsr.c | 140 ++++++++++++++++++++++------
|
||||
drivers/soc/fsl/qbman/qman_portal.c | 12 ++-
|
||||
drivers/soc/fsl/qbman/qman.c | 46 +++++++-
|
||||
drivers/soc/fsl/qbman/qman_ccsr.c | 168 +++++++++++++++++++++++-----
|
||||
drivers/soc/fsl/qbman/qman_portal.c | 60 ++++++++--
|
||||
drivers/soc/fsl/qbman/qman_priv.h | 5 +-
|
||||
drivers/soc/fsl/qbman/qman_test.h | 2 -
|
||||
11 files changed, 236 insertions(+), 53 deletions(-)
|
||||
include/soc/fsl/bman.h | 16 +++
|
||||
include/soc/fsl/qman.h | 17 +++
|
||||
13 files changed, 390 insertions(+), 62 deletions(-)
|
||||
|
||||
--- a/drivers/soc/fsl/qbman/Kconfig
|
||||
+++ b/drivers/soc/fsl/qbman/Kconfig
|
||||
@ -83,20 +87,49 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
return 0;
|
||||
--- a/drivers/soc/fsl/qbman/bman_ccsr.c
|
||||
+++ b/drivers/soc/fsl/qbman/bman_ccsr.c
|
||||
@@ -170,10 +170,11 @@ static int fsl_bman_probe(struct platfor
|
||||
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include "bman_priv.h"
|
||||
+#include <linux/iommu.h>
|
||||
|
||||
u16 bman_ip_rev;
|
||||
EXPORT_SYMBOL(bman_ip_rev);
|
||||
@@ -120,6 +121,7 @@ static void bm_set_memory(u64 ba, u32 si
|
||||
*/
|
||||
static dma_addr_t fbpr_a;
|
||||
static size_t fbpr_sz;
|
||||
+static int __bman_probed;
|
||||
|
||||
static int bman_fbpr(struct reserved_mem *rmem)
|
||||
{
|
||||
@@ -166,14 +168,24 @@ static irqreturn_t bman_isr(int irq, voi
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
+int bman_is_probed(void)
|
||||
+{
|
||||
+ return __bman_probed;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(bman_is_probed);
|
||||
+
|
||||
static int fsl_bman_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret, err_irq;
|
||||
struct device *dev = &pdev->dev;
|
||||
- struct device_node *node = dev->of_node;
|
||||
+ struct device_node *mem_node, *node = dev->of_node;
|
||||
+ struct iommu_domain *domain;
|
||||
struct resource *res;
|
||||
u16 id, bm_pool_cnt;
|
||||
u8 major, minor;
|
||||
+ u64 size;
|
||||
+
|
||||
+ __bman_probed = -1;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
@@ -201,6 +202,38 @@ static int fsl_bman_probe(struct platfor
|
||||
@@ -201,6 +213,47 @@ static int fsl_bman_probe(struct platfor
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -131,13 +164,98 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ }
|
||||
+
|
||||
+ dev_dbg(dev, "Allocated FBPR 0x%llx 0x%zx\n", fbpr_a, fbpr_sz);
|
||||
+
|
||||
+ /* Create an 1-to-1 iommu mapping for FBPR area */
|
||||
+ domain = iommu_get_domain_for_dev(dev);
|
||||
+ if (domain) {
|
||||
+ ret = iommu_map(domain, fbpr_a, fbpr_a, PAGE_ALIGN(fbpr_sz),
|
||||
+ IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE);
|
||||
+ if (ret)
|
||||
+ dev_warn(dev, "failed to iommu_map() %d\n", ret);
|
||||
+ }
|
||||
+
|
||||
bm_set_memory(fbpr_a, fbpr_sz);
|
||||
|
||||
err_irq = platform_get_irq(pdev, 0);
|
||||
@@ -240,6 +293,8 @@ static int fsl_bman_probe(struct platfor
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ __bman_probed = 1;
|
||||
+
|
||||
return 0;
|
||||
};
|
||||
|
||||
--- a/drivers/soc/fsl/qbman/bman_portal.c
|
||||
+++ b/drivers/soc/fsl/qbman/bman_portal.c
|
||||
@@ -123,7 +123,14 @@ static int bman_portal_probe(struct plat
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
static struct bman_portal *affine_bportals[NR_CPUS];
|
||||
static struct cpumask portal_cpus;
|
||||
+static int __bman_portals_probed;
|
||||
/* protect bman global registers and global data shared among portals */
|
||||
static DEFINE_SPINLOCK(bman_lock);
|
||||
|
||||
@@ -85,6 +86,12 @@ static int bman_online_cpu(unsigned int
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int bman_portals_probed(void)
|
||||
+{
|
||||
+ return __bman_portals_probed;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(bman_portals_probed);
|
||||
+
|
||||
static int bman_portal_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -92,11 +99,21 @@ static int bman_portal_probe(struct plat
|
||||
struct bm_portal_config *pcfg;
|
||||
struct resource *addr_phys[2];
|
||||
void __iomem *va;
|
||||
- int irq, cpu;
|
||||
+ int irq, cpu, err;
|
||||
+
|
||||
+ err = bman_is_probed();
|
||||
+ if (!err)
|
||||
+ return -EPROBE_DEFER;
|
||||
+ if (err < 0) {
|
||||
+ dev_err(&pdev->dev, "failing probe due to bman probe error\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
|
||||
pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL);
|
||||
- if (!pcfg)
|
||||
+ if (!pcfg) {
|
||||
+ __bman_portals_probed = -1;
|
||||
return -ENOMEM;
|
||||
+ }
|
||||
|
||||
pcfg->dev = dev;
|
||||
|
||||
@@ -104,14 +121,14 @@ static int bman_portal_probe(struct plat
|
||||
DPAA_PORTAL_CE);
|
||||
if (!addr_phys[0]) {
|
||||
dev_err(dev, "Can't get %pOF property 'reg::CE'\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
|
||||
addr_phys[1] = platform_get_resource(pdev, IORESOURCE_MEM,
|
||||
DPAA_PORTAL_CI);
|
||||
if (!addr_phys[1]) {
|
||||
dev_err(dev, "Can't get %pOF property 'reg::CI'\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
|
||||
pcfg->cpu = -1;
|
||||
@@ -119,11 +136,18 @@ static int bman_portal_probe(struct plat
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq <= 0) {
|
||||
dev_err(dev, "Can't get %pOF IRQ'\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
pcfg->irq = irq;
|
||||
|
||||
@ -153,7 +271,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
if (!va) {
|
||||
dev_err(dev, "ioremap::CE failed\n");
|
||||
goto err_ioremap1;
|
||||
@@ -131,8 +138,7 @@ static int bman_portal_probe(struct plat
|
||||
@@ -131,8 +155,7 @@ static int bman_portal_probe(struct plat
|
||||
|
||||
pcfg->addr_virt[DPAA_PORTAL_CE] = va;
|
||||
|
||||
@ -163,6 +281,25 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
if (!va) {
|
||||
dev_err(dev, "ioremap::CI failed\n");
|
||||
goto err_ioremap2;
|
||||
@@ -149,6 +172,9 @@ static int bman_portal_probe(struct plat
|
||||
}
|
||||
|
||||
cpumask_set_cpu(cpu, &portal_cpus);
|
||||
+ if (!__bman_portals_probed &&
|
||||
+ cpumask_weight(&portal_cpus) == num_online_cpus())
|
||||
+ __bman_portals_probed = 1;
|
||||
spin_unlock(&bman_lock);
|
||||
pcfg->cpu = cpu;
|
||||
|
||||
@@ -168,6 +194,8 @@ err_portal_init:
|
||||
err_ioremap2:
|
||||
iounmap(pcfg->addr_virt[DPAA_PORTAL_CE]);
|
||||
err_ioremap1:
|
||||
+ __bman_portals_probed = -1;
|
||||
+
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
--- a/drivers/soc/fsl/qbman/bman_priv.h
|
||||
+++ b/drivers/soc/fsl/qbman/bman_priv.h
|
||||
@@ -33,6 +33,9 @@
|
||||
@ -290,7 +427,23 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
/*
|
||||
--- a/drivers/soc/fsl/qbman/qman_ccsr.c
|
||||
+++ b/drivers/soc/fsl/qbman/qman_ccsr.c
|
||||
@@ -401,21 +401,42 @@ static int qm_init_pfdr(struct device *d
|
||||
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include "qman_priv.h"
|
||||
+#include <linux/iommu.h>
|
||||
|
||||
u16 qman_ip_rev;
|
||||
EXPORT_SYMBOL(qman_ip_rev);
|
||||
@@ -273,6 +274,7 @@ static const struct qman_error_info_mdat
|
||||
static u32 __iomem *qm_ccsr_start;
|
||||
/* A SDQCR mask comprising all the available/visible pool channels */
|
||||
static u32 qm_pools_sdqcr;
|
||||
+static int __qman_probed;
|
||||
|
||||
static inline u32 qm_ccsr_in(u32 offset)
|
||||
{
|
||||
@@ -401,21 +403,42 @@ static int qm_init_pfdr(struct device *d
|
||||
}
|
||||
|
||||
/*
|
||||
@ -338,7 +491,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
return 0;
|
||||
}
|
||||
RESERVEDMEM_OF_DECLARE(qman_fqd, "fsl,qman-fqd", qman_fqd);
|
||||
@@ -431,32 +452,13 @@ static int qman_pfdr(struct reserved_mem
|
||||
@@ -431,32 +454,13 @@ static int qman_pfdr(struct reserved_mem
|
||||
}
|
||||
RESERVEDMEM_OF_DECLARE(qman_pfdr, "fsl,qman-pfdr", qman_pfdr);
|
||||
|
||||
@ -373,21 +526,49 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
static void log_edata_bits(struct device *dev, u32 bit_count)
|
||||
{
|
||||
u32 i, j, mask = 0xffffffff;
|
||||
@@ -687,11 +689,12 @@ static int qman_resource_init(struct dev
|
||||
@@ -595,6 +599,7 @@ static int qman_init_ccsr(struct device
|
||||
#define LIO_CFG_LIODN_MASK 0x0fff0000
|
||||
void qman_liodn_fixup(u16 channel)
|
||||
{
|
||||
+#ifdef CONFIG_PPC
|
||||
static int done;
|
||||
static u32 liodn_offset;
|
||||
u32 before, after;
|
||||
@@ -614,6 +619,7 @@ void qman_liodn_fixup(u16 channel)
|
||||
qm_ccsr_out(REG_REV3_QCSP_LIO_CFG(idx), after);
|
||||
else
|
||||
qm_ccsr_out(REG_QCSP_LIO_CFG(idx), after);
|
||||
+#endif
|
||||
}
|
||||
|
||||
#define IO_CFG_SDEST_MASK 0x00ff0000
|
||||
@@ -684,14 +690,24 @@ static int qman_resource_init(struct dev
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int qman_is_probed(void)
|
||||
+{
|
||||
+ return __qman_probed;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(qman_is_probed);
|
||||
+
|
||||
static int fsl_qman_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
- struct device_node *node = dev->of_node;
|
||||
+ struct device_node *mem_node, *node = dev->of_node;
|
||||
+ struct iommu_domain *domain;
|
||||
struct resource *res;
|
||||
int ret, err_irq;
|
||||
u16 id;
|
||||
u8 major, minor;
|
||||
+ u64 size;
|
||||
+
|
||||
+ __qman_probed = -1;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
@@ -717,6 +720,8 @@ static int fsl_qman_probe(struct platfor
|
||||
@@ -717,6 +733,8 @@ static int fsl_qman_probe(struct platfor
|
||||
qman_ip_rev = QMAN_REV30;
|
||||
else if (major == 3 && minor == 1)
|
||||
qman_ip_rev = QMAN_REV31;
|
||||
@ -396,7 +577,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
else {
|
||||
dev_err(dev, "Unknown QMan version\n");
|
||||
return -ENODEV;
|
||||
@@ -727,10 +732,83 @@ static int fsl_qman_probe(struct platfor
|
||||
@@ -727,10 +745,96 @@ static int fsl_qman_probe(struct platfor
|
||||
qm_channel_caam = QMAN_CHANNEL_CAAM_REV3;
|
||||
}
|
||||
|
||||
@ -481,12 +662,116 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
+ }
|
||||
+ }
|
||||
+ dev_info(dev, "Allocated PFDR 0x%llx 0x%zx\n", pfdr_a, pfdr_sz);
|
||||
+
|
||||
+ /* Create an 1-to-1 iommu mapping for fqd and pfdr areas */
|
||||
+ domain = iommu_get_domain_for_dev(dev);
|
||||
+ if (domain) {
|
||||
+ ret = iommu_map(domain, fqd_a, fqd_a, PAGE_ALIGN(fqd_sz),
|
||||
+ IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE);
|
||||
+ if (ret)
|
||||
+ dev_warn(dev, "iommu_map(fqd) failed %d\n", ret);
|
||||
+ ret = iommu_map(domain, pfdr_a, pfdr_a, PAGE_ALIGN(pfdr_sz),
|
||||
+ IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE);
|
||||
+ if (ret)
|
||||
+ dev_warn(dev, "iommu_map(pfdr) failed %d\n", ret);
|
||||
+ }
|
||||
|
||||
ret = qman_init_ccsr(dev);
|
||||
if (ret) {
|
||||
@@ -793,6 +897,8 @@ static int fsl_qman_probe(struct platfor
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ __qman_probed = 1;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- a/drivers/soc/fsl/qbman/qman_portal.c
|
||||
+++ b/drivers/soc/fsl/qbman/qman_portal.c
|
||||
@@ -262,7 +262,14 @@ static int qman_portal_probe(struct plat
|
||||
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include "qman_priv.h"
|
||||
+#include <linux/iommu.h>
|
||||
|
||||
struct qman_portal *qman_dma_portal;
|
||||
EXPORT_SYMBOL(qman_dma_portal);
|
||||
@@ -38,6 +39,7 @@ EXPORT_SYMBOL(qman_dma_portal);
|
||||
#define CONFIG_FSL_DPA_PIRQ_FAST 1
|
||||
|
||||
static struct cpumask portal_cpus;
|
||||
+static int __qman_portals_probed;
|
||||
/* protect qman global registers and global data shared among portals */
|
||||
static DEFINE_SPINLOCK(qman_lock);
|
||||
|
||||
@@ -218,19 +220,36 @@ static int qman_online_cpu(unsigned int
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int qman_portals_probed(void)
|
||||
+{
|
||||
+ return __qman_portals_probed;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(qman_portals_probed);
|
||||
+
|
||||
static int qman_portal_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *node = dev->of_node;
|
||||
+ struct iommu_domain *domain;
|
||||
struct qm_portal_config *pcfg;
|
||||
struct resource *addr_phys[2];
|
||||
void __iomem *va;
|
||||
int irq, cpu, err;
|
||||
u32 val;
|
||||
|
||||
+ err = qman_is_probed();
|
||||
+ if (!err)
|
||||
+ return -EPROBE_DEFER;
|
||||
+ if (err < 0) {
|
||||
+ dev_err(&pdev->dev, "failing probe due to qman probe error\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL);
|
||||
- if (!pcfg)
|
||||
+ if (!pcfg) {
|
||||
+ __qman_portals_probed = -1;
|
||||
return -ENOMEM;
|
||||
+ }
|
||||
|
||||
pcfg->dev = dev;
|
||||
|
||||
@@ -238,19 +257,20 @@ static int qman_portal_probe(struct plat
|
||||
DPAA_PORTAL_CE);
|
||||
if (!addr_phys[0]) {
|
||||
dev_err(dev, "Can't get %pOF property 'reg::CE'\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
|
||||
addr_phys[1] = platform_get_resource(pdev, IORESOURCE_MEM,
|
||||
DPAA_PORTAL_CI);
|
||||
if (!addr_phys[1]) {
|
||||
dev_err(dev, "Can't get %pOF property 'reg::CI'\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
|
||||
err = of_property_read_u32(node, "cell-index", &val);
|
||||
if (err) {
|
||||
dev_err(dev, "Can't get %pOF property 'cell-index'\n", node);
|
||||
+ __qman_portals_probed = -1;
|
||||
return err;
|
||||
}
|
||||
pcfg->channel = val;
|
||||
@@ -258,11 +278,18 @@ static int qman_portal_probe(struct plat
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq <= 0) {
|
||||
dev_err(dev, "Can't get %pOF IRQ\n", node);
|
||||
- return -ENXIO;
|
||||
+ goto err_ioremap1;
|
||||
}
|
||||
pcfg->irq = irq;
|
||||
|
||||
@ -502,7 +787,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
if (!va) {
|
||||
dev_err(dev, "ioremap::CE failed\n");
|
||||
goto err_ioremap1;
|
||||
@@ -270,8 +277,7 @@ static int qman_portal_probe(struct plat
|
||||
@@ -270,8 +297,7 @@ static int qman_portal_probe(struct plat
|
||||
|
||||
pcfg->addr_virt[DPAA_PORTAL_CE] = va;
|
||||
|
||||
@ -512,6 +797,47 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
if (!va) {
|
||||
dev_err(dev, "ioremap::CI failed\n");
|
||||
goto err_ioremap2;
|
||||
@@ -279,6 +305,21 @@ static int qman_portal_probe(struct plat
|
||||
|
||||
pcfg->addr_virt[DPAA_PORTAL_CI] = va;
|
||||
|
||||
+ /* Create an 1-to-1 iommu mapping for cena portal area */
|
||||
+ domain = iommu_get_domain_for_dev(dev);
|
||||
+ if (domain) {
|
||||
+ /*
|
||||
+ * Note: not mapping this as cacheable triggers the infamous
|
||||
+ * QMan CIDE error.
|
||||
+ */
|
||||
+ err = iommu_map(domain,
|
||||
+ addr_phys[0]->start, addr_phys[0]->start,
|
||||
+ PAGE_ALIGN(resource_size(addr_phys[0])),
|
||||
+ IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE);
|
||||
+ if (err)
|
||||
+ dev_warn(dev, "failed to iommu_map() %d\n", err);
|
||||
+ }
|
||||
+
|
||||
pcfg->pools = qm_get_pools_sdqcr();
|
||||
|
||||
spin_lock(&qman_lock);
|
||||
@@ -290,6 +331,9 @@ static int qman_portal_probe(struct plat
|
||||
}
|
||||
|
||||
cpumask_set_cpu(cpu, &portal_cpus);
|
||||
+ if (!__qman_portals_probed &&
|
||||
+ cpumask_weight(&portal_cpus) == num_online_cpus())
|
||||
+ __qman_portals_probed = 1;
|
||||
spin_unlock(&qman_lock);
|
||||
pcfg->cpu = cpu;
|
||||
|
||||
@@ -314,6 +358,8 @@ err_portal_init:
|
||||
err_ioremap2:
|
||||
iounmap(pcfg->addr_virt[DPAA_PORTAL_CE]);
|
||||
err_ioremap1:
|
||||
+ __qman_portals_probed = -1;
|
||||
+
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
--- a/drivers/soc/fsl/qbman/qman_priv.h
|
||||
+++ b/drivers/soc/fsl/qbman/qman_priv.h
|
||||
@@ -28,13 +28,13 @@
|
||||
@ -548,3 +874,50 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
-
|
||||
int qman_test_stash(void);
|
||||
int qman_test_api(void);
|
||||
--- a/include/soc/fsl/bman.h
|
||||
+++ b/include/soc/fsl/bman.h
|
||||
@@ -126,4 +126,20 @@ int bman_release(struct bman_pool *pool,
|
||||
*/
|
||||
int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num);
|
||||
|
||||
+/**
|
||||
+ * bman_is_probed - Check if bman is probed
|
||||
+ *
|
||||
+ * Returns 1 if the bman driver successfully probed, -1 if the bman driver
|
||||
+ * failed to probe or 0 if the bman driver did not probed yet.
|
||||
+ */
|
||||
+int bman_is_probed(void);
|
||||
+/**
|
||||
+ * bman_portals_probed - Check if all cpu bound bman portals are probed
|
||||
+ *
|
||||
+ * Returns 1 if all the required cpu bound bman portals successfully probed,
|
||||
+ * -1 if probe errors appeared or 0 if the bman portals did not yet finished
|
||||
+ * probing.
|
||||
+ */
|
||||
+int bman_portals_probed(void);
|
||||
+
|
||||
#endif /* __FSL_BMAN_H */
|
||||
--- a/include/soc/fsl/qman.h
|
||||
+++ b/include/soc/fsl/qman.h
|
||||
@@ -1186,4 +1186,21 @@ int qman_alloc_cgrid_range(u32 *result,
|
||||
*/
|
||||
int qman_release_cgrid(u32 id);
|
||||
|
||||
+/**
|
||||
+ * qman_is_probed - Check if qman is probed
|
||||
+ *
|
||||
+ * Returns 1 if the qman driver successfully probed, -1 if the qman driver
|
||||
+ * failed to probe or 0 if the qman driver did not probed yet.
|
||||
+ */
|
||||
+int qman_is_probed(void);
|
||||
+
|
||||
+/**
|
||||
+ * qman_portals_probed - Check if all cpu bound qman portals are probed
|
||||
+ *
|
||||
+ * Returns 1 if all the required cpu bound qman portals successfully probed,
|
||||
+ * -1 if probe errors appeared or 0 if the qman portals did not yet finished
|
||||
+ * probing.
|
||||
+ */
|
||||
+int qman_portals_probed(void);
|
||||
+
|
||||
#endif /* __FSL_QMAN_H */
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
From f0f6e88696957d376d8875f675c1caf75a33fd67 Mon Sep 17 00:00:00 2001
|
||||
From: Biwen Li <biwen.li@nxp.com>
|
||||
Date: Wed, 17 Apr 2019 18:58:34 +0800
|
||||
Subject: [PATCH] etsec: support layerscape
|
||||
|
||||
This is an integrated patch of etsec for layerscape
|
||||
|
||||
Signed-off-by: Biwen Li <biwen.li@nxp.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
|
||||
---
|
||||
drivers/net/ethernet/freescale/gianfar.h | 3 ---
|
||||
.../net/ethernet/freescale/gianfar_ethtool.c | 23 +++++++++++++++----
|
||||
2 files changed, 18 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/freescale/gianfar.h
|
||||
+++ b/drivers/net/ethernet/freescale/gianfar.h
|
||||
@@ -1372,7 +1372,4 @@ struct filer_table {
|
||||
struct gfar_filer_entry fe[MAX_FILER_CACHE_IDX + 20];
|
||||
};
|
||||
|
||||
-/* The gianfar_ptp module will set this variable */
|
||||
-extern int gfar_phc_index;
|
||||
-
|
||||
#endif /* __GIANFAR_H */
|
||||
--- a/drivers/net/ethernet/freescale/gianfar_ethtool.c
|
||||
+++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <linux/phy.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/if_vlan.h>
|
||||
+#include <linux/of_platform.h>
|
||||
+#include <linux/fsl/ptp_qoriq.h>
|
||||
|
||||
#include "gianfar.h"
|
||||
|
||||
@@ -1509,24 +1511,35 @@ static int gfar_get_nfc(struct net_devic
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int gfar_phc_index = -1;
|
||||
-EXPORT_SYMBOL(gfar_phc_index);
|
||||
-
|
||||
static int gfar_get_ts_info(struct net_device *dev,
|
||||
struct ethtool_ts_info *info)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
+ struct platform_device *ptp_dev;
|
||||
+ struct device_node *ptp_node;
|
||||
+ struct qoriq_ptp *ptp = NULL;
|
||||
+
|
||||
+ info->phc_index = -1;
|
||||
|
||||
if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) {
|
||||
info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
|
||||
SOF_TIMESTAMPING_SOFTWARE;
|
||||
- info->phc_index = -1;
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+ ptp_node = of_find_compatible_node(NULL, NULL, "fsl,etsec-ptp");
|
||||
+ if (ptp_node) {
|
||||
+ ptp_dev = of_find_device_by_node(ptp_node);
|
||||
+ if (ptp_dev)
|
||||
+ ptp = platform_get_drvdata(ptp_dev);
|
||||
+ }
|
||||
+
|
||||
+ if (ptp)
|
||||
+ info->phc_index = ptp->phc_index;
|
||||
+
|
||||
info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
|
||||
SOF_TIMESTAMPING_RX_HARDWARE |
|
||||
SOF_TIMESTAMPING_RAW_HARDWARE;
|
||||
- info->phc_index = gfar_phc_index;
|
||||
info->tx_types = (1 << HWTSTAMP_TX_OFF) |
|
||||
(1 << HWTSTAMP_TX_ON);
|
||||
info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user