Skip to content
  • Ohad Ben-Cohen's avatar
    remoteproc: resource table overhaul · fd2c15ec
    Ohad Ben-Cohen authored
    
    
    The resource table is an array of 'struct fw_resource' members, where
    each resource entry is expressed as a single member of that array.
    
    This approach got us this far, but it has a few drawbacks:
    
    1. Different resource entries end up overloading the same members of 'struct
       fw_resource' with different meanings. The resulting code is error prone
       and hard to read and maintain.
    
    2. It's impossible to extend 'struct fw_resource' without breaking the
       existing firmware images (and we already want to: we can't introduce the
       new virito device resource entry with the current scheme).
    
    3. It doesn't scale: 'struct fw_resource' must be as big as the largest
       resource entry type. As a result, smaller resource entries end up
       utilizing only small part of it.
    
    This is fixed by defining a dedicated structure for every resource type,
    and then converting the resource table to a list of type-value members.
    Instead of a rigid array of homogeneous structs, the resource table
    is turned into a collection of heterogeneous structures.
    
    This way:
    1. Resource entries consume exactly the amount of bytes they need.
    2. It's easy to extend: just create a new resource entry structure, and assign
       it a new type.
    3. The code is easier to read and maintain: the structures' members names are
       meaningful.
    
    While we're at it, this patch has several other resource table changes:
    1. The resource table gains a simple header which contains the
       number of entries in the table and their offsets within the table. This
       makes the parsing code simpler and easier to read.
    2. A version member is added to the resource table. Should we change the
       format again, we'll bump up this version to prevent breakage with
       existing firmware images.
    3. The VRING and VIRTIO_DEV resource entries are combined to a single
       VDEV entry. This paves the way to supporting multiple VDEV entries.
    4. Since we don't really support 64-bit rprocs yet, convert two stray u64
       members to u32.
    
    Signed-off-by: default avatarOhad Ben-Cohen <ohad@wizery.com>
    Cc: Brian Swetland <swetland@google.com>
    Cc: Iliyan Malchev <malchev@google.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Grant Likely <grant.likely@secretlab.ca>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: Mark Grosen <mgrosen@ti.com>
    Cc: John Williams <john.williams@petalogix.com>
    Cc: Michal Simek <monstr@monstr.eu>
    Cc: Loic PALLARDY <loic.pallardy@stericsson.com>
    Cc: Ludovic BARRE <ludovic.barre@stericsson.com>
    Cc: Omar Ramirez Luna <omar.luna@linaro.org>
    Cc: Guzman Lugo Fernando <fernando.lugo@ti.com>
    Cc: Anna Suman <s-anna@ti.com>
    Cc: Clark Rob <rob@ti.com>
    Cc: Stephen Boyd <sboyd@codeaurora.org>
    Cc: Saravana Kannan <skannan@codeaurora.org>
    Cc: David Brown <davidb@codeaurora.org>
    Cc: Kieran Bingham <kieranbingham@gmail.com>
    Cc: Tony Lindgren <tony@atomide.com>
    fd2c15ec