2016-08-08 16:44 GMT+02:00 Jon Hunter <jonathanh@xxxxxxxxxx>: >> + >> + 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 ... > >> + 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>; > >> + 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. > >> + >> + bus@0,0 { > > bus@4 > > No mention of this bus node in the above documentation. > >> + compatible = "simple-bus"; >> + reg = <0 0>; > > reg = <4>; > > We should look up the chip-select from the reg property. > >> + 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 -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html