Hi,
I am trying to add support to different reg offset and bit offset in
PL011 UART. It seems impossible to add macro in platform.dsc to enable
undef/redef in the header file with "#ifdef ZX_PL011_FLAG". Is there
any proper way to control the reg/bit offset definition? Or we have to
adopt the Linux driver method with a structure to hold different
offset value and wrap register access function as below? If so,
another Pcd is needed to specify the offset structure index for the
platforms.
static u16 pl011_st_offsets[REG_ARRAY_SIZE] = {
[REG_DR] = UART01x_DR,
[REG_ST_DMAWM] = ST_UART011_DMAWM,
[REG_ST_TIMEOUT] = ST_UART011_TIMEOUT,
...
}
static unsigned int pl011_read(const struct uart_amba_port *uap,
unsigned int reg)
{
void __iomem *addr = uap->port.membase + uap->reg_offset[reg];
return (uap->port.iotype == UPIO_MEM32) ?
readl_relaxed(addr) : readw_relaxed(addr);
}
Jun