On Fri Sep 12, 2025 at 11:41 PM UTC, Simon Glass wrote:
> Hi Ferass,
>
> On Thu, 11 Sept 2025 at 09:37, Ferass El Hafidi
> <fundersc...@postmarketos.org> wrote:
>>
>> On Wed Sep 10, 2025 at 8:30 PM UTC, Heinrich Schuchardt wrote:
>> > On 9/10/25 22:14, Ferass El Hafidi wrote:
>> >> On Wed Sep 10, 2025 at 7:53 PM UTC, Heinrich Schuchardt wrote:
>> >>> <...>
>> >>>> +static int meson_serial_getc(void)
>> >>>> +{
>> >>>> +  struct meson_uart *const uart = (struct meson_uart 
>> >>>> *)CONFIG_VAL(DEBUG_UART_BASE);
>> >>>> +  uint32_t status = readl(&uart->status);
>> >>>> +
>> >>>> +  if (status & AML_UART_RX_EMPTY)
>> >>>> +          return -EAGAIN;
>> >>>> +
>> >>>> +  if (status & AML_UART_ERR) {
>> >>>> +          u32 val = readl(&uart->control);
>> >>>> +
>> >>>> +          /* Clear error */
>> >>>> +          val |= AML_UART_CLR_ERR;
>> >>>> +          writel(val, &uart->control);
>> >>>> +          val &= ~AML_UART_CLR_ERR;
>> >>>> +          writel(val, &uart->control);
>> >>>> +
>> >>>> +          /* Remove spurious byte from fifo */
>> >>>> +          readl(&uart->rfifo);
>> >>>> +          return -EIO;
>> >>>> +  }
>> >>>> +
>> >>>> +  return readl(&uart->rfifo) & 0xff;
>> >>>> +}
>> >>>> +
>> >>>> +static int meson_serial_tstc(void)
>> >>>> +{
>> >>>> +  struct meson_uart *const uart = (struct meson_uart 
>> >>>> *)CONFIG_VAL(DEBUG_UART_BASE);
>> >>>
>> >>> CONFIG_SPL_DEBUG_UART_BASE only exists for CONFIG_DEBUG_UART=y and
>> >>> CONFIG_SPL=y. Shall all configurations depend on CONFIG_DEBUG_UART=y?
>> >>>
>> >>> Creating this dependency does not look right to me.
>> >>>
>> >>
>> >> All Amlogic defconfigs have CONFIG_DEBUG_UART enabled, but I can remove
>> >> the dependency on CONFIG_DEBUG_UART_BASE if you think it doesn't look
>> >> right.
>> >
>> > We should avoid the possibility of build failures for changed 
>> > configuration.
>> >
>> > Will CONFIG_MESON_SERIAL depend on CONFIG_DEBUG_UART
>> > or will CONFIG_ARCH_MESON select CONFIG_DEBUG_UART?
>>
>> Then it might be best to not use DEBUG_UART_BASE.  I'll fix that for
>> next revision.  Thanks!
>
> I've been thinking about doing something about a minimal UART (and
> i2c) for a while.
>
> Before driver model we just called serial_putc() and *the* serial
> driver would handle it. Can we do something similar here?
>
> My suggestion for an API:
>
> CONFIG_SERIAL_ONE to indicate that driver model is not used for serial
>
> Then in serial-uclass.c update serial_putc() to use that config and
> call serial_one_putc(int ch), with that function being defined in the
> only serial driver that is compiled in. Update serial_init() to call
> serial_one_init().
>
> That way we keep things compatible with driver model and avoid
> building on the old serial.c
>
> This is similar to how the debug UART, but the debug UART is special.

Sounds good to me, I'm excited to see a very minimal serial driver API
that doesn't rely on the legacy API, while still being small enough for
SPL.

>
> Regards,
> Simon

Reply via email to