Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4277e6b9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull MIPS fixes from James Hogan:
 "A final few MIPS fixes for 4.17:

   - drop Lantiq gphy reboot/remove reset (4.14)

   - prctl(PR_SET_FP_MODE): Disallow PRE without FR (4.0)

   - ptrace(PTRACE_PEEKUSR): Fix 64-bit FGRs (3.15)"

* tag 'mips_fixes_4.17_3' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
  MIPS: ptrace: Fix PTRACE_PEEKUSR requests for 64-bit FGRs
  MIPS: prctl: Disallow FRE without FR with PR_SET_FP_MODE requests
  MIPS: lantiq: gphy: Drop reboot/remove reset asserts
parents 7172a69c c7e81462
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -721,6 +721,10 @@ int mips_set_process_fp_mode(struct task_struct *task, unsigned int value)
	if (value & ~known_bits)
		return -EOPNOTSUPP;

	/* Setting FRE without FR is not supported.  */
	if ((value & (PR_FP_MODE_FR | PR_FP_MODE_FRE)) == PR_FP_MODE_FRE)
		return -EOPNOTSUPP;

	/* Avoid inadvertently triggering emulation */
	if ((value & PR_FP_MODE_FR) && raw_cpu_has_fpu &&
	    !(raw_current_cpu_data.fpu_id & MIPS_FPIR_F64))
+1 −1
Original line number Diff line number Diff line
@@ -818,7 +818,7 @@ long arch_ptrace(struct task_struct *child, long request,
				break;
			}
#endif
			tmp = get_fpr32(&fregs[addr - FPR_BASE], 0);
			tmp = get_fpr64(&fregs[addr - FPR_BASE], 0);
			break;
		case PC:
			tmp = regs->cp0_epc;
+1 −1
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
						addr & 1);
				break;
			}
			tmp = get_fpr32(&fregs[addr - FPR_BASE], 0);
			tmp = get_fpr64(&fregs[addr - FPR_BASE], 0);
			break;
		case PC:
			tmp = regs->cp0_epc;
+0 −36
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ struct xway_gphy_priv {
	struct clk *gphy_clk_gate;
	struct reset_control *gphy_reset;
	struct reset_control *gphy_reset2;
	struct notifier_block gphy_reboot_nb;
	void __iomem *membase;
	char *fw_name;
};
@@ -64,24 +63,6 @@ static const struct of_device_id xway_gphy_match[] = {
};
MODULE_DEVICE_TABLE(of, xway_gphy_match);

static struct xway_gphy_priv *to_xway_gphy_priv(struct notifier_block *nb)
{
	return container_of(nb, struct xway_gphy_priv, gphy_reboot_nb);
}

static int xway_gphy_reboot_notify(struct notifier_block *reboot_nb,
				   unsigned long code, void *unused)
{
	struct xway_gphy_priv *priv = to_xway_gphy_priv(reboot_nb);

	if (priv) {
		reset_control_assert(priv->gphy_reset);
		reset_control_assert(priv->gphy_reset2);
	}

	return NOTIFY_DONE;
}

static int xway_gphy_load(struct device *dev, struct xway_gphy_priv *priv,
			  dma_addr_t *dev_addr)
{
@@ -205,14 +186,6 @@ static int xway_gphy_probe(struct platform_device *pdev)
	reset_control_deassert(priv->gphy_reset);
	reset_control_deassert(priv->gphy_reset2);

	/* assert the gphy reset because it can hang after a reboot: */
	priv->gphy_reboot_nb.notifier_call = xway_gphy_reboot_notify;
	priv->gphy_reboot_nb.priority = -1;

	ret = register_reboot_notifier(&priv->gphy_reboot_nb);
	if (ret)
		dev_warn(dev, "Failed to register reboot notifier\n");

	platform_set_drvdata(pdev, priv);

	return ret;
@@ -220,21 +193,12 @@ static int xway_gphy_probe(struct platform_device *pdev)

static int xway_gphy_remove(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
	struct xway_gphy_priv *priv = platform_get_drvdata(pdev);
	int ret;

	reset_control_assert(priv->gphy_reset);
	reset_control_assert(priv->gphy_reset2);

	iowrite32be(0, priv->membase);

	clk_disable_unprepare(priv->gphy_clk_gate);

	ret = unregister_reboot_notifier(&priv->gphy_reboot_nb);
	if (ret)
		dev_warn(dev, "Failed to unregister reboot notifier\n");

	return 0;
}