Merge branch 'master' into desktop

This commit is contained in:
Igor Pecovnik 2020-12-10 12:04:50 +01:00
commit e8150b5c0c
55 changed files with 11714 additions and 1223 deletions

View file

@ -93,7 +93,7 @@ case $BRANCH in
MAINLINE_KERNEL_SOURCE='https://github.com/torvalds/linux.git' MAINLINE_KERNEL_SOURCE='https://github.com/torvalds/linux.git'
KERNELPATCHDIR='rockchip64-'$BRANCH KERNELPATCHDIR='rockchip64-'$BRANCH
KERNELBRANCH="tag:v5.10-rc6" KERNELBRANCH="tag:v5.10-rc7"
LINUXFAMILY=rockchip64 LINUXFAMILY=rockchip64
LINUXCONFIG='linux-rockchip64-'$BRANCH LINUXCONFIG='linux-rockchip64-'$BRANCH

View file

@ -538,8 +538,15 @@ install_distribution_specific()
# by using default lz4 initrd compression leads to corruption, go back to proven method # by using default lz4 initrd compression leads to corruption, go back to proven method
sed -i "s/^COMPRESS=.*/COMPRESS=gzip/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf sed -i "s/^COMPRESS=.*/COMPRESS=gzip/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf
# remove doubled uname from motd # cleanup motd services and related files
[[ -f "${SDCARD}"/etc/update-motd.d/10-uname ]] && rm "${SDCARD}"/etc/update-motd.d/10-uname chroot "${SDCARD}" /bin/bash -c "systemctl disable motd-news.service >/dev/null 2>&1"
chroot "${SDCARD}" /bin/bash -c "systemctl disable motd-news.timer >/dev/null 2>&1"
rm -f "${SDCARD}"/etc/update-motd.d/10-uname
rm -f "${SDCARD}"/etc/update-motd.d/10-help-text
rm -f "${SDCARD}"/etc/update-motd.d/50-motd-news
rm -f "${SDCARD}"/etc/update-motd.d/80-esm
rm -f "${SDCARD}"/etc/update-motd.d/80-livepatch
# remove motd news from motd.ubuntu.com # remove motd news from motd.ubuntu.com
[[ -f "${SDCARD}"/etc/default/motd-news ]] && sed -i "s/^ENABLED=.*/ENABLED=0/" "${SDCARD}"/etc/default/motd-news [[ -f "${SDCARD}"/etc/default/motd-news ]] && sed -i "s/^ENABLED=.*/ENABLED=0/" "${SDCARD}"/etc/default/motd-news

View file

@ -462,7 +462,7 @@ format_emmc()
fi fi
# default boot partition size, in MiB # default boot partition size, in MiB
DEFAULT_BOOTSIZE=96 DEFAULT_BOOTSIZE=200
# (convert to sectors for partitioning) # (convert to sectors for partitioning)
DEFAULT_BOOTSIZE_SECTORS=$(((${DEFAULT_BOOTSIZE} * 1024 * 1024) / 512)) DEFAULT_BOOTSIZE_SECTORS=$(((${DEFAULT_BOOTSIZE} * 1024 * 1024) / 512))

View file

@ -25,11 +25,9 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++- drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-) 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/cpuidle/cpuidle-mvebu-v7.c b/drivers/cpuidle/cpuidle-mvebu-v7.c
index 01a856971f05..18ded9e7cb34 100644
--- a/drivers/cpuidle/cpuidle-mvebu-v7.c --- a/drivers/cpuidle/cpuidle-mvebu-v7.c
+++ b/drivers/cpuidle/cpuidle-mvebu-v7.c +++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
@@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cpuidle_device *dev, @@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cp
ret = mvebu_v7_cpu_suspend(deepidle); ret = mvebu_v7_cpu_suspend(deepidle);
cpu_pm_exit(); cpu_pm_exit();
@ -43,6 +41,3 @@ index 01a856971f05..18ded9e7cb34 100644
return index; return index;
} }
--
2.1.0

View file

@ -12,11 +12,9 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/pci/pcie/portdrv_core.c | 2 + drivers/pci/pcie/portdrv_core.c | 2 +
5 files changed, 180 insertions(+), 34 deletions(-) 5 files changed, 180 insertions(+), 34 deletions(-)
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index c39978b750ec..b4fb20835573 100644
--- a/drivers/pci/controller/pci-mvebu.c --- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c
@@ -53,7 +53,14 @@ @@ -53,13 +53,26 @@
PCIE_CONF_ADDR_EN) PCIE_CONF_ADDR_EN)
#define PCIE_CONF_DATA_OFF 0x18fc #define PCIE_CONF_DATA_OFF 0x18fc
#define PCIE_MASK_OFF 0x1910 #define PCIE_MASK_OFF 0x1910
@ -31,7 +29,19 @@ index c39978b750ec..b4fb20835573 100644
#define PCIE_CTRL_OFF 0x1a00 #define PCIE_CTRL_OFF 0x1a00
#define PCIE_CTRL_X1_MODE 0x0001 #define PCIE_CTRL_X1_MODE 0x0001
#define PCIE_STAT_OFF 0x1a04 #define PCIE_STAT_OFF 0x1a04
@@ -432,6 +439,54 @@ static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) #define PCIE_STAT_BUS 0xff00
#define PCIE_STAT_DEV 0x1f0000
#define PCIE_STAT_LINK_DOWN BIT(0)
+#define PCIE_SSPL 0x1a0c
+#define PCIE_SSPL_MSGEN BIT(14)
+#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8)
+#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3)
+#define PCIE_SSPL_SPLV(x) ((x) & 0xff)
+#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff)
#define PCIE_RC_RTSTA 0x1a14
#define PCIE_DEBUG_CTRL 0x1a60
#define PCIE_DEBUG_SOFT_RESET BIT(20)
@@ -432,6 +445,54 @@ static void mvebu_pcie_handle_membase_ch
&port->memwin); &port->memwin);
} }
@ -86,7 +96,22 @@ index c39978b750ec..b4fb20835573 100644
static pci_bridge_emul_read_status_t static pci_bridge_emul_read_status_t
mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge, mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
int reg, u32 *value) int reg, u32 *value)
@@ -477,6 +532,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge, @@ -462,6 +523,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(str
*value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 tmp = mvebu_readl(port, PCIE_SSPL);
+ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 |
+ PCIE_SSPL_SPLV_VAL(tmp) << 7;
+ break;
+ }
+
case PCI_EXP_SLTCTL:
*value = PCI_EXP_SLTSTA_PDS << 16;
break;
@@ -477,6 +546,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(str
return PCI_BRIDGE_EMUL_HANDLED; return PCI_BRIDGE_EMUL_HANDLED;
} }
@ -117,7 +142,7 @@ index c39978b750ec..b4fb20835573 100644
static void static void
mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge,
int reg, u32 old, u32 new, u32 mask) int reg, u32 old, u32 new, u32 mask)
@@ -494,7 +573,8 @@ mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, @@ -494,7 +587,8 @@ mvebu_pci_bridge_emul_base_conf_write(st
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
if ((old ^ new) & PCI_COMMAND_MEMORY) if ((old ^ new) & PCI_COMMAND_MEMORY)
mvebu_pcie_handle_membase_change(port); mvebu_pcie_handle_membase_change(port);
@ -127,7 +152,7 @@ index c39978b750ec..b4fb20835573 100644
break; break;
} }
@@ -517,6 +597,11 @@ mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, @@ -517,6 +611,11 @@ mvebu_pci_bridge_emul_base_conf_write(st
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
break; break;
@ -139,7 +164,7 @@ index c39978b750ec..b4fb20835573 100644
case PCI_PRIMARY_BUS: case PCI_PRIMARY_BUS:
mvebu_pcie_set_local_bus_nr(port, conf->secondary_bus); mvebu_pcie_set_local_bus_nr(port, conf->secondary_bus);
break; break;
@@ -534,6 +619,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, @@ -534,6 +633,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(st
switch (reg) { switch (reg) {
case PCI_EXP_DEVCTL: case PCI_EXP_DEVCTL:
@ -150,7 +175,19 @@ index c39978b750ec..b4fb20835573 100644
/* /*
* Armada370 data says these bits must always * Armada370 data says these bits must always
* be zero when in root complex mode. * be zero when in root complex mode.
@@ -559,6 +648,25 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, @@ -556,9 +659,37 @@ mvebu_pci_bridge_emul_pcie_conf_write(st
mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) |
+ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) |
+ PCIE_SSPL_MSGEN;
+ mvebu_writel(port, sspl, PCIE_SSPL);
+ break;
+ }
+
case PCI_EXP_RTSTA: case PCI_EXP_RTSTA:
mvebu_writel(port, new, PCIE_RC_RTSTA); mvebu_writel(port, new, PCIE_RC_RTSTA);
break; break;
@ -176,7 +213,7 @@ index c39978b750ec..b4fb20835573 100644
} }
} }
@@ -566,6 +674,8 @@ static struct pci_bridge_emul_ops mvebu_pci_bridge_emul_ops = { @@ -566,6 +697,8 @@ static struct pci_bridge_emul_ops mvebu_
.write_base = mvebu_pci_bridge_emul_base_conf_write, .write_base = mvebu_pci_bridge_emul_base_conf_write,
.read_pcie = mvebu_pci_bridge_emul_pcie_conf_read, .read_pcie = mvebu_pci_bridge_emul_pcie_conf_read,
.write_pcie = mvebu_pci_bridge_emul_pcie_conf_write, .write_pcie = mvebu_pci_bridge_emul_pcie_conf_write,
@ -185,11 +222,9 @@ index c39978b750ec..b4fb20835573 100644
}; };
/* /*
diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c
index ccf26d12ec61..c124b7ff1e22 100644
--- a/drivers/pci/pci-bridge-emul.c --- a/drivers/pci/pci-bridge-emul.c
+++ b/drivers/pci/pci-bridge-emul.c +++ b/drivers/pci/pci-bridge-emul.c
@@ -151,6 +151,7 @@ static const struct pci_bridge_reg_behavior pci_regs_behavior[] = { @@ -151,6 +151,7 @@ static const struct pci_bridge_reg_behav
.rw = (GENMASK(7, 0) | .rw = (GENMASK(7, 0) |
((PCI_BRIDGE_CTL_PARITY | ((PCI_BRIDGE_CTL_PARITY |
PCI_BRIDGE_CTL_SERR | PCI_BRIDGE_CTL_SERR |
@ -197,7 +232,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
PCI_BRIDGE_CTL_ISA | PCI_BRIDGE_CTL_ISA |
PCI_BRIDGE_CTL_VGA | PCI_BRIDGE_CTL_VGA |
PCI_BRIDGE_CTL_MASTER_ABORT | PCI_BRIDGE_CTL_MASTER_ABORT |
@@ -264,6 +265,7 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge, @@ -264,6 +265,7 @@ int pci_bridge_emul_init(struct pci_brid
bridge->conf.header_type = PCI_HEADER_TYPE_BRIDGE; bridge->conf.header_type = PCI_HEADER_TYPE_BRIDGE;
bridge->conf.cache_line_size = 0x10; bridge->conf.cache_line_size = 0x10;
bridge->conf.status = cpu_to_le16(PCI_STATUS_CAP_LIST); bridge->conf.status = cpu_to_le16(PCI_STATUS_CAP_LIST);
@ -205,7 +240,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
bridge->pci_regs_behavior = kmemdup(pci_regs_behavior, bridge->pci_regs_behavior = kmemdup(pci_regs_behavior,
sizeof(pci_regs_behavior), sizeof(pci_regs_behavior),
GFP_KERNEL); GFP_KERNEL);
@@ -321,25 +323,26 @@ int pci_bridge_emul_conf_read(struct pci_bridge_emul *bridge, int where, @@ -321,25 +323,26 @@ int pci_bridge_emul_conf_read(struct pci
__le32 *cfgspace; __le32 *cfgspace;
const struct pci_bridge_reg_behavior *behavior; const struct pci_bridge_reg_behavior *behavior;
@ -244,7 +279,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
} }
if (read_op) if (read_op)
@@ -347,15 +350,20 @@ int pci_bridge_emul_conf_read(struct pci_bridge_emul *bridge, int where, @@ -347,15 +350,20 @@ int pci_bridge_emul_conf_read(struct pci
else else
ret = PCI_BRIDGE_EMUL_NOT_HANDLED; ret = PCI_BRIDGE_EMUL_NOT_HANDLED;
@ -269,7 +304,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
if (size == 1) if (size == 1)
*value = (*value >> (8 * (where & 3))) & 0xff; *value = (*value >> (8 * (where & 3))) & 0xff;
@@ -382,12 +390,6 @@ int pci_bridge_emul_conf_write(struct pci_bridge_emul *bridge, int where, @@ -382,12 +390,6 @@ int pci_bridge_emul_conf_write(struct pc
__le32 *cfgspace; __le32 *cfgspace;
const struct pci_bridge_reg_behavior *behavior; const struct pci_bridge_reg_behavior *behavior;
@ -282,7 +317,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
shift = (where & 0x3) * 8; shift = (where & 0x3) * 8;
if (size == 4) if (size == 4)
@@ -403,27 +405,42 @@ int pci_bridge_emul_conf_write(struct pci_bridge_emul *bridge, int where, @@ -403,27 +405,42 @@ int pci_bridge_emul_conf_write(struct pc
if (ret != PCIBIOS_SUCCESSFUL) if (ret != PCIBIOS_SUCCESSFUL)
return ret; return ret;
@ -336,8 +371,6 @@ index ccf26d12ec61..c124b7ff1e22 100644
if (write_op) if (write_op)
write_op(bridge, reg, old, new, mask); write_op(bridge, reg, old, new, mask);
diff --git a/drivers/pci/pci-bridge-emul.h b/drivers/pci/pci-bridge-emul.h
index b31883022a8e..5f64560aaa26 100644
--- a/drivers/pci/pci-bridge-emul.h --- a/drivers/pci/pci-bridge-emul.h
+++ b/drivers/pci/pci-bridge-emul.h +++ b/drivers/pci/pci-bridge-emul.h
@@ -90,6 +90,14 @@ struct pci_bridge_emul_ops { @@ -90,6 +90,14 @@ struct pci_bridge_emul_ops {
@ -369,11 +402,9 @@ index b31883022a8e..5f64560aaa26 100644
}; };
struct pci_bridge_reg_behavior; struct pci_bridge_reg_behavior;
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 253c30cc1967..3edbe276e626 100644
--- a/drivers/pci/pcie/aspm.c --- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c
@@ -576,6 +576,8 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist) @@ -576,6 +576,8 @@ static void pcie_aspm_cap_init(struct pc
*/ */
pcie_get_aspm_reg(parent, &upreg); pcie_get_aspm_reg(parent, &upreg);
pcie_get_aspm_reg(child, &dwreg); pcie_get_aspm_reg(child, &dwreg);
@ -382,11 +413,9 @@ index 253c30cc1967..3edbe276e626 100644
/* /*
* Setup L0s state * Setup L0s state
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index 50a9522ab07d..105ebc7a7987 100644
--- a/drivers/pci/pcie/portdrv_core.c --- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c
@@ -325,6 +325,7 @@ int pcie_port_device_register(struct pci_dev *dev) @@ -325,6 +325,7 @@ int pcie_port_device_register(struct pci
/* Get and check PCI Express port services */ /* Get and check PCI Express port services */
capabilities = get_port_device_capability(dev); capabilities = get_port_device_capability(dev);
@ -394,7 +423,7 @@ index 50a9522ab07d..105ebc7a7987 100644
if (!capabilities) if (!capabilities)
return 0; return 0;
@@ -337,6 +338,7 @@ int pcie_port_device_register(struct pci_dev *dev) @@ -337,6 +338,7 @@ int pcie_port_device_register(struct pci
* if that is to be used. * if that is to be used.
*/ */
status = pcie_init_service_irqs(dev, irqs, capabilities); status = pcie_init_service_irqs(dev, irqs, capabilities);
@ -402,65 +431,3 @@ index 50a9522ab07d..105ebc7a7987 100644
if (status) { if (status) {
capabilities &= PCIE_PORT_SERVICE_HP; capabilities &= PCIE_PORT_SERVICE_HP;
if (!capabilities) if (!capabilities)
--
cgit v1.2.1
From 9b1aafd0f620776f8d15f3ee872d3d5a69a468db Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@arm.linux.org.uk>
Date: Tue, 29 Nov 2016 10:13:48 +0000
Subject: implement slot capabilities (SSPL)
---
drivers/pci/controller/pci-mvebu.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index b4fb20835573..060226d11588 100644
--- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c
@@ -67,6 +67,12 @@
#define PCIE_STAT_BUS 0xff00
#define PCIE_STAT_DEV 0x1f0000
#define PCIE_STAT_LINK_DOWN BIT(0)
+#define PCIE_SSPL 0x1a0c
+#define PCIE_SSPL_MSGEN BIT(14)
+#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8)
+#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3)
+#define PCIE_SSPL_SPLV(x) ((x) & 0xff)
+#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff)
#define PCIE_RC_RTSTA 0x1a14
#define PCIE_DEBUG_CTRL 0x1a60
#define PCIE_DEBUG_SOFT_RESET BIT(20)
@@ -517,6 +523,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
*value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 tmp = mvebu_readl(port, PCIE_SSPL);
+ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 |
+ PCIE_SSPL_SPLV_VAL(tmp) << 7;
+ break;
+ }
+
case PCI_EXP_SLTCTL:
*value = PCI_EXP_SLTSTA_PDS << 16;
break;
@@ -645,6 +659,15 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge,
mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) |
+ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) |
+ PCIE_SSPL_MSGEN;
+ mvebu_writel(port, sspl, PCIE_SSPL);
+ break;
+ }
+
case PCI_EXP_RTSTA:
mvebu_writel(port, new, PCIE_RC_RTSTA);
break;
--
cgit v1.2.1

View file

@ -7,7 +7,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
--- ---
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -531,6 +531,185 @@ static unsigned int sfp_check(void *buf, size_t len) @@ -531,6 +531,185 @@ static unsigned int sfp_check(void *buf,
return check; return check;
} }
@ -193,7 +193,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
/* hwmon */ /* hwmon */
#if IS_ENABLED(CONFIG_HWMON) #if IS_ENABLED(CONFIG_HWMON)
static umode_t sfp_hwmon_is_visible(const void *data, static umode_t sfp_hwmon_is_visible(const void *data,
@@ -1670,6 +1849,7 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1670,6 +1849,7 @@ static int sfp_sm_mod_probe(struct sfp *
struct sfp_eeprom_id id; struct sfp_eeprom_id id;
bool cotsworks_sfbg; bool cotsworks_sfbg;
bool cotsworks; bool cotsworks;
@ -201,7 +201,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
u8 check; u8 check;
int ret; int ret;
@@ -1744,6 +1926,73 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1744,6 +1924,73 @@ static int sfp_sm_mod_probe(struct sfp *
(int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn, (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
(int)sizeof(id.ext.datecode), id.ext.datecode); (int)sizeof(id.ext.datecode), id.ext.datecode);

View file

@ -106,11 +106,11 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ for (i = 0; i < host->n_ports; i++) { + for (i = 0; i < host->n_ports; i++) {
+ if (unlikely(!host->ports[i]->ledtrig)) + if (unlikely(!host->ports[i]->ledtrig))
+ continue; + continue;
+
+ snprintf(host->ports[i]->ledtrig_name, + snprintf(host->ports[i]->ledtrig_name,
+ sizeof(host->ports[i]->ledtrig_name), "ata%u", + sizeof(host->ports[i]->ledtrig_name), "ata%u",
+ host->ports[i]->print_id); + host->ports[i]->print_id);
+
+ host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name; + host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name;
+ +
+ if (led_trigger_register(host->ports[i]->ledtrig)) { + if (led_trigger_register(host->ports[i]->ledtrig)) {

View file

@ -8,11 +8,9 @@ Subject: Enable ATA port LED trigger
arch/arm/mach-mvebu/Kconfig | 1 + arch/arm/mach-mvebu/Kconfig | 1 +
2 files changed, 2 insertions(+) 2 files changed, 2 insertions(+)
diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index cf363ab..19449d3 100644
--- a/arch/arm/configs/mvebu_v7_defconfig --- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig +++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -58,6 +58,7 @@ CONFIG_MTD_SPI_NOR=y @@ -58,6 +58,7 @@ CONFIG_MTD_UBI=y
CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT24=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y CONFIG_ATA=y
@ -20,8 +18,6 @@ index cf363ab..19449d3 100644
CONFIG_SATA_AHCI=y CONFIG_SATA_AHCI=y
CONFIG_AHCI_MVEBU=y CONFIG_AHCI_MVEBU=y
CONFIG_SATA_MV=y CONFIG_SATA_MV=y
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 053ea9d..aa1f389 100644
--- a/arch/arm/mach-mvebu/Kconfig --- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig
@@ -56,6 +56,7 @@ config MACH_ARMADA_375 @@ -56,6 +56,7 @@ config MACH_ARMADA_375
@ -32,6 +28,3 @@ index 053ea9d..aa1f389 100644
select ARM_ERRATA_720789 select ARM_ERRATA_720789
select PL310_ERRATA_753970 select PL310_ERRATA_753970
select ARM_GIC select ARM_GIC
--
2.7.4

View file

@ -17,11 +17,10 @@
struct irq_domain *domain; struct irq_domain *domain;
int soc_variant; int soc_variant;
@@ -600,6 +601,33 @@ static void mvebu_gpio_irq_handler(struct irq_desc *desc) @@ -601,6 +602,33 @@ static void mvebu_gpio_irq_handler(struc
chained_irq_exit(chip, desc);
} }
+/* /*
+ * Set interrupt number "irq" in the GPIO as a wake-up source. + * Set interrupt number "irq" in the GPIO as a wake-up source.
+ * While system is running, all registered GPIO interrupts need to have + * While system is running, all registered GPIO interrupts need to have
+ * wake-up enabled. When system is suspended, only selected GPIO interrupts + * wake-up enabled. When system is suspended, only selected GPIO interrupts
@ -48,10 +47,11 @@
+ return 0; + return 0;
+} +}
+ +
/* +/*
* Functions implementing the pwm_chip methods * Functions implementing the pwm_chip methods
*/ */
@@ -1211,7 +1239,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) static struct mvebu_pwm *to_mvebu_pwm(struct pwm_chip *chip)
@@ -1211,7 +1239,7 @@ static int mvebu_gpio_probe(struct platf
err = irq_alloc_domain_generic_chips( err = irq_alloc_domain_generic_chips(
mvchip->domain, ngpios, 2, np->name, handle_level_irq, mvchip->domain, ngpios, 2, np->name, handle_level_irq,
@ -60,7 +60,7 @@
if (err) { if (err) {
dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n", dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n",
mvchip->chip.label); mvchip->chip.label);
@@ -1229,6 +1257,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1229,6 +1257,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_level_irq_mask; ct->chip.irq_mask = mvebu_gpio_level_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -69,7 +69,7 @@
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
ct = &gc->chip_types[1]; ct = &gc->chip_types[1];
@@ -1237,6 +1267,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1237,6 +1267,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_edge_irq_mask; ct->chip.irq_mask = mvebu_gpio_edge_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -78,7 +78,7 @@
ct->handler = handle_edge_irq; ct->handler = handle_edge_irq;
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
@@ -1252,6 +1284,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1252,6 +1284,7 @@ static int mvebu_gpio_probe(struct platf
continue; continue;
irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler, irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler,
mvchip); mvchip);

View file

@ -1,6 +1,6 @@
--- a/drivers/gpio/gpio-mvebu.c --- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c
@@ -662,39 +662,81 @@ static int mvebu_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) @@ -641,39 +641,81 @@ static int mvebu_pwm_request(struct pwm_
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
struct gpio_desc *desc; struct gpio_desc *desc;
@ -97,7 +97,7 @@
} }
static void mvebu_pwm_get_state(struct pwm_chip *chip, static void mvebu_pwm_get_state(struct pwm_chip *chip,
@@ -749,13 +791,15 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -721,19 +763,21 @@ static void mvebu_pwm_get_state(struct p
else else
state->enabled = false; state->enabled = false;
@ -114,8 +114,6 @@
struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
unsigned long long val; unsigned long long val;
unsigned long flags; unsigned long flags;
@@ -761,7 +805,7 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
unsigned long flags;
unsigned int on, off; unsigned int on, off;
- val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle; - val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle;

View file

@ -46,7 +46,7 @@
struct mvebu_gpio_chip { struct mvebu_gpio_chip {
struct gpio_chip chip; struct gpio_chip chip;
struct regmap *regs; struct regmap *regs;
@@ -283,12 +304,12 @@ mvebu_gpio_write_level_mask(struct mvebu_gpio_chip *mvchip, u32 val) @@ -283,12 +304,12 @@ mvebu_gpio_write_level_mask(struct mvebu
* Functions returning addresses of individual registers for a given * Functions returning addresses of individual registers for a given
* PWM controller. * PWM controller.
*/ */
@ -61,7 +61,7 @@
{ {
return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF; return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF;
} }
@@ -681,17 +702,24 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -723,17 +744,24 @@ static void mvebu_pwm_get_state(struct p
struct pwm_state *state) { struct pwm_state *state) {
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
@ -89,7 +89,7 @@
if (val > UINT_MAX) if (val > UINT_MAX)
state->duty_cycle = UINT_MAX; state->duty_cycle = UINT_MAX;
else if (val) else if (val)
@@ -700,9 +728,9 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -742,9 +770,9 @@ static void mvebu_pwm_get_state(struct p
state->duty_cycle = 1; state->duty_cycle = 1;
val = (unsigned long long) val = (unsigned long long)
@ -101,7 +101,7 @@
if (val < state->duty_cycle) { if (val < state->duty_cycle) {
state->period = 1; state->period = 1;
} else { } else {
@@ -742,7 +770,7 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -786,7 +814,7 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
on = 1; on = 1;
@ -110,7 +110,7 @@
(state->period - state->duty_cycle); (state->period - state->duty_cycle);
do_div(val, NSEC_PER_SEC); do_div(val, NSEC_PER_SEC);
if (val > UINT_MAX) if (val > UINT_MAX)
@@ -752,16 +780,16 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -796,16 +824,16 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
off = 1; off = 1;
@ -131,7 +131,7 @@
return 0; return 0;
} }
@@ -780,10 +808,10 @@ static void __maybe_unused mvebu_pwm_suspend(struct mvebu_gpio_chip *mvchip) @@ -824,10 +852,10 @@ static void __maybe_unused mvebu_pwm_sus
regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
&mvpwm->blink_select); &mvpwm->blink_select);
@ -146,7 +146,7 @@
} }
static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip)
@@ -792,10 +820,10 @@ static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) @@ -836,10 +864,10 @@ static void __maybe_unused mvebu_pwm_res
regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
mvpwm->blink_select); mvpwm->blink_select);
@ -161,7 +161,7 @@
} }
static int mvebu_pwm_probe(struct platform_device *pdev, static int mvebu_pwm_probe(struct platform_device *pdev,
@@ -805,6 +833,7 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -849,6 +877,7 @@ static int mvebu_pwm_probe(struct platfo
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mvebu_pwm *mvpwm; struct mvebu_pwm *mvpwm;
u32 set; u32 set;
@ -169,7 +169,7 @@
if (!of_device_is_compatible(mvchip->chip.of_node, if (!of_device_is_compatible(mvchip->chip.of_node,
"marvell,armada-370-gpio")) "marvell,armada-370-gpio"))
@@ -826,12 +855,15 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -870,12 +899,15 @@ static int mvebu_pwm_probe(struct platfo
* Use set A for lines of GPIO chip with id 0, B for GPIO chip * Use set A for lines of GPIO chip with id 0, B for GPIO chip
* with id 1. Don't allow further GPIO chips to be used for PWM. * with id 1. Don't allow further GPIO chips to be used for PWM.
*/ */
@ -188,20 +188,21 @@
regmap_write(mvchip->regs, regmap_write(mvchip->regs,
GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set); GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set);
@@ -841,15 +873,13 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -885,15 +917,13 @@ static int mvebu_pwm_probe(struct platfo
mvchip->mvpwm = mvpwm; mvchip->mvpwm = mvpwm;
mvpwm->mvchip = mvchip; mvpwm->mvchip = mvchip;
- mvpwm->membase = devm_platform_ioremap_resource_byname(pdev, "pwm"); - mvpwm->membase = devm_platform_ioremap_resource_byname(pdev, "pwm");
- if (IS_ERR(mvpwm->membase)) - if (IS_ERR(mvpwm->membase))
- return PTR_ERR(mvpwm->membase); - return PTR_ERR(mvpwm->membase);
+ mvpwm->controller.membase = devm_platform_ioremap_resource_byname(pdev, "pwm"); -
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
- mvpwm->clk_rate = clk_get_rate(mvchip->clk); - mvpwm->clk_rate = clk_get_rate(mvchip->clk);
- if (!mvpwm->clk_rate) { - if (!mvpwm->clk_rate) {
- dev_err(dev, "failed to get clock rate\n"); - dev_err(dev, "failed to get clock rate\n");
+ mvpwm->controller.membase = devm_platform_ioremap_resource_byname(pdev, "pwm");
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
+
+ mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk); + mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk);
+ if (!mvpwm->controller.clk_rate) + if (!mvpwm->controller.clk_rate)
return -EINVAL; return -EINVAL;
@ -209,7 +210,7 @@
mvpwm->chip.dev = dev; mvpwm->chip.dev = dev;
mvpwm->chip.ops = &mvebu_pwm_ops; mvpwm->chip.ops = &mvebu_pwm_ops;
@@ -862,7 +892,9 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -906,7 +936,9 @@ static int mvebu_pwm_probe(struct platfo
*/ */
mvpwm->chip.base = -1; mvpwm->chip.base = -1;

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/armada-388-helios4.dts --- a/arch/arm/boot/dts/armada-388-helios4.dts
+++ b/arch/arm/boot/dts/armada-388-helios4.dts +++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -96,6 +96,18 @@ @@ -84,6 +84,18 @@
}; };
}; };

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/armada-388-helios4.dts --- a/arch/arm/boot/dts/armada-388-helios4.dts
+++ b/arch/arm/boot/dts/armada-388-helios4.dts +++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -70,6 +70,9 @@ reg_5p0v_usb: regulator-5v-usb { @@ -70,6 +70,9 @@
system-leds { system-leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
@ -10,7 +10,7 @@
status-led { status-led {
label = "helios4:green:status"; label = "helios4:green:status";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
@@ -110,6 +113,9 @@ wol { @@ -98,6 +101,9 @@
io-leds { io-leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
@ -20,7 +20,7 @@
sata1-led { sata1-led {
label = "helios4:green:ata1"; label = "helios4:green:ata1";
gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
@@ -145,11 +151,15 @@ usb-led { @@ -133,11 +139,15 @@
fan1: j10-pwm { fan1: j10-pwm {
compatible = "pwm-fan"; compatible = "pwm-fan";
pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */ pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */
@ -36,7 +36,7 @@
}; };
usb2_phy: usb2-phy { usb2_phy: usb2-phy {
@@ -310,16 +320,23 @@ helios_sdhci_pins: helios-sdhci-pins { @@ -298,16 +308,23 @@
"mpp39", "mpp40"; "mpp39", "mpp40";
marvell,function = "sd0"; marvell,function = "sd0";
}; };

View file

@ -1,6 +1,6 @@
--- a/arch/arm/mm/dma-mapping.c --- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c
@@ -314,7 +314,7 @@ static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp, @@ -314,7 +314,7 @@ static void *__alloc_remap_buffer(struct
pgprot_t prot, struct page **ret_page, pgprot_t prot, struct page **ret_page,
const void *caller, bool want_vaddr); const void *caller, bool want_vaddr);

View file

@ -32,8 +32,6 @@ Reviewed-by: Linus Walleij <(address hidden)>
Reviewed-by: Nick Desaulniers <(address hidden)> Reviewed-by: Nick Desaulniers <(address hidden)>
--- ---
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index c4220f51fcf3..0ea8529a4872 100644
--- a/arch/arm/kernel/entry-armv.S --- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S
@@ -252,31 +252,10 @@ __und_svc: @@ -252,31 +252,10 @@ __und_svc:
@ -70,8 +68,6 @@ index c4220f51fcf3..0ea8529a4872 100644
mov r0, sp @ struct pt_regs *regs mov r0, sp @ struct pt_regs *regs
bl __und_fault bl __und_fault
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
index 4fcff9f59947..d5837bf05a9a 100644
--- a/arch/arm/vfp/vfphw.S --- a/arch/arm/vfp/vfphw.S
+++ b/arch/arm/vfp/vfphw.S +++ b/arch/arm/vfp/vfphw.S
@@ -79,11 +79,6 @@ ENTRY(vfp_support_entry) @@ -79,11 +79,6 @@ ENTRY(vfp_support_entry)
@ -86,8 +82,6 @@ index 4fcff9f59947..d5837bf05a9a 100644
VFPFMRX r1, FPEXC @ Is the VFP enabled? VFPFMRX r1, FPEXC @ Is the VFP enabled?
DBGSTR1 "fpexc %08x", r1 DBGSTR1 "fpexc %08x", r1
tst r1, #FPEXC_EN tst r1, #FPEXC_EN
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
index 8c9e7f9f0277..c3b6451c18bd 100644
--- a/arch/arm/vfp/vfpmodule.c --- a/arch/arm/vfp/vfpmodule.c
+++ b/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
@ -98,7 +92,7 @@ index 8c9e7f9f0277..c3b6451c18bd 100644
#include <asm/vfp.h> #include <asm/vfp.h>
#include "vfpinstr.h" #include "vfpinstr.h"
@@ -642,7 +643,9 @@ static int vfp_starting_cpu(unsigned int unused) @@ -642,7 +643,9 @@ static int vfp_starting_cpu(unsigned int
return 0; return 0;
} }

View file

@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/regd.c --- a/drivers/net/wireless/ath/regd.c
+++ b/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c
@@ -50,12 +50,9 @@ static int __ath_regd_init(struct ath_regulatory *reg); @@ -50,12 +50,9 @@ static int __ath_regd_init(struct ath_re
#define ATH_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 80, 0, 30,\ #define ATH_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 80, 0, 30,\
NL80211_RRF_NO_IR) NL80211_RRF_NO_IR)
@ -15,7 +15,7 @@
/* This one skips what we call "mid band" */ /* This one skips what we call "mid band" */
#define ATH_5GHZ_NO_MIDBAND ATH_5GHZ_5150_5350, \ #define ATH_5GHZ_NO_MIDBAND ATH_5GHZ_5150_5350, \
@@ -77,9 +74,8 @@ static const struct ieee80211_regdomain ath_world_regdom_63_65 = { @@ -77,9 +74,8 @@ static const struct ieee80211_regdomain
.n_reg_rules = 4, .n_reg_rules = 4,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -27,7 +27,7 @@
} }
}; };
@@ -88,8 +84,8 @@ static const struct ieee80211_regdomain ath_world_regdom_64 = { @@ -88,8 +84,8 @@ static const struct ieee80211_regdomain
.n_reg_rules = 3, .n_reg_rules = 3,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -38,7 +38,7 @@
} }
}; };
@@ -98,7 +94,7 @@ static const struct ieee80211_regdomain ath_world_regdom_66_69 = { @@ -98,7 +94,7 @@ static const struct ieee80211_regdomain
.n_reg_rules = 3, .n_reg_rules = 3,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -47,7 +47,7 @@
ATH_5GHZ_ALL, ATH_5GHZ_ALL,
} }
}; };
@@ -108,8 +104,7 @@ static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = { @@ -108,8 +104,7 @@ static const struct ieee80211_regdomain
.n_reg_rules = 4, .n_reg_rules = 4,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -57,7 +57,7 @@
ATH_5GHZ_ALL, ATH_5GHZ_ALL,
} }
}; };
@@ -258,9 +253,7 @@ static bool ath_is_radar_freq(u16 center_freq, @@ -258,9 +253,7 @@ static bool ath_is_radar_freq(u16 center
struct ath_regulatory *reg) struct ath_regulatory *reg)
{ {

View file

@ -11,8 +11,6 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/boot/dts/armada-388-clearfog.dts | 10 ++-------- arch/arm/boot/dts/armada-388-clearfog.dts | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-) 1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/arch/arm/boot/dts/armada-388-clearfog.dts b/arch/arm/boot/dts/armada-388-clearfog.dts
index 441958a39991..4fdfff9acf05 100644
--- a/arch/arm/boot/dts/armada-388-clearfog.dts --- a/arch/arm/boot/dts/armada-388-clearfog.dts
+++ b/arch/arm/boot/dts/armada-388-clearfog.dts +++ b/arch/arm/boot/dts/armada-388-clearfog.dts
@@ -47,10 +47,8 @@ @@ -47,10 +47,8 @@
@ -39,6 +37,3 @@ index 441958a39991..4fdfff9acf05 100644
}; };
port@6 { port@6 {
--
cgit v1.2.1

View file

@ -25,11 +25,9 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++- drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-) 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/cpuidle/cpuidle-mvebu-v7.c b/drivers/cpuidle/cpuidle-mvebu-v7.c
index 01a856971f05..18ded9e7cb34 100644
--- a/drivers/cpuidle/cpuidle-mvebu-v7.c --- a/drivers/cpuidle/cpuidle-mvebu-v7.c
+++ b/drivers/cpuidle/cpuidle-mvebu-v7.c +++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
@@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cpuidle_device *dev, @@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cp
ret = mvebu_v7_cpu_suspend(deepidle); ret = mvebu_v7_cpu_suspend(deepidle);
cpu_pm_exit(); cpu_pm_exit();
@ -43,6 +41,3 @@ index 01a856971f05..18ded9e7cb34 100644
return index; return index;
} }
--
2.1.0

View file

@ -12,11 +12,9 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/pci/pcie/portdrv_core.c | 2 + drivers/pci/pcie/portdrv_core.c | 2 +
5 files changed, 180 insertions(+), 34 deletions(-) 5 files changed, 180 insertions(+), 34 deletions(-)
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index c39978b750ec..b4fb20835573 100644
--- a/drivers/pci/controller/pci-mvebu.c --- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c
@@ -53,7 +53,14 @@ @@ -53,13 +53,26 @@
PCIE_CONF_ADDR_EN) PCIE_CONF_ADDR_EN)
#define PCIE_CONF_DATA_OFF 0x18fc #define PCIE_CONF_DATA_OFF 0x18fc
#define PCIE_MASK_OFF 0x1910 #define PCIE_MASK_OFF 0x1910
@ -31,7 +29,19 @@ index c39978b750ec..b4fb20835573 100644
#define PCIE_CTRL_OFF 0x1a00 #define PCIE_CTRL_OFF 0x1a00
#define PCIE_CTRL_X1_MODE 0x0001 #define PCIE_CTRL_X1_MODE 0x0001
#define PCIE_STAT_OFF 0x1a04 #define PCIE_STAT_OFF 0x1a04
@@ -432,6 +439,54 @@ static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) #define PCIE_STAT_BUS 0xff00
#define PCIE_STAT_DEV 0x1f0000
#define PCIE_STAT_LINK_DOWN BIT(0)
+#define PCIE_SSPL 0x1a0c
+#define PCIE_SSPL_MSGEN BIT(14)
+#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8)
+#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3)
+#define PCIE_SSPL_SPLV(x) ((x) & 0xff)
+#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff)
#define PCIE_RC_RTSTA 0x1a14
#define PCIE_DEBUG_CTRL 0x1a60
#define PCIE_DEBUG_SOFT_RESET BIT(20)
@@ -432,6 +445,54 @@ static void mvebu_pcie_handle_membase_ch
&port->memwin); &port->memwin);
} }
@ -86,7 +96,22 @@ index c39978b750ec..b4fb20835573 100644
static pci_bridge_emul_read_status_t static pci_bridge_emul_read_status_t
mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge, mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
int reg, u32 *value) int reg, u32 *value)
@@ -477,6 +532,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge, @@ -462,6 +523,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(str
*value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 tmp = mvebu_readl(port, PCIE_SSPL);
+ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 |
+ PCIE_SSPL_SPLV_VAL(tmp) << 7;
+ break;
+ }
+
case PCI_EXP_SLTCTL:
*value = PCI_EXP_SLTSTA_PDS << 16;
break;
@@ -477,6 +546,30 @@ mvebu_pci_bridge_emul_pcie_conf_read(str
return PCI_BRIDGE_EMUL_HANDLED; return PCI_BRIDGE_EMUL_HANDLED;
} }
@ -117,7 +142,7 @@ index c39978b750ec..b4fb20835573 100644
static void static void
mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge,
int reg, u32 old, u32 new, u32 mask) int reg, u32 old, u32 new, u32 mask)
@@ -494,7 +573,8 @@ mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, @@ -494,7 +587,8 @@ mvebu_pci_bridge_emul_base_conf_write(st
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
if ((old ^ new) & PCI_COMMAND_MEMORY) if ((old ^ new) & PCI_COMMAND_MEMORY)
mvebu_pcie_handle_membase_change(port); mvebu_pcie_handle_membase_change(port);
@ -127,7 +152,7 @@ index c39978b750ec..b4fb20835573 100644
break; break;
} }
@@ -517,6 +597,11 @@ mvebu_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge, @@ -517,6 +611,11 @@ mvebu_pci_bridge_emul_base_conf_write(st
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
break; break;
@ -139,7 +164,7 @@ index c39978b750ec..b4fb20835573 100644
case PCI_PRIMARY_BUS: case PCI_PRIMARY_BUS:
mvebu_pcie_set_local_bus_nr(port, conf->secondary_bus); mvebu_pcie_set_local_bus_nr(port, conf->secondary_bus);
break; break;
@@ -534,6 +619,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, @@ -534,6 +633,10 @@ mvebu_pci_bridge_emul_pcie_conf_write(st
switch (reg) { switch (reg) {
case PCI_EXP_DEVCTL: case PCI_EXP_DEVCTL:
@ -150,7 +175,19 @@ index c39978b750ec..b4fb20835573 100644
/* /*
* Armada370 data says these bits must always * Armada370 data says these bits must always
* be zero when in root complex mode. * be zero when in root complex mode.
@@ -559,6 +648,25 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge, @@ -556,9 +659,37 @@ mvebu_pci_bridge_emul_pcie_conf_write(st
mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) |
+ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) |
+ PCIE_SSPL_MSGEN;
+ mvebu_writel(port, sspl, PCIE_SSPL);
+ break;
+ }
+
case PCI_EXP_RTSTA: case PCI_EXP_RTSTA:
mvebu_writel(port, new, PCIE_RC_RTSTA); mvebu_writel(port, new, PCIE_RC_RTSTA);
break; break;
@ -176,7 +213,7 @@ index c39978b750ec..b4fb20835573 100644
} }
} }
@@ -566,6 +674,8 @@ static struct pci_bridge_emul_ops mvebu_pci_bridge_emul_ops = { @@ -566,6 +697,8 @@ static struct pci_bridge_emul_ops mvebu_
.write_base = mvebu_pci_bridge_emul_base_conf_write, .write_base = mvebu_pci_bridge_emul_base_conf_write,
.read_pcie = mvebu_pci_bridge_emul_pcie_conf_read, .read_pcie = mvebu_pci_bridge_emul_pcie_conf_read,
.write_pcie = mvebu_pci_bridge_emul_pcie_conf_write, .write_pcie = mvebu_pci_bridge_emul_pcie_conf_write,
@ -185,11 +222,9 @@ index c39978b750ec..b4fb20835573 100644
}; };
/* /*
diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c
index ccf26d12ec61..c124b7ff1e22 100644
--- a/drivers/pci/pci-bridge-emul.c --- a/drivers/pci/pci-bridge-emul.c
+++ b/drivers/pci/pci-bridge-emul.c +++ b/drivers/pci/pci-bridge-emul.c
@@ -151,6 +151,7 @@ static const struct pci_bridge_reg_behavior pci_regs_behavior[] = { @@ -151,6 +151,7 @@ static const struct pci_bridge_reg_behav
.rw = (GENMASK(7, 0) | .rw = (GENMASK(7, 0) |
((PCI_BRIDGE_CTL_PARITY | ((PCI_BRIDGE_CTL_PARITY |
PCI_BRIDGE_CTL_SERR | PCI_BRIDGE_CTL_SERR |
@ -197,7 +232,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
PCI_BRIDGE_CTL_ISA | PCI_BRIDGE_CTL_ISA |
PCI_BRIDGE_CTL_VGA | PCI_BRIDGE_CTL_VGA |
PCI_BRIDGE_CTL_MASTER_ABORT | PCI_BRIDGE_CTL_MASTER_ABORT |
@@ -264,6 +265,7 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge, @@ -264,6 +265,7 @@ int pci_bridge_emul_init(struct pci_brid
bridge->conf.header_type = PCI_HEADER_TYPE_BRIDGE; bridge->conf.header_type = PCI_HEADER_TYPE_BRIDGE;
bridge->conf.cache_line_size = 0x10; bridge->conf.cache_line_size = 0x10;
bridge->conf.status = cpu_to_le16(PCI_STATUS_CAP_LIST); bridge->conf.status = cpu_to_le16(PCI_STATUS_CAP_LIST);
@ -205,7 +240,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
bridge->pci_regs_behavior = kmemdup(pci_regs_behavior, bridge->pci_regs_behavior = kmemdup(pci_regs_behavior,
sizeof(pci_regs_behavior), sizeof(pci_regs_behavior),
GFP_KERNEL); GFP_KERNEL);
@@ -321,25 +323,26 @@ int pci_bridge_emul_conf_read(struct pci_bridge_emul *bridge, int where, @@ -321,25 +323,26 @@ int pci_bridge_emul_conf_read(struct pci
__le32 *cfgspace; __le32 *cfgspace;
const struct pci_bridge_reg_behavior *behavior; const struct pci_bridge_reg_behavior *behavior;
@ -244,7 +279,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
} }
if (read_op) if (read_op)
@@ -347,15 +350,20 @@ int pci_bridge_emul_conf_read(struct pci_bridge_emul *bridge, int where, @@ -347,15 +350,20 @@ int pci_bridge_emul_conf_read(struct pci
else else
ret = PCI_BRIDGE_EMUL_NOT_HANDLED; ret = PCI_BRIDGE_EMUL_NOT_HANDLED;
@ -269,7 +304,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
if (size == 1) if (size == 1)
*value = (*value >> (8 * (where & 3))) & 0xff; *value = (*value >> (8 * (where & 3))) & 0xff;
@@ -382,12 +390,6 @@ int pci_bridge_emul_conf_write(struct pci_bridge_emul *bridge, int where, @@ -382,12 +390,6 @@ int pci_bridge_emul_conf_write(struct pc
__le32 *cfgspace; __le32 *cfgspace;
const struct pci_bridge_reg_behavior *behavior; const struct pci_bridge_reg_behavior *behavior;
@ -282,7 +317,7 @@ index ccf26d12ec61..c124b7ff1e22 100644
shift = (where & 0x3) * 8; shift = (where & 0x3) * 8;
if (size == 4) if (size == 4)
@@ -403,27 +405,42 @@ int pci_bridge_emul_conf_write(struct pci_bridge_emul *bridge, int where, @@ -403,27 +405,42 @@ int pci_bridge_emul_conf_write(struct pc
if (ret != PCIBIOS_SUCCESSFUL) if (ret != PCIBIOS_SUCCESSFUL)
return ret; return ret;
@ -336,8 +371,6 @@ index ccf26d12ec61..c124b7ff1e22 100644
if (write_op) if (write_op)
write_op(bridge, reg, old, new, mask); write_op(bridge, reg, old, new, mask);
diff --git a/drivers/pci/pci-bridge-emul.h b/drivers/pci/pci-bridge-emul.h
index b31883022a8e..5f64560aaa26 100644
--- a/drivers/pci/pci-bridge-emul.h --- a/drivers/pci/pci-bridge-emul.h
+++ b/drivers/pci/pci-bridge-emul.h +++ b/drivers/pci/pci-bridge-emul.h
@@ -90,6 +90,14 @@ struct pci_bridge_emul_ops { @@ -90,6 +90,14 @@ struct pci_bridge_emul_ops {
@ -369,11 +402,9 @@ index b31883022a8e..5f64560aaa26 100644
}; };
struct pci_bridge_reg_behavior; struct pci_bridge_reg_behavior;
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 253c30cc1967..3edbe276e626 100644
--- a/drivers/pci/pcie/aspm.c --- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c
@@ -576,6 +576,8 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist) @@ -576,6 +576,8 @@ static void pcie_aspm_cap_init(struct pc
*/ */
pcie_get_aspm_reg(parent, &upreg); pcie_get_aspm_reg(parent, &upreg);
pcie_get_aspm_reg(child, &dwreg); pcie_get_aspm_reg(child, &dwreg);
@ -382,11 +413,9 @@ index 253c30cc1967..3edbe276e626 100644
/* /*
* Setup L0s state * Setup L0s state
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index 50a9522ab07d..105ebc7a7987 100644
--- a/drivers/pci/pcie/portdrv_core.c --- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c
@@ -325,6 +325,7 @@ int pcie_port_device_register(struct pci_dev *dev) @@ -325,6 +325,7 @@ int pcie_port_device_register(struct pci
/* Get and check PCI Express port services */ /* Get and check PCI Express port services */
capabilities = get_port_device_capability(dev); capabilities = get_port_device_capability(dev);
@ -394,7 +423,7 @@ index 50a9522ab07d..105ebc7a7987 100644
if (!capabilities) if (!capabilities)
return 0; return 0;
@@ -337,6 +338,7 @@ int pcie_port_device_register(struct pci_dev *dev) @@ -337,6 +338,7 @@ int pcie_port_device_register(struct pci
* if that is to be used. * if that is to be used.
*/ */
status = pcie_init_service_irqs(dev, irqs, capabilities); status = pcie_init_service_irqs(dev, irqs, capabilities);
@ -402,65 +431,3 @@ index 50a9522ab07d..105ebc7a7987 100644
if (status) { if (status) {
capabilities &= PCIE_PORT_SERVICE_HP; capabilities &= PCIE_PORT_SERVICE_HP;
if (!capabilities) if (!capabilities)
--
cgit v1.2.1
From 9b1aafd0f620776f8d15f3ee872d3d5a69a468db Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@arm.linux.org.uk>
Date: Tue, 29 Nov 2016 10:13:48 +0000
Subject: implement slot capabilities (SSPL)
---
drivers/pci/controller/pci-mvebu.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index b4fb20835573..060226d11588 100644
--- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c
@@ -67,6 +67,12 @@
#define PCIE_STAT_BUS 0xff00
#define PCIE_STAT_DEV 0x1f0000
#define PCIE_STAT_LINK_DOWN BIT(0)
+#define PCIE_SSPL 0x1a0c
+#define PCIE_SSPL_MSGEN BIT(14)
+#define PCIE_SSPL_SPLS(x) (((x) & 3) << 8)
+#define PCIE_SSPL_SPLS_VAL(x) (((x) >> 8) & 3)
+#define PCIE_SSPL_SPLV(x) ((x) & 0xff)
+#define PCIE_SSPL_SPLV_VAL(x) ((x) & 0xff)
#define PCIE_RC_RTSTA 0x1a14
#define PCIE_DEBUG_CTRL 0x1a60
#define PCIE_DEBUG_SOFT_RESET BIT(20)
@@ -517,6 +523,14 @@ mvebu_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
*value = mvebu_readl(port, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 tmp = mvebu_readl(port, PCIE_SSPL);
+ *value = PCIE_SSPL_SPLS_VAL(tmp) << 15 |
+ PCIE_SSPL_SPLV_VAL(tmp) << 7;
+ break;
+ }
+
case PCI_EXP_SLTCTL:
*value = PCI_EXP_SLTSTA_PDS << 16;
break;
@@ -645,6 +659,15 @@ mvebu_pci_bridge_emul_pcie_conf_write(struct pci_bridge_emul *bridge,
mvebu_writel(port, new, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break;
+ case PCI_EXP_SLTCAP:
+ {
+ u32 sspl = PCIE_SSPL_SPLV((new & PCI_EXP_SLTCAP_SPLV) >> 7) |
+ PCIE_SSPL_SPLS((new & PCI_EXP_SLTCAP_SPLS) >> 15) |
+ PCIE_SSPL_MSGEN;
+ mvebu_writel(port, sspl, PCIE_SSPL);
+ break;
+ }
+
case PCI_EXP_RTSTA:
mvebu_writel(port, new, PCIE_RC_RTSTA);
break;
--
cgit v1.2.1

View file

@ -7,7 +7,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
--- ---
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -531,6 +531,185 @@ static unsigned int sfp_check(void *buf, size_t len) @@ -531,6 +531,185 @@ static unsigned int sfp_check(void *buf,
return check; return check;
} }
@ -193,7 +193,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
/* hwmon */ /* hwmon */
#if IS_ENABLED(CONFIG_HWMON) #if IS_ENABLED(CONFIG_HWMON)
static umode_t sfp_hwmon_is_visible(const void *data, static umode_t sfp_hwmon_is_visible(const void *data,
@@ -1670,6 +1849,7 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1670,6 +1849,7 @@ static int sfp_sm_mod_probe(struct sfp *
struct sfp_eeprom_id id; struct sfp_eeprom_id id;
bool cotsworks_sfbg; bool cotsworks_sfbg;
bool cotsworks; bool cotsworks;
@ -201,7 +201,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
u8 check; u8 check;
int ret; int ret;
@@ -1744,6 +1926,73 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1744,6 +1924,73 @@ static int sfp_sm_mod_probe(struct sfp *
(int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn, (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
(int)sizeof(id.ext.datecode), id.ext.datecode); (int)sizeof(id.ext.datecode), id.ext.datecode);

View file

@ -106,11 +106,11 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ for (i = 0; i < host->n_ports; i++) { + for (i = 0; i < host->n_ports; i++) {
+ if (unlikely(!host->ports[i]->ledtrig)) + if (unlikely(!host->ports[i]->ledtrig))
+ continue; + continue;
+
+ snprintf(host->ports[i]->ledtrig_name, + snprintf(host->ports[i]->ledtrig_name,
+ sizeof(host->ports[i]->ledtrig_name), "ata%u", + sizeof(host->ports[i]->ledtrig_name), "ata%u",
+ host->ports[i]->print_id); + host->ports[i]->print_id);
+
+ host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name; + host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name;
+ +
+ if (led_trigger_register(host->ports[i]->ledtrig)) { + if (led_trigger_register(host->ports[i]->ledtrig)) {

View file

@ -8,11 +8,9 @@ Subject: Enable ATA port LED trigger
arch/arm/mach-mvebu/Kconfig | 1 + arch/arm/mach-mvebu/Kconfig | 1 +
2 files changed, 2 insertions(+) 2 files changed, 2 insertions(+)
diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index cf363ab..19449d3 100644
--- a/arch/arm/configs/mvebu_v7_defconfig --- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig +++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -58,6 +58,7 @@ CONFIG_MTD_SPI_NOR=y @@ -58,6 +58,7 @@ CONFIG_MTD_UBI=y
CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT24=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y CONFIG_ATA=y
@ -20,8 +18,6 @@ index cf363ab..19449d3 100644
CONFIG_SATA_AHCI=y CONFIG_SATA_AHCI=y
CONFIG_AHCI_MVEBU=y CONFIG_AHCI_MVEBU=y
CONFIG_SATA_MV=y CONFIG_SATA_MV=y
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 053ea9d..aa1f389 100644
--- a/arch/arm/mach-mvebu/Kconfig --- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig
@@ -56,6 +56,7 @@ config MACH_ARMADA_375 @@ -56,6 +56,7 @@ config MACH_ARMADA_375
@ -32,6 +28,3 @@ index 053ea9d..aa1f389 100644
select ARM_ERRATA_720789 select ARM_ERRATA_720789
select PL310_ERRATA_753970 select PL310_ERRATA_753970
select ARM_GIC select ARM_GIC
--
2.7.4

View file

@ -17,11 +17,10 @@
struct irq_domain *domain; struct irq_domain *domain;
int soc_variant; int soc_variant;
@@ -600,6 +601,33 @@ static void mvebu_gpio_irq_handler(struct irq_desc *desc) @@ -601,6 +602,33 @@ static void mvebu_gpio_irq_handler(struc
chained_irq_exit(chip, desc);
} }
+/* /*
+ * Set interrupt number "irq" in the GPIO as a wake-up source. + * Set interrupt number "irq" in the GPIO as a wake-up source.
+ * While system is running, all registered GPIO interrupts need to have + * While system is running, all registered GPIO interrupts need to have
+ * wake-up enabled. When system is suspended, only selected GPIO interrupts + * wake-up enabled. When system is suspended, only selected GPIO interrupts
@ -48,10 +47,11 @@
+ return 0; + return 0;
+} +}
+ +
/* +/*
* Functions implementing the pwm_chip methods * Functions implementing the pwm_chip methods
*/ */
@@ -1211,7 +1239,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) static struct mvebu_pwm *to_mvebu_pwm(struct pwm_chip *chip)
@@ -1211,7 +1239,7 @@ static int mvebu_gpio_probe(struct platf
err = irq_alloc_domain_generic_chips( err = irq_alloc_domain_generic_chips(
mvchip->domain, ngpios, 2, np->name, handle_level_irq, mvchip->domain, ngpios, 2, np->name, handle_level_irq,
@ -60,7 +60,7 @@
if (err) { if (err) {
dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n", dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n",
mvchip->chip.label); mvchip->chip.label);
@@ -1229,6 +1257,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1229,6 +1257,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_level_irq_mask; ct->chip.irq_mask = mvebu_gpio_level_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -69,7 +69,7 @@
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
ct = &gc->chip_types[1]; ct = &gc->chip_types[1];
@@ -1237,6 +1267,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1237,6 +1267,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_edge_irq_mask; ct->chip.irq_mask = mvebu_gpio_edge_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -78,7 +78,7 @@
ct->handler = handle_edge_irq; ct->handler = handle_edge_irq;
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
@@ -1252,6 +1284,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1252,6 +1284,7 @@ static int mvebu_gpio_probe(struct platf
continue; continue;
irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler, irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler,
mvchip); mvchip);

View file

@ -1,6 +1,6 @@
--- a/drivers/gpio/gpio-mvebu.c --- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c
@@ -662,39 +662,81 @@ static int mvebu_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) @@ -641,39 +641,81 @@ static int mvebu_pwm_request(struct pwm_
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
struct gpio_desc *desc; struct gpio_desc *desc;
@ -97,7 +97,7 @@
} }
static void mvebu_pwm_get_state(struct pwm_chip *chip, static void mvebu_pwm_get_state(struct pwm_chip *chip,
@@ -749,13 +791,15 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -721,19 +763,21 @@ static void mvebu_pwm_get_state(struct p
else else
state->enabled = false; state->enabled = false;
@ -114,8 +114,6 @@
struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
unsigned long long val; unsigned long long val;
unsigned long flags; unsigned long flags;
@@ -761,7 +805,7 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
unsigned long flags;
unsigned int on, off; unsigned int on, off;
- val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle; - val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle;

View file

@ -46,7 +46,7 @@
struct mvebu_gpio_chip { struct mvebu_gpio_chip {
struct gpio_chip chip; struct gpio_chip chip;
struct regmap *regs; struct regmap *regs;
@@ -283,12 +304,12 @@ mvebu_gpio_write_level_mask(struct mvebu_gpio_chip *mvchip, u32 val) @@ -283,12 +304,12 @@ mvebu_gpio_write_level_mask(struct mvebu
* Functions returning addresses of individual registers for a given * Functions returning addresses of individual registers for a given
* PWM controller. * PWM controller.
*/ */
@ -61,7 +61,7 @@
{ {
return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF; return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF;
} }
@@ -681,17 +702,24 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -723,17 +744,24 @@ static void mvebu_pwm_get_state(struct p
struct pwm_state *state) { struct pwm_state *state) {
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
@ -89,7 +89,7 @@
if (val > UINT_MAX) if (val > UINT_MAX)
state->duty_cycle = UINT_MAX; state->duty_cycle = UINT_MAX;
else if (val) else if (val)
@@ -700,9 +728,9 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -742,9 +770,9 @@ static void mvebu_pwm_get_state(struct p
state->duty_cycle = 1; state->duty_cycle = 1;
val = (unsigned long long) val = (unsigned long long)
@ -101,7 +101,7 @@
if (val < state->duty_cycle) { if (val < state->duty_cycle) {
state->period = 1; state->period = 1;
} else { } else {
@@ -742,7 +770,7 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -786,7 +814,7 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
on = 1; on = 1;
@ -110,7 +110,7 @@
(state->period - state->duty_cycle); (state->period - state->duty_cycle);
do_div(val, NSEC_PER_SEC); do_div(val, NSEC_PER_SEC);
if (val > UINT_MAX) if (val > UINT_MAX)
@@ -752,16 +780,16 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -796,16 +824,16 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
off = 1; off = 1;
@ -131,7 +131,7 @@
return 0; return 0;
} }
@@ -780,10 +808,10 @@ static void __maybe_unused mvebu_pwm_suspend(struct mvebu_gpio_chip *mvchip) @@ -824,10 +852,10 @@ static void __maybe_unused mvebu_pwm_sus
regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
&mvpwm->blink_select); &mvpwm->blink_select);
@ -146,7 +146,7 @@
} }
static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip)
@@ -792,10 +820,10 @@ static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) @@ -836,10 +864,10 @@ static void __maybe_unused mvebu_pwm_res
regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
mvpwm->blink_select); mvpwm->blink_select);
@ -161,7 +161,7 @@
} }
static int mvebu_pwm_probe(struct platform_device *pdev, static int mvebu_pwm_probe(struct platform_device *pdev,
@@ -805,6 +833,7 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -849,6 +877,7 @@ static int mvebu_pwm_probe(struct platfo
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mvebu_pwm *mvpwm; struct mvebu_pwm *mvpwm;
u32 set; u32 set;
@ -169,7 +169,7 @@
if (!of_device_is_compatible(mvchip->chip.of_node, if (!of_device_is_compatible(mvchip->chip.of_node,
"marvell,armada-370-gpio")) "marvell,armada-370-gpio"))
@@ -826,12 +855,15 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -870,12 +899,15 @@ static int mvebu_pwm_probe(struct platfo
* Use set A for lines of GPIO chip with id 0, B for GPIO chip * Use set A for lines of GPIO chip with id 0, B for GPIO chip
* with id 1. Don't allow further GPIO chips to be used for PWM. * with id 1. Don't allow further GPIO chips to be used for PWM.
*/ */
@ -188,20 +188,21 @@
regmap_write(mvchip->regs, regmap_write(mvchip->regs,
GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set); GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set);
@@ -841,15 +873,13 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -885,15 +917,13 @@ static int mvebu_pwm_probe(struct platfo
mvchip->mvpwm = mvpwm; mvchip->mvpwm = mvpwm;
mvpwm->mvchip = mvchip; mvpwm->mvchip = mvchip;
- mvpwm->membase = devm_platform_ioremap_resource_byname(pdev, "pwm"); - mvpwm->membase = devm_platform_ioremap_resource_byname(pdev, "pwm");
- if (IS_ERR(mvpwm->membase)) - if (IS_ERR(mvpwm->membase))
- return PTR_ERR(mvpwm->membase); - return PTR_ERR(mvpwm->membase);
+ mvpwm->controller.membase = devm_platform_ioremap_resource_byname(pdev, "pwm"); -
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
- mvpwm->clk_rate = clk_get_rate(mvchip->clk); - mvpwm->clk_rate = clk_get_rate(mvchip->clk);
- if (!mvpwm->clk_rate) { - if (!mvpwm->clk_rate) {
- dev_err(dev, "failed to get clock rate\n"); - dev_err(dev, "failed to get clock rate\n");
+ mvpwm->controller.membase = devm_platform_ioremap_resource_byname(pdev, "pwm");
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
+
+ mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk); + mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk);
+ if (!mvpwm->controller.clk_rate) + if (!mvpwm->controller.clk_rate)
return -EINVAL; return -EINVAL;
@ -209,7 +210,7 @@
mvpwm->chip.dev = dev; mvpwm->chip.dev = dev;
mvpwm->chip.ops = &mvebu_pwm_ops; mvpwm->chip.ops = &mvebu_pwm_ops;
@@ -862,7 +892,9 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -906,7 +936,9 @@ static int mvebu_pwm_probe(struct platfo
*/ */
mvpwm->chip.base = -1; mvpwm->chip.base = -1;

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/armada-388-helios4.dts --- a/arch/arm/boot/dts/armada-388-helios4.dts
+++ b/arch/arm/boot/dts/armada-388-helios4.dts +++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -96,6 +96,18 @@ @@ -84,6 +84,18 @@
}; };
}; };

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/armada-388-helios4.dts --- a/arch/arm/boot/dts/armada-388-helios4.dts
+++ b/arch/arm/boot/dts/armada-388-helios4.dts +++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -70,6 +70,9 @@ reg_5p0v_usb: regulator-5v-usb { @@ -70,6 +70,9 @@
system-leds { system-leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
@ -10,7 +10,7 @@
status-led { status-led {
label = "helios4:green:status"; label = "helios4:green:status";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
@@ -110,6 +113,9 @@ wol { @@ -98,6 +101,9 @@
io-leds { io-leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
@ -20,7 +20,7 @@
sata1-led { sata1-led {
label = "helios4:green:ata1"; label = "helios4:green:ata1";
gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
@@ -145,11 +151,15 @@ usb-led { @@ -133,11 +139,15 @@
fan1: j10-pwm { fan1: j10-pwm {
compatible = "pwm-fan"; compatible = "pwm-fan";
pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */ pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */
@ -36,7 +36,7 @@
}; };
usb2_phy: usb2-phy { usb2_phy: usb2-phy {
@@ -310,16 +320,23 @@ helios_sdhci_pins: helios-sdhci-pins { @@ -298,16 +308,23 @@
"mpp39", "mpp40"; "mpp39", "mpp40";
marvell,function = "sd0"; marvell,function = "sd0";
}; };

View file

@ -1,6 +1,6 @@
--- a/arch/arm/mm/dma-mapping.c --- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c
@@ -314,7 +314,7 @@ static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp, @@ -314,7 +314,7 @@ static void *__alloc_remap_buffer(struct
pgprot_t prot, struct page **ret_page, pgprot_t prot, struct page **ret_page,
const void *caller, bool want_vaddr); const void *caller, bool want_vaddr);

View file

@ -32,8 +32,6 @@ Reviewed-by: Linus Walleij <(address hidden)>
Reviewed-by: Nick Desaulniers <(address hidden)> Reviewed-by: Nick Desaulniers <(address hidden)>
--- ---
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index c4220f51fcf3..0ea8529a4872 100644
--- a/arch/arm/kernel/entry-armv.S --- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S
@@ -252,31 +252,10 @@ __und_svc: @@ -252,31 +252,10 @@ __und_svc:
@ -70,8 +68,6 @@ index c4220f51fcf3..0ea8529a4872 100644
mov r0, sp @ struct pt_regs *regs mov r0, sp @ struct pt_regs *regs
bl __und_fault bl __und_fault
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
index 4fcff9f59947..d5837bf05a9a 100644
--- a/arch/arm/vfp/vfphw.S --- a/arch/arm/vfp/vfphw.S
+++ b/arch/arm/vfp/vfphw.S +++ b/arch/arm/vfp/vfphw.S
@@ -79,11 +79,6 @@ ENTRY(vfp_support_entry) @@ -79,11 +79,6 @@ ENTRY(vfp_support_entry)
@ -86,8 +82,6 @@ index 4fcff9f59947..d5837bf05a9a 100644
VFPFMRX r1, FPEXC @ Is the VFP enabled? VFPFMRX r1, FPEXC @ Is the VFP enabled?
DBGSTR1 "fpexc %08x", r1 DBGSTR1 "fpexc %08x", r1
tst r1, #FPEXC_EN tst r1, #FPEXC_EN
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
index 8c9e7f9f0277..c3b6451c18bd 100644
--- a/arch/arm/vfp/vfpmodule.c --- a/arch/arm/vfp/vfpmodule.c
+++ b/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
@ -98,7 +92,7 @@ index 8c9e7f9f0277..c3b6451c18bd 100644
#include <asm/vfp.h> #include <asm/vfp.h>
#include "vfpinstr.h" #include "vfpinstr.h"
@@ -642,7 +643,9 @@ static int vfp_starting_cpu(unsigned int unused) @@ -642,7 +643,9 @@ static int vfp_starting_cpu(unsigned int
return 0; return 0;
} }

View file

@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/regd.c --- a/drivers/net/wireless/ath/regd.c
+++ b/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c
@@ -50,12 +50,9 @@ static int __ath_regd_init(struct ath_regulatory *reg); @@ -50,12 +50,9 @@ static int __ath_regd_init(struct ath_re
#define ATH_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 80, 0, 30,\ #define ATH_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 80, 0, 30,\
NL80211_RRF_NO_IR) NL80211_RRF_NO_IR)
@ -15,7 +15,7 @@
/* This one skips what we call "mid band" */ /* This one skips what we call "mid band" */
#define ATH_5GHZ_NO_MIDBAND ATH_5GHZ_5150_5350, \ #define ATH_5GHZ_NO_MIDBAND ATH_5GHZ_5150_5350, \
@@ -77,9 +74,8 @@ static const struct ieee80211_regdomain ath_world_regdom_63_65 = { @@ -77,9 +74,8 @@ static const struct ieee80211_regdomain
.n_reg_rules = 4, .n_reg_rules = 4,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -27,7 +27,7 @@
} }
}; };
@@ -88,8 +84,8 @@ static const struct ieee80211_regdomain ath_world_regdom_64 = { @@ -88,8 +84,8 @@ static const struct ieee80211_regdomain
.n_reg_rules = 3, .n_reg_rules = 3,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -38,7 +38,7 @@
} }
}; };
@@ -98,7 +94,7 @@ static const struct ieee80211_regdomain ath_world_regdom_66_69 = { @@ -98,7 +94,7 @@ static const struct ieee80211_regdomain
.n_reg_rules = 3, .n_reg_rules = 3,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -47,7 +47,7 @@
ATH_5GHZ_ALL, ATH_5GHZ_ALL,
} }
}; };
@@ -108,8 +104,7 @@ static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = { @@ -108,8 +104,7 @@ static const struct ieee80211_regdomain
.n_reg_rules = 4, .n_reg_rules = 4,
.alpha2 = "99", .alpha2 = "99",
.reg_rules = { .reg_rules = {
@ -57,7 +57,7 @@
ATH_5GHZ_ALL, ATH_5GHZ_ALL,
} }
}; };
@@ -258,9 +253,7 @@ static bool ath_is_radar_freq(u16 center_freq, @@ -258,9 +253,7 @@ static bool ath_is_radar_freq(u16 center
struct ath_regulatory *reg) struct ath_regulatory *reg)
{ {

View file

@ -11,8 +11,6 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/boot/dts/armada-388-clearfog.dts | 10 ++-------- arch/arm/boot/dts/armada-388-clearfog.dts | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-) 1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/arch/arm/boot/dts/armada-388-clearfog.dts b/arch/arm/boot/dts/armada-388-clearfog.dts
index 441958a39991..4fdfff9acf05 100644
--- a/arch/arm/boot/dts/armada-388-clearfog.dts --- a/arch/arm/boot/dts/armada-388-clearfog.dts
+++ b/arch/arm/boot/dts/armada-388-clearfog.dts +++ b/arch/arm/boot/dts/armada-388-clearfog.dts
@@ -47,10 +47,8 @@ @@ -47,10 +47,8 @@
@ -39,6 +37,3 @@ index 441958a39991..4fdfff9acf05 100644
}; };
port@6 { port@6 {
--
cgit v1.2.1

View file

@ -25,11 +25,9 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++- drivers/cpuidle/cpuidle-mvebu-v7.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-) 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/cpuidle/cpuidle-mvebu-v7.c b/drivers/cpuidle/cpuidle-mvebu-v7.c
index 01a856971f05..18ded9e7cb34 100644
--- a/drivers/cpuidle/cpuidle-mvebu-v7.c --- a/drivers/cpuidle/cpuidle-mvebu-v7.c
+++ b/drivers/cpuidle/cpuidle-mvebu-v7.c +++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
@@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cpuidle_device *dev, @@ -39,8 +39,12 @@ static int mvebu_v7_enter_idle(struct cp
ret = mvebu_v7_cpu_suspend(deepidle); ret = mvebu_v7_cpu_suspend(deepidle);
cpu_pm_exit(); cpu_pm_exit();
@ -43,6 +41,3 @@ index 01a856971f05..18ded9e7cb34 100644
return index; return index;
} }
--
2.1.0

View file

@ -14,19 +14,14 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/net/phy/marvell.c | 2 +- drivers/net/phy/marvell.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 5de8d5827536..9a5329bfd0fd 100644
--- a/drivers/net/phy/marvell.c --- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c
@@ -1142,7 +1142,7 @@ static struct phy_driver marvell_drivers[] = { @@ -2245,7 +2245,7 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1510, .phy_id = MARVELL_PHY_ID_88E1510,
.phy_id_mask = MARVELL_PHY_ID_MASK, .phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1510", .name = "Marvell 88E1510",
- .features = PHY_GBIT_FEATURES | SUPPORTED_FIBRE, - .features = PHY_GBIT_FEATURES | SUPPORTED_FIBRE,
+ .features = PHY_GBIT_FEATURES | SUPPORTED_FIBRE | SUPPORTED_Pause, + .features = PHY_GBIT_FEATURES | SUPPORTED_FIBRE | SUPPORTED_Pause,
.flags = PHY_HAS_INTERRUPT, .flags = PHY_HAS_INTERRUPT,
.config_aneg = &m88e1510_config_aneg, .probe = &m88e1510_probe,
.read_status = &marvell_read_status, .config_init = &m88e1510_config_init,
--
2.1.0

View file

@ -1,8 +1,6 @@
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index 53b79c5..7980be0 100644
--- a/drivers/pci/controller/pci-mvebu.c --- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c
@@ -51,7 +51,14 @@ @@ -52,7 +52,14 @@
PCIE_CONF_ADDR_EN) PCIE_CONF_ADDR_EN)
#define PCIE_CONF_DATA_OFF 0x18fc #define PCIE_CONF_DATA_OFF 0x18fc
#define PCIE_MASK_OFF 0x1910 #define PCIE_MASK_OFF 0x1910
@ -17,10 +15,10 @@ index 53b79c5..7980be0 100644
#define PCIE_CTRL_OFF 0x1a00 #define PCIE_CTRL_OFF 0x1a00
#define PCIE_CTRL_X1_MODE 0x0001 #define PCIE_CTRL_X1_MODE 0x0001
#define PCIE_STAT_OFF 0x1a04 #define PCIE_STAT_OFF 0x1a04
@@ -455,6 +462,54 @@ static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) @@ -476,6 +483,54 @@ static void mvebu_pcie_handle_membase_ch
MVEBU_MBUS_NO_REMAP); &port->memwin);
} }
+static void mvebu_pcie_handle_irq_change(struct mvebu_pcie_port *port) +static void mvebu_pcie_handle_irq_change(struct mvebu_pcie_port *port)
+{ +{
+ u32 reg, old; + u32 reg, old;
@ -72,27 +70,27 @@ index 53b79c5..7980be0 100644
/* /*
* Initialize the configuration space of the PCI-to-PCI bridge * Initialize the configuration space of the PCI-to-PCI bridge
* associated with the given PCIe interface. * associated with the given PCIe interface.
@@ -478,6 +533,7 @@ static void mvebu_sw_pci_bridge_init(struct mvebu_pcie_port *port) @@ -499,6 +554,7 @@ static void mvebu_sw_pci_bridge_init(str
/* Add capabilities */ /* Add capabilities */
bridge->status = PCI_STATUS_CAP_LIST; bridge->status = PCI_STATUS_CAP_LIST;
+ bridge->bridgectrl = PCI_BRIDGE_CTL_SERR; + bridge->bridgectrl = PCI_BRIDGE_CTL_SERR;
} }
/* /*
@@ -550,7 +606,7 @@ static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port, @@ -571,7 +627,7 @@ static int mvebu_sw_pci_bridge_read(stru
case PCI_INTERRUPT_LINE: case PCI_INTERRUPT_LINE:
/* LINE PIN MIN_GNT MAX_LAT */ /* LINE PIN MIN_GNT MAX_LAT */
- *value = 0; - *value = 0;
+ *value = bridge->bridgectrl << 16; + *value = bridge->bridgectrl << 16;
break; break;
case PCISWCAP_EXP_LIST_ID: case PCISWCAP_EXP_LIST_ID:
@@ -599,6 +655,16 @@ static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port, @@ -620,6 +676,16 @@ static int mvebu_sw_pci_bridge_read(stru
*value = mvebu_readl(port, PCIE_RC_RTSTA); *value = mvebu_readl(port, PCIE_RC_RTSTA);
break; break;
+ case 0x100 ... 0x128: + case 0x100 ... 0x128:
+ *value = mvebu_readl(port, where & ~3); + *value = mvebu_readl(port, where & ~3);
+ break; + break;
@ -106,26 +104,26 @@ index 53b79c5..7980be0 100644
/* PCIe requires the v2 fields to be hard-wired to zero */ /* PCIe requires the v2 fields to be hard-wired to zero */
case PCISWCAP_EXP_DEVCAP2: case PCISWCAP_EXP_DEVCAP2:
case PCISWCAP_EXP_DEVCTL2: case PCISWCAP_EXP_DEVCTL2:
@@ -629,7 +695,7 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -650,7 +716,7 @@ static int mvebu_sw_pci_bridge_write(str
unsigned int where, int size, u32 value) unsigned int where, int size, u32 value)
{ {
struct mvebu_sw_pci_bridge *bridge = &port->bridge; struct mvebu_sw_pci_bridge *bridge = &port->bridge;
- u32 mask, reg; - u32 mask, reg;
+ u32 mask, reg, old; + u32 mask, reg, old;
int err; int err;
if (size == 4) if (size == 4)
@@ -649,8 +715,7 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -670,8 +736,7 @@ static int mvebu_sw_pci_bridge_write(str
switch (where & ~3) { switch (where & ~3) {
case PCI_COMMAND: case PCI_COMMAND:
- { - {
- u32 old = bridge->command; - u32 old = bridge->command;
+ old = bridge->command; + old = bridge->command;
if (!mvebu_has_ioport(port)) if (!mvebu_has_ioport(port))
value &= ~PCI_COMMAND_IO; value &= ~PCI_COMMAND_IO;
@@ -660,8 +725,9 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -681,8 +746,9 @@ static int mvebu_sw_pci_bridge_write(str
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
if ((old ^ bridge->command) & PCI_COMMAND_MEMORY) if ((old ^ bridge->command) & PCI_COMMAND_MEMORY)
mvebu_pcie_handle_membase_change(port); mvebu_pcie_handle_membase_change(port);
@ -133,13 +131,13 @@ index 53b79c5..7980be0 100644
+ mvebu_pcie_handle_irq_change(port); + mvebu_pcie_handle_irq_change(port);
break; break;
- } - }
case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1: case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4] = value; bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4] = value;
@@ -690,6 +756,17 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -711,6 +777,17 @@ static int mvebu_sw_pci_bridge_write(str
mvebu_pcie_handle_iobase_change(port); mvebu_pcie_handle_iobase_change(port);
break; break;
+ case PCI_INTERRUPT_LINE: + case PCI_INTERRUPT_LINE:
+ value >>= 16; + value >>= 16;
+ old = bridge->bridgectrl; + old = bridge->bridgectrl;
@ -154,9 +152,9 @@ index 53b79c5..7980be0 100644
case PCI_PRIMARY_BUS: case PCI_PRIMARY_BUS:
bridge->primary_bus = value & 0xff; bridge->primary_bus = value & 0xff;
bridge->secondary_bus = (value >> 8) & 0xff; bridge->secondary_bus = (value >> 8) & 0xff;
@@ -699,6 +776,14 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -720,6 +797,14 @@ static int mvebu_sw_pci_bridge_write(str
break; break;
case PCISWCAP_EXP_DEVCTL: case PCISWCAP_EXP_DEVCTL:
+ old = bridge->pcie_devctl; + old = bridge->pcie_devctl;
+ bridge->pcie_devctl = value & (PCI_EXP_DEVCTL_FERE | + bridge->pcie_devctl = value & (PCI_EXP_DEVCTL_FERE |
@ -169,10 +167,10 @@ index 53b79c5..7980be0 100644
/* /*
* Armada370 data says these bits must always * Armada370 data says these bits must always
* be zero when in root complex mode. * be zero when in root complex mode.
@@ -739,10 +824,24 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -761,10 +846,24 @@ static int mvebu_sw_pci_bridge_write(str
mvebu_writel(port, value, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); mvebu_writel(port, value, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break; break;
+ case PCISWCAP_EXP_RTCTL: + case PCISWCAP_EXP_RTCTL:
+ old = bridge->pcie_rtctl; + old = bridge->pcie_rtctl;
+ bridge->pcie_rtctl = value & (PCI_EXP_RTCTL_SECEE | + bridge->pcie_rtctl = value & (PCI_EXP_RTCTL_SECEE |
@ -186,7 +184,7 @@ index 53b79c5..7980be0 100644
case PCISWCAP_EXP_RTSTA: case PCISWCAP_EXP_RTSTA:
mvebu_writel(port, value, PCIE_RC_RTSTA); mvebu_writel(port, value, PCIE_RC_RTSTA);
break; break;
+ case 0x100 ... 0x128: + case 0x100 ... 0x128:
+ mvebu_writel(port, value, where & ~3); + mvebu_writel(port, value, where & ~3);
+ break; + break;

View file

@ -7,11 +7,9 @@ Subject: [PATCH] implement slot capabilities (SSPL)
drivers/pci/controller/pci-mvebu.c | 22 ++++++++++++++++++++-- drivers/pci/controller/pci-mvebu.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-) 1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
index 7980be0..0e9b820 100644
--- a/drivers/pci/controller/pci-mvebu.c --- a/drivers/pci/controller/pci-mvebu.c
+++ b/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c
@@ -65,6 +65,12 @@ @@ -66,6 +66,12 @@
#define PCIE_STAT_BUS 0xff00 #define PCIE_STAT_BUS 0xff00
#define PCIE_STAT_DEV 0x1f0000 #define PCIE_STAT_DEV 0x1f0000
#define PCIE_STAT_LINK_DOWN BIT(0) #define PCIE_STAT_LINK_DOWN BIT(0)
@ -24,17 +22,17 @@ index 7980be0..0e9b820 100644
#define PCIE_RC_RTSTA 0x1a14 #define PCIE_RC_RTSTA 0x1a14
#define PCIE_DEBUG_CTRL 0x1a60 #define PCIE_DEBUG_CTRL 0x1a60
#define PCIE_DEBUG_SOFT_RESET BIT(20) #define PCIE_DEBUG_SOFT_RESET BIT(20)
@@ -119,7 +125,6 @@ struct mvebu_sw_pci_bridge { @@ -120,7 +126,6 @@ struct mvebu_sw_pci_bridge {
u16 bridgectrl; u16 bridgectrl;
/* PCI express capability */ /* PCI express capability */
- u32 pcie_sltcap; - u32 pcie_sltcap;
u16 pcie_devctl; u16 pcie_devctl;
u16 pcie_rtctl; u16 pcie_rtctl;
}; };
@@ -640,8 +645,12 @@ static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port, @@ -661,8 +666,12 @@ static int mvebu_sw_pci_bridge_read(stru
break; break;
case PCISWCAP_EXP_SLTCAP: case PCISWCAP_EXP_SLTCAP:
- *value = bridge->pcie_sltcap; - *value = bridge->pcie_sltcap;
+ { + {
@ -43,13 +41,13 @@ index 7980be0..0e9b820 100644
+ PCIE_SSPL_SPLV_VAL(tmp) << 7; + PCIE_SSPL_SPLV_VAL(tmp) << 7;
break; break;
+ } + }
case PCISWCAP_EXP_SLTCTL: case PCISWCAP_EXP_SLTCTL:
*value = PCI_EXP_SLTSTA_PDS << 16; *value = PCI_EXP_SLTSTA_PDS << 16;
@@ -824,6 +833,15 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port, @@ -846,6 +855,15 @@ static int mvebu_sw_pci_bridge_write(str
mvebu_writel(port, value, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL); mvebu_writel(port, value, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
break; break;
+ case PCISWCAP_EXP_SLTCAP: + case PCISWCAP_EXP_SLTCAP:
+ { + {
+ u32 sspl = PCIE_SSPL_SPLV((value & PCI_EXP_SLTCAP_SPLV) >> 7) | + u32 sspl = PCIE_SSPL_SPLV((value & PCI_EXP_SLTCAP_SPLV) >> 7) |
@ -62,6 +60,3 @@ index 7980be0..0e9b820 100644
case PCISWCAP_EXP_RTCTL: case PCISWCAP_EXP_RTCTL:
old = bridge->pcie_rtctl; old = bridge->pcie_rtctl;
bridge->pcie_rtctl = value & (PCI_EXP_RTCTL_SECEE | bridge->pcie_rtctl = value & (PCI_EXP_RTCTL_SECEE |
--
1.9.1

View file

@ -8,11 +8,9 @@ Subject: [PATCH] gpio: report all gpios in debugfs
drivers/gpio/gpiolib.c | 3 ++- drivers/gpio/gpiolib.c | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-) 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index d428b97..fe172b7 100644
--- a/drivers/gpio/gpio-mvebu.c --- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c
@@ -514,8 +514,8 @@ static void mvebu_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) @@ -855,8 +855,8 @@ static void mvebu_gpio_dbg_show(struct s
bool is_out; bool is_out;
label = gpiochip_is_requested(chip, i); label = gpiochip_is_requested(chip, i);
@ -21,13 +19,11 @@ index d428b97..fe172b7 100644
+// if (!label) +// if (!label)
+// continue; +// continue;
msk = 1 << i; msk = BIT(i);
is_out = !(io_conf & msk); is_out = !(io_conf & msk);
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index b747c76..d61fb66
--- a/drivers/gpio/gpiolib.c --- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c
@@ -2895,14 +2895,14 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_device *gdev) @@ -4357,14 +4357,14 @@ static void gpiolib_dbg_show(struct seq_
int is_irq; int is_irq;
for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) { for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) {

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/armada-xp.dtsi --- a/arch/arm/boot/dts/armada-xp.dtsi
+++ b/arch/arm/boot/dts/armada-xp.dtsi +++ b/arch/arm/boot/dts/armada-xp.dtsi
@@ -274,12 +274,10 @@ @@ -237,12 +237,10 @@
}; };
&i2c0 { &i2c0 {

View file

@ -7,7 +7,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
--- ---
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -403,6 +403,185 @@ static unsigned int sfp_check(void *buf, size_t len) @@ -403,6 +403,185 @@ static unsigned int sfp_check(void *buf,
return check; return check;
} }
@ -193,7 +193,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
/* hwmon */ /* hwmon */
#if IS_ENABLED(CONFIG_HWMON) #if IS_ENABLED(CONFIG_HWMON)
static umode_t sfp_hwmon_is_visible(const void *data, static umode_t sfp_hwmon_is_visible(const void *data,
@@ -1388,6 +1567,7 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1376,6 +1555,7 @@ static int sfp_sm_mod_probe(struct sfp *
/* SFP module inserted - read I2C data */ /* SFP module inserted - read I2C data */
struct sfp_eeprom_id id; struct sfp_eeprom_id id;
bool cotsworks; bool cotsworks;
@ -201,7 +201,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
u8 check; u8 check;
int ret; int ret;
@@ -1450,6 +1630,73 @@ static int sfp_sm_mod_probe(struct sfp *sfp) @@ -1438,6 +1618,73 @@ static int sfp_sm_mod_probe(struct sfp *
(int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn, (int)sizeof(id.ext.vendor_sn), id.ext.vendor_sn,
(int)sizeof(id.ext.datecode), id.ext.datecode); (int)sizeof(id.ext.datecode), id.ext.datecode);

View file

@ -12,7 +12,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/arch/arm/boot/dts/armada-388-clearfog-base.dts --- a/arch/arm/boot/dts/armada-388-clearfog-base.dts
+++ b/arch/arm/boot/dts/armada-388-clearfog-base.dts +++ b/arch/arm/boot/dts/armada-388-clearfog-base.dts
@@ -48,6 +48,7 @@ @@ -7,6 +7,7 @@
/dts-v1/; /dts-v1/;
#include "armada-388-clearfog.dtsi" #include "armada-388-clearfog.dtsi"

View file

@ -13,7 +13,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
--- a/drivers/net/phy/sfp.c --- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c
@@ -488,7 +488,7 @@ static void sfp_sm_phy_detach(struct sfp @@ -1374,7 +1374,7 @@ static void sfp_sm_phy_detach(struct sfp
sfp->mod_phy = NULL; sfp->mod_phy = NULL;
} }
@ -22,7 +22,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
{ {
struct phy_device *phy; struct phy_device *phy;
int err; int err;
@@ -498,11 +498,11 @@ static void sfp_sm_probe_phy(struct sfp @@ -1384,11 +1384,11 @@ static void sfp_sm_probe_phy(struct sfp
phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR); phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR);
if (phy == ERR_PTR(-ENODEV)) { if (phy == ERR_PTR(-ENODEV)) {
dev_info(sfp->dev, "no PHY detected\n"); dev_info(sfp->dev, "no PHY detected\n");
@ -36,7 +36,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
} }
err = sfp_add_phy(sfp->sfp_bus, phy); err = sfp_add_phy(sfp->sfp_bus, phy);
@@ -510,11 +510,13 @@ static void sfp_sm_probe_phy(struct sfp @@ -1396,11 +1396,13 @@ static void sfp_sm_probe_phy(struct sfp
phy_device_remove(phy); phy_device_remove(phy);
phy_device_free(phy); phy_device_free(phy);
dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err); dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
@ -51,7 +51,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
} }
static void sfp_sm_link_up(struct sfp *sfp) static void sfp_sm_link_up(struct sfp *sfp)
@@ -560,14 +562,9 @@ static void sfp_sm_fault(struct sfp *sfp @@ -1464,14 +1466,9 @@ static void sfp_sm_fault(struct sfp *sfp
static void sfp_sm_mod_init(struct sfp *sfp) static void sfp_sm_mod_init(struct sfp *sfp)
{ {
@ -68,7 +68,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
/* Setting the serdes link mode is guesswork: there's no /* Setting the serdes link mode is guesswork: there's no
* field in the EEPROM which indicates what mode should * field in the EEPROM which indicates what mode should
@@ -581,7 +578,22 @@ static void sfp_sm_mod_init(struct sfp * @@ -1485,7 +1482,22 @@ static void sfp_sm_mod_init(struct sfp *
if (sfp->id.base.e1000_base_t || if (sfp->id.base.e1000_base_t ||
sfp->id.base.e100_base_lx || sfp->id.base.e100_base_lx ||
sfp->id.base.e100_base_fx) sfp->id.base.e100_base_fx)
@ -91,4 +91,4 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+ sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0); + sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
} }
static int sfp_sm_mod_probe(struct sfp *sfp) static int sfp_sm_mod_hpower(struct sfp *sfp)

View file

@ -20,8 +20,6 @@ Signed-off-by: Daniel Golle <daniel at makrotopia.org>
include/linux/libata.h | 7 ++++++ include/linux/libata.h | 7 ++++++
3 files changed, 79 insertions(+) 3 files changed, 79 insertions(+)
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 6aaa3f8..4e24b64 100644
--- a/drivers/ata/Kconfig --- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig
@@ -46,6 +46,22 @@ config ATA_VERBOSE_ERROR @@ -46,6 +46,22 @@ config ATA_VERBOSE_ERROR
@ -47,11 +45,9 @@ index 6aaa3f8..4e24b64 100644
config ATA_ACPI config ATA_ACPI
bool "ATA ACPI Support" bool "ATA ACPI Support"
depends on ACPI depends on ACPI
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index b0b77b6..1400f4d 100644
--- a/drivers/ata/libata-core.c --- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c
@@ -728,6 +728,7 @@ u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev) @@ -730,6 +730,7 @@ u64 ata_tf_read_block(const struct ata_t
return block; return block;
} }
@ -59,7 +55,7 @@ index b0b77b6..1400f4d 100644
/** /**
* ata_build_rw_tf - Build ATA taskfile for given read/write request * ata_build_rw_tf - Build ATA taskfile for given read/write request
* @tf: Target ATA taskfile * @tf: Target ATA taskfile
@@ -4757,6 +4758,30 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words) @@ -5112,6 +5113,30 @@ void swap_buf_le16(u16 *buf, unsigned in
} }
/** /**
@ -90,7 +86,7 @@ index b0b77b6..1400f4d 100644
* ata_qc_new_init - Request an available ATA command, and initialize it * ata_qc_new_init - Request an available ATA command, and initialize it
* @dev: Device from whom we request an available command structure * @dev: Device from whom we request an available command structure
* @tag: tag * @tag: tag
@@ -4780,6 +4805,9 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag) @@ -5135,6 +5160,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (tag < 0) if (tag < 0)
return NULL; return NULL;
} }
@ -99,8 +95,8 @@ index b0b77b6..1400f4d 100644
+#endif +#endif
qc = __ata_qc_from_tag(ap, tag); qc = __ata_qc_from_tag(ap, tag);
qc->tag = tag; qc->tag = qc->hw_tag = tag;
@@ -5677,6 +5705,9 @@ struct ata_port *ata_port_alloc(struct ata_host *host) @@ -6071,6 +6099,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1; ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1; ap->stats.idle_irq = 1;
#endif #endif
@ -110,7 +106,7 @@ index b0b77b6..1400f4d 100644
ata_sff_port_init(ap); ata_sff_port_init(ap);
return ap; return ap;
@@ -5698,6 +5729,12 @@ static void ata_host_release(struct device *gendev, void *res) @@ -6106,6 +6137,12 @@ static void ata_host_release(struct kref
kfree(ap->pmp_link); kfree(ap->pmp_link);
kfree(ap->slave_link); kfree(ap->slave_link);
@ -123,7 +119,7 @@ index b0b77b6..1400f4d 100644
kfree(ap); kfree(ap);
host->ports[i] = NULL; host->ports[i] = NULL;
} }
@@ -6145,6 +6182,25 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) @@ -6570,6 +6607,25 @@ int ata_host_register(struct ata_host *h
host->ports[i]->local_port_no = i + 1; host->ports[i]->local_port_no = i + 1;
} }
@ -149,11 +145,9 @@ index b0b77b6..1400f4d 100644
/* Create associated sysfs transport objects */ /* Create associated sysfs transport objects */
for (i = 0; i < host->n_ports; i++) { for (i = 0; i < host->n_ports; i++) {
rc = ata_tport_add(host->dev,host->ports[i]); rc = ata_tport_add(host->dev,host->ports[i]);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index b20a275..50eeee3 100644
--- a/include/linux/libata.h --- a/include/linux/libata.h
+++ b/include/linux/libata.h +++ b/include/linux/libata.h
@@ -38,6 +38,7 @@ @@ -39,6 +39,7 @@
#include <linux/cdrom.h> #include <linux/cdrom.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/async.h> #include <linux/async.h>
@ -161,7 +155,7 @@ index b20a275..50eeee3 100644
/* /*
* Define if arch has non-standard setup. This is a _PCI_ standard * Define if arch has non-standard setup. This is a _PCI_ standard
@@ -877,6 +878,12 @@ struct ata_port { @@ -898,6 +899,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI #ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif #endif
@ -174,6 +168,3 @@ index b20a275..50eeee3 100644
/* owned by EH */ /* owned by EH */
u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned; u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned;
}; };
--
2.7.4

View file

@ -8,11 +8,9 @@ Subject: Enable ATA port LED trigger
arch/arm/mach-mvebu/Kconfig | 1 + arch/arm/mach-mvebu/Kconfig | 1 +
2 files changed, 2 insertions(+) 2 files changed, 2 insertions(+)
diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index cf363ab..19449d3 100644
--- a/arch/arm/configs/mvebu_v7_defconfig --- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig +++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -61,6 +61,7 @@ CONFIG_MTD_SPI_NOR=y @@ -59,6 +59,7 @@ CONFIG_MTD_UBI=y
CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT24=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y CONFIG_ATA=y
@ -20,18 +18,13 @@ index cf363ab..19449d3 100644
CONFIG_SATA_AHCI=y CONFIG_SATA_AHCI=y
CONFIG_AHCI_MVEBU=y CONFIG_AHCI_MVEBU=y
CONFIG_SATA_MV=y CONFIG_SATA_MV=y
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 053ea9d..aa1f389 100644
--- a/arch/arm/mach-mvebu/Kconfig --- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig
@@ -57,6 +57,7 @@ config MACH_ARMADA_375 @@ -56,6 +56,7 @@ config MACH_ARMADA_375
config MACH_ARMADA_38X config MACH_ARMADA_38X
bool "Marvell Armada 380/385 boards" bool "Marvell Armada 380/385 boards"
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
+ select ARCH_WANT_LIBATA_LEDS + select ARCH_WANT_LIBATA_LEDS
select ARM_ERRATA_720789 select ARM_ERRATA_720789
select ARM_ERRATA_753970 select PL310_ERRATA_753970
select ARM_GIC select ARM_GIC
--
2.7.4

View file

@ -1,16 +1,14 @@
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index 661c5a38f..a25d61d54 100644
--- a/drivers/gpio/gpio-mvebu.c --- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c
@@ -38,6 +38,7 @@ @@ -39,6 +39,7 @@
#include <linux/err.h> #include <linux/gpio/driver.h>
#include <linux/gpio.h> #include <linux/gpio/consumer.h>
#include <linux/init.h> #include <linux/init.h>
+#include <linux/interrupt.h> +#include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqchip/chained_irq.h> #include <linux/irqchip/chained_irq.h>
@@ -133,7 +134,7 @@ struct mvebu_gpio_chip { @@ -111,7 +112,7 @@ struct mvebu_gpio_chip {
struct regmap *regs; struct regmap *regs;
u32 offset; u32 offset;
struct regmap *percpu_regs; struct regmap *percpu_regs;
@ -19,11 +17,10 @@ index 661c5a38f..a25d61d54 100644
struct irq_domain *domain; struct irq_domain *domain;
int soc_variant; int soc_variant;
@@ -608,6 +609,33 @@ static void mvebu_gpio_irq_handler(struct irq_desc *desc) @@ -587,6 +588,33 @@ static void mvebu_gpio_irq_handler(struc
chained_irq_exit(chip, desc);
} }
+/* /*
+ * Set interrupt number "irq" in the GPIO as a wake-up source. + * Set interrupt number "irq" in the GPIO as a wake-up source.
+ * While system is running, all registered GPIO interrupts need to have + * While system is running, all registered GPIO interrupts need to have
+ * wake-up enabled. When system is suspended, only selected GPIO interrupts + * wake-up enabled. When system is suspended, only selected GPIO interrupts
@ -50,10 +47,11 @@ index 661c5a38f..a25d61d54 100644
+ return 0; + return 0;
+} +}
+ +
/* +/*
* Functions implementing the pwm_chip methods * Functions implementing the pwm_chip methods
*/ */
@@ -1277,7 +1305,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) static struct mvebu_pwm *to_mvebu_pwm(struct pwm_chip *chip)
@@ -1205,7 +1233,7 @@ static int mvebu_gpio_probe(struct platf
err = irq_alloc_domain_generic_chips( err = irq_alloc_domain_generic_chips(
mvchip->domain, ngpios, 2, np->name, handle_level_irq, mvchip->domain, ngpios, 2, np->name, handle_level_irq,
@ -62,7 +60,7 @@ index 661c5a38f..a25d61d54 100644
if (err) { if (err) {
dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n", dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n",
mvchip->chip.label); mvchip->chip.label);
@@ -1295,6 +1323,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1223,6 +1251,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_level_irq_mask; ct->chip.irq_mask = mvebu_gpio_level_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -71,7 +69,7 @@ index 661c5a38f..a25d61d54 100644
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
ct = &gc->chip_types[1]; ct = &gc->chip_types[1];
@@ -1303,6 +1333,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1231,6 +1261,8 @@ static int mvebu_gpio_probe(struct platf
ct->chip.irq_mask = mvebu_gpio_edge_irq_mask; ct->chip.irq_mask = mvebu_gpio_edge_irq_mask;
ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask; ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask;
ct->chip.irq_set_type = mvebu_gpio_irq_set_type; ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
@ -80,7 +78,7 @@ index 661c5a38f..a25d61d54 100644
ct->handler = handle_edge_irq; ct->handler = handle_edge_irq;
ct->chip.name = mvchip->chip.label; ct->chip.name = mvchip->chip.label;
@@ -1318,6 +1350,7 @@ static int mvebu_gpio_probe(struct platform_device *pdev) @@ -1246,6 +1278,7 @@ static int mvebu_gpio_probe(struct platf
continue; continue;
irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler, irq_set_chained_handler_and_data(irq, mvebu_gpio_irq_handler,
mvchip); mvchip);

View file

@ -1,8 +1,6 @@
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index adc768f908f1..a2bd264ee92c 100644
--- a/drivers/gpio/gpio-mvebu.c --- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c
@@ -92,20 +92,41 @@ @@ -93,20 +93,41 @@
#define MVEBU_MAX_GPIO_PER_BANK 32 #define MVEBU_MAX_GPIO_PER_BANK 32
@ -48,7 +46,7 @@ index adc768f908f1..a2bd264ee92c 100644
struct mvebu_gpio_chip { struct mvebu_gpio_chip {
struct gpio_chip chip; struct gpio_chip chip;
struct regmap *regs; struct regmap *regs;
@@ -282,12 +303,12 @@ mvebu_gpio_write_level_mask(struct mvebu_gpio_chip *mvchip, u32 val) @@ -283,12 +304,12 @@ mvebu_gpio_write_level_mask(struct mvebu
* Functions returning addresses of individual registers for a given * Functions returning addresses of individual registers for a given
* PWM controller. * PWM controller.
*/ */
@ -63,7 +61,7 @@ index adc768f908f1..a2bd264ee92c 100644
{ {
return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF; return mvpwm->membase + PWM_BLINK_OFF_DURATION_OFF;
} }
@@ -599,43 +620,76 @@ static int mvebu_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) @@ -627,43 +648,76 @@ static int mvebu_pwm_request(struct pwm_
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
struct mvebu_gpio_chip *mvchip = mvpwm->mvchip; struct mvebu_gpio_chip *mvchip = mvpwm->mvchip;
struct gpio_desc *desc; struct gpio_desc *desc;
@ -88,18 +86,18 @@ index adc768f908f1..a2bd264ee92c 100644
+ &mvchip->blink_en_reg); + &mvchip->blink_en_reg);
+ if (pwm->chip_data || (mvchip->blink_en_reg & BIT(pwm->hwpwm))) + if (pwm->chip_data || (mvchip->blink_en_reg & BIT(pwm->hwpwm)))
+ return -EBUSY; + return -EBUSY;
+
+ desc = gpiochip_request_own_desc(&mvchip->chip, pwm->hwpwm, "mvebu-pwm");
+ if (IS_ERR(desc)) {
+ ret = PTR_ERR(desc);
+ goto out;
+ }
- ret = gpiod_direction_output(desc, 0); - ret = gpiod_direction_output(desc, 0);
- if (ret) { - if (ret) {
- gpiochip_free_own_desc(desc); - gpiochip_free_own_desc(desc);
- goto out; - goto out;
- } - }
+ desc = gpiochip_request_own_desc(&mvchip->chip, pwm->hwpwm, "mvebu-pwm");
+ if (IS_ERR(desc)) {
+ ret = PTR_ERR(desc);
+ goto out;
+ }
+
+ ret = gpiod_direction_output(desc, 0); + ret = gpiod_direction_output(desc, 0);
+ if (ret) { + if (ret) {
+ gpiochip_free_own_desc(desc); + gpiochip_free_own_desc(desc);
@ -161,7 +159,7 @@ index adc768f908f1..a2bd264ee92c 100644
} }
static void mvebu_pwm_get_state(struct pwm_chip *chip, static void mvebu_pwm_get_state(struct pwm_chip *chip,
@@ -643,17 +697,24 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -671,17 +725,24 @@ static void mvebu_pwm_get_state(struct p
struct pwm_state *state) { struct pwm_state *state) {
struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip); struct mvebu_pwm *mvpwm = to_mvebu_pwm(chip);
@ -189,7 +187,7 @@ index adc768f908f1..a2bd264ee92c 100644
if (val > UINT_MAX) if (val > UINT_MAX)
state->duty_cycle = UINT_MAX; state->duty_cycle = UINT_MAX;
else if (val) else if (val)
@@ -662,9 +723,9 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -690,9 +751,9 @@ static void mvebu_pwm_get_state(struct p
state->duty_cycle = 1; state->duty_cycle = 1;
val = (unsigned long long) val = (unsigned long long)
@ -201,7 +199,7 @@ index adc768f908f1..a2bd264ee92c 100644
if (val < state->duty_cycle) { if (val < state->duty_cycle) {
state->period = 1; state->period = 1;
} else { } else {
@@ -683,19 +744,21 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, @@ -711,19 +772,21 @@ static void mvebu_pwm_get_state(struct p
else else
state->enabled = false; state->enabled = false;
@ -225,7 +223,7 @@ index adc768f908f1..a2bd264ee92c 100644
do_div(val, NSEC_PER_SEC); do_div(val, NSEC_PER_SEC);
if (val > UINT_MAX) if (val > UINT_MAX)
return -EINVAL; return -EINVAL;
@@ -704,7 +767,7 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -732,7 +795,7 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
on = 1; on = 1;
@ -234,7 +232,7 @@ index adc768f908f1..a2bd264ee92c 100644
(state->period - state->duty_cycle); (state->period - state->duty_cycle);
do_div(val, NSEC_PER_SEC); do_div(val, NSEC_PER_SEC);
if (val > UINT_MAX) if (val > UINT_MAX)
@@ -714,16 +777,16 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, @@ -742,16 +805,16 @@ static int mvebu_pwm_apply(struct pwm_ch
else else
off = 1; off = 1;
@ -255,7 +253,7 @@ index adc768f908f1..a2bd264ee92c 100644
return 0; return 0;
} }
@@ -742,10 +805,10 @@ static void __maybe_unused mvebu_pwm_suspend(struct mvebu_gpio_chip *mvchip) @@ -770,10 +833,10 @@ static void __maybe_unused mvebu_pwm_sus
regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_read(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
&mvpwm->blink_select); &mvpwm->blink_select);
@ -270,7 +268,7 @@ index adc768f908f1..a2bd264ee92c 100644
} }
static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip)
@@ -754,10 +817,10 @@ static void __maybe_unused mvebu_pwm_resume(struct mvebu_gpio_chip *mvchip) @@ -782,10 +845,10 @@ static void __maybe_unused mvebu_pwm_res
regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, regmap_write(mvchip->regs, GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset,
mvpwm->blink_select); mvpwm->blink_select);
@ -285,7 +283,7 @@ index adc768f908f1..a2bd264ee92c 100644
} }
static int mvebu_pwm_probe(struct platform_device *pdev, static int mvebu_pwm_probe(struct platform_device *pdev,
@@ -768,6 +831,7 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -796,6 +859,7 @@ static int mvebu_pwm_probe(struct platfo
struct mvebu_pwm *mvpwm; struct mvebu_pwm *mvpwm;
struct resource *res; struct resource *res;
u32 set; u32 set;
@ -293,7 +291,7 @@ index adc768f908f1..a2bd264ee92c 100644
if (!of_device_is_compatible(mvchip->chip.of_node, if (!of_device_is_compatible(mvchip->chip.of_node,
"marvell,armada-370-gpio")) "marvell,armada-370-gpio"))
@@ -790,12 +854,15 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -818,12 +882,15 @@ static int mvebu_pwm_probe(struct platfo
* Use set A for lines of GPIO chip with id 0, B for GPIO chip * Use set A for lines of GPIO chip with id 0, B for GPIO chip
* with id 1. Don't allow further GPIO chips to be used for PWM. * with id 1. Don't allow further GPIO chips to be used for PWM.
*/ */
@ -312,20 +310,21 @@ index adc768f908f1..a2bd264ee92c 100644
regmap_write(mvchip->regs, regmap_write(mvchip->regs,
GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set); GPIO_BLINK_CNT_SELECT_OFF + mvchip->offset, set);
@@ -805,15 +872,13 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -833,15 +900,13 @@ static int mvebu_pwm_probe(struct platfo
mvchip->mvpwm = mvpwm; mvchip->mvpwm = mvpwm;
mvpwm->mvchip = mvchip; mvpwm->mvchip = mvchip;
- mvpwm->membase = devm_ioremap_resource(dev, res); - mvpwm->membase = devm_ioremap_resource(dev, res);
- if (IS_ERR(mvpwm->membase)) - if (IS_ERR(mvpwm->membase))
- return PTR_ERR(mvpwm->membase); - return PTR_ERR(mvpwm->membase);
+ mvpwm->controller.membase = devm_ioremap_resource(dev, res); -
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
- mvpwm->clk_rate = clk_get_rate(mvchip->clk); - mvpwm->clk_rate = clk_get_rate(mvchip->clk);
- if (!mvpwm->clk_rate) { - if (!mvpwm->clk_rate) {
- dev_err(dev, "failed to get clock rate\n"); - dev_err(dev, "failed to get clock rate\n");
+ mvpwm->controller.membase = devm_ioremap_resource(dev, res);
+ if (IS_ERR(mvpwm->controller.membase))
+ return PTR_ERR(mvpwm->controller.membase);
+
+ mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk); + mvpwm->controller.clk_rate = clk_get_rate(mvchip->clk);
+ if (!mvpwm->controller.clk_rate) + if (!mvpwm->controller.clk_rate)
return -EINVAL; return -EINVAL;
@ -333,7 +332,7 @@ index adc768f908f1..a2bd264ee92c 100644
mvpwm->chip.dev = dev; mvpwm->chip.dev = dev;
mvpwm->chip.ops = &mvebu_pwm_ops; mvpwm->chip.ops = &mvebu_pwm_ops;
@@ -826,7 +891,9 @@ static int mvebu_pwm_probe(struct platform_device *pdev, @@ -854,7 +919,9 @@ static int mvebu_pwm_probe(struct platfo
*/ */
mvpwm->chip.base = -1; mvpwm->chip.base = -1;

View file

@ -1,314 +0,0 @@
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 4b17f35..c6b6038 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -1020,6 +1020,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
armada-388-clearfog.dtb \
armada-388-clearfog-base.dtb \
armada-388-clearfog-pro.dtb \
+ armada-388-helios4.dtb \
armada-388-db.dtb \
armada-388-gp.dtb \
armada-388-rd.dtb
diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts
new file mode 100644
index 0000000..93d0132
--- /dev/null
+++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -0,0 +1,295 @@
+/*
+ * Device Tree file for Helios4
+ * based on SolidRun Clearfog revision A1 rev 2.0 (88F6828)
+ *
+ * Copyright (C) 2017 Kobol.io
+ *
+ */
+
+/dts-v1/;
+#include "armada-388.dtsi"
+#include "armada-38x-solidrun-microsom.dtsi"
+
+/ {
+ model = "Helios4";
+ compatible = "marvell,armada388",
+ "marvell,armada385", "marvell,armada380";
+
+ memory {
+ device_type = "memory";
+ reg = <0x00000000 0x80000000>; /* 2 GB */
+ };
+
+ aliases {
+ /* So that mvebu u-boot can update the MAC addresses */
+ ethernet1 = &eth0;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ reg_12v: regulator-12v {
+ compatible = "regulator-fixed";
+ regulator-name = "power_brick_12V";
+ regulator-min-microvolt = <12000000>;
+ regulator-max-microvolt = <12000000>;
+ regulator-always-on;
+ };
+
+ reg_3p3v: regulator-3p3v {
+ compatible = "regulator-fixed";
+ regulator-name = "3P3V";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ vin-supply = <&reg_12v>;
+ };
+
+ reg_5p0v_hdd: regulator-5v-hdd {
+ compatible = "regulator-fixed";
+ regulator-name = "5V_HDD";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on;
+ vin-supply = <&reg_12v>;
+ };
+
+ reg_5p0v_usb: regulator-5v-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "USB-PWR";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-boot-on;
+ regulator-always-on;
+ enable-active-high;
+ gpio = <&expander0 6 GPIO_ACTIVE_HIGH>;
+ vin-supply = <&reg_12v>;
+ };
+
+ system-leds {
+ compatible = "gpio-leds";
+ status-led {
+ label = "helios4:green:status";
+ gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "heartbeat";
+ default-state = "on";
+ };
+
+ fault-led {
+ label = "helios4:red:fault";
+ gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
+ default-state = "keep";
+ };
+ };
+
+ io-leds {
+ compatible = "gpio-leds";
+ sata1-led {
+ label = "helios4:green:ata1";
+ gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "ata1";
+ default-state = "off";
+ };
+ sata2-led {
+ label = "helios4:green:ata2";
+ gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "ata2";
+ default-state = "off";
+ };
+ sata3-led {
+ label = "helios4:green:ata3";
+ gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "ata3";
+ default-state = "off";
+ };
+ sata4-led {
+ label = "helios4:green:ata4";
+ gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "ata4";
+ default-state = "off";
+ };
+ usb-led {
+ label = "helios4:green:usb";
+ gpios = <&gpio1 22 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "usb-host";
+ default-state = "off";
+ };
+ };
+
+ fan1: j10-pwm {
+ compatible = "pwm-fan";
+ pwms = <&gpio1 9 40000>; /* Target freq:25 kHz */
+ };
+
+ fan2: j17-pwm {
+ compatible = "pwm-fan";
+ pwms = <&gpio1 23 40000>; /* Target freq:25 kHz */
+ };
+
+ usb2_phy: usb2-phy {
+ compatible = "usb-nop-xceiv";
+ vbus-regulator = <&reg_5p0v_usb>;
+ };
+
+ usb3_phy: usb3-phy {
+ compatible = "usb-nop-xceiv";
+ //vbus-regulator = <&reg_5p0v_usb>;
+ };
+
+ soc {
+ internal-regs {
+ sata@a8000 {
+ status = "okay";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ sata0: sata-port@0 {
+ reg = <0>;
+ };
+
+ sata1: sata-port@1 {
+ reg = <1>;
+ };
+ };
+
+ sata@e0000 {
+ status = "okay";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ sata2: sata-port@0 {
+ reg = <0>;
+ };
+
+ sata3: sata-port@1 {
+ reg = <1>;
+ };
+ };
+
+ sdhci@d8000 {
+ bus-width = <4>;
+ cd-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
+ no-1-8-v;
+ pinctrl-0 = <&microsom_sdhci_pins
+ &helios_sdhci_cd_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+ vmmc = <&reg_3p3v>;
+ wp-inverted;
+ };
+
+ usb@58000 {
+ //vcc-supply = <&reg_5p0v_usb>;
+ usb-phy = <&usb2_phy>;
+ status = "okay";
+ };
+
+ usb3@f0000 {
+ status = "okay";
+ };
+
+ usb3@f8000 {
+ status = "okay";
+ };
+ };
+ };
+};
+
+&i2c0 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&i2c0_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ /*
+ * PCA9655 GPIO expander, up to 1MHz clock.
+ * 0-Board Revision bit 0 #
+ * 1-Board Revision bit 1 #
+ * 5-USB3 overcurrent
+ * 6-USB3 power
+ */
+ expander0: gpio-expander@20 {
+ /*
+ * This is how it should be:
+ * compatible = "onnn,pca9655", "nxp,pca9555";
+ * but you can't do this because of the way I2C works.
+ */
+ compatible = "nxp,pca9555";
+ gpio-controller;
+ #gpio-cells = <2>;
+ reg = <0x20>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pca0_pins>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+
+ board_rev_bit_0 {
+ gpio-hog;
+ gpios = <0 GPIO_ACTIVE_LOW>;
+ input;
+ line-name = "board-rev-0";
+ };
+ board_rev_bit_1 {
+ gpio-hog;
+ gpios = <1 GPIO_ACTIVE_LOW>;
+ input;
+ line-name = "board-rev-1";
+ };
+ usb3_ilimit {
+ gpio-hog;
+ gpios = <5 GPIO_ACTIVE_HIGH>;
+ input;
+ line-name = "usb-overcurrent-status";
+ };
+ };
+
+ temp_sensor: temp@4c {
+ compatible = "ti,lm75";
+ reg = <0x4c>;
+ vcc-supply = <&reg_3p3v>;
+ };
+};
+
+&i2c1 {
+ /*
+ * External I2C Bus for user peripheral
+ */
+ clock-frequency = <400000>;
+ pinctrl-0 = <&helios_i2c1_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&pinctrl {
+ pca0_pins: pca0_pins {
+ marvell,pins = "mpp23";
+ marvell,function = "gpio";
+ };
+ microsom_phy0_int_pins: microsom-phy0-int-pins {
+ marvell,pins = "mpp18";
+ marvell,function = "gpio";
+ };
+ helios_i2c1_pins: i2c1-pins {
+ marvell,pins = "mpp26", "mpp27";
+ marvell,function = "i2c1";
+ };
+ helios_sdhci_cd_pins: helios-sdhci-cd-pins {
+ marvell,pins = "mpp20";
+ marvell,function = "gpio";
+ };
+ helios_led_pins: helios-led-pins {
+ marvell,pins = "mpp24", "mpp25",
+ "mpp49", "mpp50",
+ "mpp52", "mpp53",
+ "mpp54";
+ marvell,function = "gpio";
+ };
+ helios_fan_pins: helios-fan-pins {
+ marvell,pins = "mpp41", "mpp43",
+ "mpp48", "mpp55";
+ marvell,function = "gpio";
+ };
+};

View file

@ -1,5 +1,3 @@
diff --git a/arch/arm/boot/dts/armada-388-helios4.dts b/arch/arm/boot/dts/armada-388-helios4.dts
index 705adfa8c..d5afbfc53 100644
--- a/arch/arm/boot/dts/armada-388-helios4.dts --- a/arch/arm/boot/dts/armada-388-helios4.dts
+++ b/arch/arm/boot/dts/armada-388-helios4.dts +++ b/arch/arm/boot/dts/armada-388-helios4.dts
@@ -84,6 +84,18 @@ @@ -84,6 +84,18 @@

View file

@ -1,8 +1,6 @@
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 61e596650..fdb066e51 100644
--- a/scripts/Makefile.lib --- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib +++ b/scripts/Makefile.lib
@@ -244,6 +244,9 @@ cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \ @@ -244,6 +244,9 @@ cmd_gzip = (cat $(filter-out FORCE,$^) |
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
DTC ?= $(objtree)/scripts/dtc/dtc DTC ?= $(objtree)/scripts/dtc/dtc

View file

@ -1,5 +1,3 @@
diff --git a/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi b/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi
index 3a7f9c1ac..e04790639 100644
--- a/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi --- a/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi
+++ b/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi +++ b/arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi
@@ -94,6 +94,7 @@ @@ -94,6 +94,7 @@

File diff suppressed because it is too large Load diff

View file

@ -1,27 +1,22 @@
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 3216e09..21bce28
--- a/arch/arm64/mm/dma-mapping.c --- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c
@@ -44,7 +44,7 @@ static pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot, @@ -44,7 +44,7 @@ static pgprot_t __get_dma_pgprot(unsigne
static struct gen_pool *atomic_pool; static struct gen_pool *atomic_pool __ro_after_init;
-#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K -#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
+#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_2M +#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_2M
static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE; static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE;
static int __init early_coherent_pool(char *p) static int __init early_coherent_pool(char *p)
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index ada8eb2..8df220f
--- a/arch/arm/mm/dma-mapping.c --- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c
@@ -381,7 +381,7 @@ static void __dma_free_remap(void *cpu_addr, size_t size) @@ -381,7 +381,7 @@ static void __dma_free_remap(void *cpu_a
VM_ARM_DMA_CONSISTENT | VM_USERMAP); VM_ARM_DMA_CONSISTENT | VM_USERMAP);
} }
-#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K -#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
+#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_2M +#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_2M
static struct gen_pool *atomic_pool __ro_after_init; static struct gen_pool *atomic_pool __ro_after_init;
static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE; static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff