[PATCH v5 4/6] soc: mfd: add ASPEED AST2600 PCIe BMC device driver
Grégoire Layet
gregoire.layet at 9elements.com
Mon Aug 10 03:36:39 PDT 2026
> > +
> > +static int aspeed_pci_bmc_device_setup_vuart(struct pci_dev *pdev,
> > + struct aspeed_pci_bmc_dev *pci_bmc_dev)
> > +{
> > + resource_size_t bar = pci_resource_start(pdev, 1);
> > + struct plat_serial8250_port *port;
> > + u16 vuart_ioport;
> > + unsigned int i;
> > +
> > + for (i = 0; i < ASPEED_BMC_VUART; i++) {
> > + port = &pci_bmc_dev->uart[i];
> > +
> > + /* ASPEED BMC device shift addresses by 2 to the left */
> > + vuart_ioport = vuart_port_addr[i] << 2;
> > +
> > + port->mapbase = bar + vuart_ioport;
> > + port->uartclk = 115200 * 16;
> > + port->irq = pci_irq_vector(pdev, vuart_msi_index[i]);
> > + port->iotype = UPIO_MEM32;
> > + port->type = PORT_16550A;
> > + port->flags |= (UPF_IOREMAP | UPF_FIXED_PORT | UPF_FIXED_TYPE);
> > + port->regshift = 2;
> > + }
> > +
> > + pci_bmc_dev->cell = (struct mfd_cell) {
> > + .name = "serial8250",
> > + .platform_data = pci_bmc_dev->uart,
> > + .pdata_size = sizeof(pci_bmc_dev->uart),
> > + };
>
> In the commit message you're describing that the MFD driver will be used for
> setting up MSI interrupts:
> > It doesn't bind the whole PCIe resource to allow each sub-driver to bind the
> > needed addresses.
>
> But you're adding the UART devices here which now means that the core driver is
> doing more than MSI interrupt init.
I might have misunderstood but this is creating the UART device by
using the 'serial8250' driver.
> the core driver is doing more than MSI interrupt init.
Yes, as the core driver should add the devices with the right drivers.
I will add this in the commit message.
> Suggestion from my side would be to have an array of `mfd_cell` where you define
> which devices are part of the MFD,
There is already such an array, it is a one element array as only the
VUART is done.
'struct mfd_cell cell; ' will become an real array when KCS will be
added afterwards.
This is not an 2 cell array for the 2 VUART as the 'serial8250'
manages the two VUART on its own.
>From what I have researched, this was the way to add UART devices from
an MFD driver.
> and your VUART lives in another driver.
> See `ls2k-bmc-core` for example.
The UART already lives in another driver: the 'serial8250' driver.
Regards,
Grégoire
More information about the linux-arm-kernel
mailing list