-LINUX_VERSION-6.6 = .96
-LINUX_KERNEL_HASH-6.6.96 = 9ee45843d43adb2e2ac5f6a8cb10a334e39e3e3384af8a0ce383a37f78221bdd
+LINUX_VERSION-6.6 = .97
+LINUX_KERNEL_HASH-6.6.97 = 3b67c170638142da56b7a9c3295f2483b88e8c4d3bc26b2bda63b6cf0cb9ee3b
static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
{
-@@ -1347,6 +1348,7 @@ static int spinand_probe(struct spi_mem
+@@ -1348,6 +1349,7 @@ static int spinand_probe(struct spi_mem
if (ret)
return ret;
ret = mtd_device_register(mtd, NULL, 0);
if (ret)
goto err_spinand_cleanup;
-@@ -1354,6 +1356,7 @@ static int spinand_probe(struct spi_mem
+@@ -1355,6 +1357,7 @@ static int spinand_probe(struct spi_mem
return 0;
err_spinand_cleanup:
spinand_cleanup(spinand);
return ret;
-@@ -1372,6 +1375,7 @@ static int spinand_remove(struct spi_mem
+@@ -1373,6 +1376,7 @@ static int spinand_remove(struct spi_mem
if (ret)
return ret;
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
-@@ -485,6 +485,7 @@ static void xhci_pci_quirks(struct devic
+@@ -510,6 +510,7 @@ static void xhci_pci_quirks(struct devic
if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == PCI_DEVICE_ID_VIA_VL805) {
xhci->quirks |= XHCI_LPM_SUPPORT;
xhci->quirks |= XHCI_TRB_OVERFETCH;
}
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
-@@ -153,6 +153,14 @@ static const struct mmc_fixup __maybe_un
+@@ -50,6 +50,14 @@ static const struct mmc_fixup __maybe_un
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
MMC_QUIRK_BROKEN_SD_DISCARD),
#define MAX_TUNING_LOOP 40
-@@ -3217,7 +3217,7 @@ static void sdhci_timeout_timer(struct t
+@@ -3212,7 +3212,7 @@ static void sdhci_timeout_timer(struct t
spin_lock_irqsave(&host->lock, flags);
if (host->cmd && !sdhci_data_line_cmd(host->cmd)) {
mmc_hostname(host->mmc));
sdhci_err_stats_inc(host, REQ_TIMEOUT);
sdhci_dumpregs(host);
-@@ -3240,7 +3240,7 @@ static void sdhci_timeout_data_timer(str
+@@ -3235,7 +3235,7 @@ static void sdhci_timeout_data_timer(str
if (host->data || host->data_cmd ||
(host->cmd && sdhci_data_line_cmd(host->cmd))) {
static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data)
{
u32 *buf;
-@@ -4458,7 +4463,13 @@ static int lan78xx_probe(struct usb_inte
+@@ -4456,7 +4461,13 @@ static int lan78xx_probe(struct usb_inte
if (ret < 0)
goto out4;
irq_disable:
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
-@@ -76,6 +76,12 @@ struct v3d_dev {
+@@ -84,6 +84,12 @@ struct v3d_dev {
void __iomem *bridge_regs;
void __iomem *gca_regs;
struct clk *clk;
v3d_init_core(struct v3d_dev *v3d, int core)
{
/* Set OVRTMUOUT, which means that the texture sampler uniform
-@@ -318,6 +360,7 @@ static void
+@@ -320,6 +362,7 @@ static void
v3d_job_free(struct kref *ref)
{
struct v3d_job *job = container_of(ref, struct v3d_job, refcount);
int i;
if (job->bo) {
-@@ -329,6 +372,8 @@ v3d_job_free(struct kref *ref)
+@@ -331,6 +374,8 @@ v3d_job_free(struct kref *ref)
dma_fence_put(job->irq_fence);
dma_fence_put(job->done_fence);
if (job->perfmon)
v3d_perfmon_put(job->perfmon);
-@@ -448,6 +493,7 @@ v3d_job_init(struct v3d_dev *v3d, struct
+@@ -450,6 +495,7 @@ v3d_job_init(struct v3d_dev *v3d, struct
goto fail_deps;
}
kref_init(&job->refcount);
return 0;
-@@ -1031,6 +1077,9 @@ v3d_gem_init(struct drm_device *dev)
+@@ -1033,6 +1079,9 @@ v3d_gem_init(struct drm_device *dev)
if (ret)
return ret;
--- a/drivers/gpu/drm/v3d/v3d_gem.c
+++ b/drivers/gpu/drm/v3d/v3d_gem.c
-@@ -1080,6 +1080,10 @@ v3d_gem_init(struct drm_device *dev)
+@@ -1082,6 +1082,10 @@ v3d_gem_init(struct drm_device *dev)
mutex_init(&v3d->clk_lock);
INIT_DELAYED_WORK(&v3d->clk_down_work, v3d_clock_down_work);
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
-@@ -4883,6 +4883,7 @@ static const struct {
+@@ -4879,6 +4879,7 @@ static const struct {
*/
static int hci_dev_setup_sync(struct hci_dev *hdev)
{
int ret = 0;
bool invalid_bdaddr;
size_t i;
-@@ -4911,7 +4912,8 @@ static int hci_dev_setup_sync(struct hci
+@@ -4907,7 +4908,8 @@ static int hci_dev_setup_sync(struct hci
test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
if (!ret) {
if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks) &&
/* Performance monitor object. The perform lifetime is controlled by userspace
* using perfmon related ioctls. A perfmon can be attached to a submit_cl
* request, and when this is the case, HW perf counters will be activated just
-@@ -147,6 +198,8 @@ struct v3d_dev {
+@@ -155,6 +206,8 @@ struct v3d_dev {
u32 num_allocated;
u32 pages_allocated;
} bo_stats;
};
static inline struct v3d_dev *
-@@ -244,6 +297,11 @@ struct v3d_job {
+@@ -252,6 +305,11 @@ struct v3d_job {
*/
struct v3d_perfmon *perfmon;
/* Callback for the freeing of the job on refcount going to 0. */
void (*free)(struct kref *ref);
};
-@@ -408,6 +466,7 @@ void v3d_mmu_remove_ptes(struct v3d_bo *
+@@ -416,6 +474,7 @@ void v3d_mmu_remove_ptes(struct v3d_bo *
/* v3d_sched.c */
int v3d_sched_init(struct v3d_dev *v3d);
void v3d_sched_fini(struct v3d_dev *v3d);
void v3d_perfmon_get(struct v3d_perfmon *perfmon);
--- a/drivers/gpu/drm/v3d/v3d_gem.c
+++ b/drivers/gpu/drm/v3d/v3d_gem.c
-@@ -460,6 +460,7 @@ v3d_job_init(struct v3d_dev *v3d, struct
+@@ -462,6 +462,7 @@ v3d_job_init(struct v3d_dev *v3d, struct
job = *container;
job->v3d = v3d;
job->free = free;
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
-@@ -486,6 +486,7 @@ static void xhci_pci_quirks(struct devic
+@@ -511,6 +511,7 @@ static void xhci_pci_quirks(struct devic
xhci->quirks |= XHCI_LPM_SUPPORT;
xhci->quirks |= XHCI_TRB_OVERFETCH;
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1660,6 +1660,9 @@ struct xhci_hcd {
- #define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
+@@ -1661,6 +1661,9 @@ struct xhci_hcd {
#define XHCI_ETRON_HOST BIT_ULL(49)
+ #define XHCI_LIMIT_ENDPOINT_INTERVAL_9 BIT_ULL(50)
+/* Downstream VLI fixes */
+#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
ep_index = xhci_get_endpoint_index(&ep->desc);
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
-@@ -1445,9 +1448,35 @@ int xhci_endpoint_init(struct xhci_hcd *
+@@ -1449,9 +1452,35 @@ int xhci_endpoint_init(struct xhci_hcd *
mult = xhci_get_endpoint_mult(udev, ep);
max_packet = usb_endpoint_maxp(&ep->desc);
/* Allow 3 retries for everything but isoc, set CErr = 3 */
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
-@@ -487,6 +487,7 @@ static void xhci_pci_quirks(struct devic
+@@ -512,6 +512,7 @@ static void xhci_pci_quirks(struct devic
xhci->quirks |= XHCI_TRB_OVERFETCH;
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1662,6 +1662,7 @@ struct xhci_hcd {
+@@ -1663,6 +1663,7 @@ struct xhci_hcd {
/* Downstream VLI fixes */
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
/* Device for a quirk */
#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
-@@ -297,6 +299,16 @@ static int xhci_pci_reinit(struct xhci_h
+@@ -307,6 +309,16 @@ static int xhci_pci_reinit(struct xhci_h
return 0;
}
static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
{
struct pci_dev *pdev = to_pci_dev(dev);
-@@ -488,6 +500,8 @@ static void xhci_pci_quirks(struct devic
+@@ -513,6 +525,8 @@ static void xhci_pci_quirks(struct devic
xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
xhci->quirks |= XHCI_VLI_SS_BULK_OUT_BUG;
return 0;
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1663,6 +1663,7 @@ struct xhci_hcd {
+@@ -1664,6 +1664,7 @@ struct xhci_hcd {
/* Downstream VLI fixes */
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(57)
static int dwcmshc_rk35xx_init(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv)
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
-@@ -3055,6 +3055,15 @@ static void sdhci_card_event(struct mmc_
+@@ -3050,6 +3050,15 @@ static void sdhci_card_event(struct mmc_
spin_unlock_irqrestore(&host->lock, flags);
}
static const struct mmc_host_ops sdhci_ops = {
.request = sdhci_request,
.post_req = sdhci_post_req,
-@@ -3070,6 +3079,7 @@ static const struct mmc_host_ops sdhci_o
+@@ -3065,6 +3074,7 @@ static const struct mmc_host_ops sdhci_o
.execute_tuning = sdhci_execute_tuning,
.card_event = sdhci_card_event,
.card_busy = sdhci_card_busy,
};
/*****************************************************************************\
-@@ -4588,6 +4598,15 @@ int sdhci_setup_host(struct sdhci_host *
+@@ -4583,6 +4593,15 @@ int sdhci_setup_host(struct sdhci_host *
!(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
mmc->caps |= MMC_CAP_UHS_DDR50;
regmap_update_bits(dev->map, DW_IC_CON, DW_IC_CON_10BITADDR_MASTER,
ic_con);
-@@ -500,6 +504,14 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
+@@ -501,6 +505,14 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
regmap_read(dev->map, DW_IC_RXFLR, &flr);
rx_limit = dev->rx_fifo_depth - flr;
while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) {
u32 cmd = 0;
-@@ -781,7 +793,7 @@ static const struct i2c_algorithm i2c_dw
+@@ -782,7 +794,7 @@ static const struct i2c_algorithm i2c_dw
};
static const struct i2c_adapter_quirks i2c_dw_quirks = {
};
static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
-@@ -914,7 +926,8 @@ void i2c_dw_configure_master(struct dw_i
+@@ -915,7 +927,8 @@ void i2c_dw_configure_master(struct dw_i
{
struct i2c_timings *t = &dev->timings;
+ V3D_CORE_WRITE(core, V3D_CTL_INT_CLR, V3D_CORE_IRQS(v3d->ver));
+ V3D_WRITE(V3D_HUB_INT_CLR, V3D_HUB_IRQS(v3d->ver));
- irq1 = platform_get_irq_optional(v3d_to_pdev(v3d), 1);
- if (irq1 == -EPROBE_DEFER)
-@@ -276,12 +283,12 @@ v3d_irq_enable(struct v3d_dev *v3d)
+ irq = platform_get_irq_optional(v3d_to_pdev(v3d), 1);
+ if (irq == -EPROBE_DEFER)
+@@ -287,12 +294,12 @@ v3d_irq_enable(struct v3d_dev *v3d)
/* Enable our set of interrupts, masking out any others. */
for (core = 0; core < v3d->cores; core++) {
}
void
-@@ -296,8 +303,8 @@ v3d_irq_disable(struct v3d_dev *v3d)
+@@ -313,8 +320,8 @@ v3d_irq_disable(struct v3d_dev *v3d)
/* Clear any pending interrupts we might have left. */
for (core = 0; core < v3d->cores; core++)
sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND);
return true;
-@@ -3314,6 +3320,11 @@ static void sdhci_cmd_irq(struct sdhci_h
+@@ -3309,6 +3315,11 @@ static void sdhci_cmd_irq(struct sdhci_h
if (intmask & SDHCI_INT_TIMEOUT) {
host->cmd->error = -ETIMEDOUT;
sdhci_err_stats_inc(host, CMD_TIMEOUT);
BUG_ON(data->blksz > host->mmc->max_blk_size);
BUG_ON(data->blocks > 65535);
-@@ -4732,11 +4732,16 @@ int sdhci_setup_host(struct sdhci_host *
+@@ -4727,11 +4727,16 @@ int sdhci_setup_host(struct sdhci_host *
spin_lock_init(&host->lock);
/*
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
-@@ -4883,7 +4883,8 @@ static const struct {
+@@ -4879,7 +4879,8 @@ static const struct {
*/
static int hci_dev_setup_sync(struct hci_dev *hdev)
{
#define CID_MANFID_KINGSTON 0x70
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
-@@ -44,6 +44,14 @@ static const struct mmc_fixup __maybe_un
- 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
- MMC_QUIRK_NO_UHS_DDR50_TUNING, EXT_CSD_REV_ANY),
+@@ -58,6 +58,14 @@ static const struct mmc_fixup __maybe_un
+ MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
+ MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
+ /*
+ * Samsung Pro Plus/EVO Plus/Pro Ultimate SD cards (2023) claim to cache
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
-@@ -52,6 +52,18 @@ static const struct mmc_fixup __maybe_un
+@@ -66,6 +66,18 @@ static const struct mmc_fixup __maybe_un
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
@@ -181,6 +181,15 @@ static const struct mmc_fixup __maybe_un
- MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
- MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
+ MMC_FIXUP("M62704", CID_MANFID_KINGSTON, 0x0100, add_quirk_mmc,
+ MMC_QUIRK_TRIM_BROKEN),
+ /*
+ * Larger Integral SD cards using rebranded Phison controllers trash
/* Write SDA hold time if supported */
if (dev->sda_hold_time)
regmap_write(dev->map, DW_IC_SDA_HOLD, dev->sda_hold_time);
-@@ -1049,6 +1061,7 @@ int i2c_dw_probe_master(struct dw_i2c_de
+@@ -1050,6 +1062,7 @@ int i2c_dw_probe_master(struct dw_i2c_de
struct i2c_adapter *adap = &dev->adapter;
unsigned long irq_flags;
unsigned int ic_con;
int ret;
init_completion(&dev->cmd_complete);
-@@ -1083,7 +1096,11 @@ int i2c_dw_probe_master(struct dw_i2c_de
+@@ -1084,7 +1097,11 @@ int i2c_dw_probe_master(struct dw_i2c_de
if (ret)
return ret;
#define END_FIXUP { NULL }
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
-@@ -76,6 +76,12 @@ static const struct mmc_fixup __maybe_un
+@@ -90,6 +90,12 @@ static const struct mmc_fixup __maybe_un
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
goto clk_disable;
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
-@@ -115,13 +115,20 @@ struct v3d_perfmon {
- u64 values[];
+@@ -121,13 +121,20 @@ enum v3d_irq {
+ V3D_MAX_IRQS,
};
+enum v3d_gen {
+ enum v3d_gen ver;
bool single_irq_line;
- void __iomem *hub_regs;
-@@ -213,7 +220,7 @@ to_v3d_dev(struct drm_device *dev)
+ int irq[V3D_MAX_IRQS];
+@@ -221,7 +228,7 @@ to_v3d_dev(struct drm_device *dev)
static inline bool
v3d_has_csd(struct v3d_dev *v3d)
{
return;
V3D_GCA_WRITE(V3D_GCA_SAFE_SHUTDOWN, V3D_GCA_SAFE_SHUTDOWN_EN);
-@@ -179,13 +179,13 @@ v3d_reset(struct v3d_dev *v3d)
+@@ -181,13 +181,13 @@ v3d_reset(struct v3d_dev *v3d)
static void
v3d_flush_l3(struct v3d_dev *v3d)
{
V3D_GCA_WRITE(V3D_GCA_CACHE_CTRL,
gca_ctrl & ~V3D_GCA_CACHE_CTRL_FLUSH);
}
-@@ -198,7 +198,7 @@ v3d_flush_l3(struct v3d_dev *v3d)
+@@ -200,7 +200,7 @@ v3d_flush_l3(struct v3d_dev *v3d)
static void
v3d_invalidate_l2c(struct v3d_dev *v3d, int core)
{
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
-@@ -135,6 +135,7 @@ struct v3d_dev {
+@@ -143,6 +143,7 @@ struct v3d_dev {
void __iomem *core_regs[3];
void __iomem *bridge_regs;
void __iomem *gca_regs;
struct clk *clk;
struct delayed_work clk_down_work;
unsigned long clk_up_rate, clk_down_rate;
-@@ -277,6 +278,15 @@ to_v3d_fence(struct dma_fence *fence)
+@@ -285,6 +286,15 @@ to_v3d_fence(struct dma_fence *fence)
#define V3D_GCA_READ(offset) readl(v3d->gca_regs + offset)
#define V3D_GCA_WRITE(offset, val) writel(val, v3d->gca_regs + offset)
#define V3D_CORE_READ(core, offset) readl(v3d->core_regs[core] + offset)
#define V3D_CORE_WRITE(core, offset, val) writel(val, v3d->core_regs[core] + offset)
-@@ -455,6 +465,7 @@ int v3d_wait_bo_ioctl(struct drm_device
+@@ -463,6 +473,7 @@ int v3d_wait_bo_ioctl(struct drm_device
struct drm_file *file_priv);
void v3d_job_cleanup(struct v3d_job *job);
void v3d_job_put(struct v3d_job *job);
v3d_reset(struct v3d_dev *v3d)
{
struct drm_device *dev = &v3d->drm;
-@@ -166,6 +182,7 @@ v3d_reset(struct v3d_dev *v3d)
- v3d_idle_axi(v3d, 0);
+@@ -168,6 +184,7 @@ v3d_reset(struct v3d_dev *v3d)
+ v3d_irq_disable(v3d);
v3d_idle_gca(v3d);
+ v3d_reset_sms(v3d);
if (xhci->quirks & XHCI_NEC_HOST)
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
-@@ -1659,6 +1659,7 @@ struct xhci_hcd {
- #define XHCI_WRITE_64_HI_LO BIT_ULL(47)
+@@ -1660,6 +1660,7 @@ struct xhci_hcd {
#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
#define XHCI_ETRON_HOST BIT_ULL(49)
-+#define XHCI_FAKE_DOORBELL BIT_ULL(50)
+ #define XHCI_LIMIT_ENDPOINT_INTERVAL_9 BIT_ULL(50)
++#define XHCI_FAKE_DOORBELL BIT_ULL(51)
unsigned int num_active_eps;
unsigned int limit_active_eps;
+++ /dev/null
-From 93bd4a80efeb521314485a06d8c21157240497bb Mon Sep 17 00:00:00 2001
-Date: Sun, 11 May 2025 09:41:11 +0530
-Subject: powerpc/kernel: Fix ppc_save_regs inclusion in build
-
-Recent patch fixed an old commit
-'fc2a5a6161a2 ("powerpc/64s: ppc_save_regs is now needed for all 64s builds")'
-which is to include building of ppc_save_reg.c only when XMON
-and KEXEC_CORE and PPC_BOOK3S are enabled. This was valid, since
-ppc_save_regs was called only in replay_system_reset() of old
-irq.c which was under BOOK3S.
-
-But there has been multiple refactoring of irq.c and have
-added call to ppc_save_regs() from __replay_soft_interrupts
--> replay_soft_interrupts which is part of irq_64.c included
-under CONFIG_PPC64. And since ppc_save_regs is called in
-CRASH_DUMP path as part of crash_setup_regs in kexec.h,
-CONFIG_PPC32 also needs it.
-
-So with this recent patch which enabled the building of
-ppc_save_regs.c caused a build break when none of these
-(XMON, KEXEC_CORE, BOOK3S) where enabled as part of config.
-Patch to enable building of ppc_save_regs.c by defaults.
-
----
- arch/powerpc/kernel/Makefile | 2 --
- 1 file changed, 2 deletions(-)
-
---- a/arch/powerpc/kernel/Makefile
-+++ b/arch/powerpc/kernel/Makefile
-@@ -165,9 +165,7 @@ endif
-
- obj64-$(CONFIG_PPC_TRANSACTIONAL_MEM) += tm.o
-
--ifneq ($(CONFIG_XMON)$(CONFIG_KEXEC_CORE)$(CONFIG_PPC_BOOK3S),)
- obj-y += ppc_save_regs.o
--endif
-
- obj-$(CONFIG_EPAPR_PARAVIRT) += epapr_paravirt.o epapr_hcalls.o
- obj-$(CONFIG_KVM_GUEST) += kvm.o kvm_emul.o
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
-@@ -111,7 +111,7 @@ void notify_cpu_starting(unsigned int cp
+@@ -112,7 +112,7 @@ void notify_cpu_starting(unsigned int cp
extern void cpu_maps_update_begin(void);
extern void cpu_maps_update_done(void);
int bringup_hibernate_cpu(unsigned int sleep_cpu);
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
-@@ -6850,6 +6850,9 @@ static int igc_probe(struct pci_dev *pde
+@@ -6854,6 +6854,9 @@ static int igc_probe(struct pci_dev *pde
netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
NETDEV_XDP_ACT_XSK_ZEROCOPY;
if (sk_can_gso(sk)) {
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -1996,7 +1996,7 @@ void ieee80211_color_collision_detection
+@@ -2005,7 +2005,7 @@ void ieee80211_color_collision_detection
/* interface handling */
#define MAC80211_SUPPORTED_FEATURES_TX (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \
NETIF_F_HW_CSUM | NETIF_F_SG | \
static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
{
-@@ -1347,6 +1348,7 @@ static int spinand_probe(struct spi_mem
+@@ -1348,6 +1349,7 @@ static int spinand_probe(struct spi_mem
if (ret)
return ret;
ret = mtd_device_register(mtd, NULL, 0);
if (ret)
goto err_spinand_cleanup;
-@@ -1354,6 +1356,7 @@ static int spinand_probe(struct spi_mem
+@@ -1355,6 +1357,7 @@ static int spinand_probe(struct spi_mem
return 0;
err_spinand_cleanup:
spinand_cleanup(spinand);
return ret;
-@@ -1372,6 +1375,7 @@ static int spinand_remove(struct spi_mem
+@@ -1373,6 +1376,7 @@ static int spinand_remove(struct spi_mem
if (ret)
return ret;
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
-@@ -1441,6 +1441,7 @@ static int spinand_remove(struct spi_mem
+@@ -1442,6 +1442,7 @@ static int spinand_remove(struct spi_mem
static const struct spi_device_id spinand_ids[] = {
{ .name = "spi-nand" },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(spi, spinand_ids);
-@@ -1448,6 +1449,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids);
+@@ -1449,6 +1450,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids);
#ifdef CONFIG_OF
static const struct of_device_id spinand_of_ids[] = {
{ .compatible = "spi-nand" },
};
static const struct mtk_mmc_compatible mt7622_compat = {
-@@ -1731,9 +1737,11 @@ static void msdc_init_hw(struct msdc_hos
+@@ -1748,9 +1754,11 @@ static void msdc_init_hw(struct msdc_hos
}
writel(0, host->base + MSDC_IOCON);
sdr_set_field(host->base + MSDC_IOCON, MSDC_IOCON_DDLSEL, 0);
sdr_set_bits(host->base + EMMC50_CFG0, EMMC50_CFG_CFCSTS_SEL);
if (host->dev_comp->stop_clk_fix) {
-@@ -1797,6 +1805,18 @@ static void msdc_init_hw(struct msdc_hos
+@@ -1814,6 +1822,18 @@ static void msdc_init_hw(struct msdc_hos
MSDC_PAD_TUNE_RXDLYSEL);
}
#include "xhci.h"
#include "xhci-trace.h"
-@@ -1878,6 +1879,7 @@ EXPORT_SYMBOL_GPL(xhci_remove_secondary_
+@@ -1882,6 +1883,7 @@ EXPORT_SYMBOL_GPL(xhci_remove_secondary_
void xhci_mem_cleanup(struct xhci_hcd *xhci)
{
struct device *dev = xhci_to_hcd(xhci)->self.sysdev;
int i, j, num_ports;
cancel_delayed_work_sync(&xhci->cmd_timer);
-@@ -1928,6 +1930,13 @@ void xhci_mem_cleanup(struct xhci_hcd *x
+@@ -1932,6 +1934,13 @@ void xhci_mem_cleanup(struct xhci_hcd *x
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
"Freed medium stream array pool");
if (xhci->dcbaa)
dma_free_coherent(dev, sizeof(*xhci->dcbaa),
xhci->dcbaa, xhci->dcbaa->dma);
-@@ -2399,6 +2408,55 @@ xhci_create_secondary_interrupter(struct
+@@ -2403,6 +2412,55 @@ xhci_create_secondary_interrupter(struct
}
EXPORT_SYMBOL_GPL(xhci_create_secondary_interrupter);
int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
{
struct xhci_interrupter *ir;
-@@ -2540,6 +2598,12 @@ int xhci_mem_init(struct xhci_hcd *xhci,
+@@ -2544,6 +2602,12 @@ int xhci_mem_init(struct xhci_hcd *xhci,
xhci->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
/* There is one xhci_hcd structure per controller */
struct xhci_hcd {
struct usb_hcd *main_hcd;
-@@ -1660,6 +1667,8 @@ struct xhci_hcd {
- #define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
+@@ -1661,6 +1668,8 @@ struct xhci_hcd {
#define XHCI_ETRON_HOST BIT_ULL(49)
+ #define XHCI_LIMIT_ENDPOINT_INTERVAL_9 BIT_ULL(50)
+#define XHCI_LOCAL_BUFFER BIT_ULL(63)
+
unsigned int num_active_eps;
unsigned int limit_active_eps;
struct xhci_port *hw_ports;
-@@ -1689,6 +1698,8 @@ struct xhci_hcd {
+@@ -1690,6 +1699,8 @@ struct xhci_hcd {
struct list_head regset_list;
void *dbc;
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
-@@ -1932,7 +1932,8 @@ void xhci_mem_cleanup(struct xhci_hcd *x
+@@ -1936,7 +1936,8 @@ void xhci_mem_cleanup(struct xhci_hcd *x
if (xhci->lowmem_pool.pool) {
pool = &xhci->lowmem_pool;
gen_pool_destroy(pool->pool);
pool->pool = NULL;
}
-@@ -2419,15 +2420,15 @@ int xhci_setup_local_lowmem(struct xhci_
+@@ -2423,15 +2424,15 @@ int xhci_setup_local_lowmem(struct xhci_
if (!pool->pool) {
/* minimal alloc one page */
pool->pool = gen_pool_create(PAGE_SHIFT, dev_to_node(hcd->self.sysdev));
goto destroy_pool;
}
-@@ -2437,11 +2438,11 @@ int xhci_setup_local_lowmem(struct xhci_
+@@ -2441,11 +2442,11 @@ int xhci_setup_local_lowmem(struct xhci_
* for it.
*/
err = gen_pool_add_virt(pool->pool, (unsigned long)buffer,
goto destroy_pool;
}
-@@ -2465,7 +2466,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
+@@ -2469,7 +2470,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
unsigned int val, val2;
u64 val_64;
u32 page_size, temp;
INIT_LIST_HEAD(&xhci->cmd_list);
-@@ -2599,9 +2600,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
+@@ -2603,9 +2604,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
xhci->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
if (xhci->quirks & XHCI_LOCAL_BUFFER) {
CONFIG_MICROCODE_LATE_LOADING=y
CONFIG_MIGRATION=y
CONFIG_MITIGATION_ITS=y
+CONFIG_MITIGATION_TSA=y
CONFIG_MITIGATION_RFDS=y
CONFIG_MITIGATION_SPECTRE_BHI=y
# CONFIG_MK6 is not set