From: Lucas Stach <l.stach@pengutronix.de>
To: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Barebox List <barebox@lists.infradead.org>
Subject: Re: [PATCH 2/3] ARM: zii-imx8mq-dev: add DT fixups
Date: Wed, 18 Dec 2019 16:05:17 +0100 [thread overview]
Message-ID: <14e20ce67fe57357845ccc92cd8f1612a68cc3e3.camel@pengutronix.de> (raw)
In-Reply-To: <CAHQ1cqHGSrDejarOynOnmLPjyusZgBfqQV=Z-ZHEtmhffbe38A@mail.gmail.com>
On Mi, 2019-12-18 at 06:37 -0800, Andrey Smirnov wrote:
> On Wed, Dec 18, 2019 at 5:56 AM Lucas Stach <l.stach@pengutronix.de> wrote:
> > On Mi, 2019-12-18 at 05:54 -0800, Andrey Smirnov wrote:
> > > On Tue, Dec 17, 2019 at 3:19 AM Lucas Stach <l.stach@pengutronix.de> wrote:
> > > > There are only two fixups we need to apply at the moment:
> > > > - The 27" RMB3 based unit has a eGalax Touchscreen instead of Synaptics.
> > > > - The 10.1" SCU/CCU unit has no DEB and thus no switch, but instead the
> > > > i210 ethernet is routed to the external connector directly.
> > > >
> > > > Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> > > > ---
> > > > arch/arm/boards/zii-imx8mq-dev/board.c | 138 +++++++++++++++++++++++++
> > > > arch/arm/dts/imx8mq-zii-ultra.dtsi | 10 ++
> > > > 2 files changed, 148 insertions(+)
> > > >
> > > > diff --git a/arch/arm/boards/zii-imx8mq-dev/board.c b/arch/arm/boards/zii-imx8mq-dev/board.c
> > > > index dcf945db495a..0be68423d9bf 100644
> > > > --- a/arch/arm/boards/zii-imx8mq-dev/board.c
> > > > +++ b/arch/arm/boards/zii-imx8mq-dev/board.c
> > > > @@ -11,6 +11,15 @@
> > > > #include <asm/memory.h>
> > > > #include <linux/sizes.h>
> > > > #include <mach/bbu.h>
> > > > +#include "../zii-common/pn-fixup.h"
> > > > +
> > > > +#define LRU_FLAG_EGALAX BIT(0)
> > > > +#define LRU_FLAG_NO_DEB BIT(1)
> > > > +
> > > > +struct zii_imx8mq_dev_lru_fixup {
> > > > + struct zii_pn_fixup fixup;
> > > > + unsigned int flags;
> > > > +};
> > > >
> > > > static int zii_imx8mq_dev_init(void)
> > > > {
> > > > @@ -32,3 +41,132 @@ static int zii_imx8mq_dev_init(void)
> > > > return 0;
> > > > }
> > > > device_initcall(zii_imx8mq_dev_init);
> > > > +
> > > > +static int zii_imx8mq_dev_fixup_egalax_ts(struct device_node *root, void *ctx)
> > > > +{
> > > > + struct device_node *np;
> > > > +
> > > > + /*
> > > > + * The 27" unit has a EETI eGalax touchscreen instead of the
> > > > + * Synaptics RMI4 found on other units.
> > > > + */
> > > > + pr_info("Enabling eGalax touchscreen instead of RMI4\n");
> > > > +
> > > > + np = of_find_compatible_node(root, NULL, "syna,rmi4-i2c");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_device_disable(np);
> > > > +
> > > > + np = of_find_compatible_node(root, NULL, "eeti,exc3000");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_device_enable(np);
> > > > +
> > > > + return 0;
> > > > +}
> > > > +
> > > > +static int zii_imx8mq_dev_fixup_deb_internal(void)
> > > > +{
> > > > + struct device_node *np, *aliases;
> > > > + struct device_d *dev;
> > > > +
> > > > + /*
> > > > + * In the internal DT remove the complete FEC hierarchy and move the
> > > > + * i210 to be the eth0 interface to allow network boot to work without
> > > > + * rewriting all the boot scripts.
> > > > + */
> > > > + aliases = of_find_node_by_path("/aliases");
> > > > + if (!aliases)
> > > > + return -ENODEV;
> > > > +
> > > > + np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-fec");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_device_disable(np);
> > > > +
> > > > + of_property_write_string(aliases, "ethernet1", np->full_name);
> > > > +
> > > > + dev = get_device_by_device_node(np);
> > >
> > > The patch adding this function might be missing from the series. Or
> > > did I miss it going in earlier?
> >
> > Urgh, yes. Sorry about that, I missed this one when preparing the stuff
> > t send out. I'll send it as soon as my Barebox tree isn't messed up
> > anymore.
> >
>
> No worries. One other thing that I noticed is that I don't think that
> "watchdog@38" on "i2c3" node has trickled down from upstream to our
> copy of imx8mq-zii-ultra.dtsi, so the line doing
>
> of_find_compatible_node(root, NULL, "zii,rave-wdt");
>
> might not find what it is looking for. I might have missed something
> here too, but I think it is worth double checking.
Your are talking about the line in zii_imx8mq_dev_fixup_deb() below,
right? This fixup is only run on the DT passed to the Linux kernel, not
the internal DT, so it's not an issue that this node isn't present in
the Barebox DT yet.
Regards,
Lucas
> > > > + if (!dev)
> > > > + return -ENODEV;
> > > > +
> > > > + unregister_device(dev);
> > > > +
> > > > + np = of_find_node_by_name(NULL, "i210@0");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_property_write_string(aliases, "ethernet0", np->full_name);
> > > > +
> > > > + /* Refresh the internal aliases list from the patched DT */
> > > > + of_alias_scan();
> > > > +
> > > > + return 0;
> > > > +}
> > > > +
> > > > +static int zii_imx8mq_dev_fixup_deb(struct device_node *root, void *ctx)
> > > > +{
> > > > + struct device_node *np;
> > > > +
> > > > + /*
> > > > + * In the kernel DT remove all devices from the DEB, which isn't
> > > > + * present on this system.
> > > > + */
> > > > + np = of_find_compatible_node(root, NULL, "marvell,mv88e6085");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_device_disable(np);
> > > > +
> > > > + np = of_find_compatible_node(root, NULL, "zii,rave-wdt");
> > > > + if (!np)
> > > > + return -ENODEV;
> > > > +
> > > > + of_device_disable(np);
> > > > +
> > > > + return 0;
> > > > +}
> > > > +
> > > > +static void zii_imx8mq_dev_lru_fixup(const struct zii_pn_fixup *context)
> > > > +{
> > > > + const struct zii_imx8mq_dev_lru_fixup *fixup =
> > > > + container_of(context, struct zii_imx8mq_dev_lru_fixup, fixup);
> > > > +
> > > > + if (fixup->flags & LRU_FLAG_EGALAX)
> > > > + of_register_fixup(zii_imx8mq_dev_fixup_egalax_ts, NULL);
> > > > +
> > > > + if (fixup->flags & LRU_FLAG_NO_DEB) {
> > > > + zii_imx8mq_dev_fixup_deb_internal();
> > > > + of_register_fixup(zii_imx8mq_dev_fixup_deb, NULL);
> > > > + }
> > > > +}
> > > > +
> > > > +#define ZII_IMX8MQ_DEV_LRU_FIXUP(__pn, __flags) \
> > > > + { \
> > > > + { __pn, zii_imx8mq_dev_lru_fixup }, \
> > > > + __flags \
> > > > + }
> > > > +
> > > > +static const struct zii_imx8mq_dev_lru_fixup zii_imx8mq_dev_lru_fixups[] = {
> > > > + ZII_IMX8MQ_DEV_LRU_FIXUP("00-5131-02", LRU_FLAG_EGALAX),
> > > > + ZII_IMX8MQ_DEV_LRU_FIXUP("00-5131-03", LRU_FLAG_EGALAX),
> > > > + ZII_IMX8MQ_DEV_LRU_FIXUP("00-5170-01", LRU_FLAG_NO_DEB),
> > > > +};
> > > > +
> > > > +/*
> > > > + * This initcall needs to be executed before coredevices, so we have a chance
> > > > + * to fix up the devices with the correct information.
> > > > + */
> > > > +static int zii_imx8mq_dev_process_fixups(void)
> > > > +{
> > > > + if (!of_machine_is_compatible("zii,imx8mq-ultra"))
> > > > + return 0;
> > > > +
> > > > + zii_process_lru_fixups(zii_imx8mq_dev_lru_fixups);
> > > > +
> > > > + return 0;
> > > > +}
> > > > +postmmu_initcall(zii_imx8mq_dev_process_fixups);
> > > > diff --git a/arch/arm/dts/imx8mq-zii-ultra.dtsi b/arch/arm/dts/imx8mq-zii-ultra.dtsi
> > > > index 6180f21ab0a4..50bad9b1a27e 100644
> > > > --- a/arch/arm/dts/imx8mq-zii-ultra.dtsi
> > > > +++ b/arch/arm/dts/imx8mq-zii-ultra.dtsi
> > > > @@ -22,6 +22,11 @@
> > > > };
> > > > };
> > > >
> > > > + device-info {
> > > > + nvmem-cells = <&lru_part_number>;
> > > > + nvmem-cell-names = "lru-part-number";
> > > > + };
> > > > +
> > > > aliases {
> > > > ethernet0 = &fec1;
> > > > ethernet1 = &i210;
> > > > @@ -64,6 +69,11 @@
> > > > &uart2 {
> > > > rave-sp {
> > > > eeprom@a4 {
> > > > + lru_part_number: lru-part-number@21 {
> > > > + reg = <0x21 15>;
> > > > + read-only;
> > > > + };
> > > > +
> > > > mac_address_0: mac-address@180 {
> > > > reg = <0x180 6>;
> > > > };
> > > > --
> > > > 2.20.1
> > > >
> > > >
> > > > _______________________________________________
> > > > barebox mailing list
> > > > barebox@lists.infradead.org
> > > > http://lists.infradead.org/mailman/listinfo/barebox
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2019-12-18 15:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-17 11:18 [PATCH 1/3] ARM: zii-imx8mq-dev: make eMMC update target the default Lucas Stach
2019-12-17 11:18 ` [PATCH 2/3] ARM: zii-imx8mq-dev: add DT fixups Lucas Stach
2019-12-18 13:54 ` Andrey Smirnov
2019-12-18 13:56 ` Lucas Stach
2019-12-18 14:37 ` Andrey Smirnov
2019-12-18 15:05 ` Lucas Stach [this message]
2019-12-18 15:13 ` Andrey Smirnov
2019-12-17 11:18 ` [PATCH 3/3] ARM: zii-imx8mq-dev: fixup touchscreen and ethernet switch alias Lucas Stach
2019-12-18 7:29 ` [PATCH 1/3] ARM: zii-imx8mq-dev: make eMMC update target the default Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=14e20ce67fe57357845ccc92cd8f1612a68cc3e3.camel@pengutronix.de \
--to=l.stach@pengutronix.de \
--cc=andrew.smirnov@gmail.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox