Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp249704ybm; Wed, 22 May 2019 02:29:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqxapKVOzs2wSG0SPiFRWt0bRe2TB/rMjFixUqQ9nywguqHt9QG1G5oC7G/AAPaoAqdxsWbC X-Received: by 2002:a17:902:304:: with SMTP id 4mr50282777pld.120.1558517357136; Wed, 22 May 2019 02:29:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558517357; cv=none; d=google.com; s=arc-20160816; b=YUyYK+J1tcNjRvNTqrGW4yyUubor85A1fq04MjGyftoCEug927+1kQqME/B9FiEqUM AUL+fjk01By10OLU+IlWfcE32hfzKwp2XVPvHlVQLqZ5x24v0l88CM/wk6/oh3lfxwLO mWyXTW3YfC0AIM+3wG9hLz+vuINsIZUxQ+uClF89iZHpf8zvlu2faMsRG7BYuWM8cbli K2m/jkB/n0ZVDAtiL1q9J8UJXnqc+MUpZFfyQaG3Wg4sQdpp+2eYQKCOXY5cHWb5hjBw Dp3nFzA+DeAYfbn2TwskWYWHyv/IPK2gFixcpvBC2tfNgGU6guCOy6HrjXv8o7rrXWNZ kCjQ== 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=BgtIeGXARwNA1posDyjH3yIMmn1883SuNbdrwEPIfuJCXmREfID5/mxS0FX/h1tCR7 etSjYUKo7/8KQi11IFMtXM0PF+XaKpzxs2MuaPbPgPGibCgGgWTYTfVZn7cvtM1I5veS ueP5BJ9KVy3bAhiRbf1W8SukkQD6EjvhOoeUDfHeMRUce7cab1OiOKqeXzOlx4kz8Xc7 o5Oh6P94RYeVFh5WLSj0YYp2nqBNRL2F4tEv7UjqLYGJcvAEcs7Qt85n11d8l8YUX+cM /u249pM4iJoo4xIN0ukzbF2yULEYF+/iyLyCusZeA5Mjz0pRDYQR+Cu2QLA/Cx17p7Mg tutg== 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 g17si7617571pgk.500.2019.05.22.02.29.01; Wed, 22 May 2019 02:29:17 -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 S1728932AbfEVJ0s (ORCPT + 99 others); Wed, 22 May 2019 05:26:48 -0400 Received: from smtp2200-217.mail.aliyun.com ([121.197.200.217]:60846 "EHLO smtp2200-217.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728766AbfEVJ0r (ORCPT ); Wed, 22 May 2019 05:26:47 -0400 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.07449798|-1;CH=green;DM=CONTINUE|CONTINUE|true|0.709893-0.0127304-0.277376;FP=0|0|0|0|0|-1|-1|-1;HT=e01l07391;MF=han_mao@c-sky.com;NM=1;PH=DS;RN=4;RT=4;SR=0;TI=SMTPD_---.EbUMnas_1558517204; Received: from localhost(mailfrom:han_mao@c-sky.com fp:SMTPD_---.EbUMnas_1558517204) by smtp.aliyun-inc.com(10.147.40.233); Wed, 22 May 2019 17:26:44 +0800 From: Mao Han To: linux-kernel@vger.kernel.org Cc: Mao Han , Guo Ren , linux-csky@vger.kernel.org Subject: [PATCH 1/5] csky: Init pmu as a device Date: Wed, 22 May 2019 17:25:28 +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