[Lenny400] Slightly later kernel/distro version

H. Nikolaus Schaller hns at goldelico.com
Fri Sep 1 10:51:07 CEST 2017


Hi Paul,

> Am 31.08.2017 um 23:18 schrieb Paul Boddie <paul at boddie.org.uk>:
> 
> On Monday 28. August 2017 16.57.34 H. Nikolaus Schaller wrote:
>> 
>> Fine! I have looked into the patches and it appears that there is only
>> a handful of areas that is patched. 256 files in roughly 15 areas.
>> 
>> Main areas are as expected arch/mips/jz4730, drivers/char/jzchar, and
>> some other drivers. As well as sound/oss. What I don't know is if
>> whe need the jz4740 and jz4750 stuff at all.
>> 
>> And for a modern 4.* kernel, we can probably use standard yaffs, ubifs
>> without any jz specific patches.
>> 
>> So it could suffice to make "modern" patches for ca. 10 areas...
> 
> I've been looking at David's work and have also been looking again at 
> supporting the JZ4730 in the modern kernel. Since my last attempt at writing 
> then-modern kernel support, I've done some work with other JZ47xx-series 
> systems and have perhaps gained a bit more understanding.
> 
> Partly related to this other work, and to try and understand how the JZ4730 
> does things, I introduced some reorganised code to the 2.6.x kernel 
> principally for CPM (clock and power management) and GPIO (general purpose 
> input/output) support, also tidying up the way the code supported different 
> display panels, and updating the keypad driver to test the GPIO support. Since 
> I didn't seem to break anything, I felt that I must now understand the 
> hardware a bit more.
> 
> So, I have more recently been writing drivers and things for the linux-stable 
> branch (4.13-rc5 or so).

Wow!!!

> The JZ4740 maintainers have mostly laid the 
> foundations,

that is what I would expect.

> although there are some areas where the functionality differs 
> enough that it requires some careful reimplementation or adjustment...

The SoC are not the same but cousins and share a lot of things.

> 
> The relationship between clocks, PLLs and peripherals is different, meaning 
> that a special CGU driver is required. I did see something odd about the 
> JZ4740 support, but I haven't managed to follow up with the MIPS developers 
> about this.
> 
> The JZ4730 has dedicated PWM peripherals, meaning that the TCU-based JZ4740 
> driver cannot be used and a separate one needs to be introduced.

Ok, but IMHO PWM is not on highest priority.

> 
> Also, the JZ4730 doesn't have a TCU (timer/counter unit) but an OST (operating 
> system timer) instead, so the timer support needs providing in a different 
> way.

Ok.

> 
> The GPIO management is different on the JZ4730. This was something I attempted 
> to tackle before, but I have mostly verified my understanding now, and so 
> JZ4730 support needs to be introduced to both the GPIO and pinctrl drivers.

GPIO and Pinmux this seems to be one of the most essential components besides
Clock & Power & Reset managers. With that it should be possible to see a little
more than Starting kernel ...

Another significant component is MMU. Or is this already done by the MIPS core code?

> 
> It seems possible that a special keypad driver is no longer needed in the 
> modern kernel because a generic GPIO keypad driver can be used. The data 
> structures for the keypad need changing slightly to work with this. I don't 
> know how things like Num Lock and Caps Lock are supported in this arrangement, 
> however.

Yes, the modern matrix driver should be good enough:

https://www.kernel.org/doc/Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt

And if not, we could still write our own on top of the gpio library functions
of modern kernels.

I think Num Lock and Caps Lock are to be handled by user-space (X11). The kernel
events only tell that the key was pressed/released.

> 
> Board initialisation needs changing to work with the modern kernel. This 
> mostly seems to involve choosing the appropriate devices and wiring them up 
> correctly.
> 
> Device tree definitions are also needed for the JZ4730 and the Minibook.

I have started something a little - but it is quite empty and probably wrong:

http://git.goldelico.com/?p=gta04-kernel.git;a=blob;f=arch/mips/boot/dts/ingenic/jz4730.dtsi;h=045d6b291f1e5e735a2bc86702581e2deb7fb184;hb=400a68db3ff8f78fde56b3f9bc904f01a0f951ef

http://git.goldelico.com/?p=gta04-kernel.git;a=blob;f=arch/mips/boot/dts/ingenic/minibook.dts;h=5b378e548cacbf341705d7575881c2d7691d9c88;hb=64931d3074f0abd59c808c692321e8b796520e77

This is an area where I probably can help a lot.

> 
> So far, I have made an attempt to implement all of the above: CGU, PWM, timer, 
> GPIO, board and device tree functionality.

Yes, this is necessary to see it booting (maybe PWM isn't needed here).
Ah, and we need UART for console log (and potentially login:).

> Remaining things in approximate 
> order of descending necessity are likely to be watchdog timer, RTC, 
> LCD/framebuffer, MMC, generic DMA (maybe used by the MMC support), I2C, USB, 
> sound and NAND functionality.

I'd see this priorities (DMA whenever we really need it):
* UART console
* MMC (to be able to run a rootfs)
* I2C to be able to access RTC and PMU
* USB to have more peripherals and external memory expansion
* LCD to see something and run X11
* Keyboard (gpio-matrix based)
* LED drivers (AFAIR some gpios)
* WDT
* sound
* NAND

> Without getting as far as LCD/framebuffer support and maybe MMC, I'm doubting 
> that I can really test this at the moment. But I wonder if anyone else is 
> interested in seeing what I've done and maybe pointing out errors in the way 
> I've done some things.

Yes, please share for discussion.

BR and thanks,
Nikolaus



More information about the Lenny400 mailing list