improve MMC on AllWinner A64 SoCs, fix RPi3B+ network errors (rhbz 1573261), Fix incorrect colours in uEFI console in Linux

This commit is contained in:
Peter Robinson 2018-06-19 17:25:12 +01:00
parent dfca432980
commit 1ec6d71a02
5 changed files with 91 additions and 259 deletions

View File

@ -0,0 +1,45 @@
From patchwork Mon Jun 18 18:56:06 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [U-Boot,1/1] dwc2 USB controller hangs with lan78xx
X-Patchwork-Submitter: Andrew Thomas <andrew.thomas@oracle.com>
X-Patchwork-Id: 931158
Message-Id: <1529348166-130059-2-git-send-email-andrew.thomas@oracle.com>
To: u-boot@lists.denx.de
Cc: Andrew Thomas <andrew.thomas@oracle.com>
Date: Mon, 18 Jun 2018 11:56:06 -0700
From: Andrew Thomas <andrew.thomas@oracle.com>
List-Id: U-Boot discussion <u-boot.lists.denx.de>
This bug is the combination of dwc2 USB controller and lan78xx
USB ethernet controller, which is the combination in use on
the Raspberry Pi Model 3 B+.
When the host attempts to receive a packet, but a packet has not
arrived, the lan78xx controller responds by setting BIR
(Bulk-In Empty Response) to NAK. Unfortunately, this hangs
the USB controller and requires the USB controller to
be reset.
The fix proposed is to have the lan78xx controller respond
by setting BIR to ZLP.
Signed-off-by: Andrew Thomas <andrew.thomas@oracle.com>
---
drivers/usb/eth/lan78xx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/eth/lan78xx.c b/drivers/usb/eth/lan78xx.c
index c5ff379..e8ee665 100644
--- a/drivers/usb/eth/lan78xx.c
+++ b/drivers/usb/eth/lan78xx.c
@@ -296,7 +296,7 @@ static int lan78xx_basic_reset(struct usb_device *udev,
ret = lan7x_read_reg(udev, LAN78XX_USB_CFG0, &val);
if (ret)
return ret;
- val |= LAN78XX_USB_CFG0_BIR;
+ val &= ~LAN78XX_USB_CFG0_BIR;
return lan7x_write_reg(udev, LAN78XX_USB_CFG0, val);
}

View File

@ -1,122 +0,0 @@
From b2735176dd5378e4279449100673c83b0675e443 Mon Sep 17 00:00:00 2001
From: Peter Robinson <pbrobinson@gmail.com>
Date: Sun, 15 Apr 2018 13:20:05 +0100
Subject: [PATCH 3/3] sunxi: A64/H5 devices: enable usb keyboard support
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
---
configs/a64-olinuxino_defconfig | 2 ++
configs/bananapi_m64_defconfig | 2 ++
configs/nanopi_a64_defconfig | 2 ++
configs/nanopi_neo2_defconfig | 2 ++
configs/nanopi_neo_plus2_defconfig | 2 ++
configs/orangepi_pc2_defconfig | 2 ++
configs/orangepi_win_defconfig | 2 ++
configs/orangepi_zero_plus2_defconfig | 2 ++
configs/pine64_plus_defconfig | 2 ++
configs/sopine_baseboard_defconfig | 2 ++
10 files changed, 20 insertions(+)
diff --git a/configs/a64-olinuxino_defconfig b/configs/a64-olinuxino_defconfig
index cabbba7484..0df218a216 100644
--- a/configs/a64-olinuxino_defconfig
+++ b/configs/a64-olinuxino_defconfig
@@ -14,3 +14,5 @@ CONFIG_SPL=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/bananapi_m64_defconfig b/configs/bananapi_m64_defconfig
index 8679ff5bf4..169c423b6f 100644
--- a/configs/bananapi_m64_defconfig
+++ b/configs/bananapi_m64_defconfig
@@ -15,3 +15,5 @@ CONFIG_SPL=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/nanopi_a64_defconfig b/configs/nanopi_a64_defconfig
index 76a86594f2..58a5bc60dd 100644
--- a/configs/nanopi_a64_defconfig
+++ b/configs/nanopi_a64_defconfig
@@ -13,3 +13,5 @@ CONFIG_SPL=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/nanopi_neo2_defconfig b/configs/nanopi_neo2_defconfig
index 0d6926e9ab..af37f4bee9 100644
--- a/configs/nanopi_neo2_defconfig
+++ b/configs/nanopi_neo2_defconfig
@@ -14,3 +14,5 @@ CONFIG_SPL=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/nanopi_neo_plus2_defconfig b/configs/nanopi_neo_plus2_defconfig
index 975321825c..3e891ab5e8 100644
--- a/configs/nanopi_neo_plus2_defconfig
+++ b/configs/nanopi_neo_plus2_defconfig
@@ -15,3 +15,5 @@ CONFIG_SPL=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/orangepi_pc2_defconfig b/configs/orangepi_pc2_defconfig
index a6777ac4d7..13406ae1d1 100644
--- a/configs/orangepi_pc2_defconfig
+++ b/configs/orangepi_pc2_defconfig
@@ -16,3 +16,5 @@ CONFIG_SPL_SPI_SUNXI=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/orangepi_win_defconfig b/configs/orangepi_win_defconfig
index f21ea328ae..3d5422e63c 100644
--- a/configs/orangepi_win_defconfig
+++ b/configs/orangepi_win_defconfig
@@ -14,3 +14,5 @@ CONFIG_SPL_SPI_SUNXI=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/orangepi_zero_plus2_defconfig b/configs/orangepi_zero_plus2_defconfig
index f8b626e70b..6a4b1992a0 100644
--- a/configs/orangepi_zero_plus2_defconfig
+++ b/configs/orangepi_zero_plus2_defconfig
@@ -16,3 +16,5 @@ CONFIG_SPL=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/pine64_plus_defconfig b/configs/pine64_plus_defconfig
index 520bd21f44..3564816139 100644
--- a/configs/pine64_plus_defconfig
+++ b/configs/pine64_plus_defconfig
@@ -16,3 +16,5 @@ CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
CONFIG_PHY_REALTEK=y
CONFIG_RTL8211E_PINE64_GIGABIT_FIX=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
diff --git a/configs/sopine_baseboard_defconfig b/configs/sopine_baseboard_defconfig
index 8ca43a6eac..fb623a079f 100644
--- a/configs/sopine_baseboard_defconfig
+++ b/configs/sopine_baseboard_defconfig
@@ -20,3 +20,5 @@ CONFIG_SPL_SPI_SUNXI=y
CONFIG_SUN8I_EMAC=y
CONFIG_USB_EHCI_HCD=y
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
+CONFIG_DM_KEYBOARD=y
+CONFIG_USB_KEYBOARD=y
--
2.17.0

View File

@ -1,128 +0,0 @@
From patchwork Wed Mar 21 11:18:58 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: [U-Boot] sunxi: improve throughput in the sunxi_mmc driver
X-Patchwork-Submitter: Maxime Ripard <maxime.ripard@bootlin.com>
X-Patchwork-Id: 888703
X-Patchwork-Delegate: jagannadh.teki@gmail.com
Message-Id: <20180321111858.16576-1-maxime.ripard@bootlin.com>
To: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Mylene Josserand <mylene.josserand@bootlin.com>,
Maxime Ripard <maxime.ripard@bootlin.com>, u-boot@lists.denx.de,
Jagan Teki <jagan@openedev.com>
Date: Wed, 21 Mar 2018 12:18:58 +0100
From: Maxime Ripard <maxime.ripard@bootlin.com>
List-Id: U-Boot discussion <u-boot.lists.denx.de>
From: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Throughput tests have shown the sunxi_mmc driver to take over 10s to
read 10MB from a fast eMMC device due to excessive delays in polling
loops.
This commit restructures the main polling loops to use get_timer(...)
to determine whether a (millisecond) timeout has expired. We choose
not to use the wait_bit function, as we don't need interruptability
with ctrl-c and have at least one case where two bits (one for an
error condition and another one for completion) need to be read and
using wait_bit would have not added to the clarity.
The observed speedup in testing on a A31 is greater than 10x (e.g. a
10MB write decreases from 9.302s to 0.884s).
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Tested-by: Mylène Josserand <mylene.josserand@bootlin.com>
---
drivers/mmc/sunxi_mmc.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index 4edb4be46c81..d36c1689e7b1 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -187,15 +187,16 @@ static int mmc_update_clk(struct sunxi_mmc_priv *priv)
{
unsigned int cmd;
unsigned timeout_msecs = 2000;
+ unsigned long start = get_timer(0);
cmd = SUNXI_MMC_CMD_START |
SUNXI_MMC_CMD_UPCLK_ONLY |
SUNXI_MMC_CMD_WAIT_PRE_OVER;
+
writel(cmd, &priv->reg->cmd);
while (readl(&priv->reg->cmd) & SUNXI_MMC_CMD_START) {
- if (!timeout_msecs--)
+ if (get_timer(start) > timeout_msecs)
return -1;
- udelay(1000);
}
/* clock update sets various irq status bits, clear these */
@@ -276,18 +277,21 @@ static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc,
unsigned i;
unsigned *buff = (unsigned int *)(reading ? data->dest : data->src);
unsigned byte_cnt = data->blocksize * data->blocks;
- unsigned timeout_usecs = (byte_cnt >> 8) * 1000;
- if (timeout_usecs < 2000000)
- timeout_usecs = 2000000;
+ unsigned timeout_msecs = byte_cnt >> 8;
+ unsigned long start;
+
+ if (timeout_msecs < 2000)
+ timeout_msecs = 2000;
/* Always read / write data through the CPU */
setbits_le32(&priv->reg->gctrl, SUNXI_MMC_GCTRL_ACCESS_BY_AHB);
+ start = get_timer(0);
+
for (i = 0; i < (byte_cnt >> 2); i++) {
while (readl(&priv->reg->status) & status_bit) {
- if (!timeout_usecs--)
+ if (get_timer(start) > timeout_msecs)
return -1;
- udelay(1);
}
if (reading)
@@ -303,16 +307,16 @@ static int mmc_rint_wait(struct sunxi_mmc_priv *priv, struct mmc *mmc,
uint timeout_msecs, uint done_bit, const char *what)
{
unsigned int status;
+ unsigned long start = get_timer(0);
do {
status = readl(&priv->reg->rint);
- if (!timeout_msecs-- ||
+ if ((get_timer(start) > timeout_msecs) ||
(status & SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT)) {
debug("%s timeout %x\n", what,
status & SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT);
return -ETIMEDOUT;
}
- udelay(1000);
} while (!(status & done_bit));
return 0;
@@ -404,15 +408,16 @@ static int sunxi_mmc_send_cmd_common(struct sunxi_mmc_priv *priv,
}
if (cmd->resp_type & MMC_RSP_BUSY) {
+ unsigned long start = get_timer(0);
timeout_msecs = 2000;
+
do {
status = readl(&priv->reg->status);
- if (!timeout_msecs--) {
+ if (get_timer(start) > timeout_msecs) {
debug("busy timeout\n");
error = -ETIMEDOUT;
goto out;
}
- udelay(1000);
} while (status & SUNXI_MMC_STATUS_CARD_DATA_BUSY);
}

View File

@ -24,6 +24,7 @@ Patch4: rk33xx-make_fit_atf-fix.patch
Patch5: rk33xx-enable-make-itb.patch
Patch6: net-Only-access-network-devices-after-init.patch
Patch7: uefi-fixes.patch
Patch8: uefi-efi_loader-Fix-GOP-32bpp-exposure.patch
# Board fixes and enablement
Patch10: dragonboard-fixes.patch
@ -31,15 +32,12 @@ Patch11: BeagleBoard.org-PocketBeagle.patch
Patch12: mx6cuboxi-add-support-for-detecting-Revision-1.5-SoM.patch
Patch13: rpi-3-plus-support.patch
Patch14: rpi-Adjust-fdt_addr_r-to-a-sane-address.patch
Patch15: dwc2-USB-controller-hangs-with-lan78xx.patch
Patch16: mmc-use-core-clock-frequency-in-bcm2835-sdhost.patch
Patch19: mmc-mv_sdhci-zero-out-sdhci_host-structure.patch
Patch20: mvneta-support-setting-hardware-address.patch
Patch21: sunxi-improve-throughput-in-the-sunxi_mmc-driver.patch
Patch22: sunxi-Add-fix-for-Pine64-gigabit-throughput-issues.patch
Patch23: sunxi-A64-H5-devices-enable-usb-keyboard-support.patch
Patch24: sunxi-fix-eMMC-stability-issues-on-A64.patch
# Patch99: mvebu-enable-generic-distro-boot-config.patch
Patch17: mmc-mv_sdhci-zero-out-sdhci_host-structure.patch
Patch18: mvneta-support-setting-hardware-address.patch
Patch19: sunxi-Add-fix-for-Pine64-gigabit-throughput-issues.patch
Patch20: sunxi-fix-eMMC-stability-issues-on-A64.patch
BuildRequires: bc
BuildRequires: dtc
@ -298,8 +296,10 @@ cp -p board/warp7/README builds/docs/README.warp7
%endif
%changelog
* Mon Apr 30 2018 Peter Robinson <pbrobinson@fedoraproject.org> 2018.03-6
* Tue Jun 19 2018 Peter Robinson <pbrobinson@fedoraproject.org> 2018.03-6
- Patch to improve MMC on AllWinner A64 SoCs
- Patch to fix RPi3B+ network errors (rhbz 1573261)
- Fix incorrect colours in uEFI console in Linux
* Sun Apr 15 2018 Peter Robinson <pbrobinson@fedoraproject.org> 2018.03-5
- Raspberry Pi fixes

View File

@ -0,0 +1,37 @@
From patchwork Tue Jun 19 11:47:01 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [U-Boot] efi_loader: Fix GOP 32bpp exposure
X-Patchwork-Submitter: Alexander Graf <agraf@suse.de>
X-Patchwork-Id: 931555
Message-Id: <20180619114701.87820-1-agraf@suse.de>
To: u-boot@lists.denx.de
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>, Fabian Vogt <fvogt@suse.com>
Date: Tue, 19 Jun 2018 13:47:01 +0200
From: Alexander Graf <agraf@suse.de>
List-Id: U-Boot discussion <u-boot.lists.denx.de>
We store pixels as BGRA in memory, as can be seen from struct efi_gop_pixel.
So we need to expose the same format to UEFI payloads to actually have them
use the correct colors.
Reported-by: Fabian Vogt <fvogt@suse.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
lib/efi_loader/efi_gop.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
index 1afe8418e1..3a36bbcbfa 100644
--- a/lib/efi_loader/efi_gop.c
+++ b/lib/efi_loader/efi_gop.c
@@ -472,7 +472,7 @@ efi_status_t efi_gop_register(void)
gopobj->info.version = 0;
gopobj->info.width = col;
gopobj->info.height = row;
- gopobj->info.pixel_format = EFI_GOT_RGBA8;
+ gopobj->info.pixel_format = EFI_GOT_BGRA8;
gopobj->info.pixels_per_scanline = col;
gopobj->bpix = bpix;