Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH 0/2] serial: 8250_dw: Add ACPI support for uart on Hisilicon Hip05 soc

33 views
Skip to first unread message

Kefeng Wang

unread,
Jun 27, 2016, 11:30:05 PM6/27/16
to
Make dw8250_set_termios() as the default set_termios callback for 8250 dw uart, correct me
if I am wrong.

Then add ACPI support for uart on Hisilicon Hip05 soc, be careful that it is not 16500
compatible. Note, the build(no ACPI) depends on https://patchwork.kernel.org/patch/9141207/,
which was already accepted in net-next.

Meanwhile, set dw8250_serial_out32 to keep consistent between serial_out
and serial_in in ACPI.

Kefeng Wang (2):
serial: 8250_dw: make dw8250_set_termios as default set_termios
callback
serial: 8250_dw: add ACPI support for uart on Hisilicon Hip05 soc

drivers/tty/serial/8250/8250_dw.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

--
1.7.12.4

Andy Shevchenko

unread,
Jun 29, 2016, 9:00:06 AM6/29/16
to
On Tue, 2016-06-28 at 11:17 +0800, Kefeng Wang wrote:
> Make dw8250_set_termios() as the default set_termios callback for 8250
> dw uart, correct me
> if I am wrong.
>
> Then add ACPI support for uart on Hisilicon Hip05 soc, be careful that
> it is not 16500
> compatible.

You mean it has Busy Functionality implemented?
Is there any public specification to look at?

> Note, the build(no ACPI) depends on
> https://patchwork.kernel.org/patch/9141207/,
> which was already accepted in net-next.
>
> Meanwhile, set dw8250_serial_out32 to keep consistent between
> serial_out
> and serial_in in ACPI.
>
> Kefeng Wang (2):
>   serial: 8250_dw: make dw8250_set_termios as default set_termios
>     callback
>   serial: 8250_dw: add ACPI support for uart on Hisilicon Hip05 soc
>
>  drivers/tty/serial/8250/8250_dw.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>

--

Andy Shevchenko <andriy.s...@linux.intel.com>
Intel Finland Oy

Kefeng Wang

unread,
Jun 29, 2016, 9:30:05 PM6/29/16
to


On 2016/6/29 20:52, Andy Shevchenko wrote:
> On Tue, 2016-06-28 at 11:17 +0800, Kefeng Wang wrote:
>> Make dw8250_set_termios() as the default set_termios callback for 8250
>> dw uart, correct me
>> if I am wrong.
>>
>> Then add ACPI support for uart on Hisilicon Hip05 soc, be careful that
>> it is not 16500
>> compatible.
>
> You mean it has Busy Functionality implemented?

After check it again with designer, yes.

> Is there any public specification to look at?

I think Xin liang is in a better position to answer this question.

Kefeng Wang

unread,
Jun 29, 2016, 9:30:06 PM6/29/16
to
Make dw8250_set_termios() as the default set_termios callback for 8250 dw uart, correct me
if I am wrong.

Then add ACPI support for uart on Hisilicon Hip05 soc, be careful that it is not 16500
compatible. Meanwhile, set dw8250_serial_out32 to keep consistent between serial_out
and serial_in in ACPI.

Change since v1:
- Use acpi_match_device() instead of acpi_dev_found(), limit the check to the device
being probed and not a global search for whole DSDT (pointed by graeme....@linaro.org)

Kefeng Wang (2):
serial: 8250_dw: make dw8250_set_termios as default set_termios
callback
serial: 8250_dw: add ACPI support for uart on Hisilicon Hip05 soc

drivers/tty/serial/8250/8250_dw.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

--
1.7.12.4

liuxinliang

unread,
Jun 29, 2016, 9:30:06 PM6/29/16
to
Hi,

On 2016/6/29 20:52, Andy Shevchenko wrote:
> On Tue, 2016-06-28 at 11:17 +0800, Kefeng Wang wrote:
>> Make dw8250_set_termios() as the default set_termios callback for 8250
>> dw uart, correct me
>> if I am wrong.
>>
>> Then add ACPI support for uart on Hisilicon Hip05 soc, be careful that
>> it is not 16500
>> compatible.
> You mean it has Busy Functionality implemented?

Yes, I think so.

> Is there any public specification to look at?
Sorry, our SoC manual is not that public. But we confirm with SoC guys
that 8250dw has 16550 compatible and non 16550 compatible version.
Ours is non 16550 compatible version. And we can see the IIR register
has busy interrupt bit:
"0x7: busy interrupt. When UART is busy (USR[0]=1) in receiving
and transmitting data and the processor operates the LCR register,
this interrupt will be generated."

Thanks,
-xinliang

Kefeng Wang

unread,
Jun 29, 2016, 9:40:05 PM6/29/16
to
Add ACPI identifier for UART on Hisilicon Hip05 soc, be careful
that it is not 16550 compatibal.

Meanwhile, set dw8250_serial_out32 to keep consistent between serial_out
and serial_in in ACPI.

Signed-off-by: Kefeng Wang <wangkef...@huawei.com>
---
drivers/tty/serial/8250/8250_dw.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index 65f3da7..096431b 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -272,6 +272,12 @@ static bool dw8250_idma_filter(struct dma_chan *chan, void *param)
return param == chan->device->dev->parent;
}

+/* non 16550 compatible id list*/
+static const struct acpi_device_id non_16550_id_list[] = {
+ { "HISI0031", 0 },
+ { },
+};
+
static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data)
{
if (p->dev->of_node) {
@@ -301,8 +307,10 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data)
p->iotype = UPIO_MEM32;
p->regshift = 2;
p->serial_in = dw8250_serial_in32;
- /* So far none of there implement the Busy Functionality */
- data->uart_16550_compatible = true;
+ p->serial_out = dw8250_serial_out32;
+
+ if (!acpi_match_device(non_16550_id_list, p->dev))
+ data->uart_16550_compatible = true;
}

/* Platforms with iDMA */
@@ -618,6 +626,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
{ "APMC0D08", 0},
{ "AMD0020", 0 },
{ "AMDI0020", 0 },
+ { "HISI0031", 0 },
{ },
};
MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
--
1.7.12.4

Andy Shevchenko

unread,
Jun 30, 2016, 5:40:06 AM6/30/16
to
On Thu, 2016-06-30 at 09:27 +0800, Kefeng Wang wrote:
> Add ACPI identifier for UART on Hisilicon Hip05 soc, be careful
> that it is not 16550 compatibal.
>
> Meanwhile, set dw8250_serial_out32 to keep consistent between
> serial_out
> and serial_in in ACPI.
>
> Signed-off-by: Kefeng Wang <wangkef...@huawei.com>
> ---
>  drivers/tty/serial/8250/8250_dw.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/8250/8250_dw.c
> b/drivers/tty/serial/8250/8250_dw.c
> index 65f3da7..096431b 100644
> --- a/drivers/tty/serial/8250/8250_dw.c
> +++ b/drivers/tty/serial/8250/8250_dw.c
> @@ -272,6 +272,12 @@ static bool dw8250_idma_filter(struct dma_chan
> *chan, void *param)
>   return param == chan->device->dev->parent;
>  }
>  
> +/* non 16550 compatible id list*/
> +static const struct acpi_device_id non_16550_id_list[] = {
> + { "HISI0031", 0 },
> + { },
> +};
> +

On first glance it looks redundant, see below.

>  static void dw8250_quirks(struct uart_port *p, struct dw8250_data
> *data)
>  {
>   if (p->dev->of_node) {
> @@ -301,8 +307,10 @@ static void dw8250_quirks(struct uart_port *p,
> struct dw8250_data *data)
>   p->iotype = UPIO_MEM32;
>   p->regshift = 2;
>   p->serial_in = dw8250_serial_in32;
> - /* So far none of there implement the Busy
> Functionality */
> - data->uart_16550_compatible = true;
> + p->serial_out = dw8250_serial_out32;
> +
> + if (!acpi_match_device(non_16550_id_list, p->dev))
> + data->uart_16550_compatible = true;
>   }
>  
>   /* Platforms with iDMA */
> @@ -618,6 +626,7 @@ static const struct acpi_device_id
> dw8250_acpi_match[] = {
>   { "APMC0D08", 0},
>   { "AMD0020", 0 },
>   { "AMDI0020", 0 },
> + { "HISI0031", 0 },

So, we may put something instead of 0 here and consider it as a set of
special quirks / setup instructions / etc.

struct dw8250_dev_info {
  unsigned int  uart_16550_compatible:1;
};

static const struct dw8250_dev_info hisi_dev_info = {
  .uart_16550_compatible = 1,
}

...
 { "HISI0031", (kernel_ulong_t)&hisi_dev_info },
...

And so on.

>   { },
>  };
>  MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);

Andy Shevchenko

unread,
Jun 30, 2016, 6:00:06 AM6/30/16
to
Oh, wait, this is still valid, but the better solution is to use device
properties for the rest except yours!

I will prepare patch later this week or at the beginning of next week if
you are in hurry, otherwise I would postpone this a bit (anyway it will
not make v4.8 cycle).

Kefeng Wang

unread,
Jun 30, 2016, 10:30:05 AM6/30/16
to
Do you mean using something like

static struct property_entry dw8250_properties[] = {
PROPERTY_ENTRY_U32("reg-io-width", 4),
PROPERTY_ENTRY_U32("reg-shift", 2),
PROPERTY_ENTRY_BOOL("snps,uart-16550-compatible"),
{ },
};

then use platform_device_add_properties to add it to the device(16500 compatible),

but for hisi, use another property_entry without PROPERTY_ENTRY_BOOL("snps,uart-16550-compatible")?

Not clear about using device properties.

>
> I will prepare patch later this week or at the beginning of next week if
> you are in hurry, otherwise I would postpone this a bit (anyway it will
> not make v4.8 cycle).
>

Thanks, hope that it will come out soon.

BRs,
Kefeng

Andy Shevchenko

unread,
Jun 30, 2016, 10:50:06 AM6/30/16
to
Correct for the existing devices.

>
> but for hisi, use another property_entry without
> PROPERTY_ENTRY_BOOL("snps,uart-16550-compatible")?

For HISI in case of alternate configuration you have to tweak _DSD in
ACPI.

>
> Not clear about using device properties.

Built-in device properties only for non-DT, non-ACPI devices. You may
consider it as a successor of platform data.

>
> >
> > I will prepare patch later this week or at the beginning of next
> > week if
> > you are in hurry, otherwise I would postpone this a bit (anyway it
> > will
> > not make v4.8 cycle).
> >
>
> Thanks, hope that it will come out soon.


0 new messages