Hi Andy, Thanks for the review. > + depends on GPIOLIB > > It doesn’t seem to provide a GPIO. I thought that was needed to consume GPIOs, but it looks like other PCI drivers don't do it. Removed. > + if (IS_ERR(port)) > + return -ENODEV; > + > + reset = devm_gpiod_get_index(pcie->dev, "reset", i, 0); > > Use appropriate flag. > > > + if (IS_ERR(reset)) > + return PTR_ERR(reset); > + > + gpiod_direction_output(reset, 0); > > Ditto and remove this line. Fixed in v2, thank you. > + usleep_range(5000, 10000); > > Sleep of such length should be explained. Removed in v2. > + > > Redundant blank line Presumably fixed in v2. > + pcie->bitmap = devm_kcalloc(pcie->dev, > BITS_TO_LONGS(pcie->nvecs), > + sizeof(long), GFP_KERNEL); > > devm_bitmap_zalloc() Done in v2. > +static const struct of_device_id apple_pci_of_match[] = { > + { .compatible = "apple,pcie", .data = &apple_m1_cfg_ecam_ops }, > > > > + { }, > > No comma for termination entry Fixed in v2. BR, Alyssa