diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86')
36 files changed, 2655 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-mmc-sdhci-acpi-fix-for-tuning-issue-in-E3000.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-mmc-sdhci-acpi-fix-for-tuning-issue-in-E3000.patch new file mode 100644 index 00000000..5e7e8a07 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-mmc-sdhci-acpi-fix-for-tuning-issue-in-E3000.patch @@ -0,0 +1,45 @@ +From 6943e68cd564d7197a2c914bc12c037ca138adad Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Tue, 9 Feb 2021 23:44:03 +0530 +Subject: [PATCH] mmc: sdhci-acpi: fix for tuning issue in E3000 + + HS400 mode has tuning issue in E3000, The fix avoids swutching +to HS from HS200 speed. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +Signed-off-by: Rahul Kumar <rahul.kumar1@amd.com> +--- + drivers/mmc/host/sdhci-acpi.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c +index b2d924c5e82e..9622fa3108d1 100644 +--- a/drivers/mmc/host/sdhci-acpi.c ++++ b/drivers/mmc/host/sdhci-acpi.c +@@ -582,6 +582,14 @@ static void amd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) + unsigned int old_timing = host->timing; + u16 val; + ++ if (host->quirks2 & SDHCI_QUIRK2_TUNING_WORK_AROUND) { ++ if (mmc->ios.clock == 52000000 && host->clock == 200000000) ++ return; ++ ++ if (mmc->ios.timing == 1 && host->timing == 9) ++ return; ++ } ++ + sdhci_set_ios(mmc, ios); + + if (old_timing != host->timing && amd_host->tuned_clock) { +@@ -658,6 +666,8 @@ static int sdhci_acpi_emmc_amd_probe_slot(struct platform_device *pdev, + (host->mmc->caps & MMC_CAP_1_8V_DDR)) + host->mmc->caps2 = MMC_CAP2_HS400_1_8V; + ++ host->quirks2 |= SDHCI_QUIRK2_TUNING_WORK_AROUND; ++ + host->mmc_host_ops.select_drive_strength = amd_select_drive_strength; + host->mmc_host_ops.set_ios = amd_set_ios; + host->mmc_host_ops.execute_tuning = amd_sdhci_execute_tuning; +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-spi-spi-amd-Add-AMD-SPI-controller-driver-support.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-spi-spi-amd-Add-AMD-SPI-controller-driver-support.patch new file mode 100644 index 00000000..65e4aa9a --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0001-spi-spi-amd-Add-AMD-SPI-controller-driver-support.patch @@ -0,0 +1,397 @@ +From 8bc785f4b21ad0d1bb660a3b20750835ef0f47a0 Mon Sep 17 00:00:00 2001 +From: Sanjay R Mehta <sanju.mehta@amd.com> +Date: Sat, 25 Apr 2020 14:59:48 -0500 +Subject: [PATCH 01/21] spi: spi-amd: Add AMD SPI controller driver support + +This driver supports SPI Controller for AMD SOCs.This driver +supports SPI operations using FIFO mode of transfer. + +Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> +Signed-off-by: Mark Brown <broonie@kernel.org> +Link: https://lore.kernel.org/r/1587844788-33997-1-git-send-email-sanju.mehta@amd.com +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/Kconfig | 6 + + drivers/spi/Makefile | 1 + + drivers/spi/spi-amd.c | 333 ++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 340 insertions(+) + mode change 100644 => 100755 drivers/spi/Kconfig + mode change 100644 => 100755 drivers/spi/Makefile + create mode 100755 drivers/spi/spi-amd.c + +diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig +old mode 100644 +new mode 100755 +index 5bf754208777..6404cacb377b +--- a/drivers/spi/Kconfig ++++ b/drivers/spi/Kconfig +@@ -876,6 +876,12 @@ config SPI_ZYNQMP_GQSPI + help + Enables Xilinx GQSPI controller driver for Zynq UltraScale+ MPSoC. + ++config SPI_AMD ++ tristate "AMD SPI controller" ++ depends on SPI_MASTER || COMPILE_TEST ++ help ++ Enables SPI controller driver for AMD SoC. ++ + # + # Add new SPI master controllers in alphabetical order above this line + # +diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile +old mode 100644 +new mode 100755 +index bb49c9e6d0a0..7af5aca3ed04 +--- a/drivers/spi/Makefile ++++ b/drivers/spi/Makefile +@@ -122,6 +122,7 @@ obj-$(CONFIG_SPI_XLP) += spi-xlp.o + obj-$(CONFIG_SPI_XTENSA_XTFPGA) += spi-xtensa-xtfpga.o + obj-$(CONFIG_SPI_ZYNQ_QSPI) += spi-zynq-qspi.o + obj-$(CONFIG_SPI_ZYNQMP_GQSPI) += spi-zynqmp-gqspi.o ++obj-$(CONFIG_SPI_AMD) += spi-amd.o + + # SPI slave protocol handlers + obj-$(CONFIG_SPI_SLAVE_TIME) += spi-slave-time.o +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +new file mode 100755 +index 000000000000..0d9debe1386e +--- /dev/null ++++ b/drivers/spi/spi-amd.c +@@ -0,0 +1,333 @@ ++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause ++// ++// AMD SPI controller driver ++// ++// Copyright (c) 2020, Advanced Micro Devices, Inc. ++// ++// Author: Sanjay R Mehta <sanju.mehta@amd.com> ++ ++#include <linux/acpi.h> ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/platform_device.h> ++#include <linux/delay.h> ++#include <linux/spi/spi.h> ++ ++#define AMD_SPI_CTRL0_REG 0x00 ++#define AMD_SPI_EXEC_CMD BIT(16) ++#define AMD_SPI_FIFO_CLEAR BIT(20) ++#define AMD_SPI_BUSY BIT(31) ++ ++#define AMD_SPI_OPCODE_MASK 0xFF ++ ++#define AMD_SPI_ALT_CS_REG 0x1D ++#define AMD_SPI_ALT_CS_MASK 0x3 ++ ++#define AMD_SPI_FIFO_BASE 0x80 ++#define AMD_SPI_TX_COUNT_REG 0x48 ++#define AMD_SPI_RX_COUNT_REG 0x4B ++#define AMD_SPI_STATUS_REG 0x4C ++ ++#define AMD_SPI_MEM_SIZE 200 ++ ++/* M_CMD OP codes for SPI */ ++#define AMD_SPI_XFER_TX 1 ++#define AMD_SPI_XFER_RX 2 ++ ++struct amd_spi { ++ void __iomem *io_remap_addr; ++ unsigned long io_base_addr; ++ u32 rom_addr; ++ struct spi_master *master; ++ u8 chip_select; ++}; ++ ++static inline u8 amd_spi_readreg8(struct spi_master *master, int idx) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ ++ return ioread8((u8 __iomem *)amd_spi->io_remap_addr + idx); ++} ++ ++static inline void amd_spi_writereg8(struct spi_master *master, int idx, ++ u8 val) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ ++ iowrite8(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx)); ++} ++ ++static inline void amd_spi_setclear_reg8(struct spi_master *master, int idx, ++ u8 set, u8 clear) ++{ ++ u8 tmp = amd_spi_readreg8(master, idx); ++ ++ tmp = (tmp & ~clear) | set; ++ amd_spi_writereg8(master, idx, tmp); ++} ++ ++static inline u32 amd_spi_readreg32(struct spi_master *master, int idx) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ ++ return ioread32((u8 __iomem *)amd_spi->io_remap_addr + idx); ++} ++ ++static inline void amd_spi_writereg32(struct spi_master *master, int idx, ++ u32 val) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ ++ iowrite32(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx)); ++} ++ ++static inline void amd_spi_setclear_reg32(struct spi_master *master, int idx, ++ u32 set, u32 clear) ++{ ++ u32 tmp = amd_spi_readreg32(master, idx); ++ ++ tmp = (tmp & ~clear) | set; ++ amd_spi_writereg32(master, idx, tmp); ++} ++ ++static void amd_spi_select_chip(struct spi_master *master) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ u8 chip_select = amd_spi->chip_select; ++ ++ amd_spi_setclear_reg8(master, AMD_SPI_ALT_CS_REG, chip_select, ++ AMD_SPI_ALT_CS_MASK); ++} ++ ++static void amd_spi_clear_fifo_ptr(struct spi_master *master) ++{ ++ amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, AMD_SPI_FIFO_CLEAR, ++ AMD_SPI_FIFO_CLEAR); ++} ++ ++static void amd_spi_set_opcode(struct spi_master *master, u8 cmd_opcode) ++{ ++ amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, cmd_opcode, ++ AMD_SPI_OPCODE_MASK); ++} ++ ++static inline void amd_spi_set_rx_count(struct spi_master *master, ++ u8 rx_count) ++{ ++ amd_spi_setclear_reg8(master, AMD_SPI_RX_COUNT_REG, rx_count, 0xff); ++} ++ ++static inline void amd_spi_set_tx_count(struct spi_master *master, ++ u8 tx_count) ++{ ++ amd_spi_setclear_reg8(master, AMD_SPI_TX_COUNT_REG, tx_count, 0xff); ++} ++ ++static inline int amd_spi_busy_wait(struct amd_spi *amd_spi) ++{ ++ bool spi_busy; ++ int timeout = 100000; ++ ++ /* poll for SPI bus to become idle */ ++ spi_busy = (ioread32((u8 __iomem *)amd_spi->io_remap_addr + ++ AMD_SPI_CTRL0_REG) & AMD_SPI_BUSY) == AMD_SPI_BUSY; ++ while (spi_busy) { ++ usleep_range(10, 20); ++ if (timeout-- < 0) ++ return -ETIMEDOUT; ++ ++ spi_busy = (ioread32((u8 __iomem *)amd_spi->io_remap_addr + ++ AMD_SPI_CTRL0_REG) & AMD_SPI_BUSY) == AMD_SPI_BUSY; ++ } ++ ++ return 0; ++} ++ ++static void amd_spi_execute_opcode(struct spi_master *master) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ ++ /* Set ExecuteOpCode bit in the CTRL0 register */ ++ amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, AMD_SPI_EXEC_CMD, ++ AMD_SPI_EXEC_CMD); ++ ++ amd_spi_busy_wait(amd_spi); ++} ++ ++static int amd_spi_master_setup(struct spi_device *spi) ++{ ++ struct spi_master *master = spi->master; ++ ++ amd_spi_clear_fifo_ptr(master); ++ ++ return 0; ++} ++ ++static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi, ++ struct spi_message *message) ++{ ++ struct spi_master *master = amd_spi->master; ++ struct spi_transfer *xfer = NULL; ++ u8 cmd_opcode, opcode = 0; ++ u8 *buf = NULL; ++ u32 m_cmd = 0; ++ u32 i = 0; ++ u32 tx_len = 0, rx_len = 0; ++ ++ list_for_each_entry(xfer, &message->transfers, ++ transfer_list) { ++ if (xfer->rx_buf) ++ m_cmd = AMD_SPI_XFER_RX; ++ if (xfer->tx_buf) ++ m_cmd = AMD_SPI_XFER_TX; ++ ++ if (m_cmd & AMD_SPI_XFER_TX) { ++ buf = (u8 *)xfer->tx_buf; ++ tx_len = xfer->len - 1; ++ cmd_opcode = *(u8 *)xfer->tx_buf; ++ buf++; ++ amd_spi_set_opcode(master, cmd_opcode); ++ ++ /* Write data into the FIFO. */ ++ for (i = 0; i < tx_len; i++) { ++ iowrite8(buf[i], ++ ((u8 __iomem *)amd_spi->io_remap_addr + ++ AMD_SPI_FIFO_BASE + i)); ++ } ++ ++ amd_spi_set_tx_count(master, tx_len); ++ amd_spi_clear_fifo_ptr(master); ++ /* Execute command */ ++ amd_spi_execute_opcode(master); ++ } ++ if (m_cmd & AMD_SPI_XFER_RX) { ++ /* ++ * Store no. of bytes to be received from ++ * FIFO ++ */ ++ rx_len = xfer->len; ++ buf = (u8 *)xfer->rx_buf; ++ amd_spi_set_rx_count(master, rx_len); ++ amd_spi_clear_fifo_ptr(master); ++ /* Execute command */ ++ amd_spi_execute_opcode(master); ++ /* Read data from FIFO to receive buffer */ ++ for (i = 0; i < rx_len; i++) ++ buf[i] = amd_spi_readreg8(master, ++ AMD_SPI_FIFO_BASE + ++ tx_len + i); ++ } ++ } ++ ++ /* Update statistics */ ++ message->actual_length = tx_len + rx_len + 1; ++ /* complete the transaction */ ++ message->status = 0; ++ spi_finalize_current_message(master); ++ ++ return 0; ++} ++ ++static int amd_spi_master_transfer(struct spi_master *master, ++ struct spi_message *msg) ++{ ++ struct amd_spi *amd_spi = spi_master_get_devdata(master); ++ struct spi_device *spi = msg->spi; ++ ++ amd_spi->chip_select = spi->chip_select; ++ amd_spi_select_chip(master); ++ ++ /* ++ * Extract spi_transfers from the spi message and ++ * program the controller. ++ */ ++ amd_spi_fifo_xfer(amd_spi, msg); ++ ++ return 0; ++} ++ ++static int amd_spi_probe(struct platform_device *pdev) ++{ ++ struct device *dev = &pdev->dev; ++ struct spi_master *master; ++ struct amd_spi *amd_spi; ++ struct resource *res; ++ int err = 0; ++ ++ /* Allocate storage for spi_master and driver private data */ ++ master = spi_alloc_master(dev, sizeof(struct amd_spi)); ++ if (!master) { ++ dev_err(dev, "Error allocating SPI master\n"); ++ return -ENOMEM; ++ } ++ ++ amd_spi = spi_master_get_devdata(master); ++ amd_spi->master = master; ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ amd_spi->io_remap_addr = devm_ioremap_resource(&pdev->dev, res); ++ ++ if (!amd_spi->io_remap_addr) { ++ dev_err(dev, "error %d ioremap of SPI registers failed\n", err); ++ err = -ENOMEM; ++ goto err_free_master; ++ } ++ dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr); ++ ++ /* Initialize the spi_master fields */ ++ master->bus_num = 0; ++ master->num_chipselect = 4; ++ master->mode_bits = 0; ++ master->flags = SPI_MASTER_HALF_DUPLEX; ++ master->setup = amd_spi_master_setup; ++ master->transfer_one_message = amd_spi_master_transfer; ++ ++ /* Register the controller with SPI framework */ ++ err = spi_register_master(master); ++ if (err) { ++ dev_err(dev, "error %d registering SPI controller\n", err); ++ goto err_iounmap; ++ } ++ platform_set_drvdata(pdev, amd_spi); ++ ++ return 0; ++ ++err_iounmap: ++ iounmap(amd_spi->io_remap_addr); ++err_free_master: ++ spi_master_put(master); ++ ++ return 0; ++} ++ ++static int amd_spi_remove(struct platform_device *pdev) ++{ ++ struct amd_spi *amd_spi = platform_get_drvdata(pdev); ++ ++ spi_unregister_master(amd_spi->master); ++ spi_master_put(amd_spi->master); ++ platform_set_drvdata(pdev, NULL); ++ ++ return 0; ++} ++ ++static const struct acpi_device_id spi_acpi_match[] = { ++ { "AMDI0061", 0 }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(acpi, spi_acpi_match); ++ ++static struct platform_driver amd_spi_driver = { ++ .driver = { ++ .name = "amd_spi", ++ .acpi_match_table = ACPI_PTR(spi_acpi_match), ++ }, ++ .probe = amd_spi_probe, ++ .remove = amd_spi_remove, ++}; ++ ++module_platform_driver(amd_spi_driver); ++ ++MODULE_LICENSE("Dual BSD/GPL"); ++MODULE_AUTHOR("Sanjay Mehta <sanju.mehta@amd.com>"); ++MODULE_DESCRIPTION("AMD SPI Master Controller Driver"); +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0002-usb-xhci-Add-LPM-support-to-AMD-xhci-controller.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0002-usb-xhci-Add-LPM-support-to-AMD-xhci-controller.patch new file mode 100644 index 00000000..abacbcbf --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0002-usb-xhci-Add-LPM-support-to-AMD-xhci-controller.patch @@ -0,0 +1,32 @@ +From bbc77f325f5b9bba1836cf5e25e8ad5529397807 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Fri, 24 Jul 2020 15:43:52 +0530 +Subject: [PATCH 02/21] usb: xhci: Add LPM support to AMD xhci controller + +xHCI quirk for LPM and Runtime power management for AMD Raven xHCI + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/usb/host/xhci-pci.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c +index bbd616324faa..c69e7d46799c 100644 +--- a/drivers/usb/host/xhci-pci.c ++++ b/drivers/usb/host/xhci-pci.c +@@ -152,6 +152,12 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) + if (pdev->vendor == PCI_VENDOR_ID_AMD) + xhci->quirks |= XHCI_TRUST_TX_LENGTH; + ++ if (pdev->vendor == PCI_VENDOR_ID_AMD && ++ (pdev->device == 0x15e0 || pdev->device == 0x15e1 || pdev->device == 0x15e5)) { ++ xhci->quirks |= XHCI_LPM_SUPPORT; ++ xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW; ++ } ++ + if ((pdev->vendor == PCI_VENDOR_ID_AMD) && + ((pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4) || + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_3) || +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0003-amd-xgbe-fix-for-the-crash-which-happens-during-SFP-.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0003-amd-xgbe-fix-for-the-crash-which-happens-during-SFP-.patch new file mode 100644 index 00000000..7135fab9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0003-amd-xgbe-fix-for-the-crash-which-happens-during-SFP-.patch @@ -0,0 +1,77 @@ +From 60c3eb8f81b87dbacb1b9adadce3fbe08d8c1ba8 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Thu, 13 Feb 2020 15:26:20 +0530 +Subject: [PATCH 03/21] amd-xgbe fix for the crash which happens during SFP + hotplug + + INFO: task kworker/u32:3:238 blocked for more than 120 seconds. + Tainted: G E 5.4.2-sfp-fix+ #58 + "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. + kworker/u32:3 D 0 238 2 0x80004000 + Workqueue: enp2s0f1 xgbe_service [amd_xgbe] + Call Trace: + ? __schedule+0x293/0x700 + schedule+0x2f/0xa0 + schedule_preempt_disabled+0xa/0x10 + __mutex_lock.isra.9+0x26d/0x4e0 + ? xgbe_phy_get_comm_ownership+0x1f/0x110 [amd_xgbe] + xgbe_phy_get_comm_ownership+0x1f/0x110 [amd_xgbe] + xgbe_phy_mii_read+0x28/0xb0 [amd_xgbe] + ? kernfs_put+0xe9/0x190 + __mdiobus_read+0x3b/0xd0 + __phy_modify_changed+0x2b/0x80 + phy_modify+0x38/0x60 + phy_suspend+0x84/0xc0 + phy_detach+0x5e/0x120 + xgbe_phy_free_phy_device.isra.22+0x1d/0x50 [amd_xgbe] + xgbe_phy_sfp_mod_absent.isra.25+0xe/0x50 [amd_xgbe] + xgbe_phy_sfp_detect+0x16a/0x9b0 [amd_xgbe] + ? xgbe_phy_link_status+0x10a/0x490 [amd_xgbe] + xgbe_phy_link_status+0x10a/0x490 [amd_xgbe] + xgbe_phy_status+0x57/0x380 [amd_xgbe] + process_one_work+0x1f4/0x3e0 + worker_thread+0x2d/0x3e0 + ? process_one_work+0x3e0/0x3e0 + kthread+0x113/0x130 + ? kthread_park+0x90/0x90 + ret_from_fork+0x22/0x40 + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index 128cd648ba99..fcb3a06fc70f 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -1279,7 +1279,7 @@ static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata) + + memcpy(&phy_data->sfp_eeprom, &sfp_eeprom, sizeof(sfp_eeprom)); + +- xgbe_phy_free_phy_device(pdata); ++ + } else { + phy_data->sfp_changed = 0; + } +@@ -1316,7 +1316,6 @@ static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata) + { + struct xgbe_phy_data *phy_data = pdata->phy_data; + +- xgbe_phy_free_phy_device(pdata); + + phy_data->sfp_mod_absent = 1; + phy_data->sfp_phy_avail = 0; +@@ -1368,6 +1367,9 @@ static void xgbe_phy_sfp_detect(struct xgbe_prv_data *pdata) + xgbe_phy_sfp_phy_settings(pdata); + + xgbe_phy_put_comm_ownership(pdata); ++ ++ if((phy_data->sfp_mod_absent) || (phy_data->sfp_changed)) ++ xgbe_phy_free_phy_device(pdata); + } + + static int xgbe_phy_module_eeprom(struct xgbe_prv_data *pdata, +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0004-spi-spi-amd-fix-warning.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0004-spi-spi-amd-fix-warning.patch new file mode 100644 index 00000000..d42090d8 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0004-spi-spi-amd-fix-warning.patch @@ -0,0 +1,32 @@ +From 299b3d7816c818651bdd1b9f3be73c7aa92228cf Mon Sep 17 00:00:00 2001 +From: Sanjay R Mehta <sanju.mehta@amd.com> +Date: Mon, 27 Apr 2020 23:56:41 -0500 +Subject: [PATCH 04/21] spi: spi-amd: fix warning + +remove unused variable "opcode" + +Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> +Signed-off-by: Mark Brown <broonie@kernel.org> +Link: https://lore.kernel.org/r/1588049801-37995-1-git-send-email-sanju.mehta@amd.com +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index 0d9debe1386e..c5a16dd44fa3 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -168,7 +168,7 @@ static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi, + { + struct spi_master *master = amd_spi->master; + struct spi_transfer *xfer = NULL; +- u8 cmd_opcode, opcode = 0; ++ u8 cmd_opcode; + u8 *buf = NULL; + u32 m_cmd = 0; + u32 i = 0; +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0005-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0005-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch new file mode 100644 index 00000000..b399de63 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0005-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch @@ -0,0 +1,32 @@ +From 6b2a531663d7ef38c935c65e36def871a135c64d Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Sun, 12 Apr 2020 20:49:35 +0530 +Subject: [PATCH 05/21] amd-xgbe Fix NETDEV WATCHDOG: transmit queue timed out + +netif_carrier_off() called immediately after netif_tx_stop_all_queues() + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 3 +++ + 1 file changed, 3 insertions(+) + mode change 100644 => 100755 drivers/net/ethernet/amd/xgbe/xgbe-drv.c + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +old mode 100644 +new mode 100755 +index 3bd20f765120..1ad361644245 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +@@ -1443,6 +1443,9 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) + return; + + netif_tx_stop_all_queues(netdev); ++ /* Bug fix to crash while resetting the port */ ++ netif_carrier_off(pdata->netdev); ++ netif_dbg(pdata, link, pdata->netdev," netif_carrier_off is doing before stopping PHY \n"); + + xgbe_stop_timers(pdata); + flush_workqueue(pdata->dev_workqueue); +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0006-spi-amd-Fix-duplicate-iounmap-in-error-path.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0006-spi-amd-Fix-duplicate-iounmap-in-error-path.patch new file mode 100644 index 00000000..a06c68be --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0006-spi-amd-Fix-duplicate-iounmap-in-error-path.patch @@ -0,0 +1,41 @@ +From 2d846fc42efeab7c963e723e69ab03ed65d8d90f Mon Sep 17 00:00:00 2001 +From: Lukas Wunner <lukas@wunner.de> +Date: Mon, 4 May 2020 13:12:01 +0200 +Subject: [PATCH 06/21] spi: amd: Fix duplicate iounmap in error path + +The AMD SPI driver uses devm_ioremap_resource() to map its registers, so +they're automatically unmapped via device_release() when the last ref on +the SPI controller is dropped. The additional iounmap() in the ->probe() +error path is thus unnecessary. + +Signed-off-by: Lukas Wunner <lukas@wunner.de> +Link: https://lore.kernel.org/r/497cc38ae2beb7900ae05a1463eb83ff96e2770e.1588590210.git.lukas@wunner.de +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index c5a16dd44fa3..fe088ef9752f 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -286,14 +286,12 @@ static int amd_spi_probe(struct platform_device *pdev) + err = spi_register_master(master); + if (err) { + dev_err(dev, "error %d registering SPI controller\n", err); +- goto err_iounmap; ++ goto err_free_master; + } + platform_set_drvdata(pdev, amd_spi); + + return 0; + +-err_iounmap: +- iounmap(amd_spi->io_remap_addr); + err_free_master: + spi_master_put(master); + +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0007-spi-amd-Pass-probe-errors-back-to-driver-core.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0007-spi-amd-Pass-probe-errors-back-to-driver-core.patch new file mode 100644 index 00000000..2352a9bb --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0007-spi-amd-Pass-probe-errors-back-to-driver-core.patch @@ -0,0 +1,32 @@ +From 0199162e835d63769a67215407b95dcfa6203762 Mon Sep 17 00:00:00 2001 +From: Lukas Wunner <lukas@wunner.de> +Date: Mon, 4 May 2020 13:12:02 +0200 +Subject: [PATCH 07/21] spi: amd: Pass probe errors back to driver core + +If probing fails, the AMD SPI driver pretends success to the driver core +by returning 0. Return the errno instead. + +Signed-off-by: Lukas Wunner <lukas@wunner.de> +Link: https://lore.kernel.org/r/689f29a359718dab4f5de9ee66c02ea97b3bd9e8.1588590210.git.lukas@wunner.de +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index fe088ef9752f..bafdb6249824 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -295,7 +295,7 @@ static int amd_spi_probe(struct platform_device *pdev) + err_free_master: + spi_master_put(master); + +- return 0; ++ return err; + } + + static int amd_spi_remove(struct platform_device *pdev) +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0008-spi-amd-Drop-duplicate-driver-data-assignments.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0008-spi-amd-Drop-duplicate-driver-data-assignments.patch new file mode 100644 index 00000000..70ec6382 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0008-spi-amd-Drop-duplicate-driver-data-assignments.patch @@ -0,0 +1,41 @@ +From 9d509fee50d4b3fdf6f3a2f1a6ad2081073aebb5 Mon Sep 17 00:00:00 2001 +From: Lukas Wunner <lukas@wunner.de> +Date: Mon, 4 May 2020 13:12:03 +0200 +Subject: [PATCH 08/21] spi: amd: Drop duplicate driver data assignments + +The AMD SPI driver calls platform_set_drvdata() on probe even though +it's already been set by __spi_alloc_controller(). Likewise, it calls +platform_set_drvdata() on remove even though it's going to be set by +__device_release_driver(). Drop the duplicate assignments. + +Signed-off-by: Lukas Wunner <lukas@wunner.de> +Link: https://lore.kernel.org/r/499f8ad4759c2ff0f586e0459fb9a293faecff6d.1588590210.git.lukas@wunner.de +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index bafdb6249824..f8d008ea112d 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -288,7 +288,6 @@ static int amd_spi_probe(struct platform_device *pdev) + dev_err(dev, "error %d registering SPI controller\n", err); + goto err_free_master; + } +- platform_set_drvdata(pdev, amd_spi); + + return 0; + +@@ -304,7 +303,6 @@ static int amd_spi_remove(struct platform_device *pdev) + + spi_unregister_master(amd_spi->master); + spi_master_put(amd_spi->master); +- platform_set_drvdata(pdev, NULL); + + return 0; + } +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0009-spi-amd-Fix-refcount-underflow-on-remove.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0009-spi-amd-Fix-refcount-underflow-on-remove.patch new file mode 100644 index 00000000..5344b1d6 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0009-spi-amd-Fix-refcount-underflow-on-remove.patch @@ -0,0 +1,63 @@ +From 2cbb984d07b92762a7e1d32ffbbb965849268cc1 Mon Sep 17 00:00:00 2001 +From: Lukas Wunner <lukas@wunner.de> +Date: Mon, 4 May 2020 13:12:04 +0200 +Subject: [PATCH 09/21] spi: amd: Fix refcount underflow on remove + +The AMD SPI driver calls spi_master_put() in its ->remove() hook even +though the preceding call to spi_unregister_master() already drops a +ref, thus leading to a refcount underflow. Drop the superfluous call +to spi_master_put(). + +This only leaves the call to spi_unregister_master() in the ->remove() +hook, so it's safe to change the ->probe() hook to use the devm version +of spi_register_master() and drop the ->remove() hook altogether. + +Signed-off-by: Lukas Wunner <lukas@wunner.de> +Link: https://lore.kernel.org/r/5e53ccdf1eecd4e015dba99d0d77389107f8a2e3.1588590210.git.lukas@wunner.de +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 13 +------------ + 1 file changed, 1 insertion(+), 12 deletions(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index f8d008ea112d..489a95fff49e 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -283,7 +283,7 @@ static int amd_spi_probe(struct platform_device *pdev) + master->transfer_one_message = amd_spi_master_transfer; + + /* Register the controller with SPI framework */ +- err = spi_register_master(master); ++ err = devm_spi_register_master(dev, master); + if (err) { + dev_err(dev, "error %d registering SPI controller\n", err); + goto err_free_master; +@@ -297,16 +297,6 @@ static int amd_spi_probe(struct platform_device *pdev) + return err; + } + +-static int amd_spi_remove(struct platform_device *pdev) +-{ +- struct amd_spi *amd_spi = platform_get_drvdata(pdev); +- +- spi_unregister_master(amd_spi->master); +- spi_master_put(amd_spi->master); +- +- return 0; +-} +- + static const struct acpi_device_id spi_acpi_match[] = { + { "AMDI0061", 0 }, + {}, +@@ -319,7 +309,6 @@ static struct platform_driver amd_spi_driver = { + .acpi_match_table = ACPI_PTR(spi_acpi_match), + }, + .probe = amd_spi_probe, +- .remove = amd_spi_remove, + }; + + module_platform_driver(amd_spi_driver); +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0010-spi-amd-Drop-superfluous-member-from-struct-amd_spi.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0010-spi-amd-Drop-superfluous-member-from-struct-amd_spi.patch new file mode 100644 index 00000000..902e8cda --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0010-spi-amd-Drop-superfluous-member-from-struct-amd_spi.patch @@ -0,0 +1,62 @@ +From ee070973c9d449c2cf45e91bee82ec936e49f068 Mon Sep 17 00:00:00 2001 +From: Lukas Wunner <lukas@wunner.de> +Date: Mon, 4 May 2020 13:12:05 +0200 +Subject: [PATCH 10/21] spi: amd: Drop superfluous member from struct amd_spi + +The AMD SPI driver stores a pointer to the spi_master in struct amd_spi +so that it can get from the latter to the former in amd_spi_fifo_xfer(). + +It's simpler to just pass the pointer from the sole caller +amd_spi_master_transfer() and drop the pointer from struct amd_spi. + +Signed-off-by: Lukas Wunner <lukas@wunner.de> +Link: https://lore.kernel.org/r/a088b684ad292faf3bd036e51529e608e5c94638.1588590210.git.lukas@wunner.de +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index 489a95fff49e..f1b08db9d5b8 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -38,7 +38,6 @@ struct amd_spi { + void __iomem *io_remap_addr; + unsigned long io_base_addr; + u32 rom_addr; +- struct spi_master *master; + u8 chip_select; + }; + +@@ -164,9 +163,9 @@ static int amd_spi_master_setup(struct spi_device *spi) + } + + static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi, ++ struct spi_master *master, + struct spi_message *message) + { +- struct spi_master *master = amd_spi->master; + struct spi_transfer *xfer = NULL; + u8 cmd_opcode; + u8 *buf = NULL; +@@ -241,7 +240,7 @@ static int amd_spi_master_transfer(struct spi_master *master, + * Extract spi_transfers from the spi message and + * program the controller. + */ +- amd_spi_fifo_xfer(amd_spi, msg); ++ amd_spi_fifo_xfer(amd_spi, master, msg); + + return 0; + } +@@ -262,7 +261,6 @@ static int amd_spi_probe(struct platform_device *pdev) + } + + amd_spi = spi_master_get_devdata(master); +- amd_spi->master = master; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + amd_spi->io_remap_addr = devm_ioremap_resource(&pdev->dev, res); +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0011-spi-spidev-Add-dummy-spidev-device-to-SPI-bus.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0011-spi-spidev-Add-dummy-spidev-device-to-SPI-bus.patch new file mode 100644 index 00000000..c9e7a733 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0011-spi-spidev-Add-dummy-spidev-device-to-SPI-bus.patch @@ -0,0 +1,100 @@ +From e7658110e2be857000c76fd33c6355138f0c86fe Mon Sep 17 00:00:00 2001 +From: Sanjay R Mehta <sanju.mehta@amd.com> +Date: Tue, 3 Mar 2020 14:44:41 +0530 +Subject: [PATCH 11/21] spi: spidev: Add dummy spidev device to SPI bus + +Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spidev.c | 40 +++++++++++++++++++++++++++++++++++++++- + 1 file changed, 39 insertions(+), 1 deletion(-) + +diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c +index be503a0e6ef7..571533b3d65c 100644 +--- a/drivers/spi/spidev.c ++++ b/drivers/spi/spidev.c +@@ -27,6 +27,8 @@ + + #include <linux/uaccess.h> + ++#define SPI_BUS 0 ++#define SPI_BUS_CS1 0 + + /* + * This supports access to SPI devices using normal userspace I/O calls. +@@ -46,6 +48,7 @@ + + static DECLARE_BITMAP(minors, N_SPI_MINORS); + ++struct spi_device *spi_device; + + /* Bit masks for spi_device.mode management. Note that incorrect + * settings for some settings can cause *lots* of trouble for other +@@ -737,7 +740,7 @@ static int spidev_probe(struct spi_device *spi) + of_device_is_compatible(spi->dev.of_node, "spidev"), + "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node); + +- spidev_probe_acpi(spi); ++// spidev_probe_acpi(spi); + + /* Allocate driver data */ + spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); +@@ -823,6 +826,32 @@ static struct spi_driver spidev_spi_driver = { + + /*-------------------------------------------------------------------------*/ + ++static int __init add_spi_device_to_bus(void) ++{ ++ struct spi_master *spi_master; ++ struct spi_board_info spi_info; ++ ++ spi_master = spi_busnum_to_master(SPI_BUS); ++ if (!spi_master) { ++ printk(KERN_ALERT "Please make sure to \'modprobe " ++ "spi_amd\' driver first\n"); ++ return -1; ++ } ++ memset(&spi_info, 0, sizeof(struct spi_board_info)); ++ ++ strlcpy(spi_info.modalias, "spidev", SPI_NAME_SIZE); ++ spi_info.bus_num = SPI_BUS; //Bus number of SPI master ++ spi_info.chip_select = SPI_BUS_CS1; //CS on which SPI device is connected ++ ++ spi_device = spi_new_device(spi_master, &spi_info); ++ if (!spi_device) ++ return -ENODEV; ++ ++ return 0; ++} ++ ++ ++ + static int __init spidev_init(void) + { + int status; +@@ -847,6 +876,14 @@ static int __init spidev_init(void) + class_destroy(spidev_class); + unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); + } ++ ++ status = add_spi_device_to_bus(); ++ if (status < 0) { ++ spi_unregister_driver(&spidev_spi_driver); ++ class_destroy(spidev_class); ++ unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); ++ } ++ + return status; + } + module_init(spidev_init); +@@ -854,6 +891,7 @@ module_init(spidev_init); + static void __exit spidev_exit(void) + { + spi_unregister_driver(&spidev_spi_driver); ++ spi_unregister_device(spi_device); + class_destroy(spidev_class); + unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); + } +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0012-spi-spi-amd-Fix-a-NULL-vs-IS_ERR-check-in-amd_spi_pr.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0012-spi-spi-amd-Fix-a-NULL-vs-IS_ERR-check-in-amd_spi_pr.patch new file mode 100644 index 00000000..4aedddc5 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0012-spi-spi-amd-Fix-a-NULL-vs-IS_ERR-check-in-amd_spi_pr.patch @@ -0,0 +1,39 @@ +From 4eb734b0a4ab01dbc903941efc830ae33001c9a0 Mon Sep 17 00:00:00 2001 +From: Wei Yongjun <weiyongjun1@huawei.com> +Date: Wed, 29 Apr 2020 02:54:26 +0000 +Subject: [PATCH 12/21] spi: spi-amd: Fix a NULL vs IS_ERR() check in + amd_spi_probe() + +In case of error, the function devm_ioremap_resource() returns ERR_PTR() +and never returns NULL. The NULL test in the return value check should +be replaced with IS_ERR(). + +Fixes: bbb336f39efc ("spi: spi-amd: Add AMD SPI controller driver support") +Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> +Link: https://lore.kernel.org/r/20200429025426.167664-1-weiyongjun1@huawei.com +Signed-off-by: Mark Brown <broonie@kernel.org> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/spi/spi-amd.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c +index f1b08db9d5b8..d0aacd4de1b9 100755 +--- a/drivers/spi/spi-amd.c ++++ b/drivers/spi/spi-amd.c +@@ -264,10 +264,9 @@ static int amd_spi_probe(struct platform_device *pdev) + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + amd_spi->io_remap_addr = devm_ioremap_resource(&pdev->dev, res); +- +- if (!amd_spi->io_remap_addr) { ++ if (IS_ERR(amd_spi->io_remap_addr)) { ++ err = PTR_ERR(amd_spi->io_remap_addr); + dev_err(dev, "error %d ioremap of SPI registers failed\n", err); +- err = -ENOMEM; + goto err_free_master; + } + dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr); +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0013-amd-xgbe-Fix-for-Network-fluctuations.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0013-amd-xgbe-Fix-for-Network-fluctuations.patch new file mode 100644 index 00000000..714d9f43 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0013-amd-xgbe-Fix-for-Network-fluctuations.patch @@ -0,0 +1,39 @@ +From 4f83ed07a25427cafd91d3722c08dc7f1f6d185f Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Tue, 12 Jan 2021 15:11:03 +0530 +Subject: [PATCH 13/21] amd-xgbe: Fix for Network fluctuations + +BEL SFP, when connected to amd-xgbe shows frequent link down and up events on dmesg. +Refer ticket EMBDEV-8951. This fix avoids the frquent link up/down issue. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index fcb3a06fc70f..59554673c142 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -1045,6 +1045,18 @@ static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata) + } + phy_data->phydev = phydev; + ++ switch (phy_data->port_mode) { ++ case XGBE_PORT_MODE_SFP: ++ /* reset the sfp phy EMBDEV-8951 */ ++ if(phydev) ++ genphy_soft_reset(phydev); ++ else ++ netdev_err(pdata->netdev, "phy reset failed\n"); ++ break; ++ default: ++ break; ++ } ++ + xgbe_phy_external_phy_quirks(pdata); + + linkmode_and(phydev->advertising, phydev->advertising, +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0014-amd-xgbe-Reset-the-PHY-rx-data-path-when-mailbox-com.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0014-amd-xgbe-Reset-the-PHY-rx-data-path-when-mailbox-com.patch new file mode 100644 index 00000000..ea4ff263 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0014-amd-xgbe-Reset-the-PHY-rx-data-path-when-mailbox-com.patch @@ -0,0 +1,84 @@ +From d3b72967f59f01071b6d7d0ff5cf15704f38b441 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Fri, 4 Dec 2020 13:59:10 +0530 +Subject: [PATCH 14/21] amd-xgbe: Reset the PHY rx data path when mailbox + command timeout + +Sometimes mailbox command timeout when the RX data path becomes +unresponsive. This prevents the submission of new mailbox commands. +This fix identify the timeout and reset the RX data path +so that next message can be submitted properly. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-common.h | 8 +++++++ + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 24 +++++++++++++++++---- + 2 files changed, 28 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h +index b40d4377cc71..9d536cef0498 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h +@@ -1319,6 +1319,14 @@ + #define MDIO_VEND2_AN_STAT 0x8002 + #endif + ++#ifndef MDIO_MMD_DIGITAL_STAT ++#define MDIO_MMD_DIGITAL_STAT 0x8010 ++#endif ++ ++#ifndef MDIO_PMA_RX_CTRL1 ++#define MDIO_PMA_RX_CTRL1 0x8051 ++#endif ++ + #ifndef MDIO_VEND2_PMA_CDR_CONTROL + #define MDIO_VEND2_PMA_CDR_CONTROL 0x8056 + #endif +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index 59554673c142..e7e3eabd0e5d 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -1967,11 +1967,15 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata, + { + unsigned int s0 = 0; + unsigned int wait; ++ unsigned int i; ++ int reg; + + /* Log if a previous command did not complete */ +- if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) +- netif_dbg(pdata, link, pdata->netdev, ++ if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) { ++ netif_err(pdata, link, pdata->netdev, + "firmware mailbox not ready for command\n"); ++ goto rx_reset; ++ } + + /* Construct the command */ + XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, COMMAND, cmd); +@@ -1991,8 +1995,20 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata, + usleep_range(1000, 2000); + } + +- netif_dbg(pdata, link, pdata->netdev, +- "firmware mailbox command did not complete\n"); ++rx_reset: ++ reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_MMD_DIGITAL_STAT); ++ if (reg & 0x10) { ++ /* mailbox command timed out, reset Rx block */ ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1, ++ BIT(4) /* mask */, BIT(4)/* value*/); ++ ++ for (i = 0; i < 100; i++) ++ usleep_range(1000, 2000); ++ ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1, ++ BIT(4) /* mask */, 0/* value*/); ++ netif_err(pdata, link, pdata->netdev, " rxX_reset done!\n"); ++ } + } + + static void xgbe_phy_rrc(struct xgbe_prv_data *pdata) +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0015-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0015-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch new file mode 100644 index 00000000..f8820035 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0015-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch @@ -0,0 +1,67 @@ +From be0ee5cdadf2fbf57cd68b18050b541f28a89c68 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Tue, 12 Jan 2021 22:06:07 +0530 +Subject: [PATCH 15/21] amd-xgbe: Fix NETDEV WATCHDOG transmit queue timed out + crash + +netif_carrier_off() called immediately after netif_tx_stop_all_queues() +to avoid the kernel crash trace + + ------------[ cut here ]------------ + NETDEV WATCHDOG: enp3s0f2 (amd-xgbe): transmit queue 0 timed out + WARNING: CPU: 3 PID: 0 at net/sched/sch_generic.c:461 dev_watchdog+0x20d/0x220 + Modules linked in: amd_xgbe(E) amd-xgbe 0000:03:00.2 enp3s0f2: Link is Down + CPU: 3 PID: 0 Comm: swapper/3 Tainted: G E + Hardware name: AMD Bilby-RV2/Bilby-RV2, BIOS RBB1202A 10/18/2019 + RIP: 0010:dev_watchdog+0x20d/0x220 + Code: 00 49 63 4e e0 eb 92 4c 89 e7 c6 05 c6 e2 c1 00 01 e8 e7 ce fc ff 89 d9 48 + RSP: 0018:ffff90cfc28c3e88 EFLAGS: 00010286 + RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000006 + RDX: 0000000000000007 RSI: 0000000000000086 RDI: ffff90cfc28d63c0 + RBP: ffff90cfb977845c R08: 0000000000000050 R09: 0000000000196018 + R10: ffff90cfc28c3ef8 R11: 0000000000000000 R12: ffff90cfb9778000 + R13: 0000000000000003 R14: ffff90cfb9778480 R15: 0000000000000010 + FS: 0000000000000000(0000) GS:ffff90cfc28c0000(0000) knlGS:0000000000000000 + CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 + CR2: 00007f240ff2d9d0 CR3: 00000001e3e0a000 CR4: 00000000003406e0 + Call Trace: + <IRQ> + ? pfifo_fast_reset+0x100/0x100 + call_timer_fn+0x2b/0x130 + run_timer_softirq+0x3e8/0x440 + ? enqueue_hrtimer+0x39/0x90 + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 2 ++ + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 1 - + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +index 1ad361644245..b498c4bb9261 100755 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +@@ -1255,6 +1255,8 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) + netif_device_detach(netdev); + + netif_tx_stop_all_queues(netdev); ++ /* Bug fix to crash while resetting the port */ ++ netif_carrier_off(pdata->netdev); + + xgbe_stop_timers(pdata); + flush_workqueue(pdata->dev_workqueue); +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index 8a3a60bb2688..4d5506d92897 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -1396,7 +1396,6 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata) + pdata->phy_if.phy_impl.stop(pdata); + + pdata->phy.link = 0; +- netif_carrier_off(pdata->netdev); + + xgbe_phy_adjust_link(pdata); + } +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0016-amd-xgbe-sets-XGBE_LINK_INIT-when-there-is-a-link-fa.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0016-amd-xgbe-sets-XGBE_LINK_INIT-when-there-is-a-link-fa.patch new file mode 100644 index 00000000..b674ec86 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0016-amd-xgbe-sets-XGBE_LINK_INIT-when-there-is-a-link-fa.patch @@ -0,0 +1,39 @@ +From 8d9dec6286b439c393b562b2e812369640eea93e Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Fri, 23 Oct 2020 01:45:15 +0530 +Subject: [PATCH 16/21] amd-xgbe sets XGBE_LINK_INIT when there is a link + failure + +When "link down" happens due to a link partner, the xgbe driver +will not set XGBE_LINK_INIT. This is observed when the port speed +capability is set to 10G in backplane mode. + +This fix sets XGBE_LINK_INIT when there is a link failure and +XGBE_LINK_INIT is not set. This helps the driver to restart AN +when AN link timeout happens. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index 4d5506d92897..ce33ff9b4b6d 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -1371,6 +1371,12 @@ static void xgbe_phy_status(struct xgbe_prv_data *pdata) + xgbe_phy_status_result(pdata); + + netif_carrier_off(pdata->netdev); ++ ++ if (link_aneg && ((pdata->phy_if.phy_impl.cur_mode(pdata) == XGBE_MODE_KR) || ++ (pdata->phy_if.phy_impl.cur_mode(pdata) == XGBE_MODE_KX_1000))) { ++ if (!test_bit(XGBE_LINK_INIT, &pdata->dev_state)) ++ set_bit(XGBE_LINK_INIT, &pdata->dev_state); ++ } + } + + adjust_link: +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0017-amd-xgbe-improved-KR-training-sequence.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0017-amd-xgbe-improved-KR-training-sequence.patch new file mode 100644 index 00000000..8e551c83 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0017-amd-xgbe-improved-KR-training-sequence.patch @@ -0,0 +1,282 @@ +From 91c7874f43cd3289bd97bc0b1e8ffe8f5973b18b Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Sat, 9 Jan 2021 12:26:09 +0530 +Subject: [PATCH 17/21] amd-xgbe: improved KR training sequence + +amd-xgbe driver handles KR training sequence directly by +programming the h/w IP registers. This causes KR training +failure if the h/w blocks are not operated correctly or they are +not in sync. The new sequence increase the stability of AN process +in KR mode by making sure that the h/w blocks are in expected +state when the AN is in progress. + +This patch fix the problem of long linkup time due to repeated KR failure +observed in AMD platforms. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-common.h | 8 +++ + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 44 ++++++++++++++-- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 56 ++++++++++++++------- + drivers/net/ethernet/amd/xgbe/xgbe.h | 5 ++ + 4 files changed, 92 insertions(+), 21 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h +index 9d536cef0498..6a5aa7e4c3ee 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h +@@ -1319,10 +1319,18 @@ + #define MDIO_VEND2_AN_STAT 0x8002 + #endif + ++#ifndef MDIO_PMA_RX_EQ_CTRL ++#define MDIO_PMA_RX_EQ_CTRL 0x8009 ++#endif ++ + #ifndef MDIO_MMD_DIGITAL_STAT + #define MDIO_MMD_DIGITAL_STAT 0x8010 + #endif + ++#ifndef MDIO_PMA_RX_CTRL0 ++#define MDIO_PMA_RX_CTRL0 0x8050 ++#endif ++ + #ifndef MDIO_PMA_RX_CTRL1 + #define MDIO_PMA_RX_CTRL1 0x8051 + #endif +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index ce33ff9b4b6d..7b17b9d0c40a 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -402,6 +402,16 @@ static void xgbe_an73_set(struct xgbe_prv_data *pdata, bool enable, + reg |= MDIO_AN_CTRL1_RESTART; + + XMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_CTRL1, reg); ++ ++ if (xgbe_in_kr_mode(pdata) && (enable || restart)) { ++ reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL); ++ reg |= XGBE_KR_TRAINING_ENABLE; ++ reg |= XGBE_KR_TRAINING_START; ++ XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg); ++ ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL, ++ BIT(15), BIT(15)); /* Disable RX Adapter */ ++ } + } + + static void xgbe_an73_restart(struct xgbe_prv_data *pdata) +@@ -409,7 +419,7 @@ static void xgbe_an73_restart(struct xgbe_prv_data *pdata) + xgbe_an73_enable_interrupts(pdata); + xgbe_an73_set(pdata, true, true); + +- netif_dbg(pdata, link, pdata->netdev, "CL73 AN enabled/restarted\n"); ++ netif_dbg(pdata, link, pdata->netdev, "CL73 AN enabled/restarted, CL72 started\n"); + } + + static void xgbe_an73_disable(struct xgbe_prv_data *pdata) +@@ -489,20 +499,40 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata, + XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FECCTRL, reg); + + /* Start KR training */ ++ if (!pdata->phy_if.phy_impl.kr_training_cdroff(pdata)) ++ netif_dbg(pdata, link, pdata->netdev, "setting phy_data->phy_cdr_notrack\n"); ++ ++ pdata->cdr_delay_required = 1; ++ + if (pdata->phy_if.phy_impl.kr_training_pre) + pdata->phy_if.phy_impl.kr_training_pre(pdata); + + reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL); +- reg |= XGBE_KR_TRAINING_ENABLE; + reg |= XGBE_KR_TRAINING_START; + XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg); + ++ pdata->kr_done = 1; ++ + netif_dbg(pdata, link, pdata->netdev, + "KR training initiated\n"); + ++ /* set RX_EQ_MGMT_MODE to disable RX Adapt Requests */ ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL, BIT(15), BIT(15)); ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, ++ XGBE_PMA_CDR_TRACK_EN_MASK, ++ XGBE_PMA_CDR_TRACK_EN_OFF); ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL0, BIT(8), 0); + if (pdata->phy_if.phy_impl.kr_training_post) + pdata->phy_if.phy_impl.kr_training_post(pdata); + ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL0, BIT(8), BIT(8)); ++ pdata->cdr_delay_required = 0; ++ udelay(1); ++ XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL, ++ BIT(15), 0); ++ if (pdata->phy_if.phy_impl.update_cdr_delay) ++ pdata->phy_if.phy_impl.update_cdr_delay(pdata); ++ + return XGBE_AN_PAGE_RECEIVED; + } + +@@ -897,8 +927,6 @@ static void xgbe_an73_state_machine(struct xgbe_prv_data *pdata) + pdata->kx_state = XGBE_RX_BPA; + pdata->an_start = 0; + +- if (pdata->phy_if.phy_impl.an_post) +- pdata->phy_if.phy_impl.an_post(pdata); + + netif_dbg(pdata, link, pdata->netdev, "CL73 AN result: %s\n", + xgbe_state_as_string(pdata->an_result)); +@@ -1243,6 +1271,9 @@ static int __xgbe_phy_config_aneg(struct xgbe_prv_data *pdata, bool set_mode) + /* Re-enable auto-negotiation interrupt */ + enable_irq(pdata->an_irq); + ++ if (pdata->phy_if.phy_impl.an_post) ++ pdata->phy_if.phy_impl.an_post(pdata); ++ + xgbe_an_init(pdata); + xgbe_an_restart(pdata); + +@@ -1360,6 +1391,10 @@ static void xgbe_phy_status(struct xgbe_prv_data *pdata) + clear_bit(XGBE_LINK_INIT, &pdata->dev_state); + + netif_carrier_on(pdata->netdev); ++ ++ if (link_aneg && pdata->kr_done) ++ pdata->phy_if.phy_impl.reset_cdr_delay(pdata); ++ + } else { + if (test_bit(XGBE_LINK_INIT, &pdata->dev_state)) { + xgbe_check_link_timeout(pdata); +@@ -1455,6 +1490,7 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata) + + /* Indicate the PHY is up and running */ + pdata->phy_started = 1; ++ pdata->an_result = XGBE_AN_NO_LINK; + + xgbe_an_init(pdata); + xgbe_an_enable_interrupts(pdata); +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index e7e3eabd0e5d..a02a906cff4d 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -2917,13 +2917,16 @@ static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata) + if (!phy_data->phy_cdr_notrack) + return; + +- usleep_range(phy_data->phy_cdr_delay, +- phy_data->phy_cdr_delay + 500); ++ /* when there is no link, no need to use the cdr delay, when ever a page is */ ++ /* received , pdata->cdr_delay_required is set to 1 */ ++ if (pdata->cdr_delay_required) { ++ usleep_range(phy_data->phy_cdr_delay, ++ phy_data->phy_cdr_delay + 500); ++ } + + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, + XGBE_PMA_CDR_TRACK_EN_MASK, + XGBE_PMA_CDR_TRACK_EN_ON); +- + phy_data->phy_cdr_notrack = 0; + } + +@@ -2940,9 +2943,7 @@ static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata) + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_CDR_CONTROL, + XGBE_PMA_CDR_TRACK_EN_MASK, + XGBE_PMA_CDR_TRACK_EN_OFF); +- + xgbe_phy_rrc(pdata); +- + phy_data->phy_cdr_notrack = 1; + } + +@@ -2952,6 +2953,36 @@ static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata) + xgbe_phy_cdr_track(pdata); + } + ++static void xgbe_phy_reset_cdr_delay(struct xgbe_prv_data *pdata) ++{ ++ struct xgbe_phy_data *phy_data = pdata->phy_data; ++ ++ phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; ++ pdata->kr_done = 0; ++} ++ ++static void xgbe_phy_update_cdr_delay(struct xgbe_prv_data *pdata) ++{ ++ struct xgbe_phy_data *phy_data = pdata->phy_data; ++ ++ if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) ++ phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; ++ else ++ phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; ++} ++ ++static int xgbe_phy_kr_training_cdroff(struct xgbe_prv_data *pdata) ++{ ++ int ret; ++ struct xgbe_phy_data *phy_data = pdata->phy_data; ++ ++ ret = phy_data->phy_cdr_notrack; ++ if (!phy_data->phy_cdr_notrack) ++ phy_data->phy_cdr_notrack = 1; ++ ++ return ret; ++} ++ + static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata) + { + if (pdata->debugfs_an_cdr_track_early) +@@ -2969,18 +3000,6 @@ static void xgbe_phy_an_post(struct xgbe_prv_data *pdata) + break; + + xgbe_phy_cdr_track(pdata); +- +- switch (pdata->an_result) { +- case XGBE_AN_READY: +- case XGBE_AN_COMPLETE: +- break; +- default: +- if (phy_data->phy_cdr_delay < XGBE_CDR_DELAY_MAX) +- phy_data->phy_cdr_delay += XGBE_CDR_DELAY_INC; +- else +- phy_data->phy_cdr_delay = XGBE_CDR_DELAY_INIT; +- break; +- } + break; + default: + break; +@@ -3417,6 +3436,9 @@ void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if) + + phy_impl->kr_training_pre = xgbe_phy_kr_training_pre; + phy_impl->kr_training_post = xgbe_phy_kr_training_post; ++ phy_impl->kr_training_cdroff = xgbe_phy_kr_training_cdroff; ++ phy_impl->reset_cdr_delay = xgbe_phy_reset_cdr_delay; ++ phy_impl->update_cdr_delay = xgbe_phy_update_cdr_delay; + + phy_impl->module_info = xgbe_phy_module_info; + phy_impl->module_eeprom = xgbe_phy_module_eeprom; +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h +index 47bcbcf58048..bb8bb6597743 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe.h ++++ b/drivers/net/ethernet/amd/xgbe/xgbe.h +@@ -889,6 +889,9 @@ struct xgbe_phy_impl_if { + /* Pre/Post KR training enablement support */ + void (*kr_training_pre)(struct xgbe_prv_data *); + void (*kr_training_post)(struct xgbe_prv_data *); ++ int (*kr_training_cdroff)(struct xgbe_prv_data *pdata); ++ void (*reset_cdr_delay)(struct xgbe_prv_data *pdata); ++ void (*update_cdr_delay)(struct xgbe_prv_data *pdata); + + /* SFP module related info */ + int (*module_info)(struct xgbe_prv_data *pdata, +@@ -1267,6 +1270,8 @@ struct xgbe_prv_data { + unsigned int fec_ability; + unsigned long an_start; + enum xgbe_an_mode an_mode; ++ unsigned int kr_done; ++ unsigned int cdr_delay_required; + + /* I2C support */ + struct xgbe_i2c i2c; +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0018-amd-xgbe-rrc-is-required-only-for-Fixed-PHY-configur.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0018-amd-xgbe-rrc-is-required-only-for-Fixed-PHY-configur.patch new file mode 100644 index 00000000..726fa33d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0018-amd-xgbe-rrc-is-required-only-for-Fixed-PHY-configur.patch @@ -0,0 +1,33 @@ +From 88d67055f583bd937cbd923e4f2def16490ae1be Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Tue, 10 Nov 2020 12:42:28 +0530 +Subject: [PATCH 18/21] amd-xgbe: rrc is required only for Fixed PHY + configuration + +xgbe driver does RRC in every 10 seconds if the link is down. +When AN is enabled and KR training is in progress, +doing RRC cause KR training failure. The patch enables RRC only +if AN is disabled. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index a02a906cff4d..28e2c5961747 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -2608,7 +2608,8 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) + /* No link, attempt a receiver reset cycle */ + if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) { + phy_data->rrc_count = 0; +- xgbe_phy_rrc(pdata); ++ if (pdata->phy.autoneg == AUTONEG_DISABLE) ++ xgbe_phy_rrc(pdata); + } + + return 0; +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0019-amd-xgbe-increased-cdr-delay.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0019-amd-xgbe-increased-cdr-delay.patch new file mode 100644 index 00000000..933bf4c8 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0019-amd-xgbe-increased-cdr-delay.patch @@ -0,0 +1,35 @@ +From 405444ebad260912ba3cf22596ad73e1eb8c0207 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Wed, 11 Nov 2020 12:13:33 +0530 +Subject: [PATCH 19/21] amd-xgbe: increased cdr delay + +amd-xgbe driver needs delay to emable CDR. +Some link partner's use 20ms of idle time before sending valid clock. +The patch uses a delay of 22ms for the first time and increases +by a step of 22ms. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index 28e2c5961747..ea00a6c4eba3 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -149,9 +149,9 @@ + #define XGBE_RATECHANGE_COUNT 500 + + /* CDR delay values for KR support (in usec) */ +-#define XGBE_CDR_DELAY_INIT 10000 +-#define XGBE_CDR_DELAY_INC 10000 +-#define XGBE_CDR_DELAY_MAX 100000 ++#define XGBE_CDR_DELAY_INIT 22000 ++#define XGBE_CDR_DELAY_INC 22000 ++#define XGBE_CDR_DELAY_MAX 110000 + + /* RRC frequency during link status check */ + #define XGBE_RRC_FREQUENCY 10 +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch new file mode 100644 index 00000000..fdd79105 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch @@ -0,0 +1,123 @@ +From f2d1ad6e4092c6a176f69232970a033589e86373 Mon Sep 17 00:00:00 2001 +From: Sudheesh Mavila <sudheesh.mavila@amd.com> +Date: Sat, 9 Jan 2021 23:41:36 +0530 +Subject: [PATCH 20/21] amd-xgbe: synchronization between AN state machine and + status polling timer thread + +xgbe driver uses a TIMEOUT to restart AN process if link is down. +This create issue when TIMEOUT comes in between a KR training or RCC +is in process. The patch avoids AN restart if TIMEOUT happens +during KR cycle or RRC. + +TIMEOUT value also reduced to 1 sec to enable fast +synchronization between LP. + +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 29 +++++++++++++++++++-- + drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 1 + + drivers/net/ethernet/amd/xgbe/xgbe.h | 4 ++- + 3 files changed, 31 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +index 7b17b9d0c40a..e4db9b9eb29b 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +@@ -512,6 +512,7 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata, + XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg); + + pdata->kr_done = 1; ++ pdata->kr_start_time = jiffies; + + netif_dbg(pdata, link, pdata->netdev, + "KR training initiated\n"); +@@ -884,6 +885,8 @@ static void xgbe_an73_state_machine(struct xgbe_prv_data *pdata) + break; + + case XGBE_AN_PAGE_RECEIVED: ++ if (xgbe_in_kr_mode(pdata)) ++ pdata->an_int = 0; + pdata->an_state = xgbe_an73_page_received(pdata); + pdata->an_supported++; + break; +@@ -1306,11 +1309,34 @@ static bool xgbe_phy_aneg_done(struct xgbe_prv_data *pdata) + static void xgbe_check_link_timeout(struct xgbe_prv_data *pdata) + { + unsigned long link_timeout; ++ int wait = 200; ++ unsigned long kr_time; ++ unsigned long rrc_time; + + link_timeout = pdata->link_check + (XGBE_LINK_TIMEOUT * HZ); + if (time_after(jiffies, link_timeout)) { + netif_dbg(pdata, link, pdata->netdev, "AN link timeout\n"); +- xgbe_phy_config_aneg(pdata); ++ /* AN restart should not happen within 500ms of start of RRC or KR tarining */ ++ /* This loop ensures no AN restart during RRC window and KR training window */ ++ while (wait--) { ++ mutex_lock(&pdata->an_mutex); ++ kr_time = pdata->kr_start_time + msecs_to_jiffies(XGBE_AN_MS_TIMEOUT); ++ rrc_time = pdata->rrc_start_time + msecs_to_jiffies(XGBE_AN_MS_TIMEOUT); ++ mutex_unlock(&pdata->an_mutex); ++ if (time_after(jiffies, kr_time) && time_after(jiffies, rrc_time)) ++ break; ++ if (pdata->an_result == XGBE_AN_COMPLETE) ++ break; ++ ++ usleep_range(5000, 6000); ++ } ++ /* AN restart is required, if AN result is not COMPLETE */ ++ if (pdata->an_result != XGBE_AN_COMPLETE) ++ xgbe_phy_config_aneg(pdata); ++ else if ((pdata->an_result == XGBE_AN_COMPLETE) && ++ (xgbe_cur_mode(pdata) == XGBE_MODE_KX_1000)) ++ xgbe_phy_config_aneg(pdata); ++ + } + } + +@@ -1490,7 +1516,6 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata) + + /* Indicate the PHY is up and running */ + pdata->phy_started = 1; +- pdata->an_result = XGBE_AN_NO_LINK; + + xgbe_an_init(pdata); + xgbe_an_enable_interrupts(pdata); +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +index ea00a6c4eba3..8392d60eba9d 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c ++++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +@@ -2945,6 +2945,7 @@ static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata) + XGBE_PMA_CDR_TRACK_EN_MASK, + XGBE_PMA_CDR_TRACK_EN_OFF); + xgbe_phy_rrc(pdata); ++ pdata->rrc_start_time = jiffies; + phy_data->phy_cdr_notrack = 1; + } + +diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h +index bb8bb6597743..c20471a1ea18 100644 +--- a/drivers/net/ethernet/amd/xgbe/xgbe.h ++++ b/drivers/net/ethernet/amd/xgbe/xgbe.h +@@ -289,7 +289,7 @@ + + /* Auto-negotiation */ + #define XGBE_AN_MS_TIMEOUT 500 +-#define XGBE_LINK_TIMEOUT 5 ++#define XGBE_LINK_TIMEOUT 1 + + #define XGBE_SGMII_AN_LINK_STATUS BIT(1) + #define XGBE_SGMII_AN_LINK_SPEED (BIT(2) | BIT(3)) +@@ -1271,6 +1271,8 @@ struct xgbe_prv_data { + unsigned long an_start; + enum xgbe_an_mode an_mode; + unsigned int kr_done; ++ unsigned long kr_start_time; ++ unsigned long rrc_start_time; + unsigned int cdr_delay_required; + + /* I2C support */ +-- +2.17.1 + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/afalg.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/afalg.cfg new file mode 100644 index 00000000..3a101779 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/afalg.cfg @@ -0,0 +1,41 @@ +# +# General setup +# +CONFIG_AUDIT=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_AUDITSYSCALL=y + +CONFIG_INTEGRITY_AUDIT=y + +# +# Crypto core or helper +# + +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_CRYPTD=m + +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_ECHAINIV=m + + +# +# Ciphers +# +CONFIG_CRYPTO_DES3_EDE_X86_64=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_AEAD=m diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-ccp.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-ccp.cfg new file mode 100644 index 00000000..cc9d9e10 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-ccp.cfg @@ -0,0 +1,27 @@ +CONFIG_SERIAL_8250_DMA=y +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_ACPI=y +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_INTEL_IOATDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +CONFIG_DW_DMAC_CORE=y +# CONFIG_DW_DMAC is not set +# CONFIG_DW_DMAC_PCI is not set +CONFIG_HSU_DMA=y +# +# DMA Clients +# +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=y +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_SP_PSP=y diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-emmc-patches.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-emmc-patches.scc new file mode 100644 index 00000000..fbdb685d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-emmc-patches.scc @@ -0,0 +1 @@ +patch 0001-mmc-sdhci-acpi-fix-for-tuning-issue-in-E3000.patch diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-spi-patches.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-spi-patches.scc new file mode 100644 index 00000000..185231bc --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-spi-patches.scc @@ -0,0 +1,9 @@ +patch 0001-spi-spi-amd-Add-AMD-SPI-controller-driver-support.patch +patch 0004-spi-spi-amd-fix-warning.patch +patch 0006-spi-amd-Fix-duplicate-iounmap-in-error-path.patch +patch 0007-spi-amd-Pass-probe-errors-back-to-driver-core.patch +patch 0008-spi-amd-Drop-duplicate-driver-data-assignments.patch +patch 0009-spi-amd-Fix-refcount-underflow-on-remove.patch +patch 0010-spi-amd-Drop-superfluous-member-from-struct-amd_spi.patch +patch 0011-spi-spidev-Add-dummy-spidev-device-to-SPI-bus.patch +patch 0012-spi-spi-amd-Fix-a-NULL-vs-IS_ERR-check-in-amd_spi_pr.patch diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-usb-patches.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-usb-patches.scc new file mode 100644 index 00000000..a058ba2a --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-usb-patches.scc @@ -0,0 +1 @@ +patch 0002-usb-xhci-Add-LPM-support-to-AMD-xhci-controller.patch diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe-patches.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe-patches.scc new file mode 100644 index 00000000..f218cb71 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe-patches.scc @@ -0,0 +1,10 @@ +patch 0003-amd-xgbe-fix-for-the-crash-which-happens-during-SFP-.patch +patch 0005-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch +patch 0013-amd-xgbe-Fix-for-Network-fluctuations.patch +patch 0014-amd-xgbe-Reset-the-PHY-rx-data-path-when-mailbox-com.patch +patch 0015-amd-xgbe-Fix-NETDEV-WATCHDOG-transmit-queue-timed-ou.patch +patch 0016-amd-xgbe-sets-XGBE_LINK_INIT-when-there-is-a-link-fa.patch +patch 0017-amd-xgbe-improved-KR-training-sequence.patch +patch 0018-amd-xgbe-rrc-is-required-only-for-Fixed-PHY-configur.patch +patch 0019-amd-xgbe-increased-cdr-delay.patch +patch 0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe.cfg new file mode 100644 index 00000000..463ed1e8 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amd-xgbe.cfg @@ -0,0 +1,51 @@ +CONFIG_MDIO=y +CONFIG_AMD_XGBE=y +CONFIG_AMD_XGBE_HAVE_ECC=y +CONFIG_PHYLIB=y +CONFIG_MDIO_GPIO=y + +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=y +CONFIG_USB_NET_AX88179_178A=y +CONFIG_USB_NET_CDCETHER=y +# CONFIG_USB_NET_CDC_EEM is not set +CONFIG_USB_NET_CDC_NCM=y +# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set +# CONFIG_USB_NET_CDC_MBIM is not set +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SR9700 is not set +# CONFIG_USB_NET_SR9800 is not set +# CONFIG_USB_NET_SMSC75XX is not set +# CONFIG_USB_NET_SMSC95XX is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=y +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +CONFIG_USB_NET_CDC_SUBSET_ENABLE=y +CONFIG_USB_NET_CDC_SUBSET=y +# CONFIG_USB_ALI_M5632 is not set +# CONFIG_USB_AN2720 is not set +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +# CONFIG_USB_KC2190 is not set +CONFIG_USB_NET_ZAURUS=y +CONFIG_USB_NET_CX82310_ETH=y +# CONFIG_USB_NET_KALMIA is not set +# CONFIG_USB_NET_QMI_WWAN is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_USB_SIERRA_NET is not set +# CONFIG_USB_VL600 is not set +# CONFIG_USB_NET_CH9200 is not set + +CONFIG_VFIO_PCI=y + +CONFIG_X86_X2APIC=y +CONFIG_X86_NUMACHIP=y +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_DIAG=m +CONFIG_NETLABEL=y diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-extra-config.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-extra-config.cfg new file mode 100644 index 00000000..6f780afd --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-extra-config.cfg @@ -0,0 +1,313 @@ +CONFIG_PERF_EVENTS_INTEL_UNCORE=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_USELIB=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y +CONFIG_SRCU=y +# CONFIG_TASKS_RCU is not set +CONFIG_BUILD_BIN2C=y +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_PAGE_COUNTER=y +CONFIG_BPF=y +CONFIG_MULTIUSER=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_SYSFS_SYSCALL=y +# CONFIG_BPF_SYSCALL is not set +CONFIG_ADVISE_SYSCALLS=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# CONFIG_MODULE_COMPRESS is not set +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_X86_FEATURE_NAMES=y +# CONFIG_X86_GOLDFISH is not set +CONFIG_IOSF_MBI=m +# CONFIG_IOSF_MBI_DEBUG is not set +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_DIRECT_GBPAGES=y +CONFIG_MEMORY_BALLOON=y +# CONFIG_ZSWAP is not set +# CONFIG_ZPOOL is not set +# CONFIG_ZBUD is not set +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_X86_PMEM_LEGACY is not set +# CONFIG_X86_INTEL_MPX is not set +# CONFIG_EFI_MIXED is not set +CONFIG_HAVE_LIVEPATCH=y +# CONFIG_LIVEPATCH is not set +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_HOTPLUG_IOAPIC=y +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +# CONFIG_PMIC_OPREGION is not set +CONFIG_PMC_ATOM=y +CONFIG_NET_UDP_TUNNEL=m +# CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set +# CONFIG_GENEVE is not set +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_BRIDGE_NETFILTER=m +CONFIG_NF_NAT_REDIRECT=m +# CONFIG_NETFILTER_XT_NAT is not set +# CONFIG_NF_LOG_ARP is not set +# CONFIG_NF_LOG_IPV4 is not set +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +# CONFIG_IP_NF_NAT is not set +# CONFIG_NF_REJECT_IPV6 is not set +# CONFIG_NF_LOG_IPV6 is not set +CONFIG_TIPC_MEDIA_UDP=y +# CONFIG_NET_ACT_VLAN is not set +# CONFIG_NET_ACT_BPF is not set +# CONFIG_NET_ACT_CONNMARK is not set +# CONFIG_MPLS is not set +# CONFIG_NET_SWITCHDEV is not set +CONFIG_BT_BREDR=y +CONFIG_BT_LE=y +# CONFIG_BT_SELFTEST is not set +CONFIG_BT_DEBUGFS=y +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_HCIBTUSB_BCM=y +# CONFIG_BT_HCIUART_INTEL is not set +# CONFIG_BT_HCIUART_BCM is not set +CONFIG_UEVENT_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_ALLOW_DEV_COREDUMP=y +# CONFIG_BLK_DEV_PMEM is not set +# CONFIG_INTEL_MEI_TXE is not set +# CONFIG_INTEL_MIC_BUS is not set +# CONFIG_ECHO is not set +# CONFIG_CXL_BASE is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_WD719X is not set +# CONFIG_DM_ERA is not set +# CONFIG_DM_LOG_WRITES is not set +# CONFIG_IPVLAN is not set +# CONFIG_NET_VENDOR_AGERE is not set +# CONFIG_ET131X is not set +# CONFIG_ALTERA_TSE is not set +# CONFIG_BCMGENET is not set +# CONFIG_CX_ECAT is not set +# CONFIG_FM10K is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_SXGBE_ETH is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +CONFIG_USB_NET_DRIVERS=y +# CONFIG_ATH9K_DYNACK is not set +# CONFIG_ATH9K_CHANNEL_CONTEXT is not set +CONFIG_ATH9K_PCOEM=y +CONFIG_BRCMFMAC_PROTO_BCDC=y +# CONFIG_BRCMFMAC_PCIE is not set +CONFIG_IWLWIFI_LEDS=y +# CONFIG_RTL8723BE is not set +# CONFIG_RTL8192EE is not set +# CONFIG_RTL8821AE is not set +# CONFIG_RSI_91X is not set +# CONFIG_MOUSE_PS2_FOCALTECH is not set +# CONFIG_MOUSE_ELAN_I2C is not set +# CONFIG_TABLET_SERIAL_WACOM4 is not set +# CONFIG_TOUCHSCREEN_GOODIX is not set +# CONFIG_TOUCHSCREEN_ELAN is not set +# CONFIG_TOUCHSCREEN_SX8654 is not set +CONFIG_DEVMEM=y +CONFIG_SERIAL_EARLYCON=y +# CONFIG_SERIAL_8250_FINTEK is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_IPMI_SSIF is not set +# CONFIG_TCG_CRB is not set +# CONFIG_TCG_TIS_ST33ZP24 is not set +# CONFIG_XILLYBUS is not set +CONFIG_ACPI_I2C_OPREGION=y +# CONFIG_I2C_SLAVE is not set +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPMI is not set +# CONFIG_PINCTRL_BAYTRAIL is not set +# CONFIG_PINCTRL_CHERRYVIEW is not set +# CONFIG_PINCTRL_SUNRISEPOINT is not set +CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_GPIO_DWAPB is not set +# CONFIG_GPIO_F7188X is not set +# CONFIG_GPIO_ICH is not set +# CONFIG_GPIO_LYNXPOINT is not set +# CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_BT8XX is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_SENSORS_APPLESMC is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_I5500 is not set +# CONFIG_SENSORS_CORETEMP is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4222 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4260 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6642 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_ADCXX is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_NCT6683 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NCT7802 is not set +# CONFIG_SENSORS_NCT7904 is not set +# CONFIG_SENSORS_SHTC1 is not set +# CONFIG_SENSORS_SMM665 is not set +# CONFIG_SENSORS_ADC128D818 is not set +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_THERMAL_GOV_BANG_BANG is not set +# CONFIG_INTEL_SOC_DTS_THERMAL is not set +# CONFIG_INT340X_THERMAL is not set +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_CADENCE_WATCHDOG is not set +CONFIG_BCMA_DRIVER_PCI=y +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_AXP20X is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set +# CONFIG_INTEL_SOC_PMIC is not set +# CONFIG_MFD_MAX77843 is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RN5T618 is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_TPS65218 is not set +# CONFIG_MEDIA_SDR_SUPPORT is not set +# CONFIG_USB_GSPCA_DTCS033 is not set +# CONFIG_USB_GSPCA_TOUPTEK is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_VGEM is not set +# CONFIG_HSA_AMD is not set +CONFIG_FB_CMDLINE=y +CONFIG_HDMI=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +# CONFIG_HID_BETOP_FF is not set +# CONFIG_HID_CP2112 is not set +# CONFIG_HID_GT683R is not set +# CONFIG_HID_LENOVO is not set +# CONFIG_HID_LOGITECH_HIDPP is not set +# CONFIG_HID_PENMOUNT is not set +# CONFIG_HID_PLANTRONICS is not set +# CONFIG_HID_RMI is not set +# CONFIG_USB_OTG_FSM is not set +CONFIG_USB_XHCI_PCI=y +# CONFIG_USB_MAX3421_HCD is not set +# CONFIG_USB_UAS is not set +# CONFIG_USBIP_CORE is not set +# CONFIG_USB_ISP1760 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set +# CONFIG_USB_LED_TRIG is not set +# CONFIG_MMC_USDHI6ROL0 is not set +# CONFIG_MMC_TOSHIBA_PCI is not set +# CONFIG_LEDS_CLASS_FLASH is not set +# CONFIG_LEDS_LP8860 is not set +# CONFIG_EDAC_IE31200 is not set +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABX80X is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_DS1343 is not set +# CONFIG_RTC_DRV_DS1347 is not set +# CONFIG_RTC_DRV_MCP795 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_XGENE is not set +# CONFIG_FB_SM750 is not set +# CONFIG_GS_FPGABOOT is not set +# CONFIG_UNISYSSPAR is not set +# CONFIG_FB_TFT is not set +# CONFIG_DELL_SMO8800 is not set +# CONFIG_TOSHIBA_HAPS is not set +# CONFIG_COMMON_CLK_PXA is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_ATMEL_PIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +# CONFIG_EM_TIMER_STI is not set +# CONFIG_SOC_TI is not set +# CONFIG_PM_DEVFREQ_EVENT is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +# CONFIG_MCB is not set +CONFIG_RAS=y +# CONFIG_THUNDERBOLT is not set +# CONFIG_ANDROID is not set +CONFIG_EFI_RUNTIME_WRAPPERS=y +# CONFIG_F2FS_FS is not set +# CONFIG_FS_DAX is not set +# CONFIG_OVERLAY_FS is not set +CONFIG_KERNFS=y +CONFIG_EFIVAR_FS=m +# CONFIG_SQUASHFS_LZ4 is not set +# CONFIG_PSTORE_PMSG is not set +# CONFIG_NFSD_PNFS is not set +CONFIG_GRACE_PERIOD=y +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +# CONFIG_DEBUG_INFO_SPLIT is not set +# CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_GDB_SCRIPTS is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_EXTENSION is not set +CONFIG_HAVE_ARCH_KASAN=y +# CONFIG_KASAN is not set +CONFIG_KASAN_SHADOW_OFFSET=0xdffffc0000000000 +# CONFIG_SCHED_STACK_END_CHECK is not set +# CONFIG_DEBUG_TIMEKEEPING is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_PROVE_RCU is not set +# CONFIG_TORTURE_TEST is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_FIRMWARE is not set +# CONFIG_TEST_UDELAY is not set +# CONFIG_MEMTEST is not set +CONFIG_INTEGRITY=y +# CONFIG_INTEGRITY_SIGNATURE is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_GHASH=m +# CONFIG_CRYPTO_DES3_EDE_X86_64 is not set +# CONFIG_CRYPTO_DRBG_MENU is not set +# CONFIG_CRYPTO_USER_API_RNG is not set +# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set +CONFIG_KVM_COMPAT=y +# CONFIG_HAVE_ARCH_BITREVERSE is not set +CONFIG_RATIONAL=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_HAS_IOPORT_MAP=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +# CONFIG_PINMUX is not set +CONFIG_UIO=y diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-standard-only.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-standard-only.cfg new file mode 100644 index 00000000..bfc1701d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-standard-only.cfg @@ -0,0 +1,3 @@ +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_X86_POWERNOW_K8=y diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-config.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-config.cfg new file mode 100644 index 00000000..896e633f --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-config.cfg @@ -0,0 +1,402 @@ +CONFIG_X86_BIGSMP=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y + +CONFIG_CGROUP_PERF=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_BLK_CMDLINE_PARSER=y +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y + +# +# IO Schedulers +# +CONFIG_X86_AMD_PLATFORM_DEVICE=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_AMD=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_GART_IOMMU=y +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_SWIOTLB=y +CONFIG_NR_CPUS=256 +CONFIG_X86_MCE=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_INJECT=m + +# +# Performance monitoring +# +CONFIG_MICROCODE=y +CONFIG_MICROCODE_AMD=y +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +CONFIG_NUMA=y +CONFIG_AMD_NUMA=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_NODES_SPAN_OTHER_NODES=y +CONFIG_NODES_SHIFT=6 +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_BOUNCE=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_MEMORY_FAILURE=y +CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y +CONFIG_CMA=y +CONFIG_KEXEC=y +CONFIG_CRASH_DUMP=y +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_COMPAT_VDSO=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y + +# +# Power management and ACPI options +# +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_TRACE=y +CONFIG_PM_TRACE_RTC=y +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_SBS=m +CONFIG_ACPI_HED=y +CONFIG_ACPI_BGRT=y +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=m +CONFIG_ACPI_APEI_ERST_DEBUG=m +CONFIG_SFI=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# CPU frequency scaling drivers +# +CONFIG_X86_PCC_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +CONFIG_X86_POWERNOW_K8=y +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +CONFIG_X86_SPEEDSTEP_CENTRINO=y +CONFIG_X86_P4_CLOCKMOD=m + +# +# shared options +# +CONFIG_X86_SPEEDSTEP_LIB=m + + +# +# Bus options (PCI etc.) +# +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_REALLOC_ENABLE_AUTO=y +CONFIG_PCI_STUB=m +CONFIG_PCI_ATS=y +CONFIG_PCI_IOV=y +CONFIG_PCI_PRI=y +CONFIG_PCI_PASID=y +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=m + +# +# PCI host controller drivers +# +CONFIG_AMD_NB=y + +# +# RapidIO Switch drivers +# +CONFIG_X86_SYSFB=y + + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_FQ=m +# +# Misc devices +# +CONFIG_ENCLOSURE_SERVICES=m + +# +# EEPROM support +# +CONFIG_EEPROM_LEGACY=m + + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI_PLATFORM=m + + +# +# Distributed Switch Architecture drivers +# +CONFIG_E1000=y +CONFIG_E1000E=y +CONFIG_E1000E_HWTS=y +CONFIG_IGB=y +CONFIG_IGB_HWMON=y +CONFIG_IGBVF=y +CONFIG_IXGB=y +CONFIG_IXGBE=y +CONFIG_IXGBE_HWMON=y +CONFIG_IXGBEVF=y + +# +# MDIO bus device drivers +# +CONFIG_MDIO_GPIO=m + +# +# MII PHY device drivers +# +CONFIG_AMD_PHY=m + +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_RUNTIME_UARTS=32 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_DW=y + +# +# Non-8250 serial port support +# +CONFIG_IPMI_HANDLER=m +CONFIG_HW_RANDOM_TPM=m +CONFIG_NVRAM=m + +# +# PCMCIA character devices +# +CONFIG_HANGCHECK_TIMER=m +CONFIG_TCG_TPM=y + +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_ALGOBIT=y +CONFIG_I2C_PIIX4=m +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +CONFIG_I2C_CBUS_GPIO=m +CONFIG_I2C_DESIGNWARE_CORE=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_DESIGNWARE_PCI=m +CONFIG_I2C_DESIGNWARE_BAYTRAIL=y +CONFIG_I2C_GPIO=m +CONFIG_I2C_KEMPLD=m +CONFIG_I2C_OCORES=m +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=m +# +# Pin controllers +# +CONFIG_PINCTRL_AMD=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_ACPI=y +CONFIG_DEBUG_GPIO=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC=y +# +# Memory mapped GPIO drivers +# +CONFIG_GPIO_GENERIC_PLATFORM=y + +# +# PCI GPIO expanders +# +CONFIG_GPIO_ML_IOH=m + +# +# Native drivers +# +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_FAM15H_POWER=m + +# +# ACPI drivers +# +CONFIG_SENSORS_ACPI_POWER=m + + +# +# Graphics support +# +CONFIG_AGP_AMD64=y +CONFIG_VGA_SWITCHEROO=y + + +# +# Frame buffer Devices +# + +# +# Frame buffer hardware drivers +# + +# +# Console display driver support +# + + +# +# CODEC drivers +# + + +# +# USB HID support +# +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=8 + +# +# MMC/SD/SDIO Host Controller Drivers +# +CONFIG_MMC_SPI=m + +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC=y +CONFIG_EDAC_LEGACY_SYSFS=y +CONFIG_EDAC_DECODE_MCE=y +CONFIG_EDAC_AMD64=y +CONFIG_EDAC_AMD64_ERROR_INJECTION=y + +# +# DMABUF options +# +CONFIG_AUXDISPLAY=y + + +# +# Clock Source drivers +# +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IOVA=y +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_V2=y +CONFIG_DMAR_TABLE=y +CONFIG_IRQ_REMAP=y + +# +# Broadcom SoC drivers +# +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +# CONFIG_DEVFREQ_GOV_PASSIVE is not set + + +CONFIG_MEMORY=y + +# +# Firmware Drivers +# +CONFIG_EDD=y +CONFIG_EDD_OFF=y +CONFIG_DMI_SYSFS=m + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_VARS=y +CONFIG_EFI_VARS_PSTORE=m +CONFIG_EFI_RUNTIME_MAP=y +CONFIG_UEFI_CPER=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_UDF_FS=m + + +# +# Pseudo filesystems +# +CONFIG_PROC_VMCORE=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_PSTORE=y + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_KERNEL=y + +CONFIG_SECURITYFS=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_INTERVAL_TREE=y + +# +# Graphics support +# + +# +# Console display driver support +# + diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-features.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-features.scc new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-features.scc diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-patches.scc b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-patches.scc new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86-user-patches.scc diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86.cfg new file mode 100644 index 00000000..b321cee6 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/amdx86.cfg @@ -0,0 +1,59 @@ +CONFIG_PRINTK=y + +# Basic hardware support for the box - network, USB, PCI, sound +CONFIG_NETDEVICES=y +CONFIG_ATA=y +CONFIG_ATA_GENERIC=y +CONFIG_ATA_SFF=y +CONFIG_PCI=y +CONFIG_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PCI=y +CONFIG_USB_SUPPORT=y +CONFIG_USB=y +CONFIG_PATA_SCH=y +CONFIG_USB_EHCI_HCD=y +CONFIG_PCIEPORTBUS=y +CONFIG_NET=y +CONFIG_USB_UHCI_HCD=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y + +# Make sure these are on, otherwise the bootup won't be fun +CONFIG_EXT3_FS=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_MODULES=y +CONFIG_SHMEM=y +CONFIG_TMPFS=y +CONFIG_PACKET=y + +CONFIG_I2C=y +CONFIG_AGP=y +CONFIG_PM=y +CONFIG_ACPI=y +CONFIG_INPUT=y + +# Needed for booting (and using) USB memory sticks +CONFIG_BLK_DEV_LOOP=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y + +CONFIG_RD_GZIP=y + +# Filesystems +CONFIG_EXT2_FS_SECURITY=y +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_NFSD_V4=y +CONFIG_QFMT_V2 +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QUOTA_TREE=m +CONFIG_QUOTACTL=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/disable-graphics.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/disable-graphics.cfg new file mode 100644 index 00000000..da9cb204 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/disable-graphics.cfg @@ -0,0 +1,4 @@ +# CONFIG_FB is not set +# CONFIG_DRM is not set +# CONFIG_AGP is not set +# CONFIG_VGA_SWITCHEROO is not set diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/kvm.cfg b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/kvm.cfg new file mode 100644 index 00000000..f4ca1c77 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/kvm.cfg @@ -0,0 +1,39 @@ +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +# CONFIG_TASK_XACCT is not set + +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_VFIO_IOMMU_TYPE1=y +CONFIG_VFIO_VIRQFD=y +CONFIG_VFIO=y +# CONFIG_VFIO_NOIOMMU is not set +CONFIG_VFIO_PCI=y +# CONFIG_VFIO_PCI_VGA is not set +CONFIG_VFIO_PCI_MMAP=y +CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI_IGD=y +CONFIG_IRQ_BYPASS_MANAGER=y +CONFIG_VIRT_DRIVERS=y +CONFIG_SCHED_INFO=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_INPUT=y + +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQFD=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_KVM_MMIO=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_COMPAT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_KVM=y +# CONFIG_KVM_INTEL is not set +CONFIG_KVM_AMD=y +# CONFIG_KVM_MMU_AUDIT is not set + +CONFIG_KVM_AMD_SEV=y |