usbdebug: Use fixed size field
The structure is placed inside CBMEM, one should use types with fixed size. Seems we prefer to prepare for 64-bit builds even for MMIO pointers. Change-Id: I60382664a53650b225abc1f77c87ed4e121d429e Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/31182 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
parent
f88208e0ac
commit
45ad4f041b
|
@ -68,7 +68,7 @@
|
||||||
#endif
|
#endif
|
||||||
_car_ehci_dbg_info_start = .;
|
_car_ehci_dbg_info_start = .;
|
||||||
/* Reserve sizeof(struct ehci_dbg_info). */
|
/* Reserve sizeof(struct ehci_dbg_info). */
|
||||||
. += 88;
|
. += 80;
|
||||||
_car_ehci_dbg_info_end = .;
|
_car_ehci_dbg_info_end = .;
|
||||||
/* _car_global_start and _car_global_end provide symbols to per-stage
|
/* _car_global_start and _car_global_end provide symbols to per-stage
|
||||||
* variables that are not shared like the timestamp and the pre-ram
|
* variables that are not shared like the timestamp and the pre-ram
|
||||||
|
|
|
@ -28,11 +28,11 @@
|
||||||
#include "ehci.h"
|
#include "ehci.h"
|
||||||
|
|
||||||
struct ehci_debug_info {
|
struct ehci_debug_info {
|
||||||
void *ehci_base;
|
u64 ehci_base;
|
||||||
void *ehci_debug;
|
u64 ehci_debug;
|
||||||
|
|
||||||
struct dbgp_pipe ep_pipe[DBGP_MAX_ENDPOINTS];
|
struct dbgp_pipe ep_pipe[DBGP_MAX_ENDPOINTS];
|
||||||
};
|
} __packed;
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_DEBUG_CONSOLE_INIT)
|
#if IS_ENABLED(CONFIG_DEBUG_CONSOLE_INIT)
|
||||||
/* When selected, you can debug the connection of usbdebug dongle.
|
/* When selected, you can debug the connection of usbdebug dongle.
|
||||||
|
@ -263,7 +263,9 @@ static int dbgp_bulk_write(struct ehci_dbg_port *ehci_debug, struct dbgp_pipe *p
|
||||||
int dbgp_bulk_write_x(struct dbgp_pipe *pipe, const char *bytes, int size)
|
int dbgp_bulk_write_x(struct dbgp_pipe *pipe, const char *bytes, int size)
|
||||||
{
|
{
|
||||||
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
||||||
return dbgp_bulk_write(dbg_info->ehci_debug, pipe, bytes, size);
|
struct ehci_dbg_port *port;
|
||||||
|
port = (void *)(uintptr_t)dbg_info->ehci_debug;
|
||||||
|
return dbgp_bulk_write(port, pipe, bytes, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dbgp_bulk_read(struct ehci_dbg_port *ehci_debug, struct dbgp_pipe *pipe,
|
static int dbgp_bulk_read(struct ehci_dbg_port *ehci_debug, struct dbgp_pipe *pipe,
|
||||||
|
@ -297,7 +299,9 @@ static int dbgp_bulk_read(struct ehci_dbg_port *ehci_debug, struct dbgp_pipe *pi
|
||||||
int dbgp_bulk_read_x(struct dbgp_pipe *pipe, void *data, int size)
|
int dbgp_bulk_read_x(struct dbgp_pipe *pipe, void *data, int size)
|
||||||
{
|
{
|
||||||
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
||||||
return dbgp_bulk_read(dbg_info->ehci_debug, pipe, data, size);
|
struct ehci_dbg_port *port;
|
||||||
|
port = (void *)(uintptr_t)dbg_info->ehci_debug;
|
||||||
|
return dbgp_bulk_read(port, pipe, data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dbgp_mdelay(int ms)
|
void dbgp_mdelay(int ms)
|
||||||
|
@ -447,8 +451,8 @@ static int usbdebug_init_(unsigned ehci_bar, unsigned offset, struct ehci_debug_
|
||||||
|
|
||||||
/* Keep all endpoints disabled before any printk() call. */
|
/* Keep all endpoints disabled before any printk() call. */
|
||||||
memset(info, 0, sizeof (*info));
|
memset(info, 0, sizeof (*info));
|
||||||
info->ehci_base = (void *)ehci_bar;
|
info->ehci_base = ehci_bar;
|
||||||
info->ehci_debug = (void *)(ehci_bar + offset);
|
info->ehci_debug = ehci_bar + offset;
|
||||||
info->ep_pipe[0].status |= DBGP_EP_NOT_PRESENT;
|
info->ep_pipe[0].status |= DBGP_EP_NOT_PRESENT;
|
||||||
|
|
||||||
dprintk(BIOS_INFO, "ehci_bar: 0x%x debug_offset 0x%x\n", ehci_bar, offset);
|
dprintk(BIOS_INFO, "ehci_bar: 0x%x debug_offset 0x%x\n", ehci_bar, offset);
|
||||||
|
@ -457,7 +461,7 @@ static int usbdebug_init_(unsigned ehci_bar, unsigned offset, struct ehci_debug_
|
||||||
ehci_regs = (struct ehci_regs *)(ehci_bar +
|
ehci_regs = (struct ehci_regs *)(ehci_bar +
|
||||||
HC_LENGTH(read32(&ehci_caps->hc_capbase)));
|
HC_LENGTH(read32(&ehci_caps->hc_capbase)));
|
||||||
|
|
||||||
struct ehci_dbg_port *ehci_debug = info->ehci_debug;
|
struct ehci_dbg_port *ehci_debug = (void *)(uintptr_t)info->ehci_debug;
|
||||||
|
|
||||||
if (CONFIG_USBDEBUG_DEFAULT_PORT > 0)
|
if (CONFIG_USBDEBUG_DEFAULT_PORT > 0)
|
||||||
ehci_debug_select_port(CONFIG_USBDEBUG_DEFAULT_PORT);
|
ehci_debug_select_port(CONFIG_USBDEBUG_DEFAULT_PORT);
|
||||||
|
@ -582,7 +586,8 @@ try_next_port:
|
||||||
|
|
||||||
dbgp_mdelay(100);
|
dbgp_mdelay(100);
|
||||||
|
|
||||||
ret = dbgp_probe_gadget(info->ehci_debug, &info->ep_pipe[0]);
|
struct ehci_dbg_port *port = (void *)(uintptr_t)info->ehci_debug;
|
||||||
|
ret = dbgp_probe_gadget(port, &info->ep_pipe[0]);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dprintk(BIOS_INFO, "Could not probe gadget on debug port.\n");
|
dprintk(BIOS_INFO, "Could not probe gadget on debug port.\n");
|
||||||
ret = -6;
|
ret = -6;
|
||||||
|
@ -654,12 +659,12 @@ void dbgp_put(struct dbgp_pipe *pipe)
|
||||||
void usbdebug_re_enable(unsigned ehci_base)
|
void usbdebug_re_enable(unsigned ehci_base)
|
||||||
{
|
{
|
||||||
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
||||||
unsigned diff;
|
u64 diff;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
diff = (unsigned)dbg_info->ehci_base - ehci_base;
|
diff = dbg_info->ehci_base - ehci_base;
|
||||||
dbg_info->ehci_debug -= diff;
|
dbg_info->ehci_debug -= diff;
|
||||||
dbg_info->ehci_base = (void *)ehci_base;
|
dbg_info->ehci_base = ehci_base;
|
||||||
|
|
||||||
for (i=0; i<DBGP_MAX_ENDPOINTS; i++)
|
for (i=0; i<DBGP_MAX_ENDPOINTS; i++)
|
||||||
if (dbg_info->ep_pipe[i].status & DBGP_EP_VALID)
|
if (dbg_info->ep_pipe[i].status & DBGP_EP_VALID)
|
||||||
|
@ -679,7 +684,7 @@ void usbdebug_disable(void)
|
||||||
int usbdebug_hw_init(bool force)
|
int usbdebug_hw_init(bool force)
|
||||||
{
|
{
|
||||||
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
||||||
unsigned int ehci_base, dbg_offset;
|
u32 ehci_base, dbg_offset;
|
||||||
|
|
||||||
if (dbgp_enabled() && !force)
|
if (dbgp_enabled() && !force)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -47,12 +47,12 @@ struct dbgp_pipe
|
||||||
u8 endpoint;
|
u8 endpoint;
|
||||||
u8 pid;
|
u8 pid;
|
||||||
u8 status;
|
u8 status;
|
||||||
int timeout;
|
u16 timeout;
|
||||||
|
|
||||||
u8 bufidx;
|
u8 bufidx;
|
||||||
u8 buflen;
|
u8 buflen;
|
||||||
char buf[8];
|
char buf[8];
|
||||||
};
|
} __packed;
|
||||||
|
|
||||||
void dbgp_put(struct dbgp_pipe *pipe);
|
void dbgp_put(struct dbgp_pipe *pipe);
|
||||||
int dbgp_try_get(struct dbgp_pipe *pipe);
|
int dbgp_try_get(struct dbgp_pipe *pipe);
|
||||||
|
|
Loading…
Reference in New Issue