On Wed, 21 Oct 2020, Laurent Vivier wrote: > Le 21/10/2020 à 01:43, Finn Thain a écrit : > > > Laurent, can we avoid the irq == 0 warning splat like this? > > > > diff --git a/drivers/tty/serial/pmac_zilog.c b/drivers/tty/serial/pmac_zilog.c > > index 96e7aa479961..7db600cd8cc7 100644 > > --- a/drivers/tty/serial/pmac_zilog.c > > +++ b/drivers/tty/serial/pmac_zilog.c > > @@ -1701,8 +1701,10 @@ static int __init pmz_init_port(struct uart_pmac_port *uap) > > int irq; > > > > r_ports = platform_get_resource(uap->pdev, IORESOURCE_MEM, 0); > > + if (!r_ports) > > + return -ENODEV; > > irq = platform_get_irq(uap->pdev, 0); > > - if (!r_ports || irq <= 0) > > + if (irq <= 0) > > return -ENODEV; > > > > uap->port.mapbase = r_ports->start; > > > > No, this doesn't fix the problem. > Then I had better stop guessing and start up Aranym... The patch below seems to fix the problem for me. Does it work on your system(s)? diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c index a621fcc1a576..4e802f70333d 100644 --- a/arch/m68k/mac/config.c +++ b/arch/m68k/mac/config.c @@ -776,16 +776,12 @@ static struct resource scc_b_rsrcs[] = { struct platform_device scc_a_pdev = { .name = "scc", .id = 0, - .num_resources = ARRAY_SIZE(scc_a_rsrcs), - .resource = scc_a_rsrcs, }; EXPORT_SYMBOL(scc_a_pdev); struct platform_device scc_b_pdev = { .name = "scc", .id = 1, - .num_resources = ARRAY_SIZE(scc_b_rsrcs), - .resource = scc_b_rsrcs, }; EXPORT_SYMBOL(scc_b_pdev); @@ -812,10 +808,15 @@ static void __init mac_identify(void) /* Set up serial port resources for the console initcall. */ - scc_a_rsrcs[0].start = (resource_size_t) mac_bi_data.sccbase + 2; - scc_a_rsrcs[0].end = scc_a_rsrcs[0].start; - scc_b_rsrcs[0].start = (resource_size_t) mac_bi_data.sccbase; - scc_b_rsrcs[0].end = scc_b_rsrcs[0].start; + scc_a_rsrcs[0].start = (resource_size_t)mac_bi_data.sccbase + 2; + scc_a_rsrcs[0].end = scc_a_rsrcs[0].start; + scc_a_pdev.num_resources = ARRAY_SIZE(scc_a_rsrcs); + scc_a_pdev.resource = scc_a_rsrcs; + + scc_b_rsrcs[0].start = (resource_size_t)mac_bi_data.sccbase; + scc_b_rsrcs[0].end = scc_b_rsrcs[0].start; + scc_b_pdev.num_resources = ARRAY_SIZE(scc_b_rsrcs); + scc_b_pdev.resource = scc_b_rsrcs; switch (macintosh_config->scc_type) { case MAC_SCC_PSC: diff --git a/drivers/tty/serial/pmac_zilog.c b/drivers/tty/serial/pmac_zilog.c index 96e7aa479961..95abdb305d67 100644 --- a/drivers/tty/serial/pmac_zilog.c +++ b/drivers/tty/serial/pmac_zilog.c @@ -1697,18 +1697,17 @@ extern struct platform_device scc_a_pdev, scc_b_pdev; static int __init pmz_init_port(struct uart_pmac_port *uap) { - struct resource *r_ports; - int irq; + struct resource *r_ports, *r_irq; r_ports = platform_get_resource(uap->pdev, IORESOURCE_MEM, 0); - irq = platform_get_irq(uap->pdev, 0); - if (!r_ports || irq <= 0) + r_irq = platform_get_resource(uap->pdev, IORESOURCE_IRQ, 0); + if (!r_ports || !r_irq) return -ENODEV; uap->port.mapbase = r_ports->start; uap->port.membase = (unsigned char __iomem *) r_ports->start; uap->port.iotype = UPIO_MEM; - uap->port.irq = irq; + uap->port.irq = r_irq->start; uap->port.uartclk = ZS_CLOCK; uap->port.fifosize = 1; uap->port.ops = &pmz_pops;