public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/14] bus: mvebu-mbus: Add static window allocation to the DT binding
Date: Sun, 09 Jun 2013 15:42:24 +0200	[thread overview]
Message-ID: <1695243.lt6nZouziV@wuerfel> (raw)
In-Reply-To: <20130608183851.GB2354@localhost>

On Saturday 08 June 2013 15:38:52 Ezequiel Garcia wrote:
> On Fri, Jun 07, 2013 at 02:00:54PM -0600, Jason Gunthorpe wrote:

> Right. I think we have two options here for laying the DT ranges.
> 
> 1) This is the proposal implied in the patchset I sent:
> 
> mbus {
> 	ranges = < we only put the internal-reg translation here>
> 	devbus-bootcs {
> 		ranges = <0 {target_id/attribute} {window_physical_base} {size}>
> 	}
> }

As Jason explained, you cannot have the window_physical_base in the child
device, that just wouldn't work. I don't know if that's a typo or a thinko ;-)

I also think {size} above there would just be 0xffffffff, right?

> 2) This is what Jason is proposing in his mail:
> 
> mbus {
> 	ranges = <{target_id/attribute} 0 {window_physical_base} {size}>
> 	devbus-bootcs {
> 		ranges = <0 {target_id/attribute} 0 {size}>
> 	}
> }
> 
> Of course this looks much cleaner, but it forces a lot of duplication
> in the DT files. Now, if you see some of the recent patches we've been
> sending, I think this duplication is very error-prone, and it'll be a
> nightmare to maintain. Let me propose an example to show this
> duplication:

I don't see where that duplication comes in. The ranges in the
"devbus-bootcs" are just describing how the hardware maps the
child address space into the global mbus space, and that never
changes. For the cases that only have a single device underneath,
you can actually put an empty ranges property in there and adapt
the "regs" property of whatever sits underneath it. These two
representations would do exactly the same for instance:

a)

mbus {
	ranges = <...>;
	devbus-bootcs {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 MBUS_BOOTCS 0 0xffffffff>;

		flash {
			regs = <0 0x100000>;
		};
	};
};

mbus {
	ranges = <...>;
	devbus-bootcs {
		#address-cells = <2>;
		#size-cells = <1>;
		ranges;

		flash {
			regs = <MBUS_BOOTCS 0 0x100000>;
		};
	};
};

> Let's suppose we have a board "A" with its armada-A.dts,
> and a common one armada.dtsi.
> 
> The common dtsi file would have this ranges property:
> 
> /* armada.dtsi */
> mbus {
> 	ranges = < internal_regs_id 0 internal_regs_base internal_regs_size
> 		         bootrom_id 0       bootrom_base       bootrom_size >
> }
> 
> The A board has a NOR connected to some devbus, so we need to add it
> to the ranges, but also need to duplicate the ones in the common dtsi:
> 
> /* armada-A.dts */
> mbus {
> 	ranges = < internal_regs_id 0 internal_regs_base internal_regs_size
> 		         bootrom_id 0       bootrom_base       bootrom_size
> 		         devbus0_id 0       devbus0_base       devbus0_size >
> }

I think the mbus ranges property is best left only in the
board specific .dts file, since you don't know if all of the
mappings are actually set up to the same value by all boot
loaders. In order to avoid a situation where the mbus ranges
describes a setting that is not actually programmed into the
mbus controller by the boot loader, I would leave that empty
by default and only fill it when the OS actually assigns
a mapping.
 
> Now, if we add something at the common level, and extend the ranges
> property in the common armada.dtsi, we also have to go through *each* of
> the per-board dts files (for *each* board) adding that entry, because
> entries *need* to be duplicated. Otherwise you're effectively
> "shadowing" the entries.

We can't really do that anyway, as that would imply we also change
all the boot loaders that have been deployed. I mentioned earlier that
we could also have the mappings we /want/ described in the DT rather the
ones that are set up, but after the discussion about the 0xd0/0xf1
window for the internal registers I think it's better to keep them
in sync all the time. We can leave out mappings here that are set
up but I'd prefer not to put mappings in there that are actually
incorrect.

When assigning the mappings, it's best to just go through all devices
sitting below the mbus and pick an appropriate address for each
'reg' value that gets put into the mbus hardware and into the ranges
property at the same time. The easiest algorithm would be to do
a 'first fit' starting at the highest address that is not already
occupied. If we need the physical address space to be more compact,
we can also first sort all the resources by size. The simpler approach
wastes at most the size difference between the smallest and the largest
range, and that is probably good enough.

I thought this was actually what you implemented already, but it seems
I was wrong.

	Arnd 

  parent reply	other threads:[~2013-06-09 13:42 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-07 16:47 [PATCH 00/14] MBus device tree binding Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 01/14] bus: mvebu-mbus: Use pr_fmt Ezequiel Garcia
2013-06-07 16:56   ` Thomas Petazzoni
2013-06-08 14:15   ` Jason Cooper
2013-06-07 16:47 ` [PATCH 02/14] bus: mvebu-mbus: Factor out initialization details Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 03/14] bus: mvebu-mbus: Introduce device tree binding Ezequiel Garcia
2013-06-07 19:10   ` Arnd Bergmann
2013-06-07 19:44     ` Jason Gunthorpe
2013-06-07 19:53       ` Arnd Bergmann
2013-06-07 20:09         ` Jason Gunthorpe
2013-06-07 21:15           ` Arnd Bergmann
2013-06-08  0:26             ` Jason Gunthorpe
2013-06-08 17:29       ` Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 04/14] bus: mvebu-mbus: Add static window allocation to the DT binding Ezequiel Garcia
2013-06-07 19:01   ` Arnd Bergmann
2013-06-07 20:00     ` Jason Gunthorpe
2013-06-07 21:07       ` Arnd Bergmann
2013-06-08 18:38       ` Ezequiel Garcia
2013-06-09  1:45         ` Jason Gunthorpe
2013-06-09 14:39           ` Ezequiel Garcia
2013-06-11 13:57           ` Ezequiel Garcia
2013-06-11 15:26             ` Arnd Bergmann
2013-06-11 21:50               ` Jason Gunthorpe
2013-06-11 22:22                 ` Sebastian Hesselbarth
2013-06-11 23:02                   ` Arnd Bergmann
2013-06-11 23:08                   ` Jason Gunthorpe
2013-06-12  7:37                     ` Sebastian Hesselbarth
2013-06-11 22:34                 ` Arnd Bergmann
2013-06-11 22:58                   ` Jason Gunthorpe
2013-06-11 23:10                     ` Arnd Bergmann
2013-06-12 11:14                   ` Grant Likely
2013-06-12 20:45                     ` Arnd Bergmann
2013-06-12 21:12                       ` Ezequiel Garcia
2013-06-12 21:26                         ` Jason Gunthorpe
2013-06-12 21:36                           ` Ezequiel Garcia
2013-06-12 21:52                             ` Arnd Bergmann
2013-06-12 22:02                               ` Jason Gunthorpe
2013-06-12 22:20                                 ` Arnd Bergmann
2013-06-12 22:24                                   ` Arnd Bergmann
2013-06-15 16:03                           ` Grant Likely
2013-06-12 20:02                 ` Ezequiel Garcia
2013-06-12 20:12                   ` Jason Gunthorpe
2013-06-12 21:50                   ` Arnd Bergmann
2013-06-12 11:07               ` Grant Likely
2013-06-12 11:43                 ` Arnd Bergmann
2013-06-12 11:54                   ` Grant Likely
2013-06-12 11:58                     ` Arnd Bergmann
2013-06-12 10:52           ` Grant Likely
2013-06-09 13:42         ` Arnd Bergmann [this message]
2013-06-09 14:34           ` Ezequiel Garcia
2013-06-09 15:37             ` Arnd Bergmann
2013-06-12 10:48         ` Grant Likely
2013-06-11 13:31     ` Ezequiel Garcia
2013-06-11 15:02       ` Arnd Bergmann
2013-06-07 16:47 ` [PATCH 05/14] bus: mvebu-mbus: Update the mbus-compatible node's ranges property Ezequiel Garcia
2013-06-12 10:25   ` Grant Likely
2013-06-07 16:47 ` [PATCH 06/14] ARM: mvebu: Initialize MBus using the DT binding Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 07/14] ARM: mvebu: Remove the harcoded BootROM window allocation Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 08/14] memory: mvebu-devbus: Remove address decoding window workaround Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 09/14] ARM: mvebu: Add MBus to Armada 370/XP device tree Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 10/14] ARM: mvebu: Add BootROM " Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 11/14] ARM: mvebu: Relocate Armada 370/XP DeviceBus device tree nodes Ezequiel Garcia
2013-06-07 19:18   ` Arnd Bergmann
2013-06-07 16:47 ` [PATCH 12/14] ARM: mvebu: Remove device tree unused properties on A370 Ezequiel Garcia
2013-06-07 16:56   ` Thomas Petazzoni
2013-06-08 14:18   ` Jason Cooper
2013-06-07 16:47 ` [PATCH 13/14] ARM: mvebu: Relocate Armada 370 PCIe device tree nodes Ezequiel Garcia
2013-06-07 16:47 ` [PATCH 14/14] ARM: mvebu: Relocate Armada XP " Ezequiel Garcia

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=1695243.lt6nZouziV@wuerfel \
    --to=arnd@arndb.de \
    --cc=linux-arm-kernel@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