Lines Matching full:l3
3 * OMAP L3 Interconnect error handling driver
23 * @l3: pointer to l3 struct
35 * 1) Custom errors in L3 :
37 * 2) Standard L3 error:
39 * L3 tries to access target while it is idle
50 static int l3_handle_target(struct omap_l3 *l3, void __iomem *base, in l3_handle_target() argument
114 l3->mst_addr_mask) >> __ffs(l3->mst_addr_mask); in l3_handle_target()
116 for (k = 0, master = l3->l3_masters; k < l3->num_masters; in l3_handle_target()
134 "%s:L3 %s Error: MASTER %s TARGET %s (%s)%s%s\n", in l3_handle_target()
135 dev_name(l3->dev), in l3_handle_target()
149 * l3_interrupt_handler() - interrupt handler for l3 events
151 * @_l3: pointer to l3 structure
153 * Interrupt Handler for L3 error detection.
154 * 1) Identify the L3 clockdomain partition to which the error belongs to.
161 struct omap_l3 *l3 = _l3; in l3_interrupt_handler() local
169 inttype = irq == l3->app_irq ? L3_APPLICATION_ERROR : L3_DEBUG_ERROR; in l3_interrupt_handler()
171 for (i = 0; i < l3->num_modules; i++) { in l3_interrupt_handler()
176 base = l3->l3_base[i]; in l3_interrupt_handler()
177 flag_mux = l3->l3_flagmux[i]; in l3_interrupt_handler()
189 ret = l3_handle_target(l3, base, flag_mux, err_src); in l3_interrupt_handler()
198 dev_err(l3->dev, in l3_interrupt_handler()
199 "L3 %s error: target %d mod:%d %s\n", in l3_interrupt_handler()
221 dev_err(l3->dev, "L3 %s IRQ not handled!!\n", in l3_interrupt_handler()
228 {.compatible = "ti,omap4-l3-noc", .data = &omap4_l3_data},
229 {.compatible = "ti,omap5-l3-noc", .data = &omap5_l3_data},
230 {.compatible = "ti,dra7-l3-noc", .data = &dra_l3_data},
231 {.compatible = "ti,am4372-l3-noc", .data = &am4372_l3_data},
239 static struct omap_l3 *l3; in omap_l3_probe() local
248 l3 = devm_kzalloc(&pdev->dev, sizeof(*l3), GFP_KERNEL); in omap_l3_probe()
249 if (!l3) in omap_l3_probe()
252 memcpy(l3, of_id->data, sizeof(*l3)); in omap_l3_probe()
253 l3->dev = &pdev->dev; in omap_l3_probe()
254 platform_set_drvdata(pdev, l3); in omap_l3_probe()
257 for (i = 0, res_idx = 0; i < l3->num_modules; i++) { in omap_l3_probe()
260 if (l3->l3_base[i] == L3_BASE_IS_SUBMODULE) { in omap_l3_probe()
263 l3->l3_base[i] = l3->l3_base[i - 1]; in omap_l3_probe()
267 l3->l3_base[i] = devm_ioremap_resource(&pdev->dev, res); in omap_l3_probe()
268 if (IS_ERR(l3->l3_base[i])) { in omap_l3_probe()
269 dev_err(l3->dev, "ioremap %d failed\n", i); in omap_l3_probe()
270 return PTR_ERR(l3->l3_base[i]); in omap_l3_probe()
278 l3->debug_irq = platform_get_irq(pdev, 0); in omap_l3_probe()
279 ret = devm_request_irq(l3->dev, l3->debug_irq, l3_interrupt_handler, in omap_l3_probe()
280 IRQF_NO_THREAD, "l3-dbg-irq", l3); in omap_l3_probe()
282 dev_err(l3->dev, "request_irq failed for %d\n", in omap_l3_probe()
283 l3->debug_irq); in omap_l3_probe()
287 l3->app_irq = platform_get_irq(pdev, 1); in omap_l3_probe()
288 ret = devm_request_irq(l3->dev, l3->app_irq, l3_interrupt_handler, in omap_l3_probe()
289 IRQF_NO_THREAD, "l3-app-irq", l3); in omap_l3_probe()
291 dev_err(l3->dev, "request_irq failed for %d\n", l3->app_irq); in omap_l3_probe()
308 struct omap_l3 *l3 = dev_get_drvdata(dev); in l3_resume_noirq() local
314 for (i = 0; i < l3->num_modules; i++) { in l3_resume_noirq()
315 base = l3->l3_base[i]; in l3_resume_noirq()
316 flag_mux = l3->l3_flagmux[i]; in l3_resume_noirq()
373 MODULE_DESCRIPTION("OMAP L3 Interconnect error handling driver");