From: John Keeping <john@metanate.com>
To: Johan Jonker <jbx6244@gmail.com>
Cc: dario.binacchi@amarulasolutions.com,
michael@amarulasolutions.com, sjg@chromium.org,
philipp.tomsich@vrull.eu, kever.yang@rock-chips.com,
u-boot@lists.denx.de, yifeng.zhao@rock-chips.com
Subject: Re: [PATCH v8 13/24] rockchip: rk3288: syscon_rk3288: store syscon platdata in regmap
Date: Tue, 14 Mar 2023 18:28:45 +0000 [thread overview]
Message-ID: <ZBC83Rw2gN779jzp@donbot> (raw)
In-Reply-To: <8fcf5d3f-185b-7f94-25c9-e4f2ce0562a5@gmail.com>
On Mon, Mar 13, 2023 at 10:09:23PM +0100, Johan Jonker wrote:
> On 3/13/23 18:46, John Keeping wrote:
> > On Mon, Mar 13, 2023 at 05:53:20PM +0100, Johan Jonker wrote:
> >> On 3/13/23 14:26, John Keeping wrote:
> >>> On Mon, Mar 13, 2023 at 01:30:57AM +0100, Johan Jonker wrote:
> >>>> The Rockchip SoC rk3288 has 2 types of device trees floating around.
> >>>> A 64bit reg size when synced from Linux and a 32bit for U-boot.
> >>>> A pre-probe function in the syscon class driver assumes only 32bit.
> >>>> For other odd reg structures the regmap must be defined in the individual
> >>>> syscon driver. Store rk3288 platdata in a regmap before pre-probe
> >>>> during bind.
> >>>>
> >>>> Signed-off-by: Johan Jonker <jbx6244@gmail.com>
> >>>> ---
> >>>
> >>> What is special about the rk3288 syscon that means the driver needs this
> >>> handling? Isn't this a general problem for DTs with 64-bit addresses on
> >>> 32-bit systems that could be solved in syscon-uclass.c?
> >>
> >> The dtd structure is only know to the driver with the SoC orientated compatible string.
> >> I see guessing the "reg" size more as a legacy that we keep using for existing drivers
> >> and should be deprecated.
> >>
> >>>
> >>> I suspect it's difficult to handle the general case since #memory-cells
> >>> may be difference for difference syscons so a global constant doesn't
> >>> work, but the approach in this patch seems incredibly verbose for
> >>
> >> You are right here, but other then rk3288 I don't see that happen for other 32bit Rockchip SoCs.
>
> >> It's more verbose, because struct syscon_uc_info is not there yet in the bind phase. (ie. calloc)
>
> Currently syscon_uc_info is allocated/set after bind on in the probe phase.
>
> device_probe()->device_of_to_plat()->device_alloc_priv()->dev_set_uclass_priv()
>
> Not aware how to hookup to "struct uclass_driver",so no other option to do that then here.
>
> >
> > What about non-Rockchip SoCs using the syscon uclass?
> >
> >>> something that is likely to be needed for many platforms.
> >>>
> >>
> >>> Could we use driver flags with something like:
> >>>
> >>> .flags = of_platdata_reg_size(struct rockchip_rk3288_noc_plat),
> >>
> >> Driver flags might solve only the "reg" size part, but not the
> >> ARRAY_SIZE and the unknown "reg" property location part.
> >
>
> > Right - but the generic syscon-uclass code assumes a single range and
> > that reg is the first property (at least I think it should be assuming a
> > single range, but it looks like there might be a bug there now).
>
> I'm not aware that syscon nodes can have multiple reg ranges, but don't assume that in the future there won't be a binding that does.
>
> >
> >>> and this untested macro:
> >>>
> >>> #define of_platdata_reg_size(s) \
> >>> ((sizeof(((struct rockchip_rk3288_noc_plat *) 0)->reg) == 64) ? \
> >>> DM_FLAGS_PLATDATA_REG_64BIT : 0)
> >>
> >> This would create a parallel data flow of a "size flag and ARRAY_SIZE variable + data" in
> >> a structure to the syscon class driver that also must be stored somewhere,
> >> while we could do the thing correct in the regmap structure right away.
> >
> > But the syscon uclass doesn't need any of that extra info - for
> > OF_PLATDATA is makes assumptions and I don't see why that needs to be
> > any different for 32-bit platforms with #memory-cells = <2>. From
> > syscon-uclass.c:
> >
> > /*
> > * With OF_PLATDATA we really have no way of knowing the format of
> > * the device-specific platform data. So we assume that it starts with
> > * a 'reg' member, and this holds a single address and size. Drivers
> > * using OF_PLATDATA will need to ensure that this is true.
> > */
> >
> > In fact, for RK3288 we can just do:
> >
>
> > static_assert(sizeof(fdt_val_t) == FIELD_SIZEOF(struct dtd_rockchip_rk3288_grf, reg[0]));
>
> fdt_val_t describes the parser capability and is not the same as the size in the dtd structure.
>
> >
> > and the uclass gets this right.
>
> There's no guaranty that the dtd structure is going to be like syscon_base_plat and that the reg property is first.
>
> struct syscon_base_plat {
> phys_addr_t reg[2];
> };
>
> From syscon.yaml and other bindings we learn that there can be other properties then "reg" in syscon nodes.
> Properties pop-up where ever they like in the dtd structure after combining various dtsi and dts files.
>
> struct dtd_rockchip_rk3066_grf {
> bool dummy_property;
> fdt64_t reg[2];
> };
>
> Only passing a size flag is not enough.
What I still don't understand is how any of that is different from the
current state - so why does this need to change to support 64-bit
addresses?
All of the constraints you discuss above are mentioned in the existing
uclass-syscon.c implementation, but that implementation is working today
for all of these platforms with 32-bit addresses. So is there any need
to support all those other use cases as part of allowing 64-bit
addresses in device trees?
next prev parent reply other threads:[~2023-03-14 18:29 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-13 0:23 [PATCH v8 00/24] Fixes for Rockchip NFC driver part 1 Johan Jonker
2023-03-13 0:28 ` [PATCH v8 01/24] mtd: nand: raw: rockchip_nfc: use dev_read_addr_ptr Johan Jonker
2023-03-13 0:28 ` [PATCH v8 02/24] mtd: nand: raw: rockchip_nfc: remove the compatible string "rockchip,rk3308-nfc" Johan Jonker
2023-03-13 0:28 ` [PATCH v8 03/24] mtd: nand: raw: rockchip_nfc: add layout structure Johan Jonker
2023-03-13 0:28 ` [PATCH v8 04/24] mtd: nand: raw: rockchip_nfc: add flash_node to chip structure Johan Jonker
2023-03-13 0:29 ` [PATCH v8 05/24] mtd: nand: raw: rockchip_nfc: fix oobfree offset and description Johan Jonker
2023-03-13 0:29 ` [PATCH v8 06/24] mtd: nand: add support for the Sandisk SDTNQGAMA chip Johan Jonker
2023-03-13 0:29 ` [PATCH v8 07/24] rockchip: adc: rockchip-saradc: use dev_read_addr_ptr Johan Jonker
2023-03-13 0:29 ` [PATCH v8 08/24] rockchip: timer: dw-apb-timer: use regs variable with uintptr_t size Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 0:30 ` [PATCH v8 09/24] rockchip: pwm: rk_pwm: use base " Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 0:30 ` [PATCH v8 10/24] rockchip: spi: rk_spi: " Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 0:30 ` [PATCH v8 11/24] include: dm: ofnode: fix headers Johan Jonker
2023-03-13 0:30 ` [PATCH v8 12/24] core: remap: fix regmap_init_mem_plat() reg size handeling Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 0:30 ` [PATCH v8 13/24] rockchip: rk3288: syscon_rk3288: store syscon platdata in regmap Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 12:15 ` Johan Jonker
2023-03-13 13:26 ` John Keeping
2023-03-13 16:53 ` Johan Jonker
2023-03-13 17:46 ` John Keeping
2023-03-13 21:09 ` Johan Jonker
2023-03-14 18:28 ` John Keeping [this message]
2023-03-13 0:31 ` [PATCH v8 14/24] core: fdtaddr: add devfdt_get_addr_size_index_ptr function Johan Jonker
2023-03-13 0:31 ` [PATCH v8 15/24] core: read: add dev_read_addr_index_ptr function Johan Jonker
2023-03-13 0:31 ` [PATCH v8 16/24] spi: spi-aspeed-smc: use devfdt_get_addr_index_ptr Johan Jonker
2023-03-13 0:31 ` [PATCH v8 17/24] drivers: use dev_read_addr_index_ptr when cast to pointer Johan Jonker
2023-03-13 3:10 ` Simon Glass
2023-03-13 0:32 ` [PATCH v8 18/24] drivers: use dev_read_addr_ptr " Johan Jonker
2023-03-13 0:32 ` [PATCH v8 19/24] drivers: use devfdt_get_addr_size_index_ptr " Johan Jonker
2023-03-13 0:32 ` [PATCH v8 20/24] drivers: use devfdt_get_addr_index_ptr " Johan Jonker
2023-03-13 0:32 ` [PATCH v8 21/24] drivers: use devfdt_get_addr_ptr " Johan Jonker
2023-03-13 0:32 ` [PATCH v8 22/24] drivers: fix debug string with fdt_addr_t input Johan Jonker
2023-03-13 0:33 ` [PATCH v8 23/24] arm: stm32mp: spl: fix function " Johan Jonker
2023-03-13 0:33 ` [PATCH v8 24/24] include: fdtdec: decouple fdt_addr_t and phys_addr_t size Johan Jonker
2023-04-21 3:15 ` [PATCH v8 00/24] Fixes for Rockchip NFC driver part 1 Kever Yang
2023-04-21 15:33 ` [PATCH v9] core: fdtaddr: add devfdt_get_addr_size_index_ptr function Johan Jonker
2023-04-21 15:34 ` [PATCH v8 00/24] Fixes for Rockchip NFC driver part 1 Johan Jonker
2023-04-22 20:33 ` Johan Jonker
2023-04-23 1:51 ` Kever Yang
2023-04-23 9:24 ` Johan Jonker
2023-04-24 23:33 ` Simon Glass
2023-04-23 9:19 ` [PATCH v9] core: fdtaddr: use map_sysmem() as cast for the return Johan Jonker
2023-04-24 19:42 ` Simon Glass
2023-04-28 19:20 ` Simon Glass
2023-04-28 19:26 ` Simon Glass
2023-05-10 21:48 ` [PATCH v10] core: fdtaddr: use map_sysmem() as cast for the return (part 2) Johan Jonker
2023-05-11 7:12 ` Kever Yang
2023-05-11 8:03 ` Johan Jonker
2023-05-16 15:19 ` Tom Rini
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=ZBC83Rw2gN779jzp@donbot \
--to=john@metanate.com \
--cc=dario.binacchi@amarulasolutions.com \
--cc=jbx6244@gmail.com \
--cc=kever.yang@rock-chips.com \
--cc=michael@amarulasolutions.com \
--cc=philipp.tomsich@vrull.eu \
--cc=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
--cc=yifeng.zhao@rock-chips.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.