Skip to content

Commit

Permalink
Merge tag 'armsoc-fixes-4.19' of git://git.kernel.org/pub/scm/linux/k…
Browse files Browse the repository at this point in the history
…ernel/git/arm/arm-soc

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
  • Loading branch information
gregkh committed Oct 12, 2018
2 parents f014ffb + 3f4258b commit bab5c80
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 0 deletions.
11 changes: 11 additions & 0 deletions arch/arm/boot/dts/imx53-qsb-common.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -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>;
Expand Down
11 changes: 11 additions & 0 deletions drivers/soc/fsl/qbman/bman_ccsr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand All @@ -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",
Expand Down Expand Up @@ -255,6 +264,8 @@ static int fsl_bman_probe(struct platform_device *pdev)
return ret;
}

__bman_probed = 1;

return 0;
};

Expand Down
11 changes: 11 additions & 0 deletions drivers/soc/fsl/qbman/qman_ccsr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand All @@ -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",
Expand Down Expand Up @@ -828,6 +837,8 @@ static int fsl_qman_probe(struct platform_device *pdev)
if (ret)
return ret;

__qman_probed = 1;

return 0;
}

Expand Down
8 changes: 8 additions & 0 deletions drivers/soc/fsl/qbman/qman_portal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions include/soc/fsl/bman.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
8 changes: 8 additions & 0 deletions include/soc/fsl/qman.h
Original file line number Diff line number Diff line change
Expand Up @@ -1186,4 +1186,12 @@ int qman_alloc_cgrid_range(u32 *result, u32 count);
*/
int qman_release_cgrid(u32 id);

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

#endif /* __FSL_QMAN_H */

0 comments on commit bab5c80

Please sign in to comment.