mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 12:54:37 +00:00
stm32mp: stm32prog: replace alias by serial device sequence number
The command "stm32prog serial <dev>" can directly use the device sequence number of serial uclass as this sequence number is egual to alias when it exist; this assumption simplify the code and avoid access to gd->fdt_blob and the device tree parsing. Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
This commit is contained in:
parent
b9d5e3aa8f
commit
f49eb16c17
2 changed files with 10 additions and 30 deletions
|
@ -187,36 +187,19 @@ static int stm32prog_read(struct stm32prog_data *data, u8 phase, u32 offset,
|
||||||
int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
|
int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
|
||||||
{
|
{
|
||||||
struct udevice *dev = NULL;
|
struct udevice *dev = NULL;
|
||||||
int node;
|
|
||||||
char alias[10];
|
|
||||||
const char *path;
|
|
||||||
struct dm_serial_ops *ops;
|
struct dm_serial_ops *ops;
|
||||||
/* no parity, 8 bits, 1 stop */
|
/* no parity, 8 bits, 1 stop */
|
||||||
u32 serial_config = SERIAL_DEFAULT_CONFIG;
|
u32 serial_config = SERIAL_DEFAULT_CONFIG;
|
||||||
|
|
||||||
down_serial_dev = NULL;
|
down_serial_dev = NULL;
|
||||||
|
|
||||||
sprintf(alias, "serial%d", link_dev);
|
if (uclass_get_device_by_seq(UCLASS_SERIAL, link_dev, &dev)) {
|
||||||
path = fdt_get_alias(gd->fdt_blob, alias);
|
log_err("serial %d device not found\n", link_dev);
|
||||||
if (!path) {
|
|
||||||
log_err("%s alias not found", alias);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
node = fdt_path_offset(gd->fdt_blob, path);
|
|
||||||
if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node,
|
|
||||||
&dev)) {
|
|
||||||
down_serial_dev = dev;
|
|
||||||
} else if (node > 0 &&
|
|
||||||
!lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
|
|
||||||
&dev, false)) {
|
|
||||||
if (!device_probe(dev))
|
|
||||||
down_serial_dev = dev;
|
|
||||||
}
|
|
||||||
if (!down_serial_dev) {
|
|
||||||
log_err("%s = %s device not found", alias, path);
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
down_serial_dev = dev;
|
||||||
|
|
||||||
/* force silent console on uart only when used */
|
/* force silent console on uart only when used */
|
||||||
if (gd->cur_serial_dev == down_serial_dev)
|
if (gd->cur_serial_dev == down_serial_dev)
|
||||||
gd->flags |= GD_FLG_DISABLE_CONSOLE | GD_FLG_SILENT;
|
gd->flags |= GD_FLG_DISABLE_CONSOLE | GD_FLG_SILENT;
|
||||||
|
@ -226,11 +209,11 @@ int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
|
||||||
ops = serial_get_ops(down_serial_dev);
|
ops = serial_get_ops(down_serial_dev);
|
||||||
|
|
||||||
if (!ops) {
|
if (!ops) {
|
||||||
log_err("%s = %s missing ops", alias, path);
|
log_err("serial %d = %s missing ops\n", link_dev, dev->name);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
if (!ops->setconfig) {
|
if (!ops->setconfig) {
|
||||||
log_err("%s = %s missing setconfig", alias, path);
|
log_err("serial %d = %s missing setconfig\n", link_dev, dev->name);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -466,7 +466,6 @@ static void setup_boot_mode(void)
|
||||||
unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
|
unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
|
||||||
u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
|
u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
int alias;
|
|
||||||
|
|
||||||
log_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
|
log_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
|
||||||
__func__, boot_ctx, boot_mode, instance, forced_mode);
|
__func__, boot_ctx, boot_mode, instance, forced_mode);
|
||||||
|
@ -474,20 +473,18 @@ static void setup_boot_mode(void)
|
||||||
case BOOT_SERIAL_UART:
|
case BOOT_SERIAL_UART:
|
||||||
if (instance > ARRAY_SIZE(serial_addr))
|
if (instance > ARRAY_SIZE(serial_addr))
|
||||||
break;
|
break;
|
||||||
/* serial : search associated alias in devicetree */
|
/* serial : search associated node in devicetree */
|
||||||
sprintf(cmd, "serial@%x", serial_addr[instance]);
|
sprintf(cmd, "serial@%x", serial_addr[instance]);
|
||||||
if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
|
if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev)) {
|
||||||
fdtdec_get_alias_seq(gd->fdt_blob, "serial",
|
|
||||||
dev_of_offset(dev), &alias)) {
|
|
||||||
/* restore console on error */
|
/* restore console on error */
|
||||||
if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
|
if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
|
||||||
gd->flags &= ~(GD_FLG_SILENT |
|
gd->flags &= ~(GD_FLG_SILENT |
|
||||||
GD_FLG_DISABLE_CONSOLE);
|
GD_FLG_DISABLE_CONSOLE);
|
||||||
printf("serial%d = %s not found in device tree!\n",
|
printf("uart%d = %s not found in device tree!\n",
|
||||||
instance, cmd);
|
instance, cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sprintf(cmd, "%d", alias);
|
sprintf(cmd, "%d", dev_seq(dev));
|
||||||
env_set("boot_device", "serial");
|
env_set("boot_device", "serial");
|
||||||
env_set("boot_instance", cmd);
|
env_set("boot_instance", cmd);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue