[PATCH v2 06/12] arm: mach-k3: Make release_resources_for_core_shutdown() common

Christian Gmeiner christian.gmeiner at gmail.com
Thu Apr 6 11:24:10 CEST 2023


>
> This function is the same for each device when it needs to shutdown
> the R5 core. Move this to the common section and move the remaining
> device specific ID list to the device hardware include.
>
> Signed-off-by: Andrew Davis <afd at ti.com>

Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>

> ---
>  arch/arm/mach-k3/am642_init.c                 | 51 -----------------
>  arch/arm/mach-k3/am654_init.c                 | 51 -----------------
>  arch/arm/mach-k3/common.c                     | 32 ++++++++++-
>  arch/arm/mach-k3/include/mach/am62_hardware.h |  8 +++
>  .../arm/mach-k3/include/mach/am62a_hardware.h |  8 +++
>  arch/arm/mach-k3/include/mach/am64_hardware.h | 24 ++++++++
>  arch/arm/mach-k3/include/mach/am6_hardware.h  | 19 +++++++
>  .../arm/mach-k3/include/mach/j721e_hardware.h | 19 +++++++
>  .../mach-k3/include/mach/j721s2_hardware.h    | 19 +++++++
>  arch/arm/mach-k3/include/mach/sys_proto.h     |  1 -
>  arch/arm/mach-k3/j721e_init.c                 | 55 -------------------
>  arch/arm/mach-k3/j721s2_init.c                | 54 ------------------
>  12 files changed, 127 insertions(+), 214 deletions(-)
>
> diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c
> index 1bf7e163cc4..86aced54646 100644
> --- a/arch/arm/mach-k3/am642_init.c
> +++ b/arch/arm/mach-k3/am642_init.c
> @@ -346,54 +346,3 @@ u32 spl_boot_device(void)
>         else
>                 return __get_backup_bootmedia(devstat);
>  }
> -
> -#if defined(CONFIG_SYS_K3_SPL_ATF)
> -
> -#define AM64X_DEV_RTI8                 127
> -#define AM64X_DEV_RTI9                 128
> -#define AM64X_DEV_R5FSS0_CORE0         121
> -#define AM64X_DEV_R5FSS0_CORE1         122
> -
> -void release_resources_for_core_shutdown(void)
> -{
> -       struct ti_sci_handle *ti_sci = get_ti_sci_handle();
> -       struct ti_sci_dev_ops *dev_ops = &ti_sci->ops.dev_ops;
> -       struct ti_sci_proc_ops *proc_ops = &ti_sci->ops.proc_ops;
> -       int ret;
> -       u32 i;
> -
> -       const u32 put_device_ids[] = {
> -               AM64X_DEV_RTI9,
> -               AM64X_DEV_RTI8,
> -       };
> -
> -       /* Iterate through list of devices to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_device_ids); i++) {
> -               u32 id = put_device_ids[i];
> -
> -               ret = dev_ops->put_device(ti_sci, id);
> -               if (ret)
> -                       panic("Failed to put device %u (%d)\n", id, ret);
> -       }
> -
> -       const u32 put_core_ids[] = {
> -               AM64X_DEV_R5FSS0_CORE1,
> -               AM64X_DEV_R5FSS0_CORE0, /* Handle CPU0 after CPU1 */
> -       };
> -
> -       /* Iterate through list of cores to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_core_ids); i++) {
> -               u32 id = put_core_ids[i];
> -
> -               /*
> -                * Queue up the core shutdown request. Note that this call
> -                * needs to be followed up by an actual invocation of an WFE
> -                * or WFI CPU instruction.
> -                */
> -               ret = proc_ops->proc_shutdown_no_wait(ti_sci, id);
> -               if (ret)
> -                       panic("Failed sending core %u shutdown message (%d)\n",
> -                             id, ret);
> -       }
> -}
> -#endif
> diff --git a/arch/arm/mach-k3/am654_init.c b/arch/arm/mach-k3/am654_init.c
> index 70059edb039..abd0c0bccbc 100644
> --- a/arch/arm/mach-k3/am654_init.c
> +++ b/arch/arm/mach-k3/am654_init.c
> @@ -353,54 +353,3 @@ u32 spl_boot_device(void)
>         else
>                 return __get_backup_bootmedia(devstat);
>  }
> -
> -#ifdef CONFIG_SYS_K3_SPL_ATF
> -
> -#define AM6_DEV_MCU_RTI0                       134
> -#define AM6_DEV_MCU_RTI1                       135
> -#define AM6_DEV_MCU_ARMSS0_CPU0                        159
> -#define AM6_DEV_MCU_ARMSS0_CPU1                        245
> -
> -void release_resources_for_core_shutdown(void)
> -{
> -       struct ti_sci_handle *ti_sci = get_ti_sci_handle();
> -       struct ti_sci_dev_ops *dev_ops = &ti_sci->ops.dev_ops;
> -       struct ti_sci_proc_ops *proc_ops = &ti_sci->ops.proc_ops;
> -       int ret;
> -       u32 i;
> -
> -       const u32 put_device_ids[] = {
> -               AM6_DEV_MCU_RTI0,
> -               AM6_DEV_MCU_RTI1,
> -       };
> -
> -       /* Iterate through list of devices to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_device_ids); i++) {
> -               u32 id = put_device_ids[i];
> -
> -               ret = dev_ops->put_device(ti_sci, id);
> -               if (ret)
> -                       panic("Failed to put device %u (%d)\n", id, ret);
> -       }
> -
> -       const u32 put_core_ids[] = {
> -               AM6_DEV_MCU_ARMSS0_CPU1,
> -               AM6_DEV_MCU_ARMSS0_CPU0,        /* Handle CPU0 after CPU1 */
> -       };
> -
> -       /* Iterate through list of cores to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_core_ids); i++) {
> -               u32 id = put_core_ids[i];
> -
> -               /*
> -                * Queue up the core shutdown request. Note that this call
> -                * needs to be followed up by an actual invocation of an WFE
> -                * or WFI CPU instruction.
> -                */
> -               ret = proc_ops->proc_shutdown_no_wait(ti_sci, id);
> -               if (ret)
> -                       panic("Failed sending core %u shutdown message (%d)\n",
> -                             id, ret);
> -       }
> -}
> -#endif
> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
> index 6e084de692c..4f2e14c3105 100644
> --- a/arch/arm/mach-k3/common.c
> +++ b/arch/arm/mach-k3/common.c
> @@ -189,9 +189,37 @@ int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
>         return size;
>  }
>
> -__weak void release_resources_for_core_shutdown(void)
> +void release_resources_for_core_shutdown(void)
>  {
> -       debug("%s not implemented...\n", __func__);
> +       struct ti_sci_handle *ti_sci = get_ti_sci_handle();
> +       struct ti_sci_dev_ops *dev_ops = &ti_sci->ops.dev_ops;
> +       struct ti_sci_proc_ops *proc_ops = &ti_sci->ops.proc_ops;
> +       int ret;
> +       u32 i;
> +
> +       /* Iterate through list of devices to put (shutdown) */
> +       for (i = 0; i < ARRAY_SIZE(put_device_ids); i++) {
> +               u32 id = put_device_ids[i];
> +
> +               ret = dev_ops->put_device(ti_sci, id);
> +               if (ret)
> +                       panic("Failed to put device %u (%d)\n", id, ret);
> +       }
> +
> +       /* Iterate through list of cores to put (shutdown) */
> +       for (i = 0; i < ARRAY_SIZE(put_core_ids); i++) {
> +               u32 id = put_core_ids[i];
> +
> +               /*
> +                * Queue up the core shutdown request. Note that this call
> +                * needs to be followed up by an actual invocation of an WFE
> +                * or WFI CPU instruction.
> +                */
> +               ret = proc_ops->proc_shutdown_no_wait(ti_sci, id);
> +               if (ret)
> +                       panic("Failed sending core %u shutdown message (%d)\n",
> +                             id, ret);
> +       }
>  }
>
>  void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
> diff --git a/arch/arm/mach-k3/include/mach/am62_hardware.h b/arch/arm/mach-k3/include/mach/am62_hardware.h
> index db4a32cd461..88d58947269 100644
> --- a/arch/arm/mach-k3/include/mach/am62_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/am62_hardware.h
> @@ -57,4 +57,12 @@
>
>  #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     0x43c30000
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +static const u32 put_device_ids[] = {};
> +
> +static const u32 put_core_ids[] = {};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_AM62_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/am62a_hardware.h b/arch/arm/mach-k3/include/mach/am62a_hardware.h
> index 13bf50f147b..11080801c4c 100644
> --- a/arch/arm/mach-k3/include/mach/am62a_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/am62a_hardware.h
> @@ -86,4 +86,12 @@
>  #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     0x70000001
>  #endif /* CONFIG_CPU_V7R */
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +static const u32 put_device_ids[] = {};
> +
> +static const u32 put_core_ids[] = {};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_AM62A_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/am64_hardware.h b/arch/arm/mach-k3/include/mach/am64_hardware.h
> index 207ef95f218..44df887d5df 100644
> --- a/arch/arm/mach-k3/include/mach/am64_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/am64_hardware.h
> @@ -7,6 +7,11 @@
>  #ifndef __ASM_ARCH_AM64_HARDWARE_H
>  #define __ASM_ARCH_AM64_HARDWARE_H
>
> +#include <config.h>
> +#ifndef __ASSEMBLY__
> +#include <linux/bitops.h>
> +#endif
> +
>  #define PADCFG_MMR1_BASE                               0x000f0000
>  #define MCU_PADCFG_MMR1_BASE                           0x04080000
>  #define WKUP_CTRL_MMR0_BASE                            0x43000000
> @@ -41,4 +46,23 @@
>  /* Use Last 2K as Scratch pad */
>  #define TI_SRAM_SCRATCH_BOARD_EEPROM_START             0x7019f800
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +#define AM64X_DEV_RTI8                 127
> +#define AM64X_DEV_RTI9                 128
> +#define AM64X_DEV_R5FSS0_CORE0         121
> +#define AM64X_DEV_R5FSS0_CORE1         122
> +
> +static const u32 put_device_ids[] = {
> +       AM64X_DEV_RTI9,
> +       AM64X_DEV_RTI8,
> +};
> +
> +static const u32 put_core_ids[] = {
> +       AM64X_DEV_R5FSS0_CORE1,
> +       AM64X_DEV_R5FSS0_CORE0, /* Handle CPU0 after CPU1 */
> +};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_DRA8_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/am6_hardware.h b/arch/arm/mach-k3/include/mach/am6_hardware.h
> index f9f32918f7c..029041f415c 100644
> --- a/arch/arm/mach-k3/include/mach/am6_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/am6_hardware.h
> @@ -39,4 +39,23 @@
>
>  #define        NAVSS_NBSS_THREADMAP                            0x10
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +#define AM6_DEV_MCU_RTI0                       134
> +#define AM6_DEV_MCU_RTI1                       135
> +#define AM6_DEV_MCU_ARMSS0_CPU0                        159
> +#define AM6_DEV_MCU_ARMSS0_CPU1                        245
> +
> +static const u32 put_device_ids[] = {
> +       AM6_DEV_MCU_RTI0,
> +       AM6_DEV_MCU_RTI1,
> +};
> +
> +static const u32 put_core_ids[] = {
> +       AM6_DEV_MCU_ARMSS0_CPU1,
> +       AM6_DEV_MCU_ARMSS0_CPU0,        /* Handle CPU0 after CPU1 */
> +};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_AM6_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/j721e_hardware.h b/arch/arm/mach-k3/include/mach/j721e_hardware.h
> index 247dee99ce5..376db389ba1 100644
> --- a/arch/arm/mach-k3/include/mach/j721e_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/j721e_hardware.h
> @@ -38,4 +38,23 @@
>  /* MCU SCRATCHPAD usage */
>  #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +#define J721E_DEV_MCU_RTI0                     262
> +#define J721E_DEV_MCU_RTI1                     263
> +#define J721E_DEV_MCU_ARMSS0_CPU0              250
> +#define J721E_DEV_MCU_ARMSS0_CPU1              251
> +
> +static const u32 put_device_ids[] = {
> +       J721E_DEV_MCU_RTI0,
> +       J721E_DEV_MCU_RTI1,
> +};
> +
> +static const u32 put_core_ids[] = {
> +       J721E_DEV_MCU_ARMSS0_CPU1,
> +       J721E_DEV_MCU_ARMSS0_CPU0,      /* Handle CPU0 after CPU1 */
> +};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_J721E_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/j721s2_hardware.h b/arch/arm/mach-k3/include/mach/j721s2_hardware.h
> index 2e155ed9ec4..7948bcf4789 100644
> --- a/arch/arm/mach-k3/include/mach/j721s2_hardware.h
> +++ b/arch/arm/mach-k3/include/mach/j721s2_hardware.h
> @@ -38,4 +38,23 @@
>  /* MCU SCRATCHPAD usage */
>  #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
>
> +#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
> +
> +#define J721S2_DEV_MCU_RTI0                    295
> +#define J721S2_DEV_MCU_RTI1                    296
> +#define J721S2_DEV_MCU_ARMSS0_CPU0             284
> +#define J721S2_DEV_MCU_ARMSS0_CPU1             285
> +
> +static const u32 put_device_ids[] = {
> +       J721S2_DEV_MCU_RTI0,
> +       J721S2_DEV_MCU_RTI1,
> +};
> +
> +static const u32 put_core_ids[] = {
> +       J721S2_DEV_MCU_ARMSS0_CPU1,
> +       J721S2_DEV_MCU_ARMSS0_CPU0,     /* Handle CPU0 after CPU1 */
> +};
> +
> +#endif
> +
>  #endif /* __ASM_ARCH_J721S2_HARDWARE_H */
> diff --git a/arch/arm/mach-k3/include/mach/sys_proto.h b/arch/arm/mach-k3/include/mach/sys_proto.h
> index d5d4b787b7d..8cc75b636b5 100644
> --- a/arch/arm/mach-k3/include/mach/sys_proto.h
> +++ b/arch/arm/mach-k3/include/mach/sys_proto.h
> @@ -12,7 +12,6 @@ u32 wait_on_value(u32 read_bit_mask, u32 match_value, void *read_addr,
>                   u32 bound);
>  struct ti_sci_handle *get_ti_sci_handle(void);
>  int do_board_detect(void);
> -void release_resources_for_core_shutdown(void);
>  int fdt_disable_node(void *blob, char *node_path);
>
>  void k3_spl_init(void);
> diff --git a/arch/arm/mach-k3/j721e_init.c b/arch/arm/mach-k3/j721e_init.c
> index 432cbc6a992..6d848239399 100644
> --- a/arch/arm/mach-k3/j721e_init.c
> +++ b/arch/arm/mach-k3/j721e_init.c
> @@ -398,58 +398,3 @@ u32 spl_boot_device(void)
>         else
>                 return __get_backup_bootmedia(main_devstat);
>  }
> -
> -#ifdef CONFIG_SYS_K3_SPL_ATF
> -
> -#define J721E_DEV_MCU_RTI0                     262
> -#define J721E_DEV_MCU_RTI1                     263
> -#define J721E_DEV_MCU_ARMSS0_CPU0              250
> -#define J721E_DEV_MCU_ARMSS0_CPU1              251
> -
> -void release_resources_for_core_shutdown(void)
> -{
> -       struct ti_sci_handle *ti_sci;
> -       struct ti_sci_dev_ops *dev_ops;
> -       struct ti_sci_proc_ops *proc_ops;
> -       int ret;
> -       u32 i;
> -
> -       const u32 put_device_ids[] = {
> -               J721E_DEV_MCU_RTI0,
> -               J721E_DEV_MCU_RTI1,
> -       };
> -
> -       ti_sci = get_ti_sci_handle();
> -       dev_ops = &ti_sci->ops.dev_ops;
> -       proc_ops = &ti_sci->ops.proc_ops;
> -
> -       /* Iterate through list of devices to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_device_ids); i++) {
> -               u32 id = put_device_ids[i];
> -
> -               ret = dev_ops->put_device(ti_sci, id);
> -               if (ret)
> -                       panic("Failed to put device %u (%d)\n", id, ret);
> -       }
> -
> -       const u32 put_core_ids[] = {
> -               J721E_DEV_MCU_ARMSS0_CPU1,
> -               J721E_DEV_MCU_ARMSS0_CPU0,      /* Handle CPU0 after CPU1 */
> -       };
> -
> -       /* Iterate through list of cores to put (shutdown) */
> -       for (i = 0; i < ARRAY_SIZE(put_core_ids); i++) {
> -               u32 id = put_core_ids[i];
> -
> -               /*
> -                * Queue up the core shutdown request. Note that this call
> -                * needs to be followed up by an actual invocation of an WFE
> -                * or WFI CPU instruction.
> -                */
> -               ret = proc_ops->proc_shutdown_no_wait(ti_sci, id);
> -               if (ret)
> -                       panic("Failed sending core %u shutdown message (%d)\n",
> -                             id, ret);
> -       }
> -}
> -#endif
> diff --git a/arch/arm/mach-k3/j721s2_init.c b/arch/arm/mach-k3/j721s2_init.c
> index 09e55ed4566..fb95984c1ab 100644
> --- a/arch/arm/mach-k3/j721s2_init.c
> +++ b/arch/arm/mach-k3/j721s2_init.c
> @@ -264,57 +264,3 @@ u32 spl_boot_device(void)
>         else
>                 return __get_backup_bootmedia(main_devstat);
>  }
> -
> -#define J721S2_DEV_MCU_RTI0                    295
> -#define J721S2_DEV_MCU_RTI1                    296
> -#define J721S2_DEV_MCU_ARMSS0_CPU0             284
> -#define J721S2_DEV_MCU_ARMSS0_CPU1             285
> -
> -void release_resources_for_core_shutdown(void)
> -{
> -       if (IS_ENABLED(CONFIG_SYS_K3_SPL_ATF)) {
> -               struct ti_sci_handle *ti_sci;
> -               struct ti_sci_dev_ops *dev_ops;
> -               struct ti_sci_proc_ops *proc_ops;
> -               int ret;
> -               u32 i;
> -
> -               const u32 put_device_ids[] = {
> -                       J721S2_DEV_MCU_RTI0,
> -                       J721S2_DEV_MCU_RTI1,
> -               };
> -
> -               ti_sci = get_ti_sci_handle();
> -               dev_ops = &ti_sci->ops.dev_ops;
> -               proc_ops = &ti_sci->ops.proc_ops;
> -
> -               /* Iterate through list of devices to put (shutdown) */
> -               for (i = 0; i < ARRAY_SIZE(put_device_ids); i++) {
> -                       u32 id = put_device_ids[i];
> -
> -                       ret = dev_ops->put_device(ti_sci, id);
> -                       if (ret)
> -                               panic("Failed to put device %u (%d)\n", id, ret);
> -               }
> -
> -               const u32 put_core_ids[] = {
> -                       J721S2_DEV_MCU_ARMSS0_CPU1,
> -                       J721S2_DEV_MCU_ARMSS0_CPU0,     /* Handle CPU0 after CPU1 */
> -               };
> -
> -               /* Iterate through list of cores to put (shutdown) */
> -               for (i = 0; i < ARRAY_SIZE(put_core_ids); i++) {
> -                       u32 id = put_core_ids[i];
> -
> -                       /*
> -                        * Queue up the core shutdown request. Note that this call
> -                        * needs to be followed up by an actual invocation of an WFE
> -                        * or WFI CPU instruction.
> -                        */
> -                       ret = proc_ops->proc_shutdown_no_wait(ti_sci, id);
> -                       if (ret)
> -                               panic("Failed sending core %u shutdown message (%d)\n",
> -                                     id, ret);
> -               }
> -       }
> -}
> --
> 2.39.2
>


-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info/privacypolicy


More information about the U-Boot mailing list