Unverified Commit b98ad40f authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'omap-for-v6.9/soc-part2-signed' of...

Merge tag 'omap-for-v6.9/soc-part2-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into soc/arm

Few more SoC changes for omaps

Two changes to implement REBOOT_COLD for am335x.

* tag 'omap-for-v6.9/soc-part2-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: AM33xx: PRM: Implement REBOOT_COLD
  ARM: AM33xx: PRM: Remove redundand defines

Link: https://lore.kernel.org/r/pull-1709194504-639032@atomide.com


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents dd0907f3 6521f6a1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -18,7 +18,8 @@
 */
void am33xx_restart(enum reboot_mode mode, const char *cmd)
{
	/* TODO: Handle mode and cmd if necessary */
	/* TODO: Handle cmd if necessary */
	prm_reboot_mode = mode;

	omap_prm_reset_system();
}
+6 −0
Original line number Diff line number Diff line
@@ -246,6 +246,12 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
	.init_time	= omap_init_time_of,
	.dt_compat	= am33xx_boards_compat,
	.restart	= am33xx_restart,
	/*
	 * Historically am33xx supported only REBOOT_WARM even though default
	 * reboot_mode was REBOOT_COLD. Reflect legacy de-facto behaviour in
	 * SYSFS.
	 */
	.reboot_mode	= REBOOT_WARM,
MACHINE_END
#endif

+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#define AM33XX_GFX_MEM_STATEST_MASK			(0x3 << 4)
#define AM33XX_GLOBAL_WARM_SW_RST_MASK			(1 << 1)
#define AM33XX_RST_GLOBAL_WARM_SW_MASK			(1 << 0)
#define AM33XX_RST_GLOBAL_COLD_SW_MASK			(1 << 1)
#define AM33XX_PRUSS_MEM_ONSTATE_MASK			(0x3 << 5)
#define AM33XX_PRUSS_MEM_RETSTATE_MASK			(1 << 7)
#define AM33XX_PRUSS_MEM_STATEST_MASK			(0x3 << 23)
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
# ifndef __ASSEMBLER__
extern struct omap_domain_base prm_base;
extern u16 prm_features;
extern enum reboot_mode prm_reboot_mode;
int omap_prcm_init(void);
int omap2_prcm_base_init(void);
# endif
+14 −8
Original line number Diff line number Diff line
@@ -10,15 +10,12 @@
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/reboot.h>

#include "powerdomain.h"
#include "prm33xx.h"
#include "prm-regbits-33xx.h"

#define AM33XX_PRM_RSTCTRL_OFFSET		0x0000

#define AM33XX_RST_GLOBAL_WARM_SW_MASK		(1 << 0)

/* Read a register in a PRM instance */
static u32 am33xx_prm_read_reg(s16 inst, u16 idx)
{
@@ -322,10 +319,19 @@ static int am33xx_check_vcvp(void)
 *
 * Immediately reboots the device through warm reset.
 */
static void am33xx_prm_global_warm_sw_reset(void)
static void am33xx_prm_global_sw_reset(void)
{
	am33xx_prm_rmw_reg_bits(AM33XX_RST_GLOBAL_WARM_SW_MASK,
				AM33XX_RST_GLOBAL_WARM_SW_MASK,
	/*
	 * Historically AM33xx performed warm reset for all requested reboot_mode.
	 * Keep this behaviour unchanged for all except newly added REBOOT_COLD.
	 */
	u32 mask = AM33XX_RST_GLOBAL_WARM_SW_MASK;

	if (prm_reboot_mode == REBOOT_COLD)
		mask = AM33XX_RST_GLOBAL_COLD_SW_MASK;

	am33xx_prm_rmw_reg_bits(mask,
				mask,
				AM33XX_PRM_DEVICE_MOD,
				AM33XX_PRM_RSTCTRL_OFFSET);

@@ -386,7 +392,7 @@ static struct prm_ll_data am33xx_prm_ll_data = {
	.assert_hardreset		= am33xx_prm_assert_hardreset,
	.deassert_hardreset		= am33xx_prm_deassert_hardreset,
	.is_hardreset_asserted		= am33xx_prm_is_hardreset_asserted,
	.reset_system			= am33xx_prm_global_warm_sw_reset,
	.reset_system			= am33xx_prm_global_sw_reset,
};

int __init am33xx_prm_init(const struct omap_prcm_init_data *data)
Loading