mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
[POWERPC] Document local bus nodes in the device tree, and update cuboot-pq2.
The localbus node is used to describe devices that are connected via a chip select or similar mechanism. The advantages over placing the devices under the root node are that it can be probed without probing other random things under the root, and that the description of which chip select a given device uses can be used to set up mappings if the firmware failed to do so in a useful manner. cuboot-pq2 is updated to match the binding; previously, it called itself chipselect rather than localbus, and used phandle linkage between the actual bus node and the control node (the current agreement is to simply use the fully-qualified address of the control registers, and ignore the overlap with the IMMR node). Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
2d2294ae12
commit
96fca1dea8
@ -2017,6 +2017,44 @@ platforms are moved over to use the flattened-device-tree model.
|
||||
fsl,cpm-command = <2e600000>;
|
||||
};
|
||||
|
||||
m) Chipselect/Local Bus
|
||||
|
||||
Properties:
|
||||
- name : Should be localbus
|
||||
- #address-cells : Should be either two or three. The first cell is the
|
||||
chipselect number, and the remaining cells are the
|
||||
offset into the chipselect.
|
||||
- #size-cells : Either one or two, depending on how large each chipselect
|
||||
can be.
|
||||
- ranges : Each range corresponds to a single chipselect, and cover
|
||||
the entire access window as configured.
|
||||
|
||||
Example:
|
||||
localbus@f0010100 {
|
||||
compatible = "fsl,mpc8272ads-localbus",
|
||||
"fsl,mpc8272-localbus",
|
||||
"fsl,pq2-localbus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
reg = <f0010100 40>;
|
||||
|
||||
ranges = <0 0 fe000000 02000000
|
||||
1 0 f4500000 00008000>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "jedec-flash";
|
||||
reg = <0 0 2000000>;
|
||||
bank-width = <4>;
|
||||
device-width = <1>;
|
||||
};
|
||||
|
||||
board-control@1,0 {
|
||||
reg = <1 0 20>;
|
||||
compatible = "fsl,mpc8272ads-bcsr";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
More devices will be defined as this spec matures.
|
||||
|
||||
VII - Specifying interrupt information for devices
|
||||
|
@ -44,22 +44,21 @@ struct pci_range pci_ranges_buf[MAX_PROP_LEN / sizeof(struct pci_range)];
|
||||
* some don't set up the PCI PIC at all, so we assume the device tree is
|
||||
* sane and update the BRx registers appropriately.
|
||||
*
|
||||
* For any node defined as compatible with fsl,pq2-chipselect,
|
||||
* #address/#size must be 2/1 for chipselect bus, 1/1 for parent bus,
|
||||
* and ranges must be for whole chip selects.
|
||||
* For any node defined as compatible with fsl,pq2-localbus,
|
||||
* #address/#size must be 2/1 for the localbus, and 1/1 for the parent bus.
|
||||
* Ranges must be for whole chip selects.
|
||||
*/
|
||||
static void update_cs_ranges(void)
|
||||
{
|
||||
u32 ctrl_ph;
|
||||
void *ctrl_node, *bus_node, *parent_node;
|
||||
void *bus_node, *parent_node;
|
||||
u32 *ctrl_addr;
|
||||
unsigned long ctrl_size;
|
||||
u32 naddr, nsize;
|
||||
int len;
|
||||
int i;
|
||||
|
||||
bus_node = finddevice("/chipselect");
|
||||
if (!bus_node || !dt_is_compatible(bus_node, "fsl,pq2-chipselect"))
|
||||
bus_node = finddevice("/localbus");
|
||||
if (!bus_node || !dt_is_compatible(bus_node, "fsl,pq2-localbus"))
|
||||
return;
|
||||
|
||||
dt_get_reg_format(bus_node, &naddr, &nsize);
|
||||
@ -74,19 +73,7 @@ static void update_cs_ranges(void)
|
||||
if (naddr != 1 || nsize != 1)
|
||||
goto err;
|
||||
|
||||
len = getprop(bus_node, "fsl,ctrl", &ctrl_ph, 4);
|
||||
if (len != 4)
|
||||
goto err;
|
||||
|
||||
ctrl_node = find_node_by_prop_value(NULL, "linux,phandle",
|
||||
(char *)&ctrl_ph, 4);
|
||||
if (!ctrl_node)
|
||||
goto err;
|
||||
|
||||
if (!dt_is_compatible(ctrl_node, "fsl,pq2-chipselect-ctrl"))
|
||||
goto err;
|
||||
|
||||
if (!dt_xlate_reg(ctrl_node, 0, (unsigned long *)&ctrl_addr,
|
||||
if (!dt_xlate_reg(bus_node, 0, (unsigned long *)&ctrl_addr,
|
||||
&ctrl_size))
|
||||
goto err;
|
||||
|
||||
@ -123,7 +110,7 @@ static void update_cs_ranges(void)
|
||||
return;
|
||||
|
||||
err:
|
||||
printf("Bad /chipselect or fsl,pq2-chipselect-ctrl node\r\n");
|
||||
printf("Bad /localbus node\r\n");
|
||||
}
|
||||
|
||||
/* Older u-boots don't set PCI up properly. Update the hardware to match
|
||||
|
Loading…
Reference in New Issue
Block a user