serial: zynq: Use platdata for storing static data instead of priv

Explanation from Simon Glass
"Private data is created when the device is probed and freed when the
device is removed.

Platform data is created when the device is bound, and survives
probe/remove cycles.

Strictly speaking, platform data should be used to hold the decoded
device tree properties. Private data should be used for run-time
things the device needs to keep track of."

Based on description the driver needs to be switch to use platdata
instead of priv.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
lime2-spi
Michal Simek 6 years ago
parent 4fb67f47f1
commit 6bdf0a992c
  1. 32
      drivers/serial/serial_zynq.c

@ -39,7 +39,7 @@ struct uart_zynq {
u32 baud_rate_divider; /* 0x34 - Baud Rate Divider [7:0] */
};
struct zynq_uart_priv {
struct zynq_uart_platdata {
struct uart_zynq *regs;
};
@ -105,7 +105,7 @@ static int _uart_zynq_serial_putc(struct uart_zynq *regs, const char c)
static int zynq_serial_setbrg(struct udevice *dev, int baudrate)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
unsigned long clock;
int ret;
@ -130,28 +130,28 @@ static int zynq_serial_setbrg(struct udevice *dev, int baudrate)
return ret;
}
_uart_zynq_serial_setbrg(priv->regs, clock, baudrate);
_uart_zynq_serial_setbrg(platdata->regs, clock, baudrate);
return 0;
}
static int zynq_serial_probe(struct udevice *dev)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
/* No need to reinitialize the UART after relocation */
if (gd->flags & GD_FLG_RELOC)
return 0;
_uart_zynq_serial_init(priv->regs);
_uart_zynq_serial_init(platdata->regs);
return 0;
}
static int zynq_serial_getc(struct udevice *dev)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct uart_zynq *regs = priv->regs;
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
struct uart_zynq *regs = platdata->regs;
if (readl(&regs->channel_sts) & ZYNQ_UART_SR_RXEMPTY)
return -EAGAIN;
@ -161,15 +161,15 @@ static int zynq_serial_getc(struct udevice *dev)
static int zynq_serial_putc(struct udevice *dev, const char ch)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
return _uart_zynq_serial_putc(priv->regs, ch);
return _uart_zynq_serial_putc(platdata->regs, ch);
}
static int zynq_serial_pending(struct udevice *dev, bool input)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct uart_zynq *regs = priv->regs;
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
struct uart_zynq *regs = platdata->regs;
if (input)
return !(readl(&regs->channel_sts) & ZYNQ_UART_SR_RXEMPTY);
@ -179,11 +179,11 @@ static int zynq_serial_pending(struct udevice *dev, bool input)
static int zynq_serial_ofdata_to_platdata(struct udevice *dev)
{
struct zynq_uart_priv *priv = dev_get_priv(dev);
struct zynq_uart_platdata *platdata = dev_get_platdata(dev);
priv->regs = (struct uart_zynq *)dev_read_addr(dev);
if (IS_ERR(priv->regs))
return PTR_ERR(priv->regs);
platdata->regs = (struct uart_zynq *)dev_read_addr(dev);
if (IS_ERR(platdata->regs))
return PTR_ERR(platdata->regs);
return 0;
}
@ -207,7 +207,7 @@ U_BOOT_DRIVER(serial_zynq) = {
.id = UCLASS_SERIAL,
.of_match = zynq_serial_ids,
.ofdata_to_platdata = zynq_serial_ofdata_to_platdata,
.priv_auto_alloc_size = sizeof(struct zynq_uart_priv),
.platdata_auto_alloc_size = sizeof(struct zynq_uart_platdata),
.probe = zynq_serial_probe,
.ops = &zynq_serial_ops,
.flags = DM_FLAG_PRE_RELOC,

Loading…
Cancel
Save