Skip to content

Commit

Permalink
powerpc/powernv: Move SG list structure to header file
Browse files Browse the repository at this point in the history
Move SG list and entry structure to header file so that
it can be used in other places as well.

Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Vasant Hegde authored and Benjamin Herrenschmidt committed Dec 5, 2013
1 parent 2436636 commit 7e1ce5a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 25 deletions.
22 changes: 22 additions & 0 deletions arch/powerpc/include/asm/opal.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,28 @@ struct opal_takeover_args {
u64 rd_loc; /* r11 */
};

/*
* SG entry
*
* WARNING: The current implementation requires each entry
* to represent a block that is 4k aligned *and* each block
* size except the last one in the list to be as well.
*/
struct opal_sg_entry {
void *data;
long length;
};

/* sg list */
struct opal_sg_list {
unsigned long num_entries;
struct opal_sg_list *next;
struct opal_sg_entry entry[];
};

/* We calculate number of sg entries based on PAGE_SIZE */
#define SG_ENTRIES_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct opal_sg_entry))

extern long opal_query_takeover(u64 *hal_size, u64 *hal_align);

extern long opal_do_takeover(struct opal_takeover_args *args);
Expand Down
31 changes: 6 additions & 25 deletions arch/powerpc/platforms/powernv/opal-flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,27 +103,6 @@ struct image_header_t {
uint32_t size;
};

/* Scatter/gather entry */
struct opal_sg_entry {
void *data;
long length;
};

/* We calculate number of entries based on PAGE_SIZE */
#define SG_ENTRIES_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct opal_sg_entry))

/*
* This struct is very similar but not identical to that
* needed by the opal flash update. All we need to do for
* opal is rewrite num_entries into a version/length and
* translate the pointers to absolute.
*/
struct opal_sg_list {
unsigned long num_entries;
struct opal_sg_list *next;
struct opal_sg_entry entry[SG_ENTRIES_PER_NODE];
};

struct validate_flash_t {
int status; /* Return status */
void *buf; /* Candiate image buffer */
Expand Down Expand Up @@ -333,7 +312,7 @@ static struct opal_sg_list *image_data_to_sglist(void)
addr = image_data.data;
size = image_data.size;

sg1 = kzalloc((sizeof(struct opal_sg_list)), GFP_KERNEL);
sg1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!sg1)
return NULL;

Expand All @@ -351,8 +330,7 @@ static struct opal_sg_list *image_data_to_sglist(void)

sg1->num_entries++;
if (sg1->num_entries >= SG_ENTRIES_PER_NODE) {
sg1->next = kzalloc((sizeof(struct opal_sg_list)),
GFP_KERNEL);
sg1->next = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!sg1->next) {
pr_err("%s : Failed to allocate memory\n",
__func__);
Expand Down Expand Up @@ -402,7 +380,10 @@ static int opal_flash_update(int op)
else
sg->next = NULL;

/* Make num_entries into the version/length field */
/*
* Convert num_entries to version/length format
* to satisfy OPAL.
*/
sg->num_entries = (SG_LIST_VERSION << 56) |
(sg->num_entries * sizeof(struct opal_sg_entry) + 16);
}
Expand Down

0 comments on commit 7e1ce5a

Please sign in to comment.