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

Commit caba5c13 authored by Andreas Larsson's avatar Andreas Larsson Committed by Greg Kroah-Hartman
Browse files

can: grcan: grcan_probe(): fix broken system id check for errata workaround needs

commit 1e93ed26acf03fe6c97c6d573a10178596aadd43 upstream.

The systemid property was checked for in the wrong place of the device
tree and compared to the wrong value.

Fixes: 6cec9b07 ("can: grcan: Add device driver for GRCAN and GRHCAN cores")
Link: https://lore.kernel.org/all/20220429084656.29788-3-andreas@gaisler.com


Cc: stable@vger.kernel.org
Signed-off-by: default avatarAndreas Larsson <andreas@gaisler.com>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 76b64c69
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ struct grcan_device_config {
		.rxsize		= GRCAN_DEFAULT_BUFFER_SIZE,	\
		}

#define GRCAN_TXBUG_SAFE_GRLIB_VERSION	0x4100
#define GRCAN_TXBUG_SAFE_GRLIB_VERSION	4100
#define GRLIB_VERSION_MASK		0xffff

/* GRCAN private data structure */
@@ -1656,6 +1656,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev,
static int grcan_probe(struct platform_device *ofdev)
{
	struct device_node *np = ofdev->dev.of_node;
	struct device_node *sysid_parent;
	struct resource *res;
	u32 sysid, ambafreq;
	int irq, err;
@@ -1665,10 +1666,15 @@ static int grcan_probe(struct platform_device *ofdev)
	/* Compare GRLIB version number with the first that does not
	 * have the tx bug (see start_xmit)
	 */
	err = of_property_read_u32(np, "systemid", &sysid);
	if (!err && ((sysid & GRLIB_VERSION_MASK)
		     >= GRCAN_TXBUG_SAFE_GRLIB_VERSION))
	sysid_parent = of_find_node_by_path("/ambapp0");
	if (sysid_parent) {
		of_node_get(sysid_parent);
		err = of_property_read_u32(sysid_parent, "systemid", &sysid);
		if (!err && ((sysid & GRLIB_VERSION_MASK) >=
			     GRCAN_TXBUG_SAFE_GRLIB_VERSION))
			txbug = false;
		of_node_put(sysid_parent);
	}

	err = of_property_read_u32(np, "freq", &ambafreq);
	if (err) {