[PATCH 10/15] HiFive1: add clock driver support

Gedare Bloom gedare at rtems.org
Mon Aug 21 17:39:52 UTC 2017


On Mon, Aug 21, 2017 at 12:25 PM, Denis Obrezkov
<denisobrezkov at gmail.com> wrote:
> 2017-08-17 17:13 GMT+02:00 Gedare Bloom <gedare at rtems.org>:
>>
>> On Wed, Aug 16, 2017 at 11:13 AM, Denis Obrezkov
>> <denisobrezkov at gmail.com> wrote:
>> > ---
>> >  c/src/lib/libbsp/riscv32/hifive1/clock/clock.c | 67
>> > ++++++++++++++++++++++++++
>> >  1 file changed, 67 insertions(+)
>> >  create mode 100644 c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
>> >
>> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
>> > b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
>> > new file mode 100644
>> > index 0000000..74132ed
>> > --- /dev/null
>> > +++ b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c
>> > @@ -0,0 +1,67 @@
>> > +/*
>> > + * Copyright (c) 2017 Denis Obrezkov <denisobrezkov at gmail.com>
>> > + *
>> > + * The license and distribution terms for this file may be
>> > + * found in the file LICENSE in this distribution or at
>> > + * http://www.rtems.org/license/LICENSE.
>> > + */
>> > +
>> > +
>> > +#include <bsp/irq.h>
>> > +#include <bsp/fatal.h>
>> > +#include <bsp/fe310.h>
>> > +
>> > +
>> > +static void FE310_clock_driver_support_install_isr(
>> > +  rtems_isr_entry Clock_isr
>> > +)
>> > +{
>> > +  rtems_status_code sc = RTEMS_SUCCESSFUL;
>> > +
>> > +  sc = rtems_interrupt_handler_install(
>> > +    1,
>> > +    "Clock",
>> > +    RTEMS_INTERRUPT_UNIQUE,
>> > +    (rtems_interrupt_handler) Clock_isr,
>> > +    NULL
>> > +  );
>> > +  if ( sc != RTEMS_SUCCESSFUL ) {
>> > +    rtems_fatal_error_occurred(0xdeadbeef);
>> > +  }
>> > +}
>> > +
>> > +static void FE310_clock_driver_support_at_tick ( void )
>> > +{
>> Does the timer automatically re-load?
>
>  No, we reload it in interrupt_dispatch routine.
>  I think now that it is not right. Should we place it here?
Yes

>>
>> > +}
>> > +
>> > +static void FE310_clock_init ( void )
>> > +{
>> > +  volatile uint64_t * mtime = (volatile uint64_t *)0x0200bff8;
>> > +  volatile uint64_t * mtimecmp = (volatile uint64_t *)0x02004000;
>> > +  (*mtimecmp) = (*mtime) + FE310_CLOCK_PERIOD + 0x3000;
>> > +  asm volatile ("csrci mstatus, 0x8");
>> > +  asm volatile ("li t0, 0x80\n\t"
>> > +                "csrs mie, t0");
>> > +  asm volatile ("csrsi mstatus, 0x8");
>> It would be good to have inline functions for reading/writing all of
>> these special purpose registers.
>>
>> > +}
>> > +
>> > +static void FE310_clock_driver_support_shutdown_hardware( void )
>> > +{
>> > +}
>> > +
>> > +#define Clock_driver_support_initialize_hardware() \
>> > +  FE310_clock_init()
>> > +
>> > +#define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
>> > +
>> > +#define Clock_driver_support_install_isr(isr,old) \
>> > +  FE310_clock_driver_support_install_isr ( isr )
>> > +
>> > +#define Clock_driver_support_at_tick() \
>> > +  FE310_clock_driver_support_at_tick()
>> > +
>> > +#define Clock_driver_support_shutdown_hardware() \
>> > +  FE310_clock_driver_support_shutdown_hardware()
>> > +
>> > +#include "../../../shared/clockdrv_shell.h"
>> > +
>> > --
>> > 2.1.4
>> >
>> > _______________________________________________
>> > devel mailing list
>> > devel at rtems.org
>> > http://lists.rtems.org/mailman/listinfo/devel
>
>
>
>
> --
> Regards, Denis Obrezkov


More information about the devel mailing list