Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'armsoc-fixes-4.19' of git://git.kernel.org/pub/scm/linux/kernel/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

+57
+11
arch/arm/boot/dts/imx53-qsb-common.dtsi
··· 123 123 }; 124 124 }; 125 125 126 + &cpu0 { 127 + /* CPU rated to 1GHz, not 1.2GHz as per the default settings */ 128 + operating-points = < 129 + /* kHz uV */ 130 + 166666 850000 131 + 400000 900000 132 + 800000 1050000 133 + 1000000 1200000 134 + >; 135 + }; 136 + 126 137 &esdhc1 { 127 138 pinctrl-names = "default"; 128 139 pinctrl-0 = <&pinctrl_esdhc1>;
+11
drivers/soc/fsl/qbman/bman_ccsr.c
··· 120 120 */ 121 121 static dma_addr_t fbpr_a; 122 122 static size_t fbpr_sz; 123 + static int __bman_probed; 123 124 124 125 static int bman_fbpr(struct reserved_mem *rmem) 125 126 { ··· 167 166 return IRQ_HANDLED; 168 167 } 169 168 169 + int bman_is_probed(void) 170 + { 171 + return __bman_probed; 172 + } 173 + EXPORT_SYMBOL_GPL(bman_is_probed); 174 + 170 175 static int fsl_bman_probe(struct platform_device *pdev) 171 176 { 172 177 int ret, err_irq; ··· 181 174 struct resource *res; 182 175 u16 id, bm_pool_cnt; 183 176 u8 major, minor; 177 + 178 + __bman_probed = -1; 184 179 185 180 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 186 181 if (!res) { ··· 263 254 0, bm_pool_cnt - 1, ret); 264 255 return ret; 265 256 } 257 + 258 + __bman_probed = 1; 266 259 267 260 return 0; 268 261 };
+11
drivers/soc/fsl/qbman/qman_ccsr.c
··· 273 273 static u32 __iomem *qm_ccsr_start; 274 274 /* A SDQCR mask comprising all the available/visible pool channels */ 275 275 static u32 qm_pools_sdqcr; 276 + static int __qman_probed; 276 277 277 278 static inline u32 qm_ccsr_in(u32 offset) 278 279 { ··· 687 686 return 0; 688 687 } 689 688 689 + int qman_is_probed(void) 690 + { 691 + return __qman_probed; 692 + } 693 + EXPORT_SYMBOL_GPL(qman_is_probed); 694 + 690 695 static int fsl_qman_probe(struct platform_device *pdev) 691 696 { 692 697 struct device *dev = &pdev->dev; ··· 701 694 int ret, err_irq; 702 695 u16 id; 703 696 u8 major, minor; 697 + 698 + __qman_probed = -1; 704 699 705 700 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 706 701 if (!res) { ··· 836 827 ret = qman_wq_alloc(); 837 828 if (ret) 838 829 return ret; 830 + 831 + __qman_probed = 1; 839 832 840 833 return 0; 841 834 }
+8
drivers/soc/fsl/qbman/qman_portal.c
··· 227 227 int irq, cpu, err; 228 228 u32 val; 229 229 230 + err = qman_is_probed(); 231 + if (!err) 232 + return -EPROBE_DEFER; 233 + if (err < 0) { 234 + dev_err(&pdev->dev, "failing probe due to qman probe error\n"); 235 + return -ENODEV; 236 + } 237 + 230 238 pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL); 231 239 if (!pcfg) 232 240 return -ENOMEM;
+8
include/soc/fsl/bman.h
··· 126 126 */ 127 127 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num); 128 128 129 + /** 130 + * bman_is_probed - Check if bman is probed 131 + * 132 + * Returns 1 if the bman driver successfully probed, -1 if the bman driver 133 + * failed to probe or 0 if the bman driver did not probed yet. 134 + */ 135 + int bman_is_probed(void); 136 + 129 137 #endif /* __FSL_BMAN_H */
+8
include/soc/fsl/qman.h
··· 1186 1186 */ 1187 1187 int qman_release_cgrid(u32 id); 1188 1188 1189 + /** 1190 + * qman_is_probed - Check if qman is probed 1191 + * 1192 + * Returns 1 if the qman driver successfully probed, -1 if the qman driver 1193 + * failed to probe or 0 if the qman driver did not probed yet. 1194 + */ 1195 + int qman_is_probed(void); 1196 + 1189 1197 #endif /* __FSL_QMAN_H */