[coreboot-gerrit] Change in coreboot[master]: [WIP]drivers/spi/winbond: Improve structure packing

Patrick Rudolph (Code Review) gerrit at coreboot.org
Fri Aug 3 09:34:39 CEST 2018


Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/27815


Change subject: [WIP]drivers/spi/winbond: Improve structure packing
......................................................................

[WIP]drivers/spi/winbond: Improve structure packing

Use bitfields to pack the struct more tightly.

Change-Id: If1e7a5a3a9504327f987403ec0a7b79b2383792a
Signed-off-by: Patrick Rudolph <patrick.rudolph at 9elements.com>
---
M src/drivers/spi/winbond.c
1 file changed, 86 insertions(+), 84 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/15/27815/1

diff --git a/src/drivers/spi/winbond.c b/src/drivers/spi/winbond.c
index a191f14..bb778fa 100644
--- a/src/drivers/spi/winbond.c
+++ b/src/drivers/spi/winbond.c
@@ -27,111 +27,110 @@
 #define CMD_W25_RES		0xab	/* Release from DP, and Read Signature */
 
 struct winbond_spi_flash_params {
-	uint16_t	id;
-	/* Log2 of page size in power-of-two mode */
-	uint8_t		l2_page_size;
-	uint16_t	pages_per_sector;
-	uint16_t	sectors_per_block;
-	uint16_t	nr_blocks;
-	const char	*name;
+	uint16_t id;
+	uint8_t l2_page_size_shift;
+	uint8_t pages_per_sector_shift : 4;
+	uint8_t sectors_per_block_shift : 4;
+	uint8_t nr_blocks_shift;
+	char name[10];
 };
 
 static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
 	{
-		.id			= 0x3015,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 32,
-		.name			= "W25X16",
+		.id				= 0x3015,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 5,
+		.name				= "W25X16",
 	},
 	{
-		.id			= 0x3016,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 64,
-		.name			= "W25X32",
+		.id				= 0x3016,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 6,
+		.name				= "W25X32",
 	},
 	{
-		.id			= 0x3017,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 128,
-		.name			= "W25X64",
+		.id				= 0x3017,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 7,
+		.name				= "W25X64",
 	},
 	{
-		.id			= 0x4014,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 16,
-		.name			= "W25Q80",
+		.id				= 0x4014,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 4,
+		.name				= "W25Q80",
 	},
 	{
-		.id			= 0x4015,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 32,
-		.name			= "W25Q16",
+		.id				= 0x4015,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 5,
+		.name				= "W25Q16",
 	},
 	{
-		.id			= 0x4016,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 64,
-		.name			= "W25Q32",
+		.id				= 0x4016,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 6,
+		.name				= "W25Q32",
 	},
 	{
-		.id			= 0x6016,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 64,
-		.name			= "W25Q32DW",
+		.id				= 0x6016,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 6,
+		.name				= "W25Q32DW",
 	},
 	{
-		.id			= 0x4017,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 128,
-		.name			= "W25Q64",
+		.id				= 0x4017,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 7,
+		.name				= "W25Q64",
 	},
 	{
-		.id			= 0x6017,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 128,
-		.name			= "W25Q64DW",
+		.id				= 0x6017,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 7,
+		.name				= "W25Q64DW",
 	},
 	{
-		.id			= 0x4018,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 256,
-		.name			= "W25Q128",
+		.id				= 0x4018,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 8,
+		.name				= "W25Q128",
 	},
 	{
-		.id			= 0x6018,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 256,
-		.name			= "W25Q128FW",
+		.id				= 0x6018,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 8,
+		.name				= "W25Q128FW",
 	},
 	{
-		.id			= 0x4019,
-		.l2_page_size		= 8,
-		.pages_per_sector	= 16,
-		.sectors_per_block	= 16,
-		.nr_blocks		= 512,
-		.name			= "W25Q256",
+		.id				= 0x4019,
+		.l2_page_size_shift		= 3,
+		.pages_per_sector_shift		= 4,
+		.sectors_per_block_shift	= 4,
+		.nr_blocks_shift		= 9,
+		.name				= "W25Q256",
 	},
 };
 
@@ -223,11 +222,14 @@
 
 	memcpy(&flash->spi, spi, sizeof(*spi));
 	flash->name = params->name;
-	/* Assuming power-of-two page size initially. */
-	flash->page_size = 1 << params->l2_page_size;
-	flash->sector_size = flash->page_size * params->pages_per_sector;
-	flash->size = flash->sector_size * params->sectors_per_block *
-			params->nr_blocks;
+
+	/* Params are in power-of-two. */
+	flash->page_size = 1 << params->l2_page_size_shift;
+	flash->sector_size = flash->page_size *
+			(1 << params->pages_per_sector_shift);
+	flash->size = flash->sector_size *
+			(1 << params->sectors_per_block_shift) *
+			(1 << params->nr_blocks_shift);
 	flash->erase_cmd = CMD_W25_SE;
 	flash->status_cmd = CMD_W25_RDSR;
 

-- 
To view, visit https://review.coreboot.org/27815
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: If1e7a5a3a9504327f987403ec0a7b79b2383792a
Gerrit-Change-Number: 27815
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180803/364da91a/attachment-0001.html>


More information about the coreboot-gerrit mailing list