From: Mika Westerberg <mika.westerberg@linux.intel.com> To: linux-kernel@vger.kernel.org Cc: Andreas Noever <andreas.noever@gmail.com>, Michael Jamet <michael.jamet@intel.com>, Yehezkel Bernat <YehezkelShB@gmail.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, Lukas Wunner <lukas@wunner.de>, Mario.Limonciello@dell.com, Anthony Wong <anthony.wong@canonical.com>, Rajmohan Mani <rajmohan.mani@intel.com>, Raanan Avargil <raanan.avargil@intel.com>, David Laight <David.Laight@ACULAB.COM>, Mika Westerberg <mika.westerberg@linux.intel.com>, linux-acpi@vger.kernel.org Subject: [PATCH v3 3/8] thunderbolt: Use 32-bit writes when writing ring producer/consumer Date: Mon, 19 Aug 2019 14:22:18 +0300 Message-ID: <20190819112223.15359-4-mika.westerberg@linux.intel.com> (raw) In-Reply-To: <20190819112223.15359-1-mika.westerberg@linux.intel.com> The register access should be using 32-bit reads/writes according to the datasheet. With the previous generation hardware 16-bit writes have been working but starting with ICL this is not the case anymore so fix producer/consumer register update to use correct width register address. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Yehezkel Bernat <YehezkelShB@gmail.com> --- drivers/thunderbolt/nhi.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c index 27fbe62c7ddd..9c782706e652 100644 --- a/drivers/thunderbolt/nhi.c +++ b/drivers/thunderbolt/nhi.c @@ -143,9 +143,20 @@ static void __iomem *ring_options_base(struct tb_ring *ring) return io; } -static void ring_iowrite16desc(struct tb_ring *ring, u32 value, u32 offset) +static void ring_iowrite_cons(struct tb_ring *ring, u16 cons) { - iowrite16(value, ring_desc_base(ring) + offset); + /* + * The other 16-bits in the register is read-only and writes to it + * are ignored by the hardware so we can save one ioread32() by + * filling the read-only bits with zeroes. + */ + iowrite32(cons, ring_desc_base(ring) + 8); +} + +static void ring_iowrite_prod(struct tb_ring *ring, u16 prod) +{ + /* See ring_iowrite_cons() above for explanation */ + iowrite32(prod << 16, ring_desc_base(ring) + 8); } static void ring_iowrite32desc(struct tb_ring *ring, u32 value, u32 offset) @@ -197,7 +208,10 @@ static void ring_write_descriptors(struct tb_ring *ring) descriptor->sof = frame->sof; } ring->head = (ring->head + 1) % ring->size; - ring_iowrite16desc(ring, ring->head, ring->is_tx ? 10 : 8); + if (ring->is_tx) + ring_iowrite_prod(ring, ring->head); + else + ring_iowrite_cons(ring, ring->head); } } @@ -662,7 +676,7 @@ void tb_ring_stop(struct tb_ring *ring) ring_iowrite32options(ring, 0, 0); ring_iowrite64desc(ring, 0, 0); - ring_iowrite16desc(ring, 0, ring->is_tx ? 10 : 8); + ring_iowrite32desc(ring, 0, 8); ring_iowrite32desc(ring, 0, 12); ring->head = 0; ring->tail = 0; -- 2.23.0.rc1
next prev parent reply index Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-19 11:22 [PATCH v3 0/8] thunderbolt: Intel Ice Lake support Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 1/8] thunderbolt: Correct path indices for PCIe tunnel Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 2/8] thunderbolt: Move NVM upgrade support flag to struct icm Mika Westerberg 2019-08-19 11:22 ` Mika Westerberg [this message] 2019-08-19 11:22 ` [PATCH v3 4/8] thunderbolt: Do not fail adding switch if some port is not implemented Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 5/8] thunderbolt: Hide switch attributes that are not set Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 6/8] thunderbolt: Expose active parts of NVM even if upgrade is not supported Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 7/8] thunderbolt: Add support for Intel Ice Lake Mika Westerberg 2019-08-19 11:22 ` [PATCH v3 8/8] ACPI / property: Add two new Thunderbolt property GUIDs to the list Mika Westerberg 2019-08-19 16:29 ` [PATCH v3 0/8] thunderbolt: Intel Ice Lake support Mario.Limonciello 2019-08-19 17:57 ` Mika Westerberg 2019-08-19 18:22 ` Mario.Limonciello 2019-08-19 19:36 ` Mario.Limonciello 2019-08-20 10:01 ` Mika Westerberg 2019-08-20 11:34 ` Lukas Wunner 2019-08-20 17:00 ` Mario.Limonciello 2019-08-26 9:20 ` Mika Westerberg
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190819112223.15359-4-mika.westerberg@linux.intel.com \ --to=mika.westerberg@linux.intel.com \ --cc=David.Laight@ACULAB.COM \ --cc=Mario.Limonciello@dell.com \ --cc=YehezkelShB@gmail.com \ --cc=andreas.noever@gmail.com \ --cc=anthony.wong@canonical.com \ --cc=lenb@kernel.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lukas@wunner.de \ --cc=michael.jamet@intel.com \ --cc=raanan.avargil@intel.com \ --cc=rajmohan.mani@intel.com \ --cc=rjw@rjwysocki.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-ACPI Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-acpi/0 linux-acpi/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-acpi linux-acpi/ https://lore.kernel.org/linux-acpi \ linux-acpi@vger.kernel.org public-inbox-index linux-acpi Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-acpi AGPL code for this site: git clone https://public-inbox.org/public-inbox.git