Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp102282imj; Thu, 14 Feb 2019 16:16:38 -0800 (PST) X-Google-Smtp-Source: AHgI3IZpLP+xq3iWupbGcQ91lnciMBgL0OPe9hK7iXX072NBn2ZreG2NVa/DdqEb9ZupRtLjNj+l X-Received: by 2002:a17:902:f096:: with SMTP id go22mr7190353plb.23.1550189798899; Thu, 14 Feb 2019 16:16:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550189798; cv=none; d=google.com; s=arc-20160816; b=YzUo4K2zRy8Fg6Dl820O/hW6BTb8GRLgKshPQxjwdo1qrCzmMEvz4TP3ZaLPfXsZBn NxLCyKXd39cCxQyWRGhDhOkOQxkB2nOZizG2G0QFBmbH6ebsnxwb6t/lOhClxxrtDvgI 4A8ufaf9H60kB8Wus9i6OQIdW74JwFxCR1zcXtEot2UZSEQd/B0PilbtH4Cx7fwoeq26 NytjWLP/msN3EJnCRYXAN0YTv/DEwXgi4dLhNgsonfhcJjn2dQuHNp53l6zoaMwLZPHX AlkhDywU/zkGCts1ZsiTrDVEDgkZGZym+2tWOzwrl6F9aWbOwbGEmaQp1Os9XxUwY1av Vv+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Es/cEXbYyznp8EfSwmv6V/WrOaOvER1k/aQsIXQBUy8=; b=cDRjqcjCCaUYrYyuX6ZqGMCwGGLad9QRAl0tFJ8NlzB+CdsGw989rQHzrBWpy2NWpO HoTH5/I5z3t13+/V6KaKBe+uOwQym1ieEW/wlqL3BPU5rDaTWxv86ZQMp4LuXMvYQ8Tb gYtGgVCiziGsN626vYxslkDpSdNvGxJgPOrOcIZTmIdjhhzbhpzvoHe58Sui1vh1a8mU AjhoLewwpQ6Klr7+wHfd/lmsnOdtEfFPkiAxHye1lTJ0AW1ZAMAUVEMEJQlqBSrPwd4O LIG7L4K/6nVqfh+ptA3wGbYaaefW7N0LHr2IureHsrQQkVu2wY/pGDFCC3rWTROx7rJ5 XXDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20150623.gappssmtp.com header.s=20150623 header.b=T32DKEna; 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 c18si3653927pgh.335.2019.02.14.16.16.23; Thu, 14 Feb 2019 16:16:38 -0800 (PST) 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; dkim=pass header.i=@bgdev-pl.20150623.gappssmtp.com header.s=20150623 header.b=T32DKEna; 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 S2407434AbfBNOyL (ORCPT + 99 others); Thu, 14 Feb 2019 09:54:11 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:35725 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2439592AbfBNOxT (ORCPT ); Thu, 14 Feb 2019 09:53:19 -0500 Received: by mail-wr1-f65.google.com with SMTP id t18so6824237wrx.2 for ; Thu, 14 Feb 2019 06:53:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Es/cEXbYyznp8EfSwmv6V/WrOaOvER1k/aQsIXQBUy8=; b=T32DKEnacf/eUTfU5APkOxV1AtwhDWBnEVr0uiyv+VoA2iptvzz8AHVxorAo712rte SdrZbQZVSLIa15PesVepoSC0uFhrk5Z/vZgqkfSz/dWJO3ApFauRmLCeJnCSQvpt6Gwx JTbzIcTQqhcjjHzoPKwDc2hlRVtdGeO4R29VGpnoJ7FuaSoYnhk6HNyAJkfNMsRjlKDJ ZLhqNi/9HM3FLPQJH94uQ4CbzPzHAvQIV3vxN3+0PEtNhYgEp5OPYsBCFdq681frK5Z8 45jWqh0VVQjQ7JkAsRSmCiktRuoBdLrEzJ8fOLcbjV2lrgrdyN8Y1HOXXHZyRaUYqj0H /KrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Es/cEXbYyznp8EfSwmv6V/WrOaOvER1k/aQsIXQBUy8=; b=VRGGuy86YkCqbo1KDzqF+QMZtg76GB0Qxfg5YKB0dQhp6ywpFkCGH9rDF8yGTIFz2z 9z2znrWb36G06TVYXHtuSvEt4uMBNBRYVMR+zNSpNLJLqKWTLd/lpu2uv1hSEHucKI6Q cP8JTZ2xL24XLDAk3/qsfCCumvcU2NHqcHlJYi9IrvLO8kxn/Fkzf0QB52zunFLxoCVC nhWbeCQ64GXtF+XNU3tRpYGRm0NuAUjxQU07dvO85Fyz72qtncK0RQJxcvVnB+NH9nD9 syiSAmHKPREhMgxKB0eC8+GVsuDsLIETslU+yKV6lNHTNm8zL6s2O96Xc7C8+oPWZQ1w a1Xg== X-Gm-Message-State: AHQUAuaCx0tyn3FLFJm1tKOuiMBqp4zy82BER9FNgaRY4j69K31KmPXL UND8qERsawSJ/KoUG3/RsFU4/g== X-Received: by 2002:adf:8224:: with SMTP id 33mr3269179wrb.264.1550155997370; Thu, 14 Feb 2019 06:53:17 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id y20sm4181005wra.51.2019.02.14.06.53.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Feb 2019 06:53:16 -0800 (PST) From: Bartosz Golaszewski To: Dmitry Torokhov , Sekhar Nori , Kevin Hilman , Thomas Gleixner , Jason Cooper , Marc Zyngier , David Lechner Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH v4 29/37] ARM: davinci: cp-intc: use the new-style config structure Date: Thu, 14 Feb 2019 15:52:23 +0100 Message-Id: <20190214145231.8750-30-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190214145231.8750-1-brgl@bgdev.pl> References: <20190214145231.8750-1-brgl@bgdev.pl> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bartosz Golaszewski Modify the cp-intc driver to take all its configuration from the new config structure. Stop referencing davinci_soc_info in any way. Move the declaration for davinci_cp_intc_init() to irq-davinci-cp-intc.h and make it take the new config structure as parameter. Convert all users to the new version. Also: since the two da8xx SoCs default all irq priorities to 7, just drop the priority configuration at all and hardcode the channels to 7. It will simplify the driver code and make our lives easier when it comes to device-tree support. Signed-off-by: Bartosz Golaszewski --- arch/arm/mach-davinci/cp_intc.c | 99 ++++++++++----------- arch/arm/mach-davinci/da830.c | 2 +- arch/arm/mach-davinci/da850.c | 2 +- arch/arm/mach-davinci/include/mach/common.h | 1 - include/linux/irqchip/irq-davinci-cp-intc.h | 2 + 5 files changed, 50 insertions(+), 56 deletions(-) diff --git a/arch/arm/mach-davinci/cp_intc.c b/arch/arm/mach-davinci/cp_intc.c index dcd43b067a6a..f56a4275083f 100644 --- a/arch/arm/mach-davinci/cp_intc.c +++ b/arch/arm/mach-davinci/cp_intc.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -20,7 +21,6 @@ #include #include -#include #define DAVINCI_CP_INTC_CTRL 0x04 #define DAVINCI_CP_INTC_HOST_CTRL 0x0c @@ -158,22 +158,15 @@ static const struct irq_domain_ops davinci_cp_intc_irq_domain_ops = { .xlate = irq_domain_xlate_onetwocell, }; -static int __init davinci_cp_intc_of_init(struct device_node *node, - struct device_node *parent) +static int __init +davinci_cp_intc_do_init(const struct davinci_cp_intc_config *config, + struct device_node *node) { - u32 num_irq = davinci_soc_info.intc_irq_num; - u8 *irq_prio = davinci_soc_info.intc_irq_prios; - unsigned num_reg = BITS_TO_LONGS(num_irq); - int i, irq_base; - - if (node) { - davinci_cp_intc_base = of_iomap(node, 0); - if (of_property_read_u32(node, "ti,intc-size", &num_irq)) - pr_warn("unable to get intc-size, default to %d\n", - num_irq); - } else { - davinci_cp_intc_base = ioremap(davinci_soc_info.intc_base, SZ_8K); - } + unsigned int num_regs = BITS_TO_LONGS(config->num_irqs); + int offset, irq_base; + + davinci_cp_intc_base = ioremap(config->reg.start, + resource_size(&config->reg)); if (WARN_ON(!davinci_cp_intc_base)) return -EINVAL; @@ -183,51 +176,29 @@ static int __init davinci_cp_intc_of_init(struct device_node *node, davinci_cp_intc_write(0, DAVINCI_CP_INTC_HOST_ENABLE(0)); /* Disable system interrupts */ - for (i = 0; i < num_reg; i++) - davinci_cp_intc_write(~0, DAVINCI_CP_INTC_SYS_ENABLE_CLR(i)); + for (offset = 0; offset < num_regs; offset++) + davinci_cp_intc_write(~0, + DAVINCI_CP_INTC_SYS_ENABLE_CLR(offset)); /* Set to normal mode, no nesting, no priority hold */ davinci_cp_intc_write(0, DAVINCI_CP_INTC_CTRL); davinci_cp_intc_write(0, DAVINCI_CP_INTC_HOST_CTRL); /* Clear system interrupt status */ - for (i = 0; i < num_reg; i++) - davinci_cp_intc_write(~0, DAVINCI_CP_INTC_SYS_STAT_CLR(i)); + for (offset = 0; offset < num_regs; offset++) + davinci_cp_intc_write(~0, + DAVINCI_CP_INTC_SYS_STAT_CLR(offset)); /* Enable nIRQ (what about nFIQ?) */ davinci_cp_intc_write(1, DAVINCI_CP_INTC_HOST_ENABLE_IDX_SET); - /* - * Priority is determined by host channel: lower channel number has - * higher priority i.e. channel 0 has highest priority and channel 31 - * had the lowest priority. - */ - num_reg = (num_irq + 3) >> 2; /* 4 channels per register */ - if (irq_prio) { - unsigned j, k; - u32 val; - - for (k = i = 0; i < num_reg; i++) { - for (val = j = 0; j < 4; j++, k++) { - val >>= 8; - if (k < num_irq) - val |= irq_prio[k] << 24; - } - - davinci_cp_intc_write(val, DAVINCI_CP_INTC_CHAN_MAP(i)); - } - } else { - /* - * Default everything to channel 15 if priority not specified. - * Note that channel 0-1 are mapped to nFIQ and channels 2-31 - * are mapped to nIRQ. - */ - for (i = 0; i < num_reg; i++) - davinci_cp_intc_write(0x0f0f0f0f, - DAVINCI_CP_INTC_CHAN_MAP(i)); - } + /* Default all priorities to channel 7. */ + num_regs = (config->num_irqs + 3) >> 2; /* 4 channels per register */ + for (offset = 0; offset < num_regs; offset++) + davinci_cp_intc_write(0x07070707, + DAVINCI_CP_INTC_CHAN_MAP(offset)); - irq_base = irq_alloc_descs(-1, 0, num_irq, 0); + irq_base = irq_alloc_descs(-1, 0, config->num_irqs, 0); if (irq_base < 0) { pr_warn("Couldn't allocate IRQ numbers\n"); irq_base = 0; @@ -235,7 +206,7 @@ static int __init davinci_cp_intc_of_init(struct device_node *node, /* create a legacy host */ davinci_cp_intc_irq_domain = irq_domain_add_legacy( - node, num_irq, irq_base, 0, + node, config->num_irqs, irq_base, 0, &davinci_cp_intc_irq_domain_ops, NULL); if (!davinci_cp_intc_irq_domain) { @@ -251,9 +222,31 @@ static int __init davinci_cp_intc_of_init(struct device_node *node, return 0; } -void __init davinci_cp_intc_init(void) +int __init davinci_cp_intc_init(const struct davinci_cp_intc_config *config) { - davinci_cp_intc_of_init(NULL, NULL); + return davinci_cp_intc_do_init(config, NULL); } +static int __init davinci_cp_intc_of_init(struct device_node *node, + struct device_node *parent) +{ + struct davinci_cp_intc_config config = { }; + int ret; + + ret = of_address_to_resource(node, 0, &config.reg); + if (ret) { + pr_err("%s: unable to get the register range from device-tree\n", + __func__); + return ret; + } + + ret = of_property_read_u32(node, "ti,intc-size", &config.num_irqs); + if (ret) { + pr_err("%s: unable to read the 'ti,intc-size' property\n", + __func__); + return ret; + } + + return davinci_cp_intc_do_init(&config, node); +} IRQCHIP_DECLARE(cp_intc, "ti,cp-intc", davinci_cp_intc_of_init); diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c index 0eb48ed2d423..7ce0b5f1200d 100644 --- a/arch/arm/mach-davinci/da830.c +++ b/arch/arm/mach-davinci/da830.c @@ -833,7 +833,7 @@ static const struct davinci_cp_intc_config da830_cp_intc_config = { void __init da830_init_irq(void) { - davinci_cp_intc_init(); + davinci_cp_intc_init(&da830_cp_intc_config); } void __init da830_init_time(void) diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c index fe274ab63fc8..62a00fa94696 100644 --- a/arch/arm/mach-davinci/da850.c +++ b/arch/arm/mach-davinci/da850.c @@ -771,7 +771,7 @@ static const struct davinci_cp_intc_config da850_cp_intc_config = { void __init da850_init_irq(void) { - davinci_cp_intc_init(); + davinci_cp_intc_init(&da850_cp_intc_config); } void __init da850_init_time(void) diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h index 7ad79171b4b5..14e0e1c40611 100644 --- a/arch/arm/mach-davinci/include/mach/common.h +++ b/arch/arm/mach-davinci/include/mach/common.h @@ -22,7 +22,6 @@ #define DAVINCI_INTC_START NR_IRQS #define DAVINCI_INTC_IRQ(_irqnum) (DAVINCI_INTC_START + (_irqnum)) -void davinci_cp_intc_init(void); void davinci_timer_init(struct clk *clk); struct davinci_timer_instance { diff --git a/include/linux/irqchip/irq-davinci-cp-intc.h b/include/linux/irqchip/irq-davinci-cp-intc.h index 2270a6167b98..8d71ed5b5a61 100644 --- a/include/linux/irqchip/irq-davinci-cp-intc.h +++ b/include/linux/irqchip/irq-davinci-cp-intc.h @@ -20,4 +20,6 @@ struct davinci_cp_intc_config { unsigned int num_irqs; }; +int davinci_cp_intc_init(const struct davinci_cp_intc_config *config); + #endif /* _LINUX_IRQ_DAVINCI_CP_INTC_ */ -- 2.20.1