@@ -20,6 +20,7 @@
#include <asm/arch/sdhci.h>
#include <asm/global_data.h>
#include <dm/platform_data/serial_bcm283x_mu.h>
+#include <dm/platform_data/serial_pl01x.h>
#ifdef CONFIG_ARM64
#include <asm/armv8/mmu.h>
#endif
@@ -472,9 +473,15 @@ int board_check_serial(struct udevice *dev)
printf("Checking serial %s\n", dev->name);
if (device_is_compatible(dev, "arm,pl011")) {
+ struct pl01x_serial_platdata *plat = dev_get_platdata(dev);
+
func = BCM2835_GPIO_ALT0;
+ plat->skip_init = true;
} else if (device_is_compatible(dev, "brcm,bcm2835-aux-uart")) {
+ struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
+
func = BCM2835_GPIO_ALT5;
+ plat->skip_init = true;
} else {
return 0;
}
@@ -151,7 +151,7 @@ static int bcm283x_mu_serial_ofdata_to_platdata(struct udevice *dev)
plat->base = addr;
plat->clock = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "clock",
1);
- plat->skip_init = fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
+ plat->skip_init |= fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
"skip-init");
return 0;
}
@@ -357,7 +357,7 @@ static int pl01x_serial_ofdata_to_platdata(struct udevice *dev)
plat->clock = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "clock",
1);
plat->type = dev_get_driver_data(dev);
- plat->skip_init = fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
+ plat->skip_init |= fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
"skip-init");
return 0;
}
The serial devices on the raspberry pi are based on clocks we can't easily read and influence in U-Boot. However, the serial devices are always already properly set up when coming up, so all we need to do is leave them alone. The way to do that is to specify "skip-init" in device tree usually, but if we set CONFIG_OF_BOARD to get the device tree from the RPi firmware, that does not have skip-init properly set. So instead we just force it in board specific code. That way serial devices also work fine when skip-init is not passed explicitly in DT. Signed-off-by: Alexander Graf <agraf@suse.de> --- board/raspberrypi/rpi/rpi.c | 7 +++++++ drivers/serial/serial_bcm283x_mu.c | 2 +- drivers/serial/serial_pl01x.c | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-)