Skip to contentSkip to conversation

LPC313x support - how to do it right?

DISCUSSION Zoltan Gyarmati 2 participants 3 messages Feb 5, 2013 – Feb 12, 2013

lore
Share & tools
lore
#0 lore raw

Hi,

in the last days i managed to rework and split up to more or less logical units the patch provided by NXP (see here:
http://ics.nxp.com/support/software/lpc313x.bsp.linux/) for the LPC313x platform to work with linux 3.7. Hence the original patch was against 2.6.33, it doesn't have any device tree bindings, and anyway needs a lot of cleanup, but at this point it works. I'm willing to add the LPC313x support to the mainline kernel (well, if the community doesn't advice against:), but i'm not totally sure about the workflow i'm supposed to follow, so here are my first questions (which probably will be followed by others later on):

1. Do i think right that to get it into the mainline, it needs to support device trees?

2. If so (and i think yes), is there any tutorial regarding to the porting old machine support code and drivers to use device trees? (i checked the kernel documentation and some other machine support code, so i have some idea, but there are lot of unclear details of course...)

3. Regarding to the drivers, my biggest concern is the serial driver:
the hw is close to the traditional 8250, but the NXP driver uses DMA access to handle it, which results a lot of changes in the drivers/tty/serial/8250/8250.c (see in the linked kernel tree below). What is the best strategy to follow in such a case? Adding this modifications to the original 8250 and define config macros to handle the differences(which will be kinda messy...), or create separated driver code (which will duplicate some code from the original 8250 driver...)

The patchset is available in this Gitorious repo:
https://gitorious.org/linux-3-7-gnublin/linux-3-7-gnublin/commits/gnublin-support
in the gnublin-support branch.
Currently it provides support for the serial port, the i2c bus, usb host and gadget, and mmc.

Thx in advance

Signature · 4 lines
br,
Zoltan Gyarmati
mail: mr.zoltan.gyarmati at gmail.com
freenode nick: zgyarmati
#1 lore raw

Dear Zoltan Gyarmati,

Quoted 11 lines · Zoltan Gyarmati

in the last days i managed to rework and split up to more or less logical units the patch provided by NXP (see here:
http://ics.nxp.com/support/software/lpc313x.bsp.linux/) for the LPC313x platform to work with linux 3.7. Hence the original patch was against 2.6.33, it doesn't have any device tree bindings, and anyway needs a lot of cleanup, but at this point it works. I'm willing to add the LPC313x support to the mainline kernel (well, if the community doesn't advice against:), but i'm not totally sure about the workflow i'm supposed to follow, so here are my first questions (which probably will be followed by others later on):

Quoted 2 lines

1. Do i think right that to get it into the mainline, it needs to support device trees?

Yes. No new ARM sub-architecture is accepted if it doesn't use the Device Tree.

Quoted 5 lines

2. If so (and i think yes), is there any tutorial regarding to the porting old machine support code and drivers to use device trees? (i checked the kernel documentation and some other machine support code, so i have some idea, but there are lot of unclear details of course...)

No real tutorial, but you can look at the slides of my presentation at
http://elinux.org/images/a/ad/Arm-soc-checklist.pdf.

Quoted 9 lines

3. Regarding to the drivers, my biggest concern is the serial driver:
the hw is close to the traditional 8250, but the NXP driver uses DMA access to handle it, which results a lot of changes in the drivers/tty/serial/8250/8250.c (see in the linked kernel tree below). What is the best strategy to follow in such a case? Adding this modifications to the original 8250 and define config macros to handle the differences(which will be kinda messy...), or create separated driver code (which will duplicate some code from the original 8250 driver...)

Hard to say without looking in details at the changes involved.

Best regards,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#2 lore raw

Hallo Thomas,

Quoted 20 lines · Thomas Petazzoni

Dear Zoltan Gyarmati,

Quoted 11 lines · Zoltan Gyarmati

in the last days i managed to rework and split up to more or less logical units the patch provided by NXP (see here:
http://ics.nxp.com/support/software/lpc313x.bsp.linux/) for the LPC313x platform to work with linux 3.7. Hence the original patch was against 2.6.33, it doesn't have any device tree bindings, and anyway needs a lot of cleanup, but at this point it works. I'm willing to add the LPC313x support to the mainline kernel (well, if the community doesn't advice against:), but i'm not totally sure about the workflow i'm supposed to follow, so here are my first questions (which probably will be followed by others later on):

Quoted 2 lines

1. Do i think right that to get it into the mainline, it needs to support device trees?

Yes. No new ARM sub-architecture is accepted if it doesn't use the Device Tree.

Quoted 7 lines
Quoted 5 lines

2. If so (and i think yes), is there any tutorial regarding to the porting old machine support code and drivers to use device trees? (i checked the kernel documentation and some other machine support code, so i have some idea, but there are lot of unclear details of course...)

No real tutorial, but you can look at the slides of my presentation at
http://elinux.org/images/a/ad/Arm-soc-checklist.pdf.

Hah, pity i didn't find it earlier, seems to be really useful, thx.

Quoted 11 lines
Quoted 10 lines

3. Regarding to the drivers, my biggest concern is the serial driver:
the hw is close to the traditional 8250, but the NXP driver uses DMA access to handle it, which results a lot of changes in the drivers/tty/serial/8250/8250.c (see in the linked kernel tree below). What is the best strategy to follow in such a case? Adding this modifications to the original 8250 and define config macros to handle the differences(which will be kinda messy...), or create separated driver code (which will duplicate some code from the original 8250 driver...)

Hard to say without looking in details at the changes involved.

Unfortunately in the linked kernel tree the serial port changes in the same commit as the machine support, so it's a bit chaotic (here:
https://gitorious.org/linux-3-7-gnublin/linux-3-7-gnublin/commit/e7100238b785c299acd6413f41a23eeab2811ff8/diffs
), i'll start the play around with the machine support first, and later come back with cleaned up diffs and more specific questions.

Quoted 4 lines

Best regards,

Thomas

Thank you,

Signature · 4 lines
br,
Zoltan Gyarmati
mail: mr.zoltan.gyarmati at gmail.com
freenode nick: zgyarmati