jenswikl

irq config

May 3rd, 2021
421
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         if (sec_caps & OPTEE_SMC_SEC_CAP_ASYNC_NOTIF) {
  2.                 unsigned int irq;
  3.                 struct tee_context *ctx;
  4.  
  5.                 ctx = tee_dev_open_helper(optee->teedev);
  6.                 if (IS_ERR(ctx)) {
  7.                         optee_remove(pdev);
  8.                         return PTR_ERR(ctx);
  9.                 }
  10.                 optee->notif.ctx = ctx;
  11. #if 1
  12.                 rc = platform_get_irq(pdev, 0);
  13.                 if (rc < 0) {
  14.                         pr_err("platform_get_irq: ret %d\n", rc);
  15.                         goto err_unreg_supp_teedev;
  16.                 }
  17.                 irq = rc;
  18. #else
  19.                 /*
  20.                  * TODO:
  21.                  * Use this instead of storing the IRQ in DT.
  22.                  * The IRQ is chosen by OP-TEE and picking up the IRQ
  23.                  * from DT instead of while exchanging capabilities
  24.                  * might lead to duplicated data.
  25.                  *
  26.                  * Currently we're blocked at looking upp the irq domain
  27.                  * which is needed by irq_create_mapping().
  28.                  */
  29.                 struct irq_domain *domain;
  30.                 domain = irq_find_host(pdev->dev.of_node);
  31.                 if (!domain) {
  32.                         pr_err("Failed to find irqdomain\n");
  33.                         rc = -ENODEV;
  34.                         goto err_unreg_supp_teedev;
  35.                 }
  36.                 irq = irq_create_mapping(domain, notif_intid - 32);
  37.                 if (!irq) {
  38.                         pr_err("Failed to create virtual irq from hwirq %u\n",
  39.                                 notif_intid - 32);
  40.                         rc = -EINVAL;
  41.                         goto err_unreg_supp_teedev;
  42.                 }      
  43. #endif          
  44.                 rc = request_threaded_irq(irq, notif_irq_handler,
  45.                                         notif_irq_thread_fn, 0,
  46.                                         "optee_notification", optee);
  47.                 if (rc) {
  48.                         optee_remove(pdev);
  49.                         return rc;
  50.                 }      
  51.                
  52.                 optee->notif.irq = irq;
  53.                 enable_async_notif(optee->invoke_fn);
  54.                 pr_info("Asynchronous notifications enabled\n");
  55.         }
  56.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×