brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · ee3f1bb Raw
57 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2// Copyright (C) 2016 Broadcom3 4#include <linux/io.h>5#include <linux/mod_devicetable.h>6#include <linux/platform_device.h>7#include <linux/reboot.h>8 9#define RSTMGR_REG_WR_ACCESS_OFFSET	010#define RSTMGR_REG_CHIP_SOFT_RST_OFFSET	411 12#define RSTMGR_WR_PASSWORD		0xa5a513#define RSTMGR_WR_PASSWORD_SHIFT	814#define RSTMGR_WR_ACCESS_ENABLE		115 16static void __iomem *kona_reset_base;17 18static int kona_reset_handler(struct sys_off_data *data)19{20	/*21	 * A soft reset is triggered by writing a 0 to bit 0 of the soft reset22	 * register. To write to that register we must first write the password23	 * and the enable bit in the write access enable register.24	 */25	writel((RSTMGR_WR_PASSWORD << RSTMGR_WR_PASSWORD_SHIFT) |26		RSTMGR_WR_ACCESS_ENABLE,27		kona_reset_base + RSTMGR_REG_WR_ACCESS_OFFSET);28	writel(0, kona_reset_base + RSTMGR_REG_CHIP_SOFT_RST_OFFSET);29 30	return NOTIFY_DONE;31}32 33static int kona_reset_probe(struct platform_device *pdev)34{35	kona_reset_base = devm_platform_ioremap_resource(pdev, 0);36	if (IS_ERR(kona_reset_base))37		return PTR_ERR(kona_reset_base);38 39	return devm_register_sys_off_handler(&pdev->dev, SYS_OFF_MODE_RESTART,40					     128, kona_reset_handler, NULL);41}42 43static const struct of_device_id of_match[] = {44	{ .compatible = "brcm,bcm21664-resetmgr" },45	{},46};47 48static struct platform_driver bcm_kona_reset_driver = {49	.probe = kona_reset_probe,50	.driver = {51		.name = "brcm-kona-reset",52		.of_match_table = of_match,53	},54};55 56builtin_platform_driver(bcm_kona_reset_driver);57