Re: [PATCH 3/6] dt/bindings: Add bindings for Tegra GMI controller
From: Mirza Krak <hidden>
Date: 2016-08-23 10:33:09
Also in:
linux-arm-kernel, linux-clk, linux-tegra
2016-08-08 16:44 GMT+02:00 Jon Hunter [off-list ref]:
quoted
+ + gmi@70090000 { + #address-cells = <1>; + #size-cells = <1>;I think 0 for size makes sense. I know that caused you problems before, but I am wondering if ...quoted
+ ranges;... ranges is needed here? If we do have it, I am wondering if it should be a single entry for the chip-select that is being used. For now we could only support a ranges with one entry. #address-cells = <1>; #size-cells = <1>; ranges = <4 0x48000000 0x00040000>;quoted
+ nvidia,snor-mux-mode; + nvidia,snor-adv-inv; + nvidia,snor-cs-select = <4>;I would have expected these under bus@X node as they are specific to the GMI CS. I would also expect that the actual chip-select number is encoded in the reg property.quoted
+ + bus@0,0 {bus@4 No mention of this bus node in the above documentation.quoted
+ compatible = "simple-bus"; + reg = <0 0>;reg = <4>; We should look up the chip-select from the reg property.quoted
+ ranges; + + #address-cells = <1>; + #size-cells = <1>; + + can@48000000 { + reg = <0x48000000 0x100>; + ... + }; + + can@48040000 { + reg = <0x48040000 0x100>; + ... + };If we use ranges we could have ... can@0 { reg = <0x0 0x100>; ... }; can@40000 { reg = <0x40000 0x100>; ... };
Hi.
Like we discussed I am now trying to implement this but without
success and I am starting to think that it is not that simple unless I
am missing something.
Below tree
gmi@70009000 {
status = "okay";
#address-cells = <1>;
#size-cells = <1>;
ranges = <4 0x48000000 0x7ffffff>;
bus@4 {
compatible = "simple-bus";
reg = <4 0>;
#address-cells = <1>;
#size-cells = <1>;
nvidia,snor-mux-mode;
nvidia,snor-adv-inv;
can@0 {
compatible = "nxp,sja1000";
reg = <0 0x100>;
....
};
can@40000 {
compatible = "nxp,sja1000";
reg = <0x40000 0x100>;
....
};
};
};
results in:
[ 8.472509] create child: /gmi@70009000/bus@4/can@0
[ 8.472561] OF: ** translation for device /gmi@70009000/bus@4/can@0 **
[ 8.472577] OF: bus is default (na=1, ns=1) on /gmi@70009000/bus@4
[ 8.472589] OF: translating address: 00000000
[ 8.472624] OF: parent bus is default (na=1, ns=1) on /gmi@70009000
[ 8.472641] OF: no ranges; cannot translate
[ 8.472668] of_irq_parse_one: dev=/gmi@70009000/bus@4/can@0, index=0
[ 8.472687] intspec=13 intlen=2
[ 8.472726] intsize=2 intlen=2
[ 8.472740] of_irq_parse_raw: /gpio@6000d000:0000000d,00000001
[ 8.493718] of_irq_parse_raw: ipar=/gpio@6000d000, size=2
[ 8.493737] -> addrsize=1
[ 8.493743] -> got it !
[ 8.493755] of_irq_parse_one: dev=/gmi@70009000/bus@4/can@0, index=1
[ 8.493771] intspec=13 intlen=2
[ 8.493790] intsize=2 intlen=2
[ 8.493800] of_irq_parse_one: dev=/gmi@70009000/bus@4/can@0, index=0
[ 8.493805] intspec=13 intlen=2
[ 8.493812] intsize=2 intlen=2
[ 8.493824] of_irq_parse_raw: /gpio@6000d000:0000000d,00000001
[ 8.493829] of_irq_parse_raw: ipar=/gpio@6000d000, size=2
[ 8.493834] -> addrsize=1
[ 8.493837] -> got it !
[ 8.493869] OF: ** translation for device /gmi@70009000/bus@4/can@0 **
[ 8.493885] OF: bus is default (na=1, ns=1) on /gmi@70009000/bus@4
[ 8.493892] OF: translating address: 00000000
[ 8.493902] OF: parent bus is default (na=1, ns=1) on /gmi@70009000
[ 8.493906] OF: no ranges; cannot translate
[ 8.493918] OF: ** translation for device /gmi@70009000/bus@4 **
[ 8.493924] OF: bus is default (na=1, ns=1) on /gmi@70009000
[ 8.493930] OF: translating address: 00000004
[ 8.493938] OF: parent bus is default (na=1, ns=1) on /
[ 8.493944] OF: walking ranges...
[ 8.493952] OF: default map, cp=4, s=7ffffff, da=4
[ 8.493973] OF: parent translation for: 48000000
[ 8.493978] OF: with offset: 0
[ 8.493986] OF: one level translation: 48000000
[ 8.493989] OF: reached root node
[ 8.494011] of_dma_get_range: no dma-ranges found for
node(/gmi@70009000/bus@4/can@0)
[ 8.494037] platform 48000000.bus:can@0: device is not dma coherent
[ 8.494048] platform 48000000.bus:can@0: device is not behind an iommu
[ 8.495209] sja1000 probe entered
[ 8.495212] sja1000 probe entered1
sja1000 probe fails because resource address is NULL.
The result is the same for the second child device.
I also attempted to add "ranges;" property to the bus child node,
which results in the same error on can@0, and can@4000 is actually
translated but it is not what I expect it to be (0x4803fff8).
And I am not quite sure how to get around this in a simple way. I can
not wrap my head around how the ranges property actually works really.
Any suggestions would be really helpful.
Best Regards
Mirza