Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/477522/?format=api
{ "id": 477522, "url": "http://patchwork.ozlabs.org/api/patches/477522/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1432863742-18427-4-git-send-email-mathieu@codeaurora.org/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1432863742-18427-4-git-send-email-mathieu@codeaurora.org>", "list_archive_url": null, "date": "2015-05-29T01:42:18", "name": "[3/7] net: dsa: ar8xxx: add regmap support", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "80912e6b8d3097ab9fba8f8773277e29d902c9f0", "submitter": { "id": 65737, "url": "http://patchwork.ozlabs.org/api/people/65737/?format=api", "name": "Mathieu Olivari", "email": "mathieu@codeaurora.org" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1432863742-18427-4-git-send-email-mathieu@codeaurora.org/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/477522/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/477522/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 17C19140E1A\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 29 May 2015 11:43:32 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1755346AbbE2BnR (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 28 May 2015 21:43:17 -0400", "from smtp.codeaurora.org ([198.145.29.96]:37437 \"EHLO\n\tsmtp.codeaurora.org\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1754421AbbE2Bmd (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 28 May 2015 21:42:33 -0400", "from smtp.codeaurora.org (localhost [127.0.0.1])\n\tby smtp.codeaurora.org (Postfix) with ESMTP id 86604140DAF;\n\tFri, 29 May 2015 01:42:32 +0000 (UTC)", "by smtp.codeaurora.org (Postfix, from userid 486)\n\tid 7193F140DB9; Fri, 29 May 2015 01:42:32 +0000 (UTC)", "from mathieu-linux.qualcomm.com (qf-scl1nat.qualcomm.com\n\t[207.114.132.30])\n\t(using TLSv1.2 with cipher AES128-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\t(Authenticated sender: mathieu@smtp.codeaurora.org)\n\tby smtp.codeaurora.org (Postfix) with ESMTPSA id 6EC09140DAF;\n\tFri, 29 May 2015 01:42:31 +0000 (UTC)" ], "X-Spam-Checker-Version": "SpamAssassin 3.3.1 (2010-03-16) on\n\tpdx-caf-smtp.dmz.codeaurora.org", "X-Spam-Level": "", "X-Spam-Status": "No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00\n\tautolearn=ham version=3.3.1", "From": "Mathieu Olivari <mathieu@codeaurora.org>", "To": "robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,\n\tijc+devicetree@hellion.org.uk, galak@codeaurora.org,\n\tdavem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,\n\tf.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,\n\tjiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,\n\talexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,\n\tjoe@perches.com, sfeldma@gmail.com, nbd@openwrt.org, juhosg@openwrt.org", "Cc": "devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tnetdev@vger.kernel.org", "Subject": "[PATCH 3/7] net: dsa: ar8xxx: add regmap support", "Date": "Thu, 28 May 2015 18:42:18 -0700", "Message-Id": "<1432863742-18427-4-git-send-email-mathieu@codeaurora.org>", "X-Mailer": "git-send-email 2.1.4", "In-Reply-To": "<1432863742-18427-1-git-send-email-mathieu@codeaurora.org>", "References": "<1432863742-18427-1-git-send-email-mathieu@codeaurora.org>", "X-Virus-Scanned": "ClamAV using ClamSMTP", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "All switch registers can now be dumped using regmap/debugfs.\n\n\\# cat /sys/kernel/debug/regmap/<mdiobus>/registers\n0000: 00001302\n0004: ...\n...\n\nSigned-off-by: Mathieu Olivari <mathieu@codeaurora.org>\n---\n drivers/net/dsa/Kconfig | 1 +\n drivers/net/dsa/ar8xxx.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++\n drivers/net/dsa/ar8xxx.h | 5 ++++\n 3 files changed, 66 insertions(+)", "diff": "diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig\nindex 2aae541..17fb296 100644\n--- a/drivers/net/dsa/Kconfig\n+++ b/drivers/net/dsa/Kconfig\n@@ -68,6 +68,7 @@ config NET_DSA_BCM_SF2\n config NET_DSA_AR8XXX\n \ttristate \"Qualcomm Atheros AR8XXX Ethernet switch family support\"\n \tdepends on NET_DSA\n+\tselect REGMAP\n \t---help---\n \t This enables support for the Qualcomm Atheros AR8XXX Ethernet\n \t switch chips.\ndiff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c\nindex 2f0fa4d..327abd4 100644\n--- a/drivers/net/dsa/ar8xxx.c\n+++ b/drivers/net/dsa/ar8xxx.c\n@@ -176,6 +176,57 @@ static char *ar8xxx_probe(struct device *host_dev, int sw_addr)\n \t}\n }\n \n+static int ar8xxx_regmap_read(void *ctx, uint32_t reg, uint32_t *val)\n+{\n+\tstruct dsa_switch *ds = (struct dsa_switch *)ctx;\n+\n+\t*val = ar8xxx_read(ds, reg);\n+\n+\treturn 0;\n+}\n+\n+static int ar8xxx_regmap_write(void *ctx, uint32_t reg, uint32_t val)\n+{\n+\tstruct dsa_switch *ds = (struct dsa_switch *)ctx;\n+\n+\tar8xxx_write(ds, reg, val);\n+\n+\treturn 0;\n+}\n+\n+static const struct regmap_range ar8xxx_readable_ranges[] = {\n+\tregmap_reg_range(0x0000, 0x00e4), /* Global control */\n+\tregmap_reg_range(0x0100, 0x0168), /* EEE control */\n+\tregmap_reg_range(0x0200, 0x0270), /* Parser control */\n+\tregmap_reg_range(0x0400, 0x0454), /* ACL */\n+\tregmap_reg_range(0x0600, 0x0718), /* Lookup */\n+\tregmap_reg_range(0x0800, 0x0b70), /* QM */\n+\tregmap_reg_range(0x0C00, 0x0c80), /* PKT */\n+\tregmap_reg_range(0x1000, 0x10ac), /* MIB - Port0 */\n+\tregmap_reg_range(0x1100, 0x11ac), /* MIB - Port1 */\n+\tregmap_reg_range(0x1200, 0x12ac), /* MIB - Port2 */\n+\tregmap_reg_range(0x1300, 0x13ac), /* MIB - Port3 */\n+\tregmap_reg_range(0x1400, 0x14ac), /* MIB - Port4 */\n+\tregmap_reg_range(0x1500, 0x15ac), /* MIB - Port5 */\n+\tregmap_reg_range(0x1600, 0x16ac), /* MIB - Port6 */\n+\n+};\n+\n+static struct regmap_access_table ar8xxx_readable_table = {\n+\t.yes_ranges = ar8xxx_readable_ranges,\n+\t.n_yes_ranges = ARRAY_SIZE(ar8xxx_readable_ranges),\n+};\n+\n+struct regmap_config ar8xxx_regmap_config = {\n+\t.reg_bits = 16,\n+\t.val_bits = 32,\n+\t.reg_stride = 4,\n+\t.max_register = 0x16ac, /* end MIB - Port6 range */\n+\t.reg_read = ar8xxx_regmap_read,\n+\t.reg_write = ar8xxx_regmap_write,\n+\t.rd_table = &ar8xxx_readable_table,\n+};\n+\n static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)\n {\n \tint reg;\n@@ -219,9 +270,17 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)\n \n static int ar8xxx_setup(struct dsa_switch *ds)\n {\n+\tstruct ar8xxx_priv *priv = ds_to_priv(ds);\n \tstruct net_device *netdev = ds->dst->pd->of_netdev;\n \tint ret, i, phy_mode;\n \n+\t/* Start by setting up the register mapping */\n+\tpriv->regmap = devm_regmap_init(ds->master_dev, NULL, ds,\n+\t\t\t\t\t&ar8xxx_regmap_config);\n+\n+\tif (IS_ERR(priv->regmap))\n+\t\tpr_warn(\"regmap initialization failed\");\n+\n \t/* Initialize CPU port pad mode (xMII type, delays...) */\n \tphy_mode = of_get_phy_mode(netdev->dev.parent->of_node);\n \tif (phy_mode < 0) {\n@@ -365,6 +424,7 @@ static void ar8xxx_poll_link(struct dsa_switch *ds)\n \n static struct dsa_switch_driver ar8xxx_switch_driver = {\n \t.tag_protocol\t\t= DSA_TAG_PROTO_NONE,\n+\t.priv_size\t\t= sizeof(struct ar8xxx_priv),\n \t.probe\t\t\t= ar8xxx_probe,\n \t.setup\t\t\t= ar8xxx_setup,\n \t.set_addr\t\t= ar8xxx_set_addr,\ndiff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h\nindex 7c7a125..98cc7ed 100644\n--- a/drivers/net/dsa/ar8xxx.h\n+++ b/drivers/net/dsa/ar8xxx.h\n@@ -17,6 +17,11 @@\n #define __AR8XXX_H\n \n #include <linux/delay.h>\n+#include <linux/regmap.h>\n+\n+struct ar8xxx_priv {\n+\tstruct regmap *regmap;\n+};\n \n struct ar8xxx_mib_desc {\n \tunsigned int size;\n", "prefixes": [ "3/7" ] }