use BBNSM RTC from U-Boot on i.MX 8ULP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

use BBNSM RTC from U-Boot on i.MX 8ULP

跳至解决方案
4,201 次查看
DaisukeMizobuchi
Contributor III

Hello,

I want to use BBNSM(Battery-Backed Non-Secure Module) RTC from U-Boot on i.MX 8ULP.

The smart way would be to use RPMsg, but it's not implemented in U-Boot.

However, I can't access the BBNSM register from the Arm Cortex A35. Is there an exclusive lock with the Arm Cortex-M33? Since the power_mode_switch is working on the M33, the BBNSM RTC is used.


BBNSM is mapped to PBRIDGE0(Peripheral Bridge 0) on A35. I tried to see if I could use BBNSM with the A35.

I tried to read BBNSM_RTC_LS(BBNSM Real-Time Counter LS Register) but couldn't.

<pre>
=> md.l 0x28038040 1
"Synchronous Abort" handler, esr 0x96000210
elr: 000000008029b2a4 lr : 000000008029b1f4 (reloc)
elr: 00000000a5eef2a4 lr : 00000000a5eef1f4
x0 : 0000000000000009 x1 : 00000000fffffffe
x2 : 00000000a4e49458 x3 : 0000000000000020
x4 : 00000000ffffffff x5 : 00000000a4e491e8
x6 : 0000000000000030 x7 : 00000000a4e493a0
x8 : 0000000000000010 x9 : 0000000090a65063
x10: 00000000ffffffd8 x11: 0000000000000010
x12: 0000000000000006 x13: 000000000001869f
x14: 00000000a4e497c0 x15: 0000000000000021
x16: 00000000a5e6eb0c x17: 0000000000000000
x18: 00000000a4e51d40 x19: 0000000000000004
x20: 0000000000000004 x21: 0000000000000001
x22: 0000000028038040 x23: 00000000a4e49459
x24: 0000000000000000 x25: 00000000a4e49408
x26: 00000000a5f0ec2b x27: 0000000000000008
x28: 0000000000000004 x29: 00000000a4e493a0

Code: 2a0403f3 17ffffcb 7100129f 54000181 (b94002c3)
Resetting CPU ...

resetting ...
</pre>


PCC_BBNSM(PCC BBNSM Register) is 0xC0000000(PR=1, CGC=1), so it's
ready to use.

<pre>
=> md.l 0x280300e0 1 280300e0: c0000000 ....
</pre>


I've also tried using a Linux kernel, but I'm unable to access it
either. The driver used was rtc-nxp-bbnsm.c below.

https://lore.kernel.org/linux-arm-kernel/[email protected]/T/

Thanks,

mizo

0 项奖励
回复
1 解答
4,095 次查看
jimmychan
NXP TechSupport
NXP TechSupport

Please add the following TRDC configuration to BOARD_SetTrdcGlobalConfig() in SDK : /boards/evkmimx8ulp/demo_apps/power_mode_switch/board.c. Then try to read 0x28038040 in uboot.

 

        mbcBlockConfig.memoryAccessControlSelect = TRDC_MBC_ACCESS_CONTROL_POLICY_ALL_INDEX;
        mbcBlockConfig.nseEnable                 = true; /* non secure state can access the block for cortex-A35 */
        mbcBlockConfig.mbcIdx                    = 2U;   /* MBC2 */
        mbcBlockConfig.domainIdx                 = 7U;   /* MBC2_DOM7 */
        mbcBlockConfig.slaveMemoryIdx            = 0U;   /* MBC2_DOM7_MEM0 */
        mbcBlockConfig.memoryBlockIdx            = 56U;  /* MBC2_DOM7_MEM0_BLK_CFG_W56 */
        TRDC_MbcSetMemoryBlockConfig(TRDC, &mbcBlockConfig);

 

 

For example, It can be added at line 401.

jimmychan_0-1721798486942.png

 

 

在原帖中查看解决方案

0 项奖励
回复
4 回复数
4,154 次查看
jimmychan
NXP TechSupport
NXP TechSupport

Could you tell me which version of BSP are you using?

0 项奖励
回复
4,122 次查看
DaisukeMizobuchi
Contributor III

<p>Thank you for reply!</p>
<p>The BSP versions are as follows:</p>
<ul>
<li>imx-optee-os: lf-6.1.22-2.0.0</li>
<li>imx-atf: lf-6.1.22-2.0.0</li>
<li>uboot-imx: lf-6.1.22-2.0.0</li>
<li>linux-imx: lf-5.10.72-2.2.3</li>
</ul>
<p>Best regards,<br />mizo</p>

 

0 项奖励
回复
4,096 次查看
jimmychan
NXP TechSupport
NXP TechSupport

Please add the following TRDC configuration to BOARD_SetTrdcGlobalConfig() in SDK : /boards/evkmimx8ulp/demo_apps/power_mode_switch/board.c. Then try to read 0x28038040 in uboot.

 

        mbcBlockConfig.memoryAccessControlSelect = TRDC_MBC_ACCESS_CONTROL_POLICY_ALL_INDEX;
        mbcBlockConfig.nseEnable                 = true; /* non secure state can access the block for cortex-A35 */
        mbcBlockConfig.mbcIdx                    = 2U;   /* MBC2 */
        mbcBlockConfig.domainIdx                 = 7U;   /* MBC2_DOM7 */
        mbcBlockConfig.slaveMemoryIdx            = 0U;   /* MBC2_DOM7_MEM0 */
        mbcBlockConfig.memoryBlockIdx            = 56U;  /* MBC2_DOM7_MEM0_BLK_CFG_W56 */
        TRDC_MbcSetMemoryBlockConfig(TRDC, &mbcBlockConfig);

 

 

For example, It can be added at line 401.

jimmychan_0-1721798486942.png

 

 

0 项奖励
回复
4,087 次查看
DaisukeMizobuchi
Contributor III
Hello @jimmychan

Thanks for response,

I was able to use BBNSM RTC using the method I was taught!

Thanks,
mizo
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-1910173%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E4%BB%8E%20U-Boot%20%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1910173%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3E%E6%88%91%E6%83%B3%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E7%9A%84%20U-Boot%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20BBNSM%EF%BC%88%E7%94%B5%E6%B1%A0%E4%BE%9B%E7%94%B5%E9%9D%9E%E5%AE%89%E5%85%A8%E6%A8%A1%E5%9D%97%EF%BC%89RTC%E3%80%82%3C%2FP%3E%3CP%3E%E8%81%AA%E6%98%8E%E7%9A%84%E6%96%B9%E6%B3%95%E6%98%AF%E4%BD%BF%E7%94%A8%20RPMsg%EF%BC%8C%E4%BD%86%E5%AE%83%E6%B2%A1%E6%9C%89%E5%9C%A8%20U-Boot%20%E4%B8%AD%E5%AE%9E%E7%8E%B0%E3%80%82%3C%2FP%3E%3CP%3E%E4%BD%86%E6%98%AF%EF%BC%8C%E6%88%91%E6%97%A0%E6%B3%95%E4%BB%8E%20Arm%20Cortex%20A35%20%E8%AE%BF%E9%97%AE%20BBNSM%20%E5%AF%84%E5%AD%98%E5%99%A8%E3%80%82Arm%20Cortex-M33%20%E6%9C%89%E7%8B%AC%E5%8D%A0%E9%94%81%E5%90%97%EF%BC%9F%E7%94%B1%E4%BA%8E%20power_mode_switch%20%E5%9C%A8%20M33%20%E4%B8%8A%E5%B7%A5%E4%BD%9C%EF%BC%8C%E5%9B%A0%E6%AD%A4%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%E3%80%82%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EBBNSM%20%E6%98%A0%E5%B0%84%E5%88%B0%20A35%20%E4%B8%8A%E7%9A%84%20PBRIDGE0%EF%BC%88%E5%A4%96%E8%AE%BE%E6%A1%A5%200%EF%BC%89%E3%80%82%E6%88%91%E5%B0%9D%E8%AF%95%E7%9C%8B%E7%9C%8B%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%B0%86%20BBNSM%20%E4%B8%8E%20A35%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E5%B0%9D%E8%AF%95%E8%AF%BB%E5%8F%96%20BBNSM_RTC_LS%EF%BC%88BBNSM%20%E5%AE%9E%E6%97%B6%E8%AE%A1%E6%95%B0%E5%99%A8%20LS%20%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%89%EF%BC%8C%E4%BD%86%E5%A4%B1%E8%B4%A5%E4%BA%86%E3%80%82%3C%2FP%3E%3CP%3E%3CPRE%3E%3CBR%20%2F%3E%20%3D%26gt%3B%20md.l%200x28038040%201%3CBR%20%2F%3E%20%E2%80%9C%E5%90%8C%E6%AD%A5%E4%B8%AD%E6%AD%A2%E2%80%9D%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F%EF%BC%8Cesr%200x96000210%3CBR%20%2F%3E%20elr%3A%20000000008029b2a4%20lr%3A%20000000008029b1f4%20(%E9%87%8D%E5%AE%9A%E4%BD%8D)%3CBR%20%2F%3E%20elr%EF%BC%9A00000000a5eef2a4%20lr%EF%BC%9A00000000a5eef1f4%3CBR%20%2F%3E%20x0%20%3A%2000000000000000009%20x1%20%3A%2000000000fffffffe%3CBR%20%2F%3E%20x2%EF%BC%9A00000000a4e49458%20x3%EF%BC%9A0000000000000020%3CBR%20%2F%3E%20x4%20%3A%2000000000ffffffff%20x5%20%3A%2000000000a4e491e8%3CBR%20%2F%3E%20x6%EF%BC%9A0000000000000030%20x7%EF%BC%9A00000000a4e493a0%3CBR%20%2F%3E%20x8%20%3A%200000000000000010%20x9%20%3A%200000000090a65063%3CBR%20%2F%3E%20x10%EF%BC%9A00000000ffffffd8%20x11%EF%BC%9A0000000000000010%3CBR%20%2F%3E%20x12%EF%BC%9A0000000000000006%20x13%EF%BC%9A000000000001869f%3CBR%20%2F%3E%20x14%EF%BC%9A00000000a4e497c0%20x15%EF%BC%9A0000000000000021%3CBR%20%2F%3E%20x16%EF%BC%9A00000000a5e6eb0c%20x17%EF%BC%9A0000000000000000%3CBR%20%2F%3E%20x18%EF%BC%9A00000000a4e51d40%20x19%EF%BC%9A0000000000000004%3CBR%20%2F%3E%20x20%EF%BC%9A0000000000000004%20x21%EF%BC%9A0000000000000001%3CBR%20%2F%3E%20x22%EF%BC%9A0000000028038040%20x23%EF%BC%9A00000000a4e49459%3CBR%20%2F%3E%20x24%EF%BC%9A0000000000000000%20x25%EF%BC%9A00000000a4e49408%3CBR%20%2F%3E%20x26%EF%BC%9A00000000a5f0ec2b%20x27%EF%BC%9A0000000000000008%3CBR%20%2F%3E%20x28%EF%BC%9A0000000000000004%20x29%EF%BC%9A00000000a4e493a0%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%E4%BB%A3%E7%A0%81%3A%202a0403f3%2017ffffcb%207100129f%2054000181%20(b94002c3)%3CBR%20%2F%3E%E9%87%8D%E7%BD%AE%20CPU%20...%3C%2FP%3E%3CP%3E%E6%AD%A3%E5%9C%A8%E9%87%8D%E7%BD%AE...%3CBR%20%2F%3E%20%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EPCC_BBNSM%EF%BC%88PCC%20BBNSM%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%89%E4%B8%BA0xC0000000%EF%BC%88PR%3D1%EF%BC%8CCGC%3D1%EF%BC%89%EF%BC%8C%E5%9B%A0%E6%AD%A4%3CBR%20%2F%3E%E5%8D%B3%E5%8F%AF%E4%BD%BF%E7%94%A8%E3%80%82%3C%2FP%3E%3CP%3E%3CPRE%3E%3CBR%20%2F%3E%3D%26gt%3B%20md.l%200x280300e0%201%20280300e0%3A%20c0000000%20....%3CBR%20%2F%3E%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%E6%88%91%E4%B9%9F%E5%B0%9D%E8%AF%95%E8%BF%87%E4%BD%BF%E7%94%A8%20Linux%20%E5%86%85%E6%A0%B8%EF%BC%8C%E4%BD%86%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E5%AE%83%3CBR%20%2F%3E%E4%BB%BB%E4%BD%95%E4%B8%80%E4%B8%AA%E3%80%82%E4%BD%BF%E7%94%A8%E7%9A%84%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E6%98%AFrtc-nxp-bbnsm.c%E4%BB%A5%E4%B8%8B%E3%80%82%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Flore.kernel.org%2Flinux-arm-kernel%2F20230215024117.3357341-1-ping.bai%40nxp.com%2FT%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Flore.kernel.org%2Flinux-arm-kernel%2F20230215024117.3357341-1-ping.bai%40nxp.com%2FT%2F%3C%2FA%3E%3C%2FP%3E%3CP%3E%E8%B0%A2%E8%B0%A2%EF%BC%81%3C%2FP%3E%3CP%3Emizo%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1910173%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX%208%20%E7%B3%BB%E5%88%97%20%7C%20i.MX%208QuadMax%20(8QM)%20%7C%208QuadPlus%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1915828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E4%BB%8E%20U-Boot%20%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1915828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F1422%22%20target%3D%22_blank%22%3E%40jimmychan%3C%2FA%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%EF%BC%8C%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%88%91%E8%83%BD%E5%A4%9F%E6%8C%89%E7%85%A7%E6%89%80%E5%AD%A6%E7%9A%84%E6%96%B9%E6%B3%95%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%EF%BC%81%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%B0%A2%E8%B0%A2%EF%BC%8C%3CBR%20%2F%3E%E7%B1%B3%E4%BD%90%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1915806%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E4%BB%8E%20U-Boot%20%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1915806%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E8%AF%B7%E5%B0%86%E4%BB%A5%E4%B8%8B%20TRDC%20%E9%85%8D%E7%BD%AE%E6%B7%BB%E5%8A%A0%E5%88%B0%20SDK%20%E4%B8%AD%E7%9A%84%20BOARD_SetTrdcGlobalConfig()%EF%BC%9A%2Fboards%2Fevkmimx8ulp%2Fdemo_apps%2Fpower_mode_switch%2Fboard.c%E3%80%82%E7%84%B6%E5%90%8E%E5%B0%9D%E8%AF%95%E5%9C%A8uboot%E4%B8%AD%E8%AF%BB%E5%8F%960x28038040%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%20%20%20%20%20%20%20%20mbcBlockConfig.memoryAccessControlSelect%20%3D%20TRDC_MBC_ACCESS_CONTROL_POLICY_ALL_INDEX%3B%0A%20%20%20%20%20%20%20%20mbcBlockConfig.nseEnable%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20true%3B%20%2F*%20non%20secure%20state%20can%20access%20the%20block%20for%20cortex-A35%20*%2F%0A%20%20%20%20%20%20%20%20mbcBlockConfig.mbcIdx%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%202U%3B%20%20%20%2F*%20MBC2%20*%2F%0A%20%20%20%20%20%20%20%20mbcBlockConfig.domainIdx%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%207U%3B%20%20%20%2F*%20MBC2_DOM7%20*%2F%0A%20%20%20%20%20%20%20%20mbcBlockConfig.slaveMemoryIdx%20%20%20%20%20%20%20%20%20%20%20%20%3D%200U%3B%20%20%20%2F*%20MBC2_DOM7_MEM0%20*%2F%0A%20%20%20%20%20%20%20%20mbcBlockConfig.memoryBlockIdx%20%20%20%20%20%20%20%20%20%20%20%20%3D%2056U%3B%20%20%2F*%20MBC2_DOM7_MEM0_BLK_CFG_W56%20*%2F%0A%20%20%20%20%20%20%20%20TRDC_MbcSetMemoryBlockConfig(TRDC%2C%20%26amp%3BmbcBlockConfig)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%9C%A8%E7%AC%AC%20401%20%E8%A1%8C%E6%B7%BB%E5%8A%A0%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22jimmychan_0-1721798486942.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22jimmychan_0-1721798486942.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F290039i414A062E460E128C%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22jimmychan_0-1721798486942.png%22%20alt%3D%22jimmychan_0-1721798486942.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1913485%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E4%BB%8E%20U-Boot%20%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1913485%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3C%2FP%3E%3CP%3E%E8%B0%A2%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%EF%BC%81%3C%2FP%3E%3CBR%20%2F%3E%20%3CP%3EBSP%20%E7%89%88%E6%9C%AC%E5%A6%82%E4%B8%8B%EF%BC%9A%3C%2FP%3E%3CBR%20%2F%3E%20%3CUL%3E%3CBR%20%2F%3E%20%3CLI%3Eimx-optee-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%BC%9Alf-6.1.22-2.0.0%3C%2FLI%3E%3CBR%20%2F%3E%20%3CLI%3Eimx-atf%EF%BC%9Alf-6.1.22-2.0.0%3C%2FLI%3E%3CBR%20%2F%3E%20%3CLI%3Euboot-imx%EF%BC%9Alf-6.1.22-2.0.0%3C%2FLI%3E%3CBR%20%2F%3E%20%3CLI%3Elinux-imx%EF%BC%9Alf-5.10.72-2.2.3%3C%2FLI%3E%3CBR%20%2F%3E%20%3C%2FUL%3E%3CBR%20%2F%3E%20%3CP%3E%E6%AD%A4%E8%87%B4%E6%95%AC%E6%84%8F%EF%BC%8C%3CBR%20%2F%3Emizo%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1912831%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E5%9C%A8%20i.MX%208ULP%20%E4%B8%8A%E4%BB%8E%20U-Boot%20%E4%BD%BF%E7%94%A8%20BBNSM%20RTC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1912831%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E8%83%BD%E5%91%8A%E8%AF%89%E6%88%91%E4%BD%A0%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%E5%93%AA%E4%B8%AA%E7%89%88%E6%9C%AC%E7%9A%84%20BSP%20%E5%90%97%EF%BC%9F%3C%2FP%3E%3C%2FLINGO-BODY%3E