i.MX: Fix UART driver to work with unitialized "chardev" device
The "chardev" property initialization might have failed (for example because there are not enough chardevs provided by QEMU). The serial device emulator needs to be able to work with an uninitialized (NULL) chardev device pointer. This patch adds some missing tests on the chr pointer value before using it. Signed-off-by: Jean-Christophe Dubois <jcd@tribudubois.net> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Message-id: 1438342461-18967-1-git-send-email-jcd@tribudubois.net Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
5dfaa75b4d
commit
f7a6785e12
@ -125,7 +125,9 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,
|
|||||||
s->usr2 &= ~USR2_RDR;
|
s->usr2 &= ~USR2_RDR;
|
||||||
s->uts1 |= UTS1_RXEMPTY;
|
s->uts1 |= UTS1_RXEMPTY;
|
||||||
imx_update(s);
|
imx_update(s);
|
||||||
qemu_chr_accept_input(s->chr);
|
if (s->chr) {
|
||||||
|
qemu_chr_accept_input(s->chr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
@ -212,7 +214,9 @@ static void imx_serial_write(void *opaque, hwaddr offset,
|
|||||||
}
|
}
|
||||||
if (value & UCR2_RXEN) {
|
if (value & UCR2_RXEN) {
|
||||||
if (!(s->ucr2 & UCR2_RXEN)) {
|
if (!(s->ucr2 & UCR2_RXEN)) {
|
||||||
qemu_chr_accept_input(s->chr);
|
if (s->chr) {
|
||||||
|
qemu_chr_accept_input(s->chr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->ucr2 = value & 0xffff;
|
s->ucr2 = value & 0xffff;
|
||||||
|
Loading…
Reference in New Issue
Block a user