On Sun, 2009-11-22 at 23:01 +0100, Albert Herranz wrote:

> +/memreserve/ 0x01800000 0xe800000;   /* memory hole (includes I/O area) */
> +/memreserve/ 0x10000000 0x0004000;   /* DSP RAM */

Weird layout... nothing you can do about I suppose.

Out of curiosity, what is that DSP RAM ? Some actual DSP core somewhere
in the IO chip setup to use memory from up there ?

I'll skip on some things that I'm sure others will have commented
about :-)

> +     /*
> +      * The Nintendo Wii has two discontiguous RAM memory areas called
> +      * MEM1 and MEM2.
> +      * MEM1 starts at 0x00000000 and contains 24MB of 1T-SRAM.
> +      * MEM2 starts at 0x10000000 and contains 64MB of DDR2 RAM.
> +      * Between both memory address ranges there is an address space
> +      * where memory-mapped I/O registers are found.
> +      *
> +      * Currently, Linux 32-bit PowerPC does not support RAM in
> +      * discontiguous memory address spaces. Thus, in order to use
> +      * both RAM areas, we declare as RAM the range from the start of
> +      * MEM1 to the end of useable MEM2 and exclude the needed parts
> +      * with /memreserve/ statements, at the expense of wasting a bit
> +      * of memory.
> +      */
> +     memory {
> +             device_type = "memory";
> +             /* MEM1 + memory hole + MEM2 - firmware/buffers area */
> +             reg = <0x00000000 0x133e0000>;
> +     };

So we do have a nasty hole here in the middle. How bad it is if you try
to just have two ranges in there (ie as if it was discontiguous) ? We
shouldn't be far from being able to do discontig mem actually, should be
easy enough to fix. Tho I don't have (yet) the HW :-) (I'm tempted...)

Same comment as other discussions about the framebuffer here.

> +     cpus {
> +             #cpus = <1>;
> +             #address-cells = <1>;
> +             #size-cells = <0>;
> +
> +             PowerPC,broad...@0 {
> +                     device_type = "cpu";
> +                     reg = <0>;
> +                     clock-frequency = <729000000>; /* 729MHz */
> +                     bus-frequency = <243000000>; /* 243MHz core-to-bus 3x */
> +                     timebase-frequency = <60750000>; /* 243MHz / 4 */
> +                     i-cache-line-size = <32>;
> +                     d-cache-line-size = <32>;
> +                     i-cache-size = <32768>;
> +                     d-cache-size = <32768>;
> +             };
> +     };
> +
> +     /* devices contained in the hollywood chipset */
> +     soc {

Call it "hollywood"

> +             #address-cells = <1>;
> +             #size-cells = <1>;
> +             #interrupt-cells = <1>;
> +             model = "hollywood";
> +             compatible = "nintendo,hollywood";
> +             clock-frequency = <243000000>; /* 243MHz */
> +             ranges = <0x0c000000 0x0c000000 0x00010000
> +                       0x0d000000 0x0d000000 0x00010000
> +                       0x0d040000 0x0d040000 0x00050000
> +                       0x0d800000 0x0d800000 0x00001000
> +                       0x133e0000 0x133e0000 0x00c20000>;
> +
> +             vi...@0c002000 {
> +                     compatible = "nintendo,hollywood-video";
> +                     reg = <0x0c002000 0x100>;
> +                     interrupts = <8>;
> +                     interrupt-parent = <&PIC0>;
> +             };
> +
> +             PIC0: p...@0c003000 {
> +                     #interrupt-cells = <1>;
> +                     compatible = "nintendo,flipper-pic";
> +                     reg = <0x0c003000 0x8>;
> +                     interrupt-controller;
> +             };
> +
> +             resetswi...@0c003000 {
> +                     compatible = "nintendo,hollywood-resetswitch";
> +                     reg = <0x0c003000 0x4>;
> +                     interrupts = <1>;
> +                     interrupt-parent = <&PIC0>;
> +             };
> +
> +             au...@0c005000 {
> +                     compatible = "nintendo,hollywood-audio";
> +                     reg = <0x0c005000 0x200         /* DSP */
> +                            0x0d006c00 0x20>;        /* AI */
> +                     interrupts = <6>;
> +                     interrupt-parent = <&PIC0>;
> +             };
> +
> +             /* Team Twiizers' 'mini' firmware IPC */

Out of curiosity, what are these ? :-)

> +             m...@0d000000 {
> +                     #address-cells = <1>;
> +                     #size-cells = <1>;
> +                     #interrupt-cells = <1>;
> +                     compatible = "twiizers,starlet-mini-ipc";
> +                     reg = <0x0d000000 0x40  /* IPC */
> +                            0x13fffffc 0x4>; /* mini header pointer */
> +             };
> +
> +             ser...@0d006400 {
> +                     compatible = "nintendo,hollywood-serial";
> +                     reg = <0x0d006400 0x100>;
> +                     interrupts = <3>;
> +                     interrupt-parent = <&PIC0>;
> +             };
> +
> +             /* External Interface bus */
> +             e...@0d006800 {
> +                     #address-cells = <1>;
> +                     #size-cells = <1>;
> +                     compatible = "nintendo,hollywood-exi";
> +                     reg = <0x0d006800 0x40>;
> +                     interrupts = <4>;
> +                     interrupt-parent = <&PIC0>;
> +
> +                     USBGECKO0: usbge...@0d006814 {
> +                             compatible = "usbgecko,usbgecko";
> +                             reg = <0x0d006814 0x14>;
> +                             virtual-reg = <0xcd006814>;
> +                     };
> +             };

Similar comment as before, could the above be dynamically probed ? If
you are not a hacker you may not need that at all to use some linux
based piece of SW on the wii right ?

> +             e...@0d040000 {
> +                     compatible = "nintendo,hollywood-ehci";
> +                     reg = <0x0d040000 0x100
> +                            0x133e0000 0x80000>; /* 512 KB */
> +                     interrupts = <4>;
> +                     interrupt-parent = <&PIC1>;
> +             };
> +
> +             oh...@0d050000 {
> +                     compatible = "nintendo,hollywood-ohci";
> +                     reg = <0x0d050000 0x100
> +                            0x13460000 0x80000>; /* 512 KB */
> +                     interrupts = <5>;
> +                     interrupt-parent = <&PIC1>;
> +             };
> +
> +             oh...@0d060000 {

Why the "1" ?

> +                     compatible = "nintendo,hollywood-ohci";
> +                     reg = <0x0d060000 0x100
> +                            0x134e0000 0x80000>; /* 512 KB */
> +                     interrupts = <6>;
> +                     interrupt-parent = <&PIC1>;
> +             };

Are the above OHCI and EHCI "special" ? If not, there's an existing
binding for that sort of thing, which btw requires properties to
indicate the endianness of the registers and in-memory data structures
etc...

> +             sd...@0d070000 {
> +                     compatible = "nintendo,hollywood-sdhci";
> +                     reg = <0x0d070000 0x200>;
> +                     interrupts = <7>;
> +                     interrupt-parent = <&PIC1>;
> +             };
> +
> +             sd...@0d080000 {
> +                     compatible = "nintendo,hollywood-sdhci";
> +                     reg = <0x0d080000 0x200>;
> +                     interrupts = <8>;
> +                     interrupt-parent = <&PIC1>;
> +             };

Again, no need for a "1" in there. Names don't have to be unique if the
unit address is different.

> +             PIC1: p...@0d800030 {
> +                     #interrupt-cells = <1>;
> +                     compatible = "nintendo,hollywood-pic";
> +                     reg = <0x0d800030 0x8>;
> +                     interrupt-controller;
> +                     interrupts = <14>;
> +                     interrupt-parent = <&PIC0>;
> +             };

Ah, a cascaded PIC, fun fun fun

> +             hollywood-ahbp...@0d800064 {
> +                     compatible = "nintendo,hollywood-ahbprot";
> +                     reg = <0x0d800064 0x4>;
> +             };

What is this ?

> +             gpio0: hollywood-g...@0d8000c0 {
> +                     compatible = "nintendo,hollywood-gpio";
> +                     reg = <0x0d8000c0 0x20>;
> +                     gpio-controller;
> +                     #gpio-cells = <2>;
> +             };
> +
> +             gpio1: hollywood-g...@0d8000e0 {
> +                     compatible = "nintendo,hollywood-gpio";
> +                     reg = <0x0d8000e0 0x20>;
> +                     gpio-controller;
> +                     #gpio-cells = <2>;
> +             };

Same comment about the "1"

> +             hollywood-res...@0d800194 {
> +                     compatible = "nintendo,hollywood-resets";
> +                     reg = <0x0d800194 0x4>;
> +             };
> +
> +             i2c-video {
> +                     #address-cells = <1>;
> +                     #size-cells = <0>;
> +                     compatible = "virtual,i2c-gpio";
> +
> +                     gpios = <&gpio0  16 0 /* 31-15 */
> +                              &gpio0  17 0 /* 31-14 */
> +                             >;
> +                     sda-is-open-drain = <1>;
> +                     sda-enforce-dir = <1>;
> +                     scl-is-open-drain = <1>;
> +                     scl-is-output-only = <1>;
> +                     udelay = <2>;
> +
> +                     audio-video-encoder {
> +                             compatible = "nintendo,wii-ave-rvl";
> +                             reg = <0x70>;
> +                     };
> +             };
> +     };
> +};
> +

Cheers,
Ben.


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to