Commit b04c38b6 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'drivers_soc_for_5.12' of...

Merge tag 'drivers_soc_for_5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone into arm/drivers

drivers: soc: Keystone update for v5.12

Updates include:
	- Navigator refcount correction
	- probe fix in pm driver
	- fix clock init for PRUSS
	- PRUSS binding doc update
	- of_device_get_match_data() use in ringacc

* tag 'drivers_soc_for_5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone:
  soc: ti: k3-ringacc: Use of_device_get_match_data()
  soc: ti: pruss: Refactor the CFG sub-module init
  dt-bindings: soc: ti: Update TI PRUSS bindings about schemas to include
  soc: ti: pruss: Correct the pruss_clk_init error trace text
  soc: ti: pm33xx: Fix some resource leak in the error handling paths of the probe function
  soc: ti: knav_qmss: Put refcount for dev node in failure case

Link: https://lore.kernel.org/r/1612156854-10929-1-git-send-email-santosh.shilimkar@oracle.com


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 60a64da9 a8fc8e5b
Loading
Loading
Loading
Loading
+76 −0
Original line number Diff line number Diff line
@@ -81,6 +81,9 @@ properties:
  ranges:
    maxItems: 1

  dma-ranges:
    maxItems: 1

  power-domains:
    description: |
      This property is as per sci-pm-domain.txt.
@@ -278,6 +281,9 @@ patternProperties:
      that is common to all the PRU cores. This should be represented as an
      interrupt-controller node.

    allOf:
      - $ref: /schemas/interrupt-controller/ti,pruss-intc.yaml#

    type: object

  mdio@[a-f0-9]+$:
@@ -299,6 +305,9 @@ patternProperties:
      present on K3 SoCs have additional auxiliary PRU cores with slightly
      different IP integration.

    allOf:
      - $ref: /schemas/remoteproc/ti,pru-rproc.yaml#

    type: object

required:
@@ -371,6 +380,36 @@ examples:
            reg = <0x32000 0x58>;
        };

        pruss_intc: interrupt-controller@20000 {
            compatible = "ti,pruss-intc";
            reg = <0x20000 0x2000>;
            interrupt-controller;
            #interrupt-cells = <3>;
            interrupts = <20 21 22 23 24 25 26 27>;
            interrupt-names = "host_intr0", "host_intr1",
                              "host_intr2", "host_intr3",
                              "host_intr4", "host_intr5",
                              "host_intr6", "host_intr7";
        };

        pru0: pru@34000 {
            compatible = "ti,am3356-pru";
            reg = <0x34000 0x2000>,
                  <0x22000 0x400>,
                  <0x22400 0x100>;
            reg-names = "iram", "control", "debug";
            firmware-name = "am335x-pru0-fw";
        };

        pru1: pru@38000 {
            compatible = "ti,am3356-pru";
            reg = <0x38000 0x2000>,
                  <0x24000 0x400>,
                  <0x24400 0x100>;
            reg-names = "iram", "control", "debug";
            firmware-name = "am335x-pru1-fw";
        };

        pruss_mdio: mdio@32400 {
            compatible = "ti,davinci_mdio";
            reg = <0x32400 0x90>;
@@ -425,6 +464,43 @@ examples:
            reg = <0x32000 0x58>;
        };

        pruss1_intc: interrupt-controller@20000 {
            compatible = "ti,pruss-intc";
            reg = <0x20000 0x2000>;
            interrupt-controller;
            #interrupt-cells = <3>;
            interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
            interrupt-names = "host_intr0", "host_intr1",
                              "host_intr2", "host_intr3",
                              "host_intr4",
                              "host_intr6", "host_intr7";
            ti,irqs-reserved = /bits/ 8 <0x20>; /* BIT(5) */
        };

        pru1_0: pru@34000 {
            compatible = "ti,am4376-pru";
            reg = <0x34000 0x3000>,
                  <0x22000 0x400>,
                  <0x22400 0x100>;
            reg-names = "iram", "control", "debug";
            firmware-name = "am437x-pru1_0-fw";
        };

        pru1_1: pru@38000 {
            compatible = "ti,am4376-pru";
            reg = <0x38000 0x3000>,
                  <0x24000 0x400>,
                  <0x24400 0x100>;
            reg-names = "iram", "control", "debug";
            firmware-name = "am437x-pru1_1-fw";
        };

        pruss1_mdio: mdio@32400 {
            compatible = "ti,davinci_mdio";
            reg = <0x32400 0x90>;
+3 −4
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/io.h>
#include <linux/init.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/sys_soc.h>
#include <linux/dma/ti-cppi5.h>
@@ -1517,15 +1518,13 @@ EXPORT_SYMBOL_GPL(k3_ringacc_dmarings_init);
static int k3_ringacc_probe(struct platform_device *pdev)
{
	const struct ringacc_match_data *match_data;
	const struct of_device_id *match;
	struct device *dev = &pdev->dev;
	struct k3_ringacc *ringacc;
	int ret;

	match = of_match_node(k3_ringacc_of_match, dev->of_node);
	if (!match)
	match_data = of_device_get_match_data(&pdev->dev);
	if (!match_data)
		return -ENODEV;
	match_data = match->data;

	ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
	if (!ringacc)
+1 −0
Original line number Diff line number Diff line
@@ -758,6 +758,7 @@ static int knav_dma_probe(struct platform_device *pdev)
	for_each_child_of_node(node, child) {
		ret = dma_init(node, child);
		if (ret) {
			of_node_put(child);
			dev_err(&pdev->dev, "init failed with %d\n", ret);
			break;
		}
+3 −0
Original line number Diff line number Diff line
@@ -1087,6 +1087,7 @@ static int knav_queue_setup_regions(struct knav_device *kdev,
	for_each_child_of_node(regions, child) {
		region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL);
		if (!region) {
			of_node_put(child);
			dev_err(dev, "out of memory allocating region\n");
			return -ENOMEM;
		}
@@ -1399,6 +1400,7 @@ static int knav_queue_init_qmgrs(struct knav_device *kdev,
	for_each_child_of_node(qmgrs, child) {
		qmgr = devm_kzalloc(dev, sizeof(*qmgr), GFP_KERNEL);
		if (!qmgr) {
			of_node_put(child);
			dev_err(dev, "out of memory allocating qmgr\n");
			return -ENOMEM;
		}
@@ -1498,6 +1500,7 @@ static int knav_queue_init_pdsps(struct knav_device *kdev,
	for_each_child_of_node(pdsps, child) {
		pdsp = devm_kzalloc(dev, sizeof(*pdsp), GFP_KERNEL);
		if (!pdsp) {
			of_node_put(child);
			dev_err(dev, "out of memory allocating pdsp\n");
			return -ENOMEM;
		}
+4 −1
Original line number Diff line number Diff line
@@ -535,7 +535,7 @@ static int am33xx_pm_probe(struct platform_device *pdev)

	ret = am33xx_push_sram_idle();
	if (ret)
		goto err_free_sram;
		goto err_unsetup_rtc;

	am33xx_pm_set_ipc_ops();

@@ -575,6 +575,9 @@ static int am33xx_pm_probe(struct platform_device *pdev)
err_pm_runtime_disable:
	pm_runtime_disable(dev);
	wkup_m3_ipc_put(m3_ipc);
err_unsetup_rtc:
	iounmap(rtc_base_virt);
	clk_put(rtc_fck);
err_free_sram:
	am33xx_pm_free_sram();
	pm33xx_dev = NULL;
Loading