mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge tag 'ASB-2024-12-05_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina
https://source.android.com/docs/security/bulletin/2024-12-01 * tag 'ASB-2024-12-05_11-5.4' of https://android.googlesource.com/kernel/common: (552 commits) UPSTREAM: net/sched: stop qdisc_tree_reduce_backlog on TC_H_ROOT ANDROID: add file for recording allowed ABI breaks Revert "spi: Fix deadlock when adding SPI controllers on SPI buses" Revert "spi: fix use-after-free of the add_lock mutex" ANDROID: declare sp_in_global outside of CONFIG_FRAME_POINTER BACKPORT: RISC-V: Stop relying on GCC's register allocator's hueristics UPSTREAM: x86/percpu: Clean up percpu_add_op() UPSTREAM: x86/percpu: Clean up percpu_from_op() UPSTREAM: x86/percpu: Clean up percpu_to_op() UPSTREAM: x86/percpu: Introduce size abstraction macros BACKPORT: FROMGIT: binder: add delivered_freeze to debugfs output BACKPORT: FROMGIT: binder: fix memleak of proc->delivered_freeze FROMGIT: binder: allow freeze notification for dead nodes FROMGIT: binder: fix BINDER_WORK_CLEAR_FREEZE_NOTIFICATION debug logs FROMGIT: binder: fix BINDER_WORK_FROZEN_BINDER debug logs BACKPORT: FROMGIT: binder: fix freeze UAF in binder_release_work() FROMGIT: binder: fix OOB in binder_add_freeze_work() FROMGIT: binder: fix node UAF in binder_add_freeze_work() Linux 5.4.286 mm: avoid leaving partial pfn mappings around in error case ... Conflicts: arch/arm64/boot/dts/vendor/bindings/gpu/samsung-rotator.txt arch/arm64/boot/dts/vendor/bindings/gpu/samsung-rotator.yaml drivers/clk/qcom/clk-rpmh.c drivers/usb/dwc3/core.c fs/erofs/decompressor.c net/qrtr/qrtr.c Change-Id: Iae3a7502b304d7be66da795411c4f330eef8b693
This commit is contained in:
commit
0262d4e51f
480 changed files with 4407 additions and 2292 deletions
|
|
@ -172,6 +172,13 @@ struct aspeed_i2c_bus {
|
|||
|
||||
static int aspeed_i2c_reset(struct aspeed_i2c_bus *bus);
|
||||
|
||||
/* precondition: bus.lock has been acquired. */
|
||||
static void aspeed_i2c_do_stop(struct aspeed_i2c_bus *bus)
|
||||
{
|
||||
bus->master_state = ASPEED_I2C_MASTER_STOP;
|
||||
writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
|
||||
}
|
||||
|
||||
static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
|
||||
{
|
||||
unsigned long time_left, flags;
|
||||
|
|
@ -189,7 +196,7 @@ static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
|
|||
command);
|
||||
|
||||
reinit_completion(&bus->cmd_complete);
|
||||
writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
|
||||
aspeed_i2c_do_stop(bus);
|
||||
spin_unlock_irqrestore(&bus->lock, flags);
|
||||
|
||||
time_left = wait_for_completion_timeout(
|
||||
|
|
@ -385,13 +392,6 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
|
|||
writel(command, bus->base + ASPEED_I2C_CMD_REG);
|
||||
}
|
||||
|
||||
/* precondition: bus.lock has been acquired. */
|
||||
static void aspeed_i2c_do_stop(struct aspeed_i2c_bus *bus)
|
||||
{
|
||||
bus->master_state = ASPEED_I2C_MASTER_STOP;
|
||||
writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
|
||||
}
|
||||
|
||||
/* precondition: bus.lock has been acquired. */
|
||||
static void aspeed_i2c_next_msg_or_stop(struct aspeed_i2c_bus *bus)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1861,8 +1861,15 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||
|
||||
i801_add_tco(priv);
|
||||
|
||||
/*
|
||||
* adapter.name is used by platform code to find the main I801 adapter
|
||||
* to instantiante i2c_clients, do not change.
|
||||
*/
|
||||
snprintf(priv->adapter.name, sizeof(priv->adapter.name),
|
||||
"SMBus I801 adapter at %04lx", priv->smba);
|
||||
"SMBus %s adapter at %04lx",
|
||||
(priv->features & FEATURE_IDF) ? "I801 IDF" : "I801",
|
||||
priv->smba);
|
||||
|
||||
err = i2c_add_adapter(&priv->adapter);
|
||||
if (err) {
|
||||
platform_device_unregister(priv->tco_pdev);
|
||||
|
|
|
|||
|
|
@ -99,8 +99,7 @@ static int sch_transaction(void)
|
|||
if (retries > MAX_RETRIES) {
|
||||
dev_err(&sch_adapter.dev, "SMBus Timeout!\n");
|
||||
result = -ETIMEDOUT;
|
||||
}
|
||||
if (temp & 0x04) {
|
||||
} else if (temp & 0x04) {
|
||||
result = -EIO;
|
||||
dev_dbg(&sch_adapter.dev, "Bus collision! SMBus may be "
|
||||
"locked until next hard reset. (sorry!)\n");
|
||||
|
|
|
|||
|
|
@ -529,45 +529,40 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
|||
struct resource *res;
|
||||
u32 proto, tx_depth;
|
||||
int ret;
|
||||
struct device *dev = &pdev->dev;
|
||||
|
||||
gi2c = devm_kzalloc(&pdev->dev, sizeof(*gi2c), GFP_KERNEL);
|
||||
gi2c = devm_kzalloc(dev, sizeof(*gi2c), GFP_KERNEL);
|
||||
if (!gi2c)
|
||||
return -ENOMEM;
|
||||
|
||||
gi2c->se.dev = &pdev->dev;
|
||||
gi2c->se.wrapper = dev_get_drvdata(pdev->dev.parent);
|
||||
gi2c->se.dev = dev;
|
||||
gi2c->se.wrapper = dev_get_drvdata(dev->parent);
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
gi2c->se.base = devm_ioremap_resource(&pdev->dev, res);
|
||||
gi2c->se.base = devm_ioremap_resource(dev, res);
|
||||
if (IS_ERR(gi2c->se.base))
|
||||
return PTR_ERR(gi2c->se.base);
|
||||
|
||||
gi2c->se.clk = devm_clk_get(&pdev->dev, "se");
|
||||
if (IS_ERR(gi2c->se.clk) && !has_acpi_companion(&pdev->dev)) {
|
||||
ret = PTR_ERR(gi2c->se.clk);
|
||||
dev_err(&pdev->dev, "Err getting SE Core clk %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
gi2c->se.clk = devm_clk_get(dev, "se");
|
||||
if (IS_ERR(gi2c->se.clk) && !has_acpi_companion(dev))
|
||||
return PTR_ERR(gi2c->se.clk);
|
||||
|
||||
ret = device_property_read_u32(&pdev->dev, "clock-frequency",
|
||||
&gi2c->clk_freq_out);
|
||||
ret = device_property_read_u32(dev, "clock-frequency",
|
||||
&gi2c->clk_freq_out);
|
||||
if (ret) {
|
||||
dev_info(&pdev->dev,
|
||||
"Bus frequency not specified, default to 100kHz.\n");
|
||||
dev_info(dev, "Bus frequency not specified, default to 100kHz.\n");
|
||||
gi2c->clk_freq_out = KHZ(100);
|
||||
}
|
||||
|
||||
if (has_acpi_companion(&pdev->dev))
|
||||
ACPI_COMPANION_SET(&gi2c->adap.dev, ACPI_COMPANION(&pdev->dev));
|
||||
if (has_acpi_companion(dev))
|
||||
ACPI_COMPANION_SET(&gi2c->adap.dev, ACPI_COMPANION(dev));
|
||||
|
||||
gi2c->irq = platform_get_irq(pdev, 0);
|
||||
if (gi2c->irq < 0) {
|
||||
dev_err(&pdev->dev, "IRQ error for i2c-geni\n");
|
||||
if (gi2c->irq < 0)
|
||||
return gi2c->irq;
|
||||
}
|
||||
|
||||
ret = geni_i2c_clk_map_idx(gi2c);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Invalid clk frequency %d Hz: %d\n",
|
||||
dev_err(dev, "Invalid clk frequency %d Hz: %d\n",
|
||||
gi2c->clk_freq_out, ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -576,29 +571,27 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
|||
init_completion(&gi2c->done);
|
||||
spin_lock_init(&gi2c->lock);
|
||||
platform_set_drvdata(pdev, gi2c);
|
||||
ret = devm_request_irq(&pdev->dev, gi2c->irq, geni_i2c_irq,
|
||||
IRQF_TRIGGER_HIGH, "i2c_geni", gi2c);
|
||||
ret = devm_request_irq(dev, gi2c->irq, geni_i2c_irq, IRQF_NO_AUTOEN,
|
||||
dev_name(dev), gi2c);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Request_irq failed:%d: err:%d\n",
|
||||
dev_err(dev, "Request_irq failed:%d: err:%d\n",
|
||||
gi2c->irq, ret);
|
||||
return ret;
|
||||
}
|
||||
/* Disable the interrupt so that the system can enter low-power mode */
|
||||
disable_irq(gi2c->irq);
|
||||
i2c_set_adapdata(&gi2c->adap, gi2c);
|
||||
gi2c->adap.dev.parent = &pdev->dev;
|
||||
gi2c->adap.dev.of_node = pdev->dev.of_node;
|
||||
gi2c->adap.dev.parent = dev;
|
||||
gi2c->adap.dev.of_node = dev->of_node;
|
||||
strlcpy(gi2c->adap.name, "Geni-I2C", sizeof(gi2c->adap.name));
|
||||
|
||||
ret = geni_se_resources_on(&gi2c->se);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Error turning on resources %d\n", ret);
|
||||
dev_err(dev, "Error turning on resources %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
proto = geni_se_read_proto(&gi2c->se);
|
||||
tx_depth = geni_se_get_tx_fifo_depth(&gi2c->se);
|
||||
if (proto != GENI_SE_I2C) {
|
||||
dev_err(&pdev->dev, "Invalid proto %d\n", proto);
|
||||
dev_err(dev, "Invalid proto %d\n", proto);
|
||||
geni_se_resources_off(&gi2c->se);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
|
@ -608,11 +601,11 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
|||
true, true, true);
|
||||
ret = geni_se_resources_off(&gi2c->se);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Error turning off resources %d\n", ret);
|
||||
dev_err(dev, "Error turning off resources %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth);
|
||||
dev_dbg(dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth);
|
||||
|
||||
gi2c->suspended = 1;
|
||||
pm_runtime_set_suspended(gi2c->se.dev);
|
||||
|
|
@ -622,12 +615,12 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
|||
|
||||
ret = i2c_add_adapter(&gi2c->adap);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Error adding i2c adapter %d\n", ret);
|
||||
dev_err(dev, "Error adding i2c adapter %d\n", ret);
|
||||
pm_runtime_disable(gi2c->se.dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "Geni-I2C adaptor successfully added\n");
|
||||
dev_dbg(dev, "Geni-I2C adaptor successfully added\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2070,7 +2070,7 @@ static int stm32f7_i2c_runtime_suspend(struct device *dev)
|
|||
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
|
||||
|
||||
if (!stm32f7_i2c_is_slave_registered(i2c_dev))
|
||||
clk_disable_unprepare(i2c_dev->clk);
|
||||
clk_disable(i2c_dev->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2081,9 +2081,9 @@ static int stm32f7_i2c_runtime_resume(struct device *dev)
|
|||
int ret;
|
||||
|
||||
if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
|
||||
ret = clk_prepare_enable(i2c_dev->clk);
|
||||
ret = clk_enable(i2c_dev->clk);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to prepare_enable clock\n");
|
||||
dev_err(dev, "failed to enable clock\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -469,14 +469,17 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
|
|||
goto out;
|
||||
}
|
||||
|
||||
xiic_fill_tx_fifo(i2c);
|
||||
|
||||
/* current message sent and there is space in the fifo */
|
||||
if (!xiic_tx_space(i2c) && xiic_tx_fifo_space(i2c) >= 2) {
|
||||
if (xiic_tx_space(i2c)) {
|
||||
xiic_fill_tx_fifo(i2c);
|
||||
} else {
|
||||
/* current message fully written */
|
||||
dev_dbg(i2c->adap.dev.parent,
|
||||
"%s end of message sent, nmsgs: %d\n",
|
||||
__func__, i2c->nmsgs);
|
||||
if (i2c->nmsgs > 1) {
|
||||
/* Don't move onto the next message until the TX FIFO empties,
|
||||
* to ensure that a NAK is not missed.
|
||||
*/
|
||||
if (i2c->nmsgs > 1 && (pend & XIIC_INTR_TX_EMPTY_MASK)) {
|
||||
i2c->nmsgs--;
|
||||
i2c->tx_msg++;
|
||||
xfer_more = 1;
|
||||
|
|
@ -487,11 +490,7 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
|
|||
"%s Got TX IRQ but no more to do...\n",
|
||||
__func__);
|
||||
}
|
||||
} else if (!xiic_tx_space(i2c) && (i2c->nmsgs == 1))
|
||||
/* current frame is sent and is last,
|
||||
* make sure to disable tx half
|
||||
*/
|
||||
xiic_irq_dis(i2c, XIIC_INTR_TX_HALF_MASK);
|
||||
}
|
||||
}
|
||||
out:
|
||||
dev_dbg(i2c->adap.dev.parent, "%s clr: 0x%x\n", __func__, clr);
|
||||
|
|
|
|||
Loading…
Reference in a new issue