ソースを参照

reset: add socfpga_reset_status

Populate the reset_status callback for SOCFPGA.

Signed-off-by: Alan Tull <atull@opensource.altera.com>
Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Dinh Nguyen 10 年 前
コミット
f200890f22
1 ファイル変更15 行追加0 行削除
  1. 15 0
      drivers/reset/reset-socfpga.c

+ 15 - 0
drivers/reset/reset-socfpga.c

@@ -76,9 +76,24 @@ static int socfpga_reset_deassert(struct reset_controller_dev *rcdev,
 	return 0;
 	return 0;
 }
 }
 
 
+static int socfpga_reset_status(struct reset_controller_dev *rcdev,
+				unsigned long id)
+{
+	struct socfpga_reset_data *data = container_of(rcdev,
+						struct socfpga_reset_data, rcdev);
+	int bank = id / BITS_PER_LONG;
+	int offset = id % BITS_PER_LONG;
+	u32 reg;
+
+	reg = readl(data->membase + OFFSET_MODRST + (bank * NR_BANKS));
+
+	return !(reg & BIT(offset));
+}
+
 static struct reset_control_ops socfpga_reset_ops = {
 static struct reset_control_ops socfpga_reset_ops = {
 	.assert		= socfpga_reset_assert,
 	.assert		= socfpga_reset_assert,
 	.deassert	= socfpga_reset_deassert,
 	.deassert	= socfpga_reset_deassert,
+	.status		= socfpga_reset_status,
 };
 };
 
 
 static int socfpga_reset_probe(struct platform_device *pdev)
 static int socfpga_reset_probe(struct platform_device *pdev)