All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: Jongsung Kim <neidhard.kim@lge.com>
Cc: "'Russell King'" <linux@arm.linux.org.uk>,
	"'Greg Kroah-Hartman'" <gregkh@linuxfoundation.org>,
	jslaby@suse.cz, linux-serial@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-rpi-kernel@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5
Date: Tue, 14 May 2013 22:59:58 -0600	[thread overview]
Message-ID: <5193164E.6050400@wwwdotorg.org> (raw)
In-Reply-To: <022d01ce5107$8bc668e0$a3533aa0$@lge.com>

On 05/14/2013 07:00 PM, Jongsung Kim wrote:
> Stephen Warren <swarren@wwwdotorg.org> :
>> Looking at BCM2835-ARM-Peripherals.pdf (i.e. the public documentation for
>> the BCM2835 chip), I see:
>>
>> =====
>> The UART provides:
>> * Separate 16x8 transmit and 16x12 receive FIFO memory.
>> ...
>> For the in-depth UART overview, please, refer to the ARM PrimeCell UART
>> (PL011) Revision: r1p5 Technical Reference Manual.
>> =====
>>
>> That seems to imply that not all r1p5 PL011s actually have a depth-32 FIFO.
>> Perhaps this is a configurable property of the IP block, not something that
>> all r1p5 have?
> 
> All r1p5 have 32-byte FIFO depth and it's not configurable. From the PL011
> TRM:
> 
> r1p4-r1p5	Contains the following differences in functionality:
> 		* The receive and transmit FIFOs are increased to a depth of 32.
> 		* The Revision field in the UARTPeriphID2 Register on page 3-24
> 		  bits [7:4] now reads back as 0x3.

Well, that certainly isn't true in practice. I think we should revert
this commit until we can determine what the problem is.

I validated that the periphid register in HW contains the r1p5 revision
(3), and the pcellid register does indeed contain the expected
0xb105f00d value. However, if I run the following hacky code in U-Boot
to determine the FIFO depth, it comes out as 16, which explains the
symptoms I'm seeing:

void find_fifo_depth(void)
{
	volatile u8 *uart = 0x20201000;
	int depth = 0;

	/* Wait for TX FIFO empty */
	while (!(uart[0x18] & 0x80))
		;

	/* Disable UART */
	uart[0x30] &= ~1;

	/* Push chars into TX FIFO until full */
	for (;;) {
		uart[0] = 'A' + depth;
		depth++;
		/* Done if FIFO full */
		if (uart[0x18] & 0x20)
			break;
		if (depth > 64) {
			depth = -1;
			break;
		}
	}

	/* Re-enable UART */
	uart[0x30] |= 1;

	printf("FIFO depth: %d\n", depth);
}

WARNING: multiple messages have this Message-ID (diff)
From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5
Date: Tue, 14 May 2013 22:59:58 -0600	[thread overview]
Message-ID: <5193164E.6050400@wwwdotorg.org> (raw)
In-Reply-To: <022d01ce5107$8bc668e0$a3533aa0$@lge.com>

On 05/14/2013 07:00 PM, Jongsung Kim wrote:
> Stephen Warren <swarren@wwwdotorg.org> :
>> Looking at BCM2835-ARM-Peripherals.pdf (i.e. the public documentation for
>> the BCM2835 chip), I see:
>>
>> =====
>> The UART provides:
>> * Separate 16x8 transmit and 16x12 receive FIFO memory.
>> ...
>> For the in-depth UART overview, please, refer to the ARM PrimeCell UART
>> (PL011) Revision: r1p5 Technical Reference Manual.
>> =====
>>
>> That seems to imply that not all r1p5 PL011s actually have a depth-32 FIFO.
>> Perhaps this is a configurable property of the IP block, not something that
>> all r1p5 have?
> 
> All r1p5 have 32-byte FIFO depth and it's not configurable. From the PL011
> TRM:
> 
> r1p4-r1p5	Contains the following differences in functionality:
> 		* The receive and transmit FIFOs are increased to a depth of 32.
> 		* The Revision field in the UARTPeriphID2 Register on page 3-24
> 		  bits [7:4] now reads back as 0x3.

Well, that certainly isn't true in practice. I think we should revert
this commit until we can determine what the problem is.

I validated that the periphid register in HW contains the r1p5 revision
(3), and the pcellid register does indeed contain the expected
0xb105f00d value. However, if I run the following hacky code in U-Boot
to determine the FIFO depth, it comes out as 16, which explains the
symptoms I'm seeing:

void find_fifo_depth(void)
{
	volatile u8 *uart = 0x20201000;
	int depth = 0;

	/* Wait for TX FIFO empty */
	while (!(uart[0x18] & 0x80))
		;

	/* Disable UART */
	uart[0x30] &= ~1;

	/* Push chars into TX FIFO until full */
	for (;;) {
		uart[0] = 'A' + depth;
		depth++;
		/* Done if FIFO full */
		if (uart[0x18] & 0x20)
			break;
		if (depth > 64) {
			depth = -1;
			break;
		}
	}

	/* Re-enable UART */
	uart[0x30] |= 1;

	printf("FIFO depth: %d\n", depth);
}

  reply	other threads:[~2013-05-15  5:00 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-12  9:18 [PATCH] ARM: PL011: add support for extended FIFO-size of PL011-r1p5 Jongsung Kim
2013-04-12  9:18 ` Jongsung Kim
2013-04-19 12:58 ` Russell King - ARM Linux
2013-05-14  5:56 ` Stephen Warren
2013-05-14  5:56   ` Stephen Warren
2013-05-14  5:56   ` Stephen Warren
2013-05-14  7:15   ` Jongsung Kim
2013-05-14  7:15     ` Jongsung Kim
2013-05-14  7:15     ` Jongsung Kim
2013-05-14 21:03     ` Stephen Warren
2013-05-14 21:03       ` Stephen Warren
2013-05-14 22:50       ` Russell King - ARM Linux
2013-05-14 22:50         ` Russell King - ARM Linux
2013-05-15  1:00       ` Jongsung Kim
2013-05-15  1:00         ` Jongsung Kim
2013-05-15  1:00         ` Jongsung Kim
2013-05-15  4:59         ` Stephen Warren [this message]
2013-05-15  4:59           ` Stephen Warren
2013-05-15  9:37           ` Russell King - ARM Linux
2013-05-15  9:37             ` Russell King - ARM Linux
2013-05-16 13:26           ` Jongsung Kim
2013-05-16 13:26             ` Jongsung Kim
2013-05-16 13:26             ` Jongsung Kim
2013-05-21  1:39           ` Jongsung Kim
2013-05-21  1:39             ` Jongsung Kim
2013-05-21  1:39             ` Jongsung Kim
2013-05-21  2:12             ` Stephen Warren
2013-05-21  2:12               ` Stephen Warren
2013-05-21  6:02               ` [PATCH] ARM: bcm2835: override the HW UART periphid Jongsung Kim
2013-05-21  6:02                 ` Jongsung Kim
2013-05-21  6:07                 ` Jongsung Kim
2013-05-21  6:07                   ` Jongsung Kim
2013-05-21  6:07                   ` Jongsung Kim
2013-05-21  9:00                   ` Gordon Hollingworth
2013-05-21  9:00                     ` Gordon Hollingworth
2013-05-21  9:00                     ` Gordon Hollingworth
2013-05-21 16:34                 ` Stephen Warren
2013-05-21 16:34                   ` Stephen Warren
2013-05-22  1:43                   ` Stephen Warren
2013-05-22  1:43                     ` Stephen Warren
2013-05-22  1:52                     ` Jongsung Kim
2013-05-22  1:52                       ` Jongsung Kim
2013-05-22  1:52                       ` Jongsung Kim

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=5193164E.6050400@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.cz \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=neidhard.kim@lge.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.