drivers/remoteproc/qcom_q6v5_pas.c
Source file repositories/reference/linux-study-clean/drivers/remoteproc/qcom_q6v5_pas.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/remoteproc/qcom_q6v5_pas.c- Extension
.c- Size
- 42475 bytes
- Lines
- 1668
- Domain
- Driver Families
- Bucket
- drivers/remoteproc
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/clk.hlinux/delay.hlinux/firmware.hlinux/interrupt.hlinux/iommu.hlinux/kernel.hlinux/module.hlinux/of.hlinux/of_address.hlinux/of_reserved_mem.hlinux/platform_device.hlinux/pm_domain.hlinux/pm_runtime.hlinux/firmware/qcom/qcom_scm.hlinux/regulator/consumer.hlinux/remoteproc.hlinux/soc/qcom/mdt_loader.hlinux/soc/qcom/smem.hlinux/soc/qcom/smem_state.hqcom_common.hqcom_pil_info.hqcom_q6v5.hremoteproc_internal.h
Detected Declarations
struct qcom_pas_datastruct qcom_pasfunction qcom_pas_segment_dumpfunction qcom_pas_minidumpfunction qcom_pas_pds_enablefunction qcom_pas_pds_disablefunction qcom_pas_shutdown_poll_decryptfunction qcom_pas_unpreparefunction qcom_pas_loadfunction qcom_pas_unmap_carveoutfunction qcom_pas_map_carveoutfunction qcom_pas_startfunction qcom_pas_handoverfunction qcom_pas_stopfunction qcom_pas_parse_firmwarefunction qcom_pas_panicfunction qcom_pas_init_clockfunction qcom_pas_init_regulatorfunction qcom_pas_pds_attachfunction qcom_pas_pds_detachfunction qcom_pas_alloc_memory_regionfunction qcom_pas_assign_memory_regionfunction qcom_pas_unassign_memory_regionfunction qcom_pas_probefunction qcom_pas_remove
Annotated Snippet
struct qcom_pas_data {
int crash_reason_smem;
const char *firmware_name;
const char *dtb_firmware_name;
int pas_id;
int dtb_pas_id;
int lite_pas_id;
int lite_dtb_pas_id;
unsigned int minidump_id;
bool auto_boot;
bool decrypt_shutdown;
char **proxy_pd_names;
const char *load_state;
const char *ssr_name;
const char *sysmon_name;
int ssctl_id;
unsigned int smem_host_id;
int region_assign_idx;
int region_assign_count;
bool region_assign_shared;
int region_assign_vmid;
};
struct qcom_pas {
struct device *dev;
struct rproc *rproc;
struct qcom_q6v5 q6v5;
struct clk *xo;
struct clk *aggre2_clk;
struct regulator *cx_supply;
struct regulator *px_supply;
struct device *proxy_pds[3];
int proxy_pd_count;
const char *dtb_firmware_name;
int pas_id;
int dtb_pas_id;
int lite_pas_id;
int lite_dtb_pas_id;
unsigned int minidump_id;
int crash_reason_smem;
unsigned int smem_host_id;
bool decrypt_shutdown;
const char *info_name;
const struct firmware *firmware;
const struct firmware *dtb_firmware;
phys_addr_t mem_phys;
phys_addr_t dtb_mem_phys;
phys_addr_t mem_reloc;
phys_addr_t dtb_mem_reloc;
phys_addr_t region_assign_phys[MAX_ASSIGN_COUNT];
void *mem_region;
void *dtb_mem_region;
size_t mem_size;
size_t dtb_mem_size;
size_t region_assign_size[MAX_ASSIGN_COUNT];
int region_assign_idx;
int region_assign_count;
bool region_assign_shared;
int region_assign_vmid;
u64 region_assign_owners[MAX_ASSIGN_COUNT];
struct qcom_rproc_glink glink_subdev;
struct qcom_rproc_subdev smd_subdev;
struct qcom_rproc_pdm pdm_subdev;
struct qcom_rproc_ssr ssr_subdev;
struct qcom_sysmon *sysmon;
struct qcom_scm_pas_context *pas_ctx;
struct qcom_scm_pas_context *dtb_pas_ctx;
};
static void qcom_pas_segment_dump(struct rproc *rproc,
struct rproc_dump_segment *segment,
void *dest, size_t offset, size_t size)
{
struct qcom_pas *pas = rproc->priv;
int total_offset;
Annotation
- Immediate include surface: `linux/clk.h`, `linux/delay.h`, `linux/firmware.h`, `linux/interrupt.h`, `linux/iommu.h`, `linux/kernel.h`, `linux/module.h`, `linux/of.h`.
- Detected declarations: `struct qcom_pas_data`, `struct qcom_pas`, `function qcom_pas_segment_dump`, `function qcom_pas_minidump`, `function qcom_pas_pds_enable`, `function qcom_pas_pds_disable`, `function qcom_pas_shutdown_poll_decrypt`, `function qcom_pas_unprepare`, `function qcom_pas_load`, `function qcom_pas_unmap_carveout`.
- Atlas domain: Driver Families / drivers/remoteproc.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.