Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp4866209ybi; Mon, 3 Jun 2019 19:27:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqxnSKRaiR3PDhi9Dw+IVO3m3eIp2Mck37m0MrpjBDHj7TsG0NE3UerpbvhyQ2sd5yUHAEeP X-Received: by 2002:a17:90a:aa85:: with SMTP id l5mr32833295pjq.69.1559615265146; Mon, 03 Jun 2019 19:27:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559615265; cv=none; d=google.com; s=arc-20160816; b=Zb67MuIXxipTk4texCrL8wyKkj7AkBsP8SRTetxHlZKCauPQFZK60QpxRt3XmbjhzC 9l5Ba49FqBW3n5ioy6l9PqF7PVvt8ElouxuD3uxdDMM2Yv0kyLd3xjM7WRa4V+87PnFN MYXQOkUqDbW1CV+CkklSoQkMw3DlcCpMpJ0sWqxrbYJUaBg3l1YOJrwqVP9VSkf0jGpv zuPp7/fhDD+Sp15gCLc+XpoVAbfSQLfbrUrYUaWxi2dzUMeYc35Mu6n8Wvsr94ICsaG+ sJ7j5Jy3cpW6UW73xJTPmeu1QHQTr1Q/SISYVBBP5eB+63P6LVUxaSQhP6AWCuj3IxKw sxFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from; bh=XD0ysTm9hQmo9GHxBlf4UWkUCe4vxPbcqzAthVh9fUc=; b=mv5Tjy6GVQvSjGIGru11VuVWZ8lcwAgux1B2BFJIcd8yIqiSapPefZHjItBOno2Ec/ lnf4xIgfNshb72hMF8BgfiIJuxWrQD10uiWH7rxLp1nKvL3yAzkMxbHSSVkyCHs4tE6p N802WRxV25fMU9X+CLwt7BIgPyq6brF9xwglHz4f1agXC2UUEGuNCPRcsz9ljYXPOCAw 4PBUAKP67jm3T9YlGjCkjJSlp6GL+/tXUjYuFXql27sRLFUeL7mNFEjHA29pPZTRrmAU BEALkzVE80pYZ0z+2hAs8zR1REM3e8ZtybZRokXoqTYARI3EeVerfHQCUn8WKjbtfVhd TFGA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m62si20929891pgm.392.2019.06.03.19.27.27; Mon, 03 Jun 2019 19:27:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726604AbfFDCZL (ORCPT + 99 others); Mon, 3 Jun 2019 22:25:11 -0400 Received: from smtp2200-217.mail.aliyun.com ([121.197.200.217]:39319 "EHLO smtp2200-217.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726369AbfFDCZJ (ORCPT ); Mon, 3 Jun 2019 22:25:09 -0400 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.0745275|-1;CH=green;DM=CONTINUE|CONTINUE|true|0.709893-0.0127304-0.277376;FP=307772312550016443|2|2|3|0|-1|-1|-1;HT=e01l01425;MF=han_mao@c-sky.com;NM=1;PH=DS;RN=4;RT=4;SR=0;TI=SMTPD_---.Eh71qzG_1559615106; Received: from localhost(mailfrom:han_mao@c-sky.com fp:SMTPD_---.Eh71qzG_1559615106) by smtp.aliyun-inc.com(10.147.42.198); Tue, 04 Jun 2019 10:25:06 +0800 From: Mao Han To: linux-kernel@vger.kernel.org Cc: Mao Han , linux-csky@vger.kernel.org, Guo Ren Subject: [PATCH V4 1/6] csky: Init pmu as a device Date: Tue, 4 Jun 2019 10:23:55 +0800 Message-Id: <40e0b27c342458360f9f30ef16026cb63e792850.1559614824.git.han_mao@c-sky.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch change the csky pmu initialization from arch init to device init. The pmu can be configued with information from device tree(pmu device name, irq number and etc.). Signed-off-by: Mao Han Cc: Guo Ren --- arch/csky/kernel/perf_event.c | 58 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/arch/csky/kernel/perf_event.c b/arch/csky/kernel/perf_event.c index 376c972..c022acc 100644 --- a/arch/csky/kernel/perf_event.c +++ b/arch/csky/kernel/perf_event.c @@ -21,6 +21,8 @@ struct csky_pmu_t { uint32_t hpcr; } csky_pmu; +typedef int (*csky_pmu_init)(struct csky_pmu_t *); + #define cprgr(reg) \ ({ \ unsigned int tmp; \ @@ -1028,4 +1030,58 @@ int __init init_hw_perf_events(void) return perf_pmu_register(&csky_pmu.pmu, "cpu", PERF_TYPE_RAW); } -arch_initcall(init_hw_perf_events); + +int csky_pmu_device_probe(struct platform_device *pdev, + const struct of_device_id *of_table) +{ + const struct of_device_id *of_id; + csky_pmu_init init_fn; + struct device_node *node = pdev->dev.of_node; + int ret = -ENODEV; + + of_id = of_match_node(of_table, pdev->dev.of_node); + if (node && of_id) { + init_fn = of_id->data; + ret = init_fn(&csky_pmu); + } + + if (ret) { + pr_notice("[perf] failed to probe PMU!\n"); + return ret; + } + + return ret; +} + +const static struct of_device_id csky_pmu_of_device_ids[] = { + {.compatible = "csky,csky-pmu", .data = init_hw_perf_events}, + {}, +}; + +static int csky_pmu_dev_probe(struct platform_device *pdev) +{ + return csky_pmu_device_probe(pdev, csky_pmu_of_device_ids); +} + +static struct platform_driver csky_pmu_driver = { + .driver = { + .name = "csky-pmu", + .of_match_table = csky_pmu_of_device_ids, + }, + .probe = csky_pmu_dev_probe, +}; + +static int __init csky_pmu_probe(void) +{ + int ret; + + ret = platform_driver_register(&csky_pmu_driver); + if (ret) + pr_notice("[perf] PMU initialization failed\n"); + else + pr_notice("[perf] PMU initialization done\n"); + + return ret; +} + +device_initcall(csky_pmu_probe); -- 2.7.4