Thread (7 messages) 7 messages, 2 authors, 2014-04-14

Re: Question about Talitos Linux driver for MPC885

From: Kim Phillips <hidden>
Date: 2012-11-27 23:29:10

On Fri, 23 Nov 2012 14:51:08 +0100
leroy christophe [off-list ref] wrote:
Le 26/09/2012 02:47, Kim Phillips a écrit :
quoted
On Tue, 25 Sep 2012 10:45:17 +0200
leroy christophe [off-list ref] wrote:
quoted
I'm trying to use the Talitos crypto driver with the MPC885
microcontroller. For the time being, it doesn't work.
yes, they're not exactly compatible...
quoted
The kernel startup blocks at the test of the DES function.

I have added the following definition in the DTS file:

          crypto@20000 {
              compatible = "fsl,sec2.0";
interesting, its called "SEC Lite" and its version register does
indeed say 2.  I see it has a single channel FIFO instead of a ring,
that the SEC v1.x (MPC185) used, so you probably don't have to
rewrite talitos_submit.
Good news, it was also my understanding.
quoted
quoted
              reg = <0x20000 0x8000>;
              interrupts = <1 1>;
I couldn't find the IRQ line in the MPC855RM - if there's no IRQ
line, then that's a problem.
Neither do I on the drawing, however in Table 52-1, there are 3 bits in 
the CPTR register for defining the interrupt level of the SEC lite, just 
like you do for the CPM and for the FEC.
not sure how interrupt _level_ is relevant, but I'm going to assume
you're saying the SEC's IRQ line is integrated into that of the CPM
and/or FEC.
So I believe this should be ok ?
Assuming the above, the 'interrupts' property above should
equal that of the CPM and/or FEC, and the IRQ_SHARED flag set in
request_irq (in both talitos and the CPM and/or FEC drivers).  The
talitos IRQ handler will return IRQ_NONE if none of the channel
done/error bits are set in the SEC.
quoted
quoted
              interrupt-parent = <&PIC>;
              fsl,num-channels = <1>;
              fsl,channel-fifo-len = <24>;
              fsl,exec-units-mask = <0x4c>;
              fsl,descriptor-types-mask = <0x301f>;
the descriptor type enumeration isn't uniform across into the mpc8xx
SEC version, e.g., the SEC Lite doesn't support the ipsec_esp
descriptor type, represented in mpc8xxx SEC versions as the second
bit, so this descriptor-types-mask setting should be fixed to at
least omit that since the driver checks for, and uses it if
available.
quoted
Is there anything wrong in what I did ? Or is there something else I
should do ?
might want to go through the defines in talitos.h, e.g,
TALITOS_MCR_SWR is 0x1 on mpc8xxx vs. 0x10000000 on
mpc8xx (I suppose CONFIG_PPC_8xx can be used as the ifdef, btw).
I'm surprised about this, I didn't check the talitos.h file, but had 
checked the Reference Manual of the MPC 8272.
I rechecked yesterday and the SWR bit is at the same place as on the 
MPC885 which is different from what is defined in talitos.h
right, for some odd reason the h/w designers decided to scramble
the bitfield definitions.
quoted
Descriptor header and pointer formats, along with field locations,
sizes, and enumerations may also be different.

It also appears the SEC Lite doesn't support scatter-gather tables,
which will make performance hurt for fragmented (large) packet sizes.
Does it mean something has to be modified if the SW ?
yes, s/w will have to allocate a new contiguous memory buffer and
sg_copy_to_buffer() prior to crypto request submission to the h/w,
and sg_copy_from_buffer() after h/w completion.

Kim
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help