drivers/spi/flashconsole.c: Drop CAR_GLOBAL_MIGRATION support

Change-Id: I81a610a6d119745f2fc637629b8ba7ade76503bc
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/37043
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Arthur Heymans 2019-11-20 21:50:54 +01:00 committed by Patrick Georgi
parent c0a4e20887
commit 6ea3a13a17

View file

@ -11,7 +11,6 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <arch/early_variables.h>
#include <commonlib/region.h> #include <commonlib/region.h>
#include <boot_device.h> #include <boot_device.h>
#include <fmap.h> #include <fmap.h>
@ -23,26 +22,25 @@
#define LINE_BUFFER_SIZE 128 #define LINE_BUFFER_SIZE 128
#define READ_BUFFER_SIZE 0x100 #define READ_BUFFER_SIZE 0x100
static const struct region_device *g_rdev_ptr CAR_GLOBAL; static const struct region_device *g_rdev_ptr;
static struct region_device g_rdev CAR_GLOBAL; static struct region_device g_rdev;
static uint8_t g_line_buffer[LINE_BUFFER_SIZE] CAR_GLOBAL; static uint8_t g_line_buffer[LINE_BUFFER_SIZE];
static size_t g_offset CAR_GLOBAL; static size_t g_offset;
static size_t g_line_offset CAR_GLOBAL; static size_t g_line_offset;
void flashconsole_init(void) void flashconsole_init(void)
{ {
struct region_device *rdev = car_get_var_ptr(&g_rdev);
uint8_t buffer[READ_BUFFER_SIZE]; uint8_t buffer[READ_BUFFER_SIZE];
size_t size; size_t size;
size_t offset = 0; size_t offset = 0;
size_t len = READ_BUFFER_SIZE; size_t len = READ_BUFFER_SIZE;
size_t i; size_t i;
if (fmap_locate_area_as_rdev_rw("CONSOLE", rdev)) { if (fmap_locate_area_as_rdev_rw("CONSOLE", &g_rdev)) {
printk(BIOS_INFO, "Can't find 'CONSOLE' area in FMAP\n"); printk(BIOS_INFO, "Can't find 'CONSOLE' area in FMAP\n");
return; return;
} }
size = region_device_sz(rdev); size = region_device_sz(&g_rdev);
/* /*
* We need to check the region until we find a 0xff indicating * We need to check the region until we find a 0xff indicating
@ -58,7 +56,7 @@ void flashconsole_init(void)
// Fill the buffer on first iteration // Fill the buffer on first iteration
if (i == 0) { if (i == 0) {
len = min(READ_BUFFER_SIZE, size - offset); len = min(READ_BUFFER_SIZE, size - offset);
if (rdev_readat(rdev, buffer, offset, len) != len) if (rdev_readat(&g_rdev, buffer, offset, len) != len)
return; return;
} }
if (buffer[i] == 0xff) { if (buffer[i] == 0xff) {
@ -77,65 +75,55 @@ void flashconsole_init(void)
return; return;
} }
car_set_var(g_offset, offset); g_offset = offset;
/* Set g_rdev_ptr last so tx_byte doesn't get executed early */ g_rdev_ptr = &g_rdev;
car_set_var(g_rdev_ptr, rdev);
} }
void flashconsole_tx_byte(unsigned char c) void flashconsole_tx_byte(unsigned char c)
{ {
const struct region_device *rdev = car_get_var(g_rdev_ptr); if (!g_rdev_ptr)
uint8_t *line_buffer;
size_t offset;
size_t len;
size_t region_size;
if (!rdev)
return; return;
line_buffer = car_get_var_ptr(g_line_buffer); size_t region_size = region_device_sz(g_rdev_ptr);
offset = car_get_var(g_offset);
len = car_get_var(g_line_offset);
region_size = region_device_sz(rdev);
line_buffer[len++] = c; g_line_buffer[g_line_offset++] = c;
car_set_var(g_line_offset, len);
if (len >= LINE_BUFFER_SIZE || if (g_line_offset >= LINE_BUFFER_SIZE ||
offset + len >= region_size || c == '\n') { g_offset + g_line_offset >= region_size || c == '\n') {
flashconsole_tx_flush(); flashconsole_tx_flush();
} }
} }
void flashconsole_tx_flush(void) void flashconsole_tx_flush(void)
{ {
const struct region_device *rdev = car_get_var(g_rdev_ptr); size_t offset = g_offset;
uint8_t *line_buffer = car_get_var_ptr(g_line_buffer); size_t len = g_line_offset;
size_t offset = car_get_var(g_offset);
size_t len = car_get_var(g_line_offset);
size_t region_size; size_t region_size;
static int busy;
if (!rdev)
return;
/* Prevent any recursive loops in case the spi flash driver /* Prevent any recursive loops in case the spi flash driver
* calls printk (in case of transaction timeout or * calls printk (in case of transaction timeout or
* any other error while writing) */ * any other error while writing) */
car_set_var(g_rdev_ptr, NULL); if (busy)
return;
region_size = region_device_sz(rdev); if (!g_rdev_ptr)
return;
busy = 1;
region_size = region_device_sz(g_rdev_ptr);
if (offset + len >= region_size) if (offset + len >= region_size)
len = region_size - offset; len = region_size - offset;
if (rdev_writeat(rdev, line_buffer, offset, len) != len) if (rdev_writeat(&g_rdev, g_line_buffer, offset, len) != len)
rdev = NULL; return;
// If the region is full, stop future write attempts // If the region is full, stop future write attempts
if (offset + len >= region_size) if (offset + len >= region_size)
rdev = NULL; return;
car_set_var(g_offset, offset + len); g_offset = offset + len;
car_set_var(g_line_offset, 0); g_line_offset = 0;
car_set_var(g_rdev_ptr, rdev); busy = 0;
} }