Re: [PATCH Xilinx Alveo 7/8] fpga: xrt: Alveo management physical function driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Yilun,


On 12/1/20 7:00 PM, Xu Yilun wrote:


+static int xmgmt_main_event_cb(struct platform_device *pdev,
+     enum xrt_events evt, void *arg)
+{
+     struct xmgmt_main *xmm = platform_get_drvdata(pdev);
+     struct xrt_event_arg_subdev *esd = (struct xrt_event_arg_subdev *)arg;
+     enum xrt_subdev_id id;
+     int instance;
+     size_t fwlen;
+
+     switch (evt) {
+     case XRT_EVENT_POST_CREATION: {
+             id = esd->xevt_subdev_id;
+             instance = esd->xevt_subdev_instance;
+             xrt_info(pdev, "processing event %d for (%d, %d)",
+                     evt, id, instance);
+
+             if (id == XRT_SUBDEV_GPIO)
+                     xmm->gpio_ready = true;
+             else if (id == XRT_SUBDEV_QSPI)
+                     xmm->flash_ready = true;
+             else
+                     BUG_ON(1);
+
+             if (xmm->gpio_ready && xmm->flash_ready) {
+                     int rc;
+
+                     rc = load_firmware_from_disk(pdev, &xmm->firmware_blp,
+                             &fwlen);
+                     if (rc != 0) {
+                             rc = load_firmware_from_flash(pdev,
+                                     &xmm->firmware_blp, &fwlen);

I'm curious that before the shell metadata is loaded, how the QSPI
subdev is enumerated and get to work? The QSPI DT info itself is
stored in metadata, is it?

No, it is not from the shell metadata. The QSPI subdev info is discovered from a rom located on the PCIE BAR pointed to by VSEC cap found in config space.


I didn't find the creation of leaf platform devices, maybe I can find
the answer in the missing Patch #5?

Leaf driver is children of partition driver. They are created in xrt_part_create_leaves() in xrt-partition.c.

Thanks,
Max


Thanks,
Yilun

+                     }
+                     if (rc == 0 && is_valid_firmware(pdev,
+                         xmm->firmware_blp, fwlen))
+                             (void) xmgmt_create_blp(xmm);
+                     else
+                             xrt_err(pdev,
+                                     "failed to find firmware, giving up");
+                     xmm->evt_hdl = NULL;
+             }
+             break;
+     }



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux