static int __init quadd_module_init(void) { int i, nr_events, err; int *events; pr_info("Branch: %s\n", QUADD_MODULE_BRANCH); pr_info("Version: %s\n", QUADD_MODULE_VERSION); pr_info("Samples version: %d\n", QUADD_SAMPLES_VERSION); pr_info("IO version: %d\n", QUADD_IO_VERSION); #ifdef QM_DEBUG_SAMPLES_ENABLE pr_info("############## DEBUG VERSION! ##############\n"); #endif atomic_set(&ctx.started, 0); atomic_set(&ctx.tegra_profiler_lock, 0); get_default_properties(); ctx.pmu_info.active = 0; ctx.pl310_info.active = 0; #ifdef CONFIG_ARM64 ctx.pmu = quadd_armv8_pmu_init(); #else ctx.pmu = quadd_armv7_pmu_init(); #endif if (!ctx.pmu) { pr_err("PMU init failed\n"); return -ENODEV; } else { events = ctx.pmu_info.supported_events; nr_events = ctx.pmu->get_supported_events(events, QUADD_MAX_COUNTERS); ctx.pmu_info.nr_supported_events = nr_events; pr_debug("PMU: amount of events: %d\n", nr_events); for (i = 0; i < nr_events; i++) pr_debug("PMU event: %s\n", quadd_get_event_str(events[i])); } #ifdef CONFIG_CACHE_L2X0 ctx.pl310 = quadd_l2x0_events_init(); #else ctx.pl310 = NULL; #endif if (ctx.pl310) { events = ctx.pl310_info.supported_events; nr_events = ctx.pl310->get_supported_events(events, QUADD_MAX_COUNTERS); ctx.pl310_info.nr_supported_events = nr_events; pr_info("pl310 success, amount of events: %d\n", nr_events); for (i = 0; i < nr_events; i++) pr_info("pl310 event: %s\n", quadd_get_event_str(events[i])); } else { pr_debug("PL310 not found\n"); } ctx.hrt = quadd_hrt_init(&ctx); if (IS_ERR(ctx.hrt)) { pr_err("error: HRT init failed\n"); return PTR_ERR(ctx.hrt); } err = quadd_power_clk_init(&ctx); if (err < 0) { pr_err("error: POWER CLK init failed\n"); return err; } ctx.comm = quadd_comm_events_init(&control); if (IS_ERR(ctx.comm)) { pr_err("error: COMM init failed\n"); return PTR_ERR(ctx.comm); } err = quadd_auth_init(&ctx); if (err < 0) { pr_err("error: auth failed\n"); return err; } err = quadd_unwind_init(); if (err < 0) { pr_err("error: EH unwinding init failed\n"); return err; } get_capabilities(&ctx.cap); quadd_proc_init(&ctx); return 0; }
static int __init quadd_module_init(void) { int i, nr_events, err; int *events; pr_info("Branch: %s\n", QUADD_MODULE_BRANCH); pr_info("Version: %s\n", QUADD_MODULE_VERSION); pr_info("Samples version: %d\n", QUADD_SAMPLES_VERSION); pr_info("IO version: %d\n", QUADD_IO_VERSION); #ifdef QM_DEBUG_SAMPLES_ENABLE pr_info("############## DEBUG VERSION! ##############\n"); #endif atomic_set(&ctx.started, 0); get_default_properties(); ctx.pmu_info.active = 0; ctx.pl310_info.active = 0; ctx.pmu = quadd_armv7_pmu_init(); if (!ctx.pmu) { pr_err("PMU init failed\n"); return -ENODEV; } else { events = ctx.pmu_info.supported_events; nr_events = ctx.pmu->get_supported_events(events); ctx.pmu_info.nr_supported_events = nr_events; pr_info("PMU: amount of events: %d\n", nr_events); for (i = 0; i < nr_events; i++) pr_info("PMU event: %s\n", quadd_get_event_str(events[i])); } ctx.pl310 = quadd_l2x0_events_init(); if (ctx.pl310) { events = ctx.pl310_info.supported_events; nr_events = ctx.pl310->get_supported_events(events); ctx.pl310_info.nr_supported_events = nr_events; pr_info("pl310 success, amount of events: %d\n", nr_events); for (i = 0; i < nr_events; i++) pr_info("pl310 event: %s\n", quadd_get_event_str(events[i])); } else { pr_info("PL310 not found\n"); } ctx.hrt = quadd_hrt_init(&ctx); if (!ctx.hrt) { pr_err("error: HRT init failed\n"); return -ENODEV; } ctx.mmap = quadd_mmap_init(&ctx); if (!ctx.mmap) { pr_err("error: MMAP init failed\n"); return -ENODEV; } err = quadd_power_clk_init(&ctx); if (err < 0) { pr_err("error: POWER CLK init failed\n"); return err; } ctx.comm = quadd_comm_events_init(&control); if (!ctx.comm) { pr_err("error: COMM init failed\n"); return -ENODEV; } err = quadd_auth_init(&ctx); if (err < 0) { pr_err("error: auth failed\n"); return err; } return 0; }