drivers/pci/controller/dwc/pcie-qcom.c
Source file repositories/reference/linux-study-clean/drivers/pci/controller/dwc/pcie-qcom.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pci/controller/dwc/pcie-qcom.c- Extension
.c- Size
- 57072 bytes
- Lines
- 2181
- Domain
- Representative Device Path
- Bucket
- PCIe NVMe Storage Path
- Inferred role
- Representative Device Path: implementation source
- Status
- source implementation candidate
Why This File Exists
Part of the selected hardware vertical slice: PCI discovery, driver binding, NVMe queues, block requests, DMA, interrupts, and completion.
- Part of the selected hardware vertical slice: PCI discovery, driver binding, NVMe queues, block requests, DMA, interrupts, and completion.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/clk.hlinux/crc8.hlinux/debugfs.hlinux/delay.hlinux/gpio/consumer.hlinux/interconnect.hlinux/interrupt.hlinux/io.hlinux/iopoll.hlinux/kernel.hlinux/limits.hlinux/init.hlinux/of.hlinux/of_pci.hlinux/pci.hlinux/pci-ecam.hlinux/pci-pwrctrl.hlinux/pm_opp.hlinux/pm_runtime.hlinux/platform_device.hlinux/phy/pcie.hlinux/phy/phy.hlinux/regulator/consumer.hlinux/reset.hlinux/slab.hlinux/types.hlinux/units.h../../pci.h../pci-host-common.hpcie-designware.hpcie-qcom-common.h
Detected Declarations
struct qcom_pcie_resources_1_0_0struct qcom_pcie_resources_2_1_0struct qcom_pcie_resources_2_3_2struct qcom_pcie_resources_2_3_3struct qcom_pcie_resources_2_4_0struct qcom_pcie_resources_2_7_0struct qcom_pcie_resources_2_9_0struct qcom_pciestruct qcom_pcie_opsstruct qcom_pcie_cfgstruct qcom_pcie_perststruct qcom_pcie_portstruct qcom_pciefunction __qcom_pcie_perst_assertfunction list_for_each_entryfunction qcom_pcie_perst_assertfunction qcom_pcie_perst_deassertfunction qcom_pcie_start_linkfunction qcom_pcie_clear_aspm_l0sfunction qcom_pcie_set_slot_nccsfunction qcom_pcie_configure_dbi_basefunction qcom_pcie_configure_dbi_atu_basefunction qcom_pcie_2_1_0_ltssm_enablefunction qcom_pcie_get_resources_2_1_0function qcom_pcie_deinit_2_1_0function qcom_pcie_init_2_1_0function qcom_pcie_post_init_2_1_0function qcom_pcie_get_resources_1_0_0function qcom_pcie_deinit_1_0_0function qcom_pcie_init_1_0_0function qcom_pcie_post_init_1_0_0function qcom_pcie_2_3_2_ltssm_enablefunction qcom_pcie_get_resources_2_3_2function qcom_pcie_deinit_2_3_2function qcom_pcie_init_2_3_2function qcom_pcie_post_init_2_3_2function qcom_pcie_get_resources_2_4_0function qcom_pcie_deinit_2_4_0function qcom_pcie_init_2_4_0function qcom_pcie_get_resources_2_3_3function qcom_pcie_deinit_2_3_3function qcom_pcie_init_2_3_3function qcom_pcie_post_init_2_3_3function qcom_pcie_get_resources_2_7_0function qcom_pcie_init_2_7_0function qcom_pcie_post_init_2_7_0function qcom_pcie_enable_aspmfunction qcom_pcie_host_post_init_2_7_0
Annotated Snippet
struct qcom_pcie_resources_1_0_0 {
struct clk_bulk_data *clks;
int num_clks;
struct reset_control *core;
struct regulator *vdda;
};
#define QCOM_PCIE_2_1_0_MAX_RESETS 6
#define QCOM_PCIE_2_1_0_MAX_SUPPLY 3
struct qcom_pcie_resources_2_1_0 {
struct clk_bulk_data *clks;
int num_clks;
struct reset_control_bulk_data resets[QCOM_PCIE_2_1_0_MAX_RESETS];
int num_resets;
struct regulator_bulk_data supplies[QCOM_PCIE_2_1_0_MAX_SUPPLY];
};
#define QCOM_PCIE_2_3_2_MAX_SUPPLY 2
struct qcom_pcie_resources_2_3_2 {
struct clk_bulk_data *clks;
int num_clks;
struct regulator_bulk_data supplies[QCOM_PCIE_2_3_2_MAX_SUPPLY];
};
#define QCOM_PCIE_2_3_3_MAX_RESETS 7
struct qcom_pcie_resources_2_3_3 {
struct clk_bulk_data *clks;
int num_clks;
struct reset_control_bulk_data rst[QCOM_PCIE_2_3_3_MAX_RESETS];
};
#define QCOM_PCIE_2_4_0_MAX_RESETS 12
struct qcom_pcie_resources_2_4_0 {
struct clk_bulk_data *clks;
int num_clks;
struct reset_control_bulk_data resets[QCOM_PCIE_2_4_0_MAX_RESETS];
int num_resets;
};
#define QCOM_PCIE_2_7_0_MAX_SUPPLIES 2
struct qcom_pcie_resources_2_7_0 {
struct clk_bulk_data *clks;
int num_clks;
struct regulator_bulk_data supplies[QCOM_PCIE_2_7_0_MAX_SUPPLIES];
struct reset_control *rst;
};
struct qcom_pcie_resources_2_9_0 {
struct clk_bulk_data *clks;
int num_clks;
struct reset_control *rst;
};
union qcom_pcie_resources {
struct qcom_pcie_resources_1_0_0 v1_0_0;
struct qcom_pcie_resources_2_1_0 v2_1_0;
struct qcom_pcie_resources_2_3_2 v2_3_2;
struct qcom_pcie_resources_2_3_3 v2_3_3;
struct qcom_pcie_resources_2_4_0 v2_4_0;
struct qcom_pcie_resources_2_7_0 v2_7_0;
struct qcom_pcie_resources_2_9_0 v2_9_0;
};
struct qcom_pcie;
struct qcom_pcie_ops {
int (*get_resources)(struct qcom_pcie *pcie);
int (*init)(struct qcom_pcie *pcie);
int (*post_init)(struct qcom_pcie *pcie);
void (*host_post_init)(struct qcom_pcie *pcie);
void (*deinit)(struct qcom_pcie *pcie);
void (*ltssm_enable)(struct qcom_pcie *pcie);
int (*config_sid)(struct qcom_pcie *pcie);
};
/**
* struct qcom_pcie_cfg - Per SoC config struct
* @ops: qcom PCIe ops structure
* @override_no_snoop: Override NO_SNOOP attribute in TLP to enable cache
* snooping
* @firmware_managed: Set if the Root Complex is firmware managed
*/
struct qcom_pcie_cfg {
const struct qcom_pcie_ops *ops;
bool override_no_snoop;
bool firmware_managed;
bool no_l0s;
};
struct qcom_pcie_perst {
Annotation
- Immediate include surface: `linux/clk.h`, `linux/crc8.h`, `linux/debugfs.h`, `linux/delay.h`, `linux/gpio/consumer.h`, `linux/interconnect.h`, `linux/interrupt.h`, `linux/io.h`.
- Detected declarations: `struct qcom_pcie_resources_1_0_0`, `struct qcom_pcie_resources_2_1_0`, `struct qcom_pcie_resources_2_3_2`, `struct qcom_pcie_resources_2_3_3`, `struct qcom_pcie_resources_2_4_0`, `struct qcom_pcie_resources_2_7_0`, `struct qcom_pcie_resources_2_9_0`, `struct qcom_pcie`, `struct qcom_pcie_ops`, `struct qcom_pcie_cfg`.
- Atlas domain: Representative Device Path / PCIe NVMe Storage Path.
- Implementation status: source implementation candidate.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.