os: remove imx53 specific platform api and fb_drv

Fix #4402
This commit is contained in:
Stefan Kalkowski 2022-02-02 16:57:17 +01:00 committed by Norman Feske
parent fe009fd66d
commit cf0d007fd4
26 changed files with 2 additions and 1432 deletions

View File

@ -1,7 +1,5 @@
proc have_platform_drv {} {
return [expr [have_board imx53_qsb] \
|| [have_board imx53_qsb_tz] \
|| [have_board pc]]
return [expr [have_board pc]]
}
@ -63,8 +61,6 @@ proc append_platform_drv_build_components {} {
}
proc platform_drv_binary {} {
if {[have_board imx53_qsb]} { return legacy_imx53_platform_drv }
if {[have_board imx53_qsb_tz]} { return legacy_imx53_platform_drv }
if {[have_board pc]} { return legacy_pc_platform_drv }
return no_platform_drv_available
}

View File

@ -1,36 +0,0 @@
/*
* \brief i.MX53 specific platform session client side
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CLIENT_H_
#define _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CLIENT_H_
#include <base/capability.h>
#include <base/rpc_client.h>
#include <legacy/imx53/platform_session/platform_session.h>
namespace Platform { struct Client; }
struct Platform::Client : Genode::Rpc_client<Session>
{
explicit Client(Genode::Capability<Session> session)
: Genode::Rpc_client<Session>(session) { }
void enable(Device dev) override { call<Rpc_enable>(dev); }
void disable(Device dev) override { call<Rpc_disable>(dev); }
void clock_rate(Device dev, unsigned long rate) override {
call<Rpc_clock_rate>(dev, rate); }
Board_revision revision() override { return call<Rpc_revision>(); }
};
#endif /* _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CLIENT_H_ */

View File

@ -1,35 +0,0 @@
/*
* \brief Connection to platform service
* \author Stefan Kalkowski
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CONNECTION_H_
#define _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CONNECTION_H_
#include <legacy/imx53/platform_session/client.h>
#include <util/arg_string.h>
#include <base/connection.h>
namespace Platform { struct Connection; }
struct Platform::Connection : Genode::Connection<Session>, Client
{
/**
* Constructor
*/
Connection(Genode::Env &env)
: Genode::Connection<Session>(env, session(env.parent(),
"ram_quota=6K, cap_quota=%u", CAP_QUOTA)),
Client(cap()) { }
};
#endif /* _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__CONNECTION_H_ */

View File

@ -1,67 +0,0 @@
/*
* \brief i.MX53 specific platform session
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__PLATFORM_SESSION_H_
#define _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__PLATFORM_SESSION_H_
#include <base/capability.h>
#include <base/rpc.h>
namespace Platform { struct Session; }
struct Platform::Session : Genode::Session
{
enum Device {
IPU,
I2C_2,
I2C_3,
BUTTONS,
PWM,
};
enum Board_revision {
SMD = 2, /* Freescale i.MX53 SMD Tablet */
QSB = 3, /* Freescale i.MX53 low-cost Quickstart board */
UNKNOWN,
};
/**
* \noapi
*/
static const char *service_name() { return "Platform"; }
enum { CAP_QUOTA = 2 };
virtual ~Session() { }
virtual void enable(Device dev) = 0;
virtual void disable(Device dev) = 0;
virtual void clock_rate(Device dev, unsigned long rate) = 0;
virtual Board_revision revision() = 0;
/*********************
** RPC declaration **
*********************/
GENODE_RPC(Rpc_enable, void, enable, Device);
GENODE_RPC(Rpc_disable, void, disable, Device);
GENODE_RPC(Rpc_clock_rate, void, clock_rate, Device, unsigned long);
GENODE_RPC(Rpc_revision, Board_revision, revision);
GENODE_RPC_INTERFACE(Rpc_enable, Rpc_disable, Rpc_clock_rate,
Rpc_revision);
};
#endif /* _INCLUDE__LEGACY__IMX53__PLATFORM_SESSION__PLATFORM_SESSION_H_ */

View File

@ -1,5 +1,4 @@
INCLUDE_SUB_DIRS := platform_session \
legacy/imx53/platform_session \
legacy/x86/platform_session \
legacy/x86/platform_device

View File

@ -1,3 +0,0 @@
Device drivers needed to run interactive
scenarios on i.MX53 Quickstart Board

View File

@ -1,3 +0,0 @@
_/src/platform_drv
_/src/imx53_qsb_drivers
_/raw/drivers_interactive-imx53_qsb

View File

@ -1 +0,0 @@
2022-01-18 adfec25dff593f5fdb159fb542b6475ab9e9f4ba

View File

@ -1,4 +0,0 @@
content: drivers.config fb_drv.config
drivers.config fb_drv.config:
cp $(REP_DIR)/recipes/raw/drivers_interactive-imx53_qsb/$@ $@

View File

@ -1,55 +0,0 @@
<config>
<parent-provides>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="ROM"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="Timer"/>
<service name="Capture"/>
</parent-provides>
<default caps="60"/>
<service name="Input">
<default-policy> <child name="dummy_input_drv"/> </default-policy> </service>
<start name="platform_drv" caps="200" managing_system="yes">
<binary name="legacy_imx53_platform_drv"/>
<resource name="RAM" quantum="3M"/>
<provides>
<service name="Platform"/>
</provides>
<route>
<service name="IRQ"> <parent/> </service>
<service name="IO_MEM"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
</route>
</start>
<start name="fb_drv" caps="120">
<binary name="imx53_fb_drv"/>
<resource name="RAM" quantum="4M"/>
<config width="800" height="480" display="0" buffered="true"/>
<route>
<service name="ROM" label="config"> <parent label="fb_drv.config"/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
<service name="IO_MEM"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Capture"> <parent/> </service>
</route>
</start>
</config>

View File

@ -1 +0,0 @@
<config buffered="yes"/>

View File

@ -1 +0,0 @@
2022-01-18 9bd966603f5216a24dc0680a3d42e1b9bc85722d

View File

@ -1,13 +0,0 @@
include $(GENODE_DIR)/repos/base/recipes/src/content.inc
content: src/drivers include/gpio
include/gpio:
mkdir -p include
cp -r $(REP_DIR)/include/gpio $@
src/drivers:
mkdir -p $@/framebuffer $@/gpio
cp -r $(REP_DIR)/src/drivers/gpio/imx $@/gpio/
cp -r $(REP_DIR)/src/drivers/framebuffer/imx53 $@/framebuffer/
cp -r $(REP_DIR)/include/spec/imx53/imx_framebuffer_session $@/framebuffer/imx53/

View File

@ -1 +0,0 @@
2022-01-18 49f81fada899e3f40abeed62b0db6ec4128b210a

View File

@ -1,8 +0,0 @@
base
os
blit
platform_session
gpio_session
capture_session
input_session
timer_session

View File

@ -1,76 +0,0 @@
/*
* \brief Frame-buffer driver for Freescale's i.MX53
* \author Nikolay Golikov <nik@ksyslabs.org>
* \author Stefan Kalkowski
* \date 2012-06-21
*/
/*
* Copyright (C) 2009-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__FRAMEBUFFER__SPEC__IMX53__DRIVER_H_
#define _DRIVERS__FRAMEBUFFER__SPEC__IMX53__DRIVER_H_
/* Genode includes */
#include <drivers/defs/imx53.h>
#include <base/attached_io_mem_dataspace.h>
#include <io_mem_session/connection.h>
#include <legacy/imx53/platform_session/connection.h>
#include <util/mmio.h>
#include <capture_session/connection.h>
/* local includes */
#include <ipu.h>
namespace Framebuffer {
using namespace Genode;
using Area = Capture::Area;
class Driver;
};
class Framebuffer::Driver
{
private:
Genode::Env &_env;
Platform::Connection _platform;
Attached_io_mem_dataspace _ipu_mmio;
Ipu _ipu;
bool _disp0;
size_t _width;
size_t _height;
public:
enum Resolutions { BYTES_PER_PIXEL = 4 };
Driver(Genode::Env &env, Genode::Xml_node config)
: _env(env),
_platform(_env),
_ipu_mmio(_env, Imx53::IPU_BASE, Imx53::IPU_SIZE),
_ipu((addr_t)_ipu_mmio.local_addr<void>()),
_disp0(config.attribute_value<unsigned>("display", 0) == 0),
_width(config.attribute_value<unsigned>("width", 800)),
_height(config.attribute_value<unsigned>("height", 480)) { }
bool init(addr_t phys_base)
{
/* enable IPU via platform driver */
_platform.enable(Platform::Session::IPU);
_ipu.init(_width, _height, _width * BYTES_PER_PIXEL,
phys_base, _disp0);
return true;
}
Area screen_size() const { return Area { _width, _height }; }
Ipu &ipu() { return _ipu; }
};
#endif /* _DRIVERS__FRAMEBUFFER__SPEC__IMX53__DRIVER_H_ */

View File

@ -1,555 +0,0 @@
/*
* \brief Image Processing Unit registers
* \author Nikolay Golikov <nik@ksyslabs.org>
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2012-11-10
*/
/*
* Copyright (C) 2009-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__FRAMEBUFFER__SPEC__IMX53__IPU_H_
#define _DRIVERS__FRAMEBUFFER__SPEC__IMX53__IPU_H_
/* Genode includes */
#include <util/mmio.h>
#include <util/string.h>
#include <base/attached_io_mem_dataspace.h>
class Ipu : Genode::Mmio
{
private:
enum { REGS_OFF = 0x6000000 };
struct Conf : Register<0x0, 32> { };
template<unsigned NR>
struct Int_ctrl : Register<0x3c+(NR*4), 32> { };
struct Srm_pri2 : Register<0xa4, 32>
{
struct Dp_m_srm : Bitfield<3,2> { enum { UPDATE_NOW = 1 }; };
};
struct Disp_gen : Register<0xc4, 32> { };
struct Mem_rst : Register<0xdc, 32> { };
struct Pm : Register<0xe0, 32> { };
struct Gpr : Register<0xe4, 32> { };
struct Ch_db_mode_sel0 : Register<0x150, 32> { };
struct Alt_ch_trb_mode_sel0 : Register<0x178, 32> { };
struct Cur_buf_0 : Register<0x23c, 32> { };
struct Triple_cur_buf_1 : Register<0x25c, 32> { };
struct Ch_buf0_rdy0 : Register<0x268, 32> { };
struct Ch_buf1_rdy0 : Register<0x270, 32> { };
/**************************************
** Image DMA controller registers **
**************************************/
enum Idmac_channels {
CHAN_DP_PRIMARY_MAIN = 23,
CHAN_DP_PRIMARY_AUXI = 27,
CHAN_DC_SYNC_FLOW = 28
};
struct Idmac_ch_en : Register_array<0x8004, 32, 32, 1>
{
struct Ch : Bitfield<0, 1> { };
};
struct Idmac_ch_pri_1 : Register<0x8014, 32> { };
struct Idmac_wm_en : Register_array<0x801c, 32, 32, 1>
{
struct Ch : Bitfield<0, 1> { };
};
struct Idmac_ch_lock_en_1 : Register<0x8024, 32> { };
/***********************************
** Display processor registers **
***********************************/
struct Dp_com_conf : Register<0x1040000, 32> { };
struct Dp_fg_pos_sync : Register<0x1040008, 32> { };
struct Gr_wnd_ctl_sync : Register<0x1040004, 32> { };
/***********************************
** Display interface registers **
***********************************/
template <Genode::off_t OFF>
struct Di
{
struct General : Register<OFF+0x0, 32> { };
struct Bs_clkgen0 : Register<OFF+0x4, 32> { };
struct Bs_clkgen1 : Register<OFF+0x8, 32> { };
template <unsigned NR>
struct Sync_wave_gen0 : Register<0xc+OFF+(NR*4), 32> { };
template <unsigned NR>
struct Sync_wave_gen1 : Register<0x30+OFF+(NR*4), 32> { };
struct Sync_as_gen : Register<OFF+0x54, 32> { };
template <unsigned NR>
struct Dw_gen : Register<0x58 + OFF + (NR*4), 32> { };
template <unsigned NR>
struct Dw_set3 : Register<0x118 + OFF + (NR*4), 32> { };
template <unsigned NR>
struct Step_repeat : Register<0x148 + OFF + (NR*4), 32> { };
struct Polarity : Register<OFF+0x164, 32> { };
struct Scr_conf : Register<OFF+0x170, 32> { };
};
typedef Di<0x40000> Di0;
typedef Di<0x48000> Di1;
/************************************
** Display controller registers **
************************************/
struct Dc_wr_ch_conf_5 : Register<0x5805c, 32> { };
struct Dc_wr_ch_addr_5 : Register<0x58060, 32> { };
template <unsigned NR>
struct Dc_rl_ch_5 : Register<0x58064+(NR*4), 32> { };
struct Dc_gen : Register<0x580d4, 32> { };
struct Dc_disp_conf2_0 : Register<0x580e8, 32> { };
struct Dc_disp_conf2_1 : Register<0x580ec, 32> { };
template <unsigned NR>
struct Dc_map_conf : Register<0x58108+(NR*4), 32> { };
template <unsigned NR>
struct Dc_template : Register<0x1080000+(NR*4), 32> { };
/***********************************************
** Display multi FIFO controller registers **
***********************************************/
struct Dmfc_wr_chan : Register<0x60004, 32> { };
struct Dmfc_wr_chan_def : Register<0x60008, 32> { };
struct Dmfc_dp_chan : Register<0x6000c, 32> { };
struct Dmfc_dp_chan_def : Register<0x60010, 32> { };
struct Dmfc_general_1 : Register<0x60014, 32> { };
struct Dmfc_ic_ctrl : Register<0x6001c, 32> { };
class Cp_mem
{
public:
enum { OFFSET = 0x1000000 };
struct
{
unsigned xv : 10; /* XV Virtual Coordinate */
unsigned yv : 9; /* YV Virtual Coordinate */
unsigned xb : 13; /* XB inner Block Coordinate */
unsigned yb : 12; /* YB inner Block Coordinate */
unsigned nsb_b : 1; /* New Sub Block */
unsigned cf : 1; /* Current Field */
unsigned sx : 12; /* Scroll X counter */
unsigned sy : 11; /* Scroll Y counter */
unsigned ns : 10; /* Number of Scroll */
unsigned sdx : 7; /* Scroll Delta X */
unsigned sm : 10; /* Scroll Max */
unsigned scc : 1; /* Scrolling Configuration */
unsigned sce : 1; /* Scrolling Enable */
unsigned sdy : 7; /* Scroll Delta Y */
unsigned sdrx : 1; /* Scroll Horizontal Direction */
unsigned sdry : 1; /* Scroll Vertical Direction */
unsigned bpp : 3; /* Bits per Pixel */
unsigned dec_sel : 2; /* Decode Address Select */
unsigned dim : 1; /* Access Dimension */
unsigned so : 1; /* Scan Order */
unsigned bndm : 3; /* Band Mode */
unsigned bm : 2; /* Block Mode */
unsigned rot : 1; /* Rotation */
unsigned hf : 1; /* Horizontal Flip */
unsigned vf : 1; /* Vertical Flip */
unsigned the : 1; /* Threshold Enable */
unsigned cap : 1; /* Conditional Access Polarity */
unsigned cae : 1; /* Conditional Access Enable */
unsigned fw : 13; /* Frame Width */
unsigned fh : 12; /* Frame Height */
unsigned res0 : 10; /* reserved */
Genode::uint32_t res1[3];
unsigned eba0 : 29; /* Ext Mem Buffer 0 Address */
unsigned eba1 : 29; /* Ext Mem Buffer 1 Address */
unsigned ilo : 20; /* Interlace Offset */
unsigned npb : 7; /* Number of Pixels in Whole Burst Access */
unsigned pfs : 4; /* Pixel Format Select */
unsigned alu : 1; /* Alpha Used */
unsigned albm : 3; /* Alpha Channel Mapping */
unsigned id : 2; /* AXI ID */
unsigned th : 7; /* Threshold */
unsigned sly : 14; /* Stride Line */
unsigned wid0 : 3; /* Width0 */
unsigned wid1 : 3; /* Width1 */
unsigned wid2 : 3; /* Width2 */
unsigned wid3 : 3; /* Width3 */
unsigned off0 : 5; /* Offset0 */
unsigned off1 : 5; /* Offset1 */
unsigned off2 : 5; /* Offset2 */
unsigned off3 : 5; /* Offset3 */
unsigned sxys : 1; /* Select SX SY Set */
unsigned cre : 1; /* Conditional Read Enable */
unsigned dec_sel2 : 1; /* Decode Address Select bit[2] */
unsigned res2 : 9; /* reserved */
Genode::uint32_t res3[3];
} __attribute__((packed));
Cp_mem() { Genode::memset(this, 0, sizeof(Cp_mem)); }
} __attribute__((packed));
void _init_dma_channel(unsigned channel,
Genode::uint16_t width, Genode::uint16_t height,
Genode::uint32_t stride, Genode::addr_t phys_base)
{
void *dst =(void*)(base() + Cp_mem::OFFSET + channel*sizeof(Cp_mem));
Cp_mem cpmem;
cpmem.fw = width - 1;
cpmem.fh = height - 1;
cpmem.sly = stride - 1;
cpmem.eba0 = phys_base >> 3;
cpmem.eba1 = phys_base >> 3;
cpmem.bpp = 0; /* corresponds to 32BPP */
cpmem.pfs = 7; /* corresponds to RGB */
cpmem.npb = 15;
/* red */
cpmem.wid0 = 7;
cpmem.off0 = 8;
/* green */
cpmem.wid1 = 7;
cpmem.off1 = 16;
/* blue */
cpmem.wid2 = 7;
cpmem.off2 = 24;
/* alpha */
cpmem.wid3 = 7;
cpmem.off3 = 0;
Genode::memcpy(dst, (void*)&cpmem, sizeof(Cp_mem));
}
void _init_di0(Genode::uint16_t width, Genode::uint16_t height,
Genode::uint32_t stride, Genode::addr_t phys_base)
{
/* set MCU_T to divide MCU access window into 2 */
write<Disp_gen>(0x1600000); // ?= 0x600000
/* link display controller events */
write<Dc_rl_ch_5<0> >(0x5030000);
write<Dc_rl_ch_5<2> >(0x602);
write<Dc_rl_ch_5<4> >(0x701);
write<Dc_rl_ch_5<0> >(0x5030000);
write<Dc_rl_ch_5<1> >(0x0);
write<Dc_rl_ch_5<1> >(0x0);
write<Dc_rl_ch_5<2> >(0x602);
write<Dc_rl_ch_5<3> >(0x0);
write<Dc_rl_ch_5<3> >(0x0);
write<Dc_wr_ch_conf_5>(0x2);
write<Dc_wr_ch_addr_5>(0x0);
write<Dc_gen>(0x84);
/*************************
** Display interface **
*************************/
/* clear DI */
write<Di0::General>(0x200000);
/* initialize display interface 0 */
write<Di0::Bs_clkgen0>(0x38);
write<Di0::Bs_clkgen1>(0x30000);
write<Di0::Dw_gen<0> >(0x2020300);
write<Di0::Dw_set3<0> >(0x60000);
write<Di0::Sync_wave_gen0<0> >(0x21310000);
write<Di0::Sync_wave_gen1<0> >(0x10000000);
write<Di0::Sync_wave_gen0<1> >(0x21310001);
write<Di0::Sync_wave_gen1<1> >(0x30141000);
write<Di0::Step_repeat<0> >(0x0);
write<Di0::Sync_wave_gen0<2> >(0x10520000);
write<Di0::Sync_wave_gen1<2> >(0x30142000);
write<Di0::Scr_conf>(0x20a);
write<Di0::Sync_wave_gen0<3> >(0x3010b);
write<Di0::Sync_wave_gen1<3> >(0x8000000);
write<Di0::Step_repeat<1> >(0x1e00000);
write<Di0::Sync_wave_gen0<4> >(0x10319);
write<Di0::Sync_wave_gen1<4> >(0xa000000);
write<Di0::Sync_wave_gen0<5> >(0x0);
write<Di0::Sync_wave_gen1<5> >(0x0);
write<Di0::Sync_wave_gen0<6> >(0x0);
write<Di0::Sync_wave_gen1<6> >(0x0);
write<Di0::Sync_wave_gen0<7> >(0x0);
write<Di0::Sync_wave_gen1<7> >(0x0);
write<Di0::Sync_wave_gen0<8> >(0x0);
write<Di0::Sync_wave_gen1<8> >(0x0);
write<Di0::Step_repeat<2> >(0x320);
write<Di0::Step_repeat<3> >(0x0);
write<Di0::Step_repeat<4> >(0x0);
/* write display connection microcode */
write<Dc_template<10> >(0x8885);
write<Dc_template<11> >(0x380);
write<Dc_template<12> >(0x8845);
write<Dc_template<13> >(0x380);
write<Dc_template<14> >(0x8805);
write<Dc_template<15> >(0x380);
write<Di0::General>(0x220000);
write<Di0::Sync_as_gen>(0x2002);
write<Di0::General>(0x200000);
write<Di0::Sync_as_gen>(0x4002);
write<Di0::Polarity>(0x10);
write<Dc_disp_conf2_0>(0x320);
/* init IDMAC channels */
_init_dma_channel(CHAN_DP_PRIMARY_MAIN, width, height, stride, phys_base);
_init_dma_channel(CHAN_DP_PRIMARY_AUXI, width, height, stride, phys_base);
/* round robin for simultaneous synchronous flows from DC & DP */
write<Dmfc_general_1>(0x3);
/* enable DP, DI0, DC, DMFC */
write<Conf>(0x660);
/* use double buffer for main DMA channel */
write<Ch_db_mode_sel0>(1 << CHAN_DP_PRIMARY_MAIN |
1 << CHAN_DP_PRIMARY_AUXI);
/* buffer used by DMA channel is buffer 1 */
write<Cur_buf_0>(1 << CHAN_DP_PRIMARY_MAIN);
write<Dc_wr_ch_conf_5>(0x82);
/* Enable IDMAC channels */
write<Idmac_ch_en::Ch>(1, CHAN_DP_PRIMARY_MAIN);
write<Idmac_ch_en::Ch>(1, CHAN_DP_PRIMARY_AUXI);
}
void _init_di1(Genode::uint16_t width, Genode::uint16_t height,
Genode::uint32_t stride, Genode::addr_t phys_base)
{
write<Disp_gen>(0x600000); //write<Disp_gen>(0x2400000);
write<Dp_com_conf>(0);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
write<Dc_rl_ch_5<0> >(0x2030000);
write<Dc_rl_ch_5<1> >(0);
write<Dc_rl_ch_5<2> >(0x302);
write<Dc_rl_ch_5<3> >(0);
write<Dc_rl_ch_5<4> >(0x401);
write<Dc_wr_ch_conf_5>(0xe);
write<Dc_wr_ch_addr_5>(0x0);
write<Dc_gen>(0x84);
write<Conf>(0);
write<Di1::General>(0x200000);
write<Di1::General>(0x300000);
write<Di1::Bs_clkgen0>(0x10);
write<Di1::Bs_clkgen1>(0x10000);
write<Pm>(0x10101010);
write<Di1::Dw_gen<0> >(0x300);
write<Di1::Dw_set3<0> >(0x20000);
write<Di1::Sync_wave_gen0<0> >(0x29f90000);
write<Di1::Sync_wave_gen1<0> >(0x10000000);
write<Di1::Step_repeat<0> >(0x0);
write<Di1::Sync_wave_gen0<1> >(0x29f90001);
write<Di1::Sync_wave_gen1<1> >(0x30781000);
write<Di1::Step_repeat<0> >(0x0);
write<Di1::Sync_wave_gen0<2> >(0x192a0000);
write<Di1::Sync_wave_gen1<2> >(0x30142000);
write<Di1::Step_repeat<1> >(0x3000000);
write<Di1::Scr_conf>(0x325);
write<Di1::Sync_wave_gen0<3> >(0x300fb);
write<Di1::Sync_wave_gen1<3> >(0x8000000);
write<Di1::Step_repeat<1> >(0x3000000);
write<Di1::Sync_wave_gen0<4> >(0x108c1);
write<Di1::Sync_wave_gen1<4> >(0xa000000);
write<Di1::Step_repeat<2> >(0x400);
write<Di1::Sync_wave_gen0<6> >(0x29f90091);
write<Di1::Sync_wave_gen1<6> >(0x30781000);
write<Di1::Step_repeat<3> >(0x0);
write<Di1::Sync_wave_gen0<7> >(0x192a000a);
write<Di1::Sync_wave_gen1<7> >(0x30142000);
write<Di1::Step_repeat<3> >(0x0);
write<Di1::Sync_wave_gen0<5> >(0x0);
write<Di1::Sync_wave_gen1<5> >(0x0);
write<Di1::Sync_wave_gen0<8> >(0x0);
write<Di1::Sync_wave_gen1<8> >(0x0);
write<Di1::Step_repeat<4> >(0x0);
write<Di1::Step_repeat<2> >(0x400);
write<Di1::Sync_wave_gen0<5> >(0x90011);
write<Di1::Sync_wave_gen1<5> >(0x4000000);
write<Di1::Step_repeat<2> >(0x28a0400);
write<Dc_template<4> >(0x10885);
write<Dc_template<5> >(0x380);
write<Dc_template<6> >(0x845);
write<Dc_template<7> >(0x280);
write<Dc_template<8> >(0x10805);
write<Dc_template<9> >(0x380);
write<Di1::General>(0x6300000);
write<Di1::Sync_as_gen>(0x4000);
write<Di1::Polarity>(0x10);
write<Dc_disp_conf2_1>(0x400);
_init_dma_channel(CHAN_DP_PRIMARY_MAIN, width, height, stride, phys_base);
_init_dma_channel(CHAN_DP_PRIMARY_AUXI, width, height, stride, phys_base);
/* use double buffer for main DMA channel */
write<Ch_db_mode_sel0>(1 << CHAN_DP_PRIMARY_MAIN |
1 << CHAN_DP_PRIMARY_AUXI);
/* buffer used by DMA channel is buffer 1 */
write<Cur_buf_0>(1 << CHAN_DP_PRIMARY_MAIN);
write<Conf>(0x6a0);
/* Enable IDMAC channels */
write<Idmac_ch_en::Ch>(1, CHAN_DP_PRIMARY_MAIN);
write<Idmac_ch_en::Ch>(1, CHAN_DP_PRIMARY_AUXI);
write<Idmac_wm_en>(1 << CHAN_DP_PRIMARY_MAIN |
1 << CHAN_DP_PRIMARY_AUXI);
write<Dc_wr_ch_conf_5>(0x8e);
write<Disp_gen>(0x2600000);
}
public:
/**
* IPU initialization
*/
void init(Genode::uint16_t width, Genode::uint16_t height,
Genode::uint32_t stride, Genode::addr_t phys_base,
bool di0)
{
/* stop pixel clocks */
write<Di0::General>(0);
write<Di1::General>(0);
/* reset IPU memory buffers */
write<Mem_rst>(0x807fffff);
while (read<Mem_rst>() & 0x80000000) ;
/* initialize pixel format mappings for display controller */
write<Dc_map_conf< 0> >(0x14830820);
write<Dc_map_conf< 1> >(0x2d4920e6);
write<Dc_map_conf< 2> >(0x39ac);
write<Dc_map_conf<15> >(0xfff07ff);
write<Dc_map_conf<16> >(0x5fc17ff);
write<Dc_map_conf<17> >(0x11fc0bfc);
write<Dc_map_conf<18> >(0x17ff0fff);
write<Dc_map_conf<19> >(0x4f807ff);
write<Dc_map_conf<20> >(0xff80afc);
write<Dc_map_conf<21> >(0xdfc05fc);
write<Dc_map_conf<22> >(0x15fc);
/* clear interrupt control registers */
write<Int_ctrl<4> >(0);
write<Int_ctrl<5> >(0);
write<Int_ctrl<8> >(0);
write<Int_ctrl<9> >(0);
/* disable DMFC channel from image converter */
write<Dmfc_ic_ctrl>(0x2);
/* set DMFC FIFO for idma channels */
write<Dmfc_wr_chan>(0x90); /* channel CHAN_DC_SYNC_FLOW */
write<Dmfc_wr_chan_def>(0x202020f6);
write<Dmfc_dp_chan>(0x968a); /* channels CHAN_DP_PRIMARY_XXX */
write<Dmfc_dp_chan_def>(0x2020f6f6);
write<Dmfc_general_1>(0x3);
/* set idma channels 23, 27, 28 as high priority */
write<Idmac_ch_pri_1>(1 << CHAN_DP_PRIMARY_MAIN |
1 << CHAN_DP_PRIMARY_AUXI |
1 << CHAN_DC_SYNC_FLOW);
/*
* generate 8 AXI bursts upon the assertion of DMA request
* for our channels
*/
write<Idmac_ch_lock_en_1>(0x3f0000);
if (di0)
_init_di0(width, height, stride, phys_base);
else
_init_di1(width, height, stride, phys_base);
/************************
** overlay settings **
************************/
write<Dp_com_conf>(1 << 0);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
write<Dp_fg_pos_sync>(16);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
write<Dp_com_conf>(1 << 0 | 1 << 2);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
write<Gr_wnd_ctl_sync>(0xff000000);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
}
void overlay(Genode::addr_t phys_base, int x, int y, int alpha)
{
volatile Genode::uint32_t *ptr = (volatile Genode::uint32_t*)
(base() + Cp_mem::OFFSET + CHAN_DP_PRIMARY_AUXI*sizeof(Cp_mem));
ptr[8] = (((phys_base >> 3) & 0b111) << 29) | (phys_base >> 3);
ptr[9] = (phys_base >> 6);
write<Dp_fg_pos_sync>(x << 16 | y);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
write<Gr_wnd_ctl_sync>(alpha << 24);
write<Srm_pri2::Dp_m_srm>(Srm_pri2::Dp_m_srm::UPDATE_NOW);
}
/**
* Constructor
*
* \param mmio_base base address of IPU
*/
Ipu(Genode::addr_t mmio_base) : Genode::Mmio(mmio_base + REGS_OFF) { }
};
#endif /* _DRIVERS__FRAMEBUFFER__SPEC__IMX53__IPU_H_ */

View File

@ -1,79 +0,0 @@
/*
* \brief Frame-buffer driver for the i.MX53
* \author Nikolay Golikov <nik@ksyslabs.org>
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \author Norman Feske
* \date 2012-06-21
*/
/*
* Copyright (C) 2012-2020 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
/* Genode includes */
#include <base/attached_rom_dataspace.h>
#include <base/attached_ram_dataspace.h>
#include <base/component.h>
#include <base/log.h>
#include <timer_session/connection.h>
#include <dataspace/client.h>
/* local includes */
#include <driver.h>
namespace Framebuffer {
using namespace Genode;
struct Main;
};
struct Framebuffer::Main
{
using Pixel = Capture::Pixel;
Env &_env;
Attached_rom_dataspace _config { _env, "config" };
Driver _driver { _env, _config.xml() };
Area const _size = _driver.screen_size();
Attached_ram_dataspace _fb_ds { _env.ram(), _env.rm(),
_size.count()*sizeof(Pixel), WRITE_COMBINED };
Capture::Connection _capture { _env };
Capture::Connection::Screen _captured_screen { _capture, _env.rm(), _size };
Timer::Connection _timer { _env };
Signal_handler<Main> _timer_handler { _env.ep(), *this, &Main::_handle_timer };
void _handle_timer()
{
Surface<Pixel> surface(_fb_ds.local_addr<Pixel>(), _size);
_captured_screen.apply_to_surface(surface);
}
Main(Env &env) : _env(env)
{
log("--- i.MX53 framebuffer driver ---");
if (!_driver.init(Dataspace_client(_fb_ds.cap()).phys_addr())) {
error("could not initialize display");
struct Could_not_initialize_display : Exception { };
throw Could_not_initialize_display();
}
_timer.sigh(_timer_handler);
_timer.trigger_periodic(10*1000);
}
};
void Component::construct(Genode::Env &env) { static Framebuffer::Main main(env); }

View File

@ -1,36 +0,0 @@
/*
* \brief Pulse width modulation
* \author Stefan Kalkowski
* \date 2013-03-05
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__FRAMEBUFFER__SPEC__IMX53__PWM_H_
#define _DRIVERS__FRAMEBUFFER__SPEC__IMX53__PWM_H_
/* Genode includes */
#include <util/mmio.h>
struct Pwm : Genode::Mmio
{
struct Control : Register<0x0, 32> {};
struct Sample : Register<0xc, 32> {};
struct Period : Register<0x10,32> {};
Pwm(Genode::addr_t const mmio_base) : Genode::Mmio(mmio_base) { }
void enable_display()
{
write<Period>(0x64);
write<Sample>(0x64);
write<Control>(0x3c20001);
}
};
#endif /* _DRIVERS__FRAMEBUFFER__SPEC__IMX53__PWM_H_ */

View File

@ -1,8 +0,0 @@
TARGET = imx53_fb_drv
REQUIRES = arm_v7
SRC_CC = main.cc
LIBS = base blit
INC_DIR += $(PRG_DIR)
INC_DIR += $(call select_from_repositories,include/spec/imx53)
CC_CXX_WARN_STRICT_CONVERSION =

View File

@ -1,94 +0,0 @@
/*
* \brief Clock control module register description
* \author Nikolay Golikov <nik@ksyslabs.org>
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__PLATFORM__SPEC__IMX53__CCM_H_
#define _DRIVERS__PLATFORM__SPEC__IMX53__CCM_H_
/* Genode includes */
#include <util/mmio.h>
#include <drivers/defs/imx53.h>
#include <base/attached_io_mem_dataspace.h>
class Ccm : public Genode::Attached_io_mem_dataspace,
Genode::Mmio
{
private:
/**
* Control divider register
*/
struct Ccdr : Register<0x4, 32>
{
struct Ipu_hs_mask : Bitfield <21, 1> { };
};
/**
* Serial Clock Multiplexer Register 2
*/
struct Cscmr2 : Register<0x20, 32> {};
/**
* D1 Clock Divider Register
*/
struct Cdcdr : Register<0x30, 32> {};
/**
* Low power control register
*/
struct Clpcr : Register<0x54, 32>
{
struct Bypass_ipu_hs : Bitfield<18, 1> { };
};
struct Ccgr1 : Register<0x6c, 32>
{
struct I2c_1 : Bitfield<18, 2> { };
struct I2c_2 : Bitfield<20, 2> { };
struct I2c_3 : Bitfield<22, 2> { };
};
struct Ccgr5 : Register<0x7c, 32>
{
struct Ipu : Bitfield<10, 2> { };
};
public:
Ccm(Genode::Env &env)
: Genode::Attached_io_mem_dataspace(env, Imx53::CCM_BASE,
Imx53::CCM_SIZE),
Genode::Mmio((Genode::addr_t)local_addr<void>()) { }
void i2c_1_enable(void) { write<Ccgr1::I2c_1>(3); }
void i2c_2_enable(void) { write<Ccgr1::I2c_2>(3); }
void i2c_3_enable(void) { write<Ccgr1::I2c_3>(3); }
void ipu_clk_enable(void)
{
write<Ccgr5::Ipu>(3);
write<Ccdr::Ipu_hs_mask>(0);
write<Clpcr::Bypass_ipu_hs>(0);
write<Cscmr2>(0xa2b32f0b);
write<Cdcdr>(0x14370092);
}
void ipu_clk_disable(void)
{
write<Ccgr5::Ipu>(0);
write<Ccdr::Ipu_hs_mask>(1);
write<Clpcr::Bypass_ipu_hs>(1);
}
};
#endif /* _DRIVERS__PLATFORM__SPEC__IMX53__CCM_H_ */

View File

@ -1,39 +0,0 @@
/*
* \brief IC identification module register description
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__PLATFORM__SPEC__IMX53__IIM_H_
#define _DRIVERS__PLATFORM__SPEC__IMX53__IIM_H_
/* Genode includes */
#include <util/mmio.h>
#include <drivers/defs/imx53.h>
#include <base/attached_io_mem_dataspace.h>
class Iim : public Genode::Attached_io_mem_dataspace,
Genode::Mmio
{
private:
struct Fuse_bank0_gp6 : Register<0x878, 32> {};
public:
Iim(Genode::Env &env)
: Genode::Attached_io_mem_dataspace(env, Imx53::IIM_BASE,
Imx53::IIM_SIZE),
Genode::Mmio((Genode::addr_t)local_addr<void>()) {}
unsigned long revision() { return read<Fuse_bank0_gp6>() & 0xf; }
};
#endif /* _DRIVERS__PLATFORM__SPEC__IMX53__IIM_H_ */

View File

@ -1,110 +0,0 @@
/*
* \brief IOMUX controller register description
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__PLATFORM__SPEC__IMX53__IOMUX_H_
#define _DRIVERS__PLATFORM__SPEC__IMX53__IOMUX_H_
/* Genode includes */
#include <util/mmio.h>
#include <drivers/defs/imx53.h>
#include <base/attached_io_mem_dataspace.h>
class Iomux : public Genode::Attached_io_mem_dataspace,
Genode::Mmio
{
private:
struct Gpr2 : Register<0x8,32>
{
struct Ch1_mode : Bitfield<2, 2> {
enum { ROUTED_TO_DI1 = 0x3 }; };
struct Data_width_ch1 : Bitfield<7, 1> {
enum { PX_18_BITS, PX_24_BITS }; };
struct Bit_mapping_ch1 : Bitfield<8, 1> {
enum { SPWG, JEIDA }; };
struct Di1_vs_polarity : Bitfield<10,1> { };
};
struct Key_col3 : Register<0x3c, 32> {};
struct Key_row3 : Register<0x40, 32> {};
struct Eim_a24 : Register<0x15c, 32> { };
template <unsigned OFF>
struct Sw_mux_ctl_pad_gpio : Register<0x314 + OFF*4, 32> { };
struct Sw_pad_ctl_pad_key_col3 : Register<0x364, 32> { };
struct Sw_pad_ctl_pad_key_row3 : Register<0x368, 32> { };
struct Sw_pad_ctl_pad_eim_a24 : Register<0x4a8, 32> { };
template <unsigned OFF>
struct Sw_pad_ctl_pad_gpio : Register<0x6a4 + OFF*4, 32> { };
struct I2c2_ipp_scl_in_select_input : Register<0x81c, 32> { };
struct I2c2_ipp_sda_in_select_input : Register<0x820, 32> { };
struct I2c3_ipp_scl_in_select_input : Register<0x824, 32> { };
struct I2c3_ipp_sda_in_select_input : Register<0x828, 32> { };
public:
Iomux(Genode::Env &env)
: Genode::Attached_io_mem_dataspace(env, Imx53::IOMUXC_BASE,
Imx53::IOMUXC_SIZE),
Genode::Mmio((Genode::addr_t)local_addr<void>())
{ }
void i2c_2_enable()
{
write<Key_col3>(0x14);
write<I2c2_ipp_scl_in_select_input>(0);
write<Sw_pad_ctl_pad_key_col3>(0x12d);
write<Key_row3>(0x14);
write<I2c2_ipp_sda_in_select_input>(0);
write<Sw_pad_ctl_pad_key_row3>(0x12d);
}
void i2c_3_enable()
{
write<Sw_mux_ctl_pad_gpio<3> >(0x12);
write<I2c3_ipp_scl_in_select_input>(0x1);
write<Sw_pad_ctl_pad_gpio<3> >(0x12d);
write<Sw_mux_ctl_pad_gpio<4> >(0x12);
write<I2c3_ipp_sda_in_select_input>(0x1);
write<Sw_pad_ctl_pad_gpio<4> >(0x12d);
}
void ipu_enable()
{
write<Gpr2::Di1_vs_polarity>(1);
write<Gpr2::Data_width_ch1>(Gpr2::Data_width_ch1::PX_18_BITS);
write<Gpr2::Bit_mapping_ch1>(Gpr2::Bit_mapping_ch1::SPWG);
write<Gpr2::Ch1_mode>(Gpr2::Ch1_mode::ROUTED_TO_DI1);
}
void pwm_enable()
{
write<Eim_a24>(1);
write<Sw_pad_ctl_pad_eim_a24>(0);
write<Sw_mux_ctl_pad_gpio<1> >(0x4);
write<Sw_pad_ctl_pad_gpio<1> >(0x0);
}
void buttons_enable()
{
write<Eim_a24>(1);
write<Sw_pad_ctl_pad_eim_a24>(0);
}
};
#endif /* _DRIVERS__PLATFORM__SPEC__IMX53__IOMUX_H_ */

View File

@ -1,152 +0,0 @@
/*
* \brief Driver for i.MX53 specific platform devices (clocks, power, etc.)
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#include <base/log.h>
#include <base/heap.h>
#include <base/component.h>
#include <root/component.h>
#include <legacy/imx53/platform_session/platform_session.h>
#include <ccm.h>
#include <iim.h>
#include <iomux.h>
#include <src.h>
namespace Platform {
class Session_component;
class Root;
}
class Platform::Session_component : public Genode::Rpc_object<Platform::Session>
{
private:
Iim &_iim; /* IC identification module */
Iomux &_iomux; /* I/O multiplexer device */
Ccm &_ccm; /* clock control module */
Src &_src; /* system reset controller */
public:
/**
* Constructor
*/
Session_component(Iim &iim, Iomux &iomux, Ccm &ccm, Src &src)
: _iim(iim), _iomux(iomux), _ccm(ccm), _src(src) {}
/**********************************
** Platform session interface **
**********************************/
void enable(Device dev) override
{
switch (dev) {
case Session::IPU:
_src.reset_ipu();
_ccm.ipu_clk_enable();
_iomux.ipu_enable();
break;
case Session::I2C_2:
_ccm.i2c_2_enable();
_iomux.i2c_2_enable();
break;
case Session::I2C_3:
_ccm.i2c_3_enable();
_iomux.i2c_3_enable();
break;
case Session::BUTTONS:
_iomux.buttons_enable();
break;
case Session::PWM:
_iomux.pwm_enable();
break;
default:
Genode::warning("invalid device");
};
}
void disable(Device dev) override
{
switch (dev) {
case Session::IPU:
_ccm.ipu_clk_disable();
break;
default:
Genode::warning("invalid device");
};
}
void clock_rate(Device dev, unsigned long /* rate */) override
{
switch (dev) {
default:
Genode::warning("invalid device");
};
}
Board_revision revision() override
{
switch (_iim.revision()) {
case QSB: return QSB;
case SMD: return SMD;
};
return UNKNOWN;
}
};
class Platform::Root : public Genode::Root_component<Platform::Session_component>
{
private:
Genode::Env &_env;
Iim _iim { _env };
Iomux _iomux { _env };
Ccm _ccm { _env };
Src _src { _env };
protected:
Session_component *_create_session(const char *) override {
return new (md_alloc()) Session_component(_iim, _iomux, _ccm, _src); }
public:
Root(Genode::Env &env,
Genode::Allocator &md_alloc)
: Genode::Root_component<Session_component>(env.ep(), md_alloc), _env(env)
{ }
};
struct Main
{
Genode::Env & env;
Genode::Heap heap { env.ram(), env.rm() };
Platform::Root root { env, heap };
Main(Genode::Env & env) : env(env) {
env.parent().announce(env.ep().manage(root)); }
};
void Component::construct(Genode::Env &env)
{
Genode::log("--- i.MX53 platform driver ---");
static Main main(env);
}

View File

@ -1,43 +0,0 @@
/*
* \brief System reset controller register description
* \author Nikolay Golikov <nik@ksyslabs.org>
* \author Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
* \date 2013-04-29
*/
/*
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _DRIVERS__PLATFORM__SPEC__IMX53__SRC_H_
#define _DRIVERS__PLATFORM__SPEC__IMX53__SRC_H_
/* Genode includes */
#include <util/mmio.h>
#include <drivers/defs/imx53.h>
#include <base/attached_io_mem_dataspace.h>
class Src : public Genode::Attached_io_mem_dataspace,
Genode::Mmio
{
private:
struct Ctrl_reg : Register<0x0, 32>
{
struct Ipu_rst : Bitfield<3, 1> { };
};
public:
Src(Genode::Env &env)
: Genode::Attached_io_mem_dataspace(env, Imx53::SRC_BASE,
Imx53::SRC_SIZE),
Genode::Mmio((Genode::addr_t)local_addr<void>()) {}
void reset_ipu() { write<Ctrl_reg::Ipu_rst>(1); }
};
#endif /* _DRIVERS__PLATFORM__SPEC__IMX53__SRC_H_ */

View File

@ -1,5 +0,0 @@
TARGET = legacy_imx53_platform_drv
REQUIRES = arm_v7
SRC_CC = main.cc
INC_DIR += ${PRG_DIR} $(call select_from_repositories,include/spec/imx53)
LIBS = base