Skip to content

Commit

Permalink
fdt: move fdx_xx extend APIs from boards to drivers
Browse files Browse the repository at this point in the history
Signed-off-by: ligd <[email protected]>
  • Loading branch information
GUIDINGLI committed Mar 19, 2024
1 parent 7c4fd33 commit 78e8611
Show file tree
Hide file tree
Showing 7 changed files with 245 additions and 288 deletions.
1 change: 1 addition & 0 deletions arch/arm/src/goldfish/chip.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
* Pre-processor Definitions
****************************************************************************/

#define QEMU_SPI_IRQ_BASE 32
#define CHIP_MPCORE_VBASE 0x8000000
#define MPCORE_ICD_OFFSET 0x0000
#define MPCORE_ICC_OFFSET 0x10000
Expand Down
1 change: 1 addition & 0 deletions arch/arm/src/qemu/chip.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
* Pre-processor Definitions
****************************************************************************/

#define QEMU_SPI_IRQ_BASE 32
#define CHIP_MPCORE_VBASE 0x8000000
#define MPCORE_ICD_OFFSET 0x0000
#define MPCORE_ICC_OFFSET 0x10000
Expand Down
145 changes: 1 addition & 144 deletions boards/arm/qemu/qemu-armv7a/src/qemu_bringup.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@
* Pre-processor Definitions
****************************************************************************/

#define QEMU_SPI_IRQ_BASE 32

#define FDT_PCI_TYPE_IO 0x01000000
#define FDT_PCI_TYPE_MEM32 0x02000000
#define FDT_PCI_TYPE_MEM64 0x03000000
Expand All @@ -55,147 +53,6 @@
****************************************************************************/

#if defined(CONFIG_LIBC_FDT) && defined(CONFIG_DEVICE_TREE)

/****************************************************************************
* Name: fdt_get_irq
*
* Description:
* Only can be use when the corresponding node's parent interrupt
* controller is intc node.
*
****************************************************************************/

static int unused_code
fdt_get_irq(const void *fdt, int offset)
{
const fdt32_t *pv;
int irq = -ENOENT;

pv = fdt_getprop(fdt, offset, "interrupts", NULL);
if (pv != NULL)
{
irq = fdt32_ld(pv + 1) + QEMU_SPI_IRQ_BASE;
}

return irq;
}

/****************************************************************************
* Name: fdt_get_irq_by_path
*
* Description:
* Only can be use when the corresponding node's parent interrupt
* controller is intc node.
*
****************************************************************************/

static int unused_code
fdt_get_irq_by_path(const void *fdt, const char *path)
{
return fdt_get_irq(fdt, fdt_path_offset(fdt, path));
}

/****************************************************************************
* Name: fdt_get_parent_address_cells
****************************************************************************/

static int unused_code
fdt_get_parent_address_cells(const void *fdt, int offset)
{
int parentoff;

parentoff = fdt_parent_offset(fdt, offset);
if (parentoff < 0)
{
return parentoff;
}

return fdt_address_cells(fdt, parentoff);
}

/****************************************************************************
* Name: fdt_get_parent_size_cells
****************************************************************************/

static int unused_code
fdt_get_parent_size_cells(const void *fdt, int offset)
{
int parentoff;

parentoff = fdt_parent_offset(fdt, offset);
if (parentoff < 0)
{
return parentoff;
}

return fdt_size_cells(fdt, parentoff);
}

/****************************************************************************
* Name: fdt_get_value_by_cells
****************************************************************************/

static inline uintptr_t unused_code
fdt_ld_by_cells(const void *value, int cells)
{
if (cells == 2)
{
return fdt64_ld(value);
}
else
{
return fdt32_ld(value);
}
}

/****************************************************************************
* Name: fdt_get_reg_base
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_base(const void *fdt, int offset)
{
const void *reg;
uintptr_t addr = 0;

reg = fdt_getprop(fdt, offset, "reg", NULL);
if (reg != NULL)
{
addr = fdt_ld_by_cells(reg, fdt_get_parent_address_cells(fdt, offset));
}

return addr;
}

/****************************************************************************
* Name: fdt_get_reg_size
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_size(const void *fdt, int offset)
{
const void *reg;
uintptr_t size = 0;

reg = fdt_getprop(fdt, offset, "reg", NULL);
if (reg != NULL)
{
size = fdt_ld_by_cells(reg, fdt_get_parent_size_cells(fdt, offset));
}

return size;
}

/****************************************************************************
* Name: fdt_get_reg_base_by_path
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_base_by_path(const void *fdt, const char *path)
{
return fdt_get_reg_base(fdt, fdt_path_offset(fdt, path));
}

#ifdef CONFIG_DRIVERS_VIRTIO_MMIO

/****************************************************************************
Expand All @@ -217,7 +74,7 @@ static void register_virtio_devices_from_fdt(const void *fdt)
}

addr = fdt_get_reg_base(fdt, offset);
irqnum = fdt_get_irq(fdt, offset);
irqnum = fdt_get_irq(fdt, offset, QEMU_SPI_IRQ_BASE);
if (addr > 0 && irqnum >= 0)
{
virtio_register_mmio_device((void *)addr, irqnum);
Expand Down
145 changes: 1 addition & 144 deletions boards/arm64/qemu/qemu-armv8a/src/qemu_bringup.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@
* Pre-processor Definitions
****************************************************************************/

#define QEMU_SPI_IRQ_BASE 32

#define FDT_PCI_TYPE_IO 0x01000000
#define FDT_PCI_TYPE_MEM32 0x02000000
#define FDT_PCI_TYPE_MEM64 0x03000000
Expand All @@ -54,147 +52,6 @@
****************************************************************************/

#if defined(CONFIG_LIBC_FDT) && defined(CONFIG_DEVICE_TREE)

/****************************************************************************
* Name: fdt_get_irq
*
* Description:
* Only can be use when the corresponding node's parent interrupt
* controller is intc node.
*
****************************************************************************/

static int unused_code
fdt_get_irq(const void *fdt, int offset)
{
const fdt32_t *pv;
int irq = -ENOENT;

pv = fdt_getprop(fdt, offset, "interrupts", NULL);
if (pv != NULL)
{
irq = fdt32_ld(pv + 1) + QEMU_SPI_IRQ_BASE;
}

return irq;
}

/****************************************************************************
* Name: fdt_get_irq_by_path
*
* Description:
* Only can be use when the corresponding node's parent interrupt
* controller is intc node.
*
****************************************************************************/

static int unused_code
fdt_get_irq_by_path(const void *fdt, const char *path)
{
return fdt_get_irq(fdt, fdt_path_offset(fdt, path));
}

/****************************************************************************
* Name: fdt_get_parent_address_cells
****************************************************************************/

static int unused_code
fdt_get_parent_address_cells(const void *fdt, int offset)
{
int parentoff;

parentoff = fdt_parent_offset(fdt, offset);
if (parentoff < 0)
{
return parentoff;
}

return fdt_address_cells(fdt, parentoff);
}

/****************************************************************************
* Name: fdt_get_parent_size_cells
****************************************************************************/

static int unused_code
fdt_get_parent_size_cells(const void *fdt, int offset)
{
int parentoff;

parentoff = fdt_parent_offset(fdt, offset);
if (parentoff < 0)
{
return parentoff;
}

return fdt_size_cells(fdt, parentoff);
}

/****************************************************************************
* Name: fdt_get_value_by_cells
****************************************************************************/

static inline uintptr_t unused_code
fdt_ld_by_cells(const void *value, int cells)
{
if (cells == 2)
{
return fdt64_ld(value);
}
else
{
return fdt32_ld(value);
}
}

/****************************************************************************
* Name: fdt_get_reg_base
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_base(const void *fdt, int offset)
{
const void *reg;
uintptr_t addr = 0;

reg = fdt_getprop(fdt, offset, "reg", NULL);
if (reg != NULL)
{
addr = fdt_ld_by_cells(reg, fdt_get_parent_address_cells(fdt, offset));
}

return addr;
}

/****************************************************************************
* Name: fdt_get_reg_size
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_size(const void *fdt, int offset)
{
const void *reg;
uintptr_t size = 0;

reg = fdt_getprop(fdt, offset, "reg", NULL);
if (reg != NULL)
{
size = fdt_ld_by_cells(reg, fdt_get_parent_size_cells(fdt, offset));
}

return size;
}

/****************************************************************************
* Name: fdt_get_reg_base_by_path
****************************************************************************/

static uintptr_t unused_code
fdt_get_reg_base_by_path(const void *fdt, const char *path)
{
return fdt_get_reg_base(fdt, fdt_path_offset(fdt, path));
}

#ifdef CONFIG_DRIVERS_VIRTIO_MMIO

/****************************************************************************
Expand All @@ -216,7 +73,7 @@ static void register_virtio_devices_from_fdt(const void *fdt)
}

addr = fdt_get_reg_base(fdt, offset);
irqnum = fdt_get_irq(fdt, offset);
irqnum = fdt_get_irq(fdt, offset, QEMU_SPI_IRQ_BASE);
if (addr > 0 && irqnum >= 0)
{
virtio_register_mmio_device((void *)addr, irqnum);
Expand Down
2 changes: 2 additions & 0 deletions drivers/devicetree/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ ifeq ($(CONFIG_DEVICE_TREE),y)

CSRCS += fdt.c

CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)fdt$(DELIM)dtc$(DELIM)libfdt

DEPPATH += --dep-path devicetree
VPATH += :devicetree

Expand Down
Loading

0 comments on commit 78e8611

Please sign in to comment.