Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3459205ybi; Mon, 27 May 2019 00:01:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqxBZBasjm4ptDQ9BuDV/yKBk+dPW0RCHZaQIPPoJB6simUZkhx/QYcy5+60oIVkj8YSkysh X-Received: by 2002:a62:2a0a:: with SMTP id q10mr86315807pfq.79.1558940468087; Mon, 27 May 2019 00:01:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558940468; cv=none; d=google.com; s=arc-20160816; b=mV5U06YKfB3Ys+HVq2VIOnh6LGNV70Myhyzm1OMWx60S3eWPyaZAJO1MKVBtimZp8g 8j5KRlLRrh/ZKkbfb5QxknGBM7a4mnPpYn9qfZpY/W7RLEFHdHDemzarK+65sjmJWOy5 dChWuAnP6Nj8hygJqw0wh6I3S+myzc4qrUBDLpNvMI0Lx5mfAdHBgUSLr7QtXcpPddb7 6U2MwSDaoZBANfDP3Y5igIbKsCzwPB9jsMOfgobqdRsIuh0TOIPrdPUylYF1yXFHMKZ0 tSvo/F7Cy+gLFiCuP7eXlpjwN27lY+l/yyYGWqQx6vjlnAfiGm5Fy59ic8JZeiB5s0ht bA+g== 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=SLNo6VSOCy6e6KUcRjO5pzH0573BmJNuYDZ8TicH+4LGhrra+8ygLWWOnMiJrfyyPK 6R9Jtkb4GjB3PxxsVZHvJhtm1P+8ROowtjGg7STchceps6DCou8fdKczeouIing+vFRl 6t5dmDwPywuBKiTbsK3sMrMh2DtoiiVMwM/Vte//Tc5qzq2th9W+IhtC7fsoyRGamjpA KzNHm34ooSGNlIb0C/ShveX/zgGbbggx13jATxaEDCiUBIjnJiZTi4v2rXx6NxOM3Brc CcTStzw1jRXhFqDzkQgZH3Z/6iTeLB6odGnRSDEBkY5hoTJMTTFeIlONPTr4uqsVxxf0 TVdA== 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 b129si18814885pfa.254.2019.05.27.00.00.52; Mon, 27 May 2019 00:01:08 -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 S1725973AbfE0G6b (ORCPT + 99 others); Mon, 27 May 2019 02:58:31 -0400 Received: from smtp2200-217.mail.aliyun.com ([121.197.200.217]:42578 "EHLO smtp2200-217.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726063AbfE0G63 (ORCPT ); Mon, 27 May 2019 02:58:29 -0400 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.07450785|-1;CH=green;DM=CONTINUE|CONTINUE|true|0.709893-0.0127304-0.277376;FP=0|0|0|0|0|-1|-1|-1;HT=e02c03310;MF=han_mao@c-sky.com;NM=1;PH=DS;RN=4;RT=4;SR=0;TI=SMTPD_---.Edg1ot5_1558940306; Received: from localhost(mailfrom:han_mao@c-sky.com fp:SMTPD_---.Edg1ot5_1558940306) by smtp.aliyun-inc.com(10.147.40.7); Mon, 27 May 2019 14:58:26 +0800 From: Mao Han To: linux-kernel@vger.kernel.org Cc: Mao Han , Guo Ren , linux-csky@vger.kernel.org Subject: [PATCH V2 1/5] csky: Init pmu as a device Date: Mon, 27 May 2019 14:57:17 +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