Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bab5c80b authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files
Arnd writes:
  "ARM: SoC fixes for 4.19

   Two last minute bugfixes, both for NXP platforms:

   * The Layerscape 'qbman' infrastructure suffers from probe ordering
     bugs in some configurations, a two-patch series adds a hotfix for
     this. 4.20 will have a longer set of patches to rework it.

   * The old imx53-qsb board regressed in 4.19 after the addition
     of cpufreq support, adding a set of explicit operating points
     fixes this."

* tag 'armsoc-fixes-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  soc: fsl: qman_portals: defer probe after qman's probe
  soc: fsl: qbman: add APIs to retrieve the probing status
  ARM: dts: imx53-qsb: disable 1.2GHz OPP
parents f014ffb0 3f4258bb
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -123,6 +123,17 @@
	};
};

&cpu0 {
	/* CPU rated to 1GHz, not 1.2GHz as per the default settings */
	operating-points = <
		/* kHz   uV */
		166666  850000
		400000  900000
		800000  1050000
		1000000 1200000
	>;
};

&esdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc1>;
+11 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ static void bm_set_memory(u64 ba, u32 size)
 */
static dma_addr_t fbpr_a;
static size_t fbpr_sz;
static int __bman_probed;

static int bman_fbpr(struct reserved_mem *rmem)
{
@@ -166,6 +167,12 @@ static irqreturn_t bman_isr(int irq, void *ptr)
	return IRQ_HANDLED;
}

int bman_is_probed(void)
{
	return __bman_probed;
}
EXPORT_SYMBOL_GPL(bman_is_probed);

static int fsl_bman_probe(struct platform_device *pdev)
{
	int ret, err_irq;
@@ -175,6 +182,8 @@ static int fsl_bman_probe(struct platform_device *pdev)
	u16 id, bm_pool_cnt;
	u8 major, minor;

	__bman_probed = -1;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n",
@@ -255,6 +264,8 @@ static int fsl_bman_probe(struct platform_device *pdev)
		return ret;
	}

	__bman_probed = 1;

	return 0;
};

+11 −0
Original line number Diff line number Diff line
@@ -273,6 +273,7 @@ static const struct qman_error_info_mdata error_mdata[] = {
static u32 __iomem *qm_ccsr_start;
/* A SDQCR mask comprising all the available/visible pool channels */
static u32 qm_pools_sdqcr;
static int __qman_probed;

static inline u32 qm_ccsr_in(u32 offset)
{
@@ -686,6 +687,12 @@ static int qman_resource_init(struct device *dev)
	return 0;
}

int qman_is_probed(void)
{
	return __qman_probed;
}
EXPORT_SYMBOL_GPL(qman_is_probed);

static int fsl_qman_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
@@ -695,6 +702,8 @@ static int fsl_qman_probe(struct platform_device *pdev)
	u16 id;
	u8 major, minor;

	__qman_probed = -1;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		dev_err(dev, "Can't get %pOF property 'IORESOURCE_MEM'\n",
@@ -828,6 +837,8 @@ static int fsl_qman_probe(struct platform_device *pdev)
	if (ret)
		return ret;

	__qman_probed = 1;

	return 0;
}

+8 −0
Original line number Diff line number Diff line
@@ -227,6 +227,14 @@ static int qman_portal_probe(struct platform_device *pdev)
	int irq, cpu, err;
	u32 val;

	err = qman_is_probed();
	if (!err)
		return -EPROBE_DEFER;
	if (err < 0) {
		dev_err(&pdev->dev, "failing probe due to qman probe error\n");
		return -ENODEV;
	}

	pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL);
	if (!pcfg)
		return -ENOMEM;
+8 −0
Original line number Diff line number Diff line
@@ -126,4 +126,12 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num);
 */
int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num);

/**
 * bman_is_probed - Check if bman is probed
 *
 * Returns 1 if the bman driver successfully probed, -1 if the bman driver
 * failed to probe or 0 if the bman driver did not probed yet.
 */
int bman_is_probed(void);

#endif	/* __FSL_BMAN_H */
Loading