Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3821181ybi; Mon, 3 Jun 2019 00:25:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqxNUzPk8NKcCuBy5ggx5ePRQQsIBbbgpFYttAYnQghDRNJyxKu6H58DOvV+4i6k5BHji5/s X-Received: by 2002:a17:90a:9f47:: with SMTP id q7mr2768146pjv.103.1559546710427; Mon, 03 Jun 2019 00:25:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559546710; cv=none; d=google.com; s=arc-20160816; b=zV+o3SDyYDQi3JulMegoBMe84nJC26wslnlK0kb8krH640mUDYUezftnrv6KfesrCL f8x+4ZG1CoTh162U63iFXd0OHAoDZbsbAu0D5PfBlxmStgw/bOfUHo7zifPu8XQAIVjY bGd+t9IYUtQxdlkO7QxpHpqXOf1TbIvPnCgm7tJhlTYUxvYqXlw4enp1A9d7ylo28Ken 9ftEjdBQAFTAdvQMKAbR7rTsfgfT+y1jmbPrCZYptrqsQ7ioTWfgn62U+3r0fSX2fEPX 5tQ65zOL7VLUwknwXCykttE7C9Ffs5d4JoQ93EPhJmtcqkHu0c1uOtZZaUvSdC9RLDyu 9PYg== 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=M841J9lWunLsZweXQZal+FkrzK/HQQW3f6pgqrnA/QA=; b=d0gfNZWBdMQBAp4OVqP/0VeXDf1qRlPSHDpf2+0KAHp1yKm2eAu1qkIHge/eA3Azvd cWUKABUK4h8fjsmtNhoNta5gzE0slW0DlhRrpzFIoPRNo9EWaxagUqpXVFeJJT+OmGL4 NQ4Z7ZjpIP5rfwcWKYfqmN40LIO9bG52GvADLXgNUQVb09rv9EIU7oMQxbi/m3UhBBZT q/BCl9k7gYO+bcx71MuTiqbCkQb4VM8H9h/kfpbX7520ietiOKfkMwxzdyrcOajPc7AJ ziDN0HPjiZw+enVj+07c+pAb0uCM0J1HNZHlefXcskcexch/hhDSgKXOqdGzw9+2Yn2S +qjg== 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 j3si18597946pff.101.2019.06.03.00.24.52; Mon, 03 Jun 2019 00:25:10 -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 S1727280AbfFCGrj (ORCPT + 99 others); Mon, 3 Jun 2019 02:47:39 -0400 Received: from smtp2200-217.mail.aliyun.com ([121.197.200.217]:37192 "EHLO smtp2200-217.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727248AbfFCGri (ORCPT ); Mon, 3 Jun 2019 02:47:38 -0400 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.0744963|-1;CH=green;DM=CONTINUE|CONTINUE|true|0.709893-0.0127304-0.277376;FP=0|0|0|0|0|-1|-1|-1;HT=e02c03306;MF=han_mao@c-sky.com;NM=1;PH=DS;RN=4;RT=4;SR=0;TI=SMTPD_---.EglQrto_1559544452; Received: from localhost(mailfrom:han_mao@c-sky.com fp:SMTPD_---.EglQrto_1559544452) by smtp.aliyun-inc.com(10.147.41.199); Mon, 03 Jun 2019 14:47:32 +0800 From: Mao Han To: linux-kernel@vger.kernel.org Cc: Mao Han , Guo Ren , linux-csky@vger.kernel.org Subject: [PATCH V3 1/6] csky: Init pmu as a device Date: Mon, 3 Jun 2019 14:46:20 +0800 Message-Id: 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 CC: linux-csky@vger.kernel.org --- 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