Armadilloフォーラム

Armadillo-840mにおけるコンポジット出力について

kan

2020年2月20日 9時04分

Armadillo-840mにおいて、コンポジット出力をさせたいと考えて
おります。
この時、カーネルコンフィグは以下のサイトを参考に設定しました。
https://armadillo.atmark-techno.com/howto/a840-use-cvbs-line

また、ソースコードでは、 a840_lcdc1_init()でリソースの登録を
行っているようですが、関数をコールしている所が見つからないため、
初期化( a840_init ())にて、関数をコールするようにしてみました。
このカーネルを書き込んで動作させた所、下記のログのようにエラー
となってしまいました。
Armadillo-840mでコンポジットを出力させるのに、このように
a840_lcdc1_init() を初期化でコールするようにしていますが、
このやり方で合っているでしょうか?
エラー内容では、リソースの登録が失敗しているような内容と
思われますが、リソース情報として何か追加で登録する必要が
あるでしょうか?

ファイル名:board-armadillo840.c
/*
* board init
*/
static void __init a840_init(void)
{
r8a7740_pinmux_init();
r8a7740_meram_workaround();
r8a7740_sgx540_workaround();

/* if direction of PORT74 is INPUT, PORT74 is detection signal
* of extention board. if we detect extention board,
* we register for some platform device and do pinmux.
* if PORT74 is Low, extension board is connected to armadillo-840. */
if (IS_ENABLED(CONFIG_ARMADILLO840_CON7EB_LCD)) {
/* CON7強制接続 */
#ifdef HW_01
con7eb_detected = 1;
pr_info("CON7: %d extension board found.\n",con7eb_detected);
#else
gpio_request(GPIO_PORT74, NULL);
gpio_direction_input(GPIO_PORT74);
con7eb_detected = !gpio_get_value(GPIO_PORT74);
gpio_free(GPIO_PORT74);
pr_info("CON7: %s extension board found.\n",
con7eb_detected ? "LCD" : "no");
#endif
} else {
/* this is implementation dependent.
*
* some extension board does not have the detection signal.
* if your extension board has detection signal,
* use gpio_get_value() to detect it.
* otherwise assign 1 to force detected, or 0. */
con7eb_detected = 1;
}

#ifdef HW_01
activate_ext_gpios(rest_gpios, ARRAY_SIZE(rest_gpios));
gpio_direction_output(GPIO_PORT102,1);/* 5V_USB_EN ON */
mdelay(10);
gpio_direction_output(GPIO_PORT165,1);/* 3.3V_EN ON */
mdelay(10);
gpio_direction_output(GPIO_PORT98,1);/* 3.3V_LCD_EN ON */
mdelay(10);
gpio_direction_output(GPIO_PORT100,1);/* 1.2V_EN ON */
mdelay(10);
gpio_direction_output(GPIO_PORT172,0);/* RESET OFF */
mdelay(100);
gpio_direction_output(GPIO_PORT172,1);/* RESET ON */
mdelay(10);
#endif

/* init peripheral modules */
a840_scifx_init();
a840_eth_init();
a840_usb_init();
a840_sdhi_init();
a840_lcdc_init();
a840_lcdc1_init();//Add 2020.02.19

以下、起動時の出力

Linux version 3.4-at27 (atmark@atde5) (gcc version 4.6.3 (Debian
4.6.3-14atmark1) ) #23 PREEMPT Wed Feb 19 18:07:32 JST 2020
CPU: ARMv7 Processor [412fc093] revision 3 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: armadillo840
cma: CMA: reserved 64 MiB at 54000000
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 227328
Kernel command line: console=ttySC2,115200 noinitrd rootwait
root=/dev/mtdblock5 ro rootfstype=squashfs
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
allocated 2097152 bytes of page_cgroup
please try 'cgroup_disable=memory' option if you don't want memory cgroups
Memory: 384MB 512MB = 896MB total
Memory: 826104k/826104k available, 91400k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc0800000 - 0xff000000 (1000 MB)
lowmem : 0x80000000 - 0xc0000000 (1024 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.text : 0x80008000 - 0x805a6000 (5752 kB)
.init : 0x805a6000 - 0x805cd000 ( 156 kB)
.data : 0x805ce000 - 0x80785ae0 (1759 kB)
.bss : 0x80785b04 - 0x807d09b8 ( 300 kB)
NR_IRQS:16 nr_irqs:16 16
sched_clock: 32 bits at 128 Hz, resolution 7812500ns, wraps every
3489660920ms
Console: colour dummy device 80x30
sh_cmt_simple.10: used as clock source
sh_cmt_simple.14: used for clock events
sh_cmt_simple.14: used for periodic clock events
Calibrating delay loop... 1576.53 BogoMIPS (lpj=6156288)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
Initializing cgroup subsys cpuacct
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys blkio
CPU: Testing write buffer coherency: ok
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
Setting up static identity map for 0x4044ebd8 - 0x4044ec0c
devtmpfs: initialized
dummy:
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
pfc: r8a7740_pfc handling gpio 0 -> 858
gpiochip_add: registered GPIOs 0 to 858 on device: r8a7740_pfc
CON7: 1 extension board found.
kobject (805ddd98): tried to init an initialized object, something is
seriously wrong.
Backtrace:
[<80011108>] (dump_backtrace+0x0/0x10c) from [<80449254>]
(dump_stack+0x18/0x1c)
r6:00000001 r5:8076e6d8 r4:805ddd98 r3:805e8f80
[<8044923c>] (dump_stack+0x0/0x1c) from [<80206a70>]
(kobject_init+0x3c/0x98)
[<80206a34>] (kobject_init+0x0/0x98) from [<8026f65c>]
(device_initialize+0x28/0x68)
r5:807ca20c r4:805ddd90
[<8026f634>] (device_initialize+0x0/0x68) from [<80273da4>]
(platform_device_register+0x18/0x2c)
r5:80785fd8 r4:805ddd88
[<80273d8c>] (platform_device_register+0x0/0x2c) from [<80449588>]
(a840_lcdc1_init+0x64/0xd8)
r4:805ddcb0 r3:000000ad
[<80449524>] (a840_lcdc1_init+0x0/0xd8) from [<805adbd4>]
(a840_init+0x4e0/0x8cc)
r6:00000000 r5:80785fd8 r4:e6050000 r3:00000000
[<805ad6f4>] (a840_init+0x0/0x8cc) from [<805a9634>]
(customize_machine+0x24/0x30)
r7:80785b40 r6:00000000 r5:805a9610 r4:00000003
[<805a9610>] (customize_machine+0x0/0x30) from [<800085ec>]
(do_one_initcall+0x98/0x168)
[<80008554>] (do_one_initcall+0x0/0x168) from [<805a6960>]
(kernel_init+0x140/0x204)
r9:805cc3cc r8:000000af r7:80785b40 r6:805c6cf0 r5:805c6d10
r4:00000003
[<805a6820>] (kernel_init+0x0/0x204) from [<80020ea8>] (do_exit+0x0/0x75c)
------------[ cut here ]------------
WARNING: at kernel/resource.c:597 __insert_resource+0x4c/0x12c()
Modules linked in:
Backtrace:
[<80011108>] (dump_backtrace+0x0/0x10c) from [<80449254>]
(dump_stack+0x18/0x1c)
r6:80531330 r5:00000255 r4:00000000 r3:805e8f80
[<8044923c>] (dump_stack+0x0/0x1c) from [<8001d560>]
(warn_slowpath_common+0x54/0x6c)
[<8001d50c>] (warn_slowpath_common+0x0/0x6c) from [<8001d59c>]
(warn_slowpath_null+0x24/0x2c)
r8:000000af r7:80785b40 r6:805e9230 r5:805dfd20 r4:805dfd20
r3:00000009
[<8001d578>] (warn_slowpath_null+0x0/0x2c) from [<80023e64>]
(__insert_resource+0x4c/0x12c)
[<80023e18>] (__insert_resource+0x0/0x12c) from [<80024a60>]
(insert_resource_conflict+0x28/0x58)
r6:00000000 r5:805dfd20 r4:805e9230 r3:805311f4
[<80024a38>] (insert_resource_conflict+0x0/0x58) from [<80024aa0>]
(insert_resource+0x10/0x1c)
r5:00000000 r4:805ddd88
[<80024a90>] (insert_resource+0x0/0x1c) from [<80273b74>]
(platform_device_add+0xc0/0x16c)
[<80273ab4>] (platform_device_add+0x0/0x16c) from [<80273db4>]
(platform_device_register+0x28/0x2c)
r7:80785b40 r6:00000001 r5:80785fd8 r4:805ddd88
[<80273d8c>] (platform_device_register+0x0/0x2c) from [<80449588>]
(a840_lcdc1_init+0x64/0xd8)
r4:805ddcb0 r3:000000ad
[<80449524>] (a840_lcdc1_init+0x0/0xd8) from [<805adbd4>]
(a840_init+0x4e0/0x8cc)
r6:00000000 r5:80785fd8 r4:e6050000 r3:00000000
[<805ad6f4>] (a840_init+0x0/0x8cc) from [<805a9634>]
(customize_machine+0x24/0x30)
r7:80785b40 r6:00000000 r5:805a9610 r4:00000003
[<805a9610>] (customize_machine+0x0/0x30) from [<800085ec>]
(do_one_initcall+0x98/0x168)
[<80008554>] (do_one_initcall+0x0/0x168) from [<805a6960>]
(kernel_init+0x140/0x204)
r9:805cc3cc r8:000000af r7:80785b40 r6:805c6cf0 r5:805c6d10
r4:00000003
[<805a6820>] (kernel_init+0x0/0x204) from [<80020ea8>] (do_exit+0x0/0x75c)
---[ end trace 1b75b31a2719ed1c ]---
sh-mobile-sdenc.0: failed to claim resource 0

ここで、エラーが出てしまっています。

以上、宜しくお願い致します。

コメント

at_mizo

2020年2月20日 9時08分

溝渕です。

> また、ソースコードでは、 a840_lcdc1_init()でリソースの登録を
> 行っているようですが、関数をコールしている所が見つからないため、

以下でコールしています。

arch/arm/mach-shmobile/board-armadillo840.c:
#define __a840_lcdc_init(n) a840_lcdc##n##_init()
#define _a840_lcdc_init(n) __a840_lcdc_init(n)
 
static void a840_lcdc_init(void)
{
    _a840_lcdc_init(CONFIG_ARMADILLO840_PRIMARY_FB_LCDC);
    _a840_lcdc_init(CONFIG_ARMADILLO840_SECONDARY_FB_LCDC);
}

参考になれば。